Right now, puku grungily handles a couple of expressions for srcs, specifically, it will evaluate globs, and resolve srcs that are other build targets. This has a couple shortcomings:
- We don't follow require/provide for sources
- We don't handle other expression types such as variables, or list concatenations.
We should be able to evaluate build files to determine the sources passed to each rule. This evaluation mode is different to how Please evaluates a file. When we encounter a build rule we care about, we want to preserve the args passed to it for later.
- Begin evaluation by walking the AST, interpreting the top level statements
- When we encounter a function call at the top level that matches one of our configured kinds, register the rule with the package. We should store the AST for the Call expression, as well as the evaluated arguments.
- Evaluate the build function to resolve the build definition to its
build_rule()s
We will then have far more information about the build targets we're updating, including the resolved arguments passed to the build definition, and require/provide information.