Closed muvaf closed 3 years ago
@negz could you take a look at this since you wrote most of angryjet?
How did you find jen for this task? I feel like this kind of complex code generation where the code you're generating is a lot less fixed is where it shines.
Honestly, the number of look up I had to do for very simple stuff felt too many, so I did feel like it's getting in the way. But handling import
statements was indeed helpful. What I'd prefer is go template with no conditionals or loops, since it looks very similar to the actual code, where all conditional/loop logic is handled in actual Go code with string manipulation.
Description of your changes
During Terrajet work, we discovered that we can actually generate the reference resolvers inALL Crossplane providers if enough information is supplied. This PR introduces a generator that will allow provider authors to add a comment to referencer field and let angryjet generate the
zz_generated.resolvers.go
file. It is able to handle pointers, arrays with both single and multi resolution calls and normal string references. Additionally, it allows you to override the extractor function, ref field name and selector field name with optional comment markers. By default, it uses external name extractor and appendsRef/Refs
andSelector
to the field name to find those fields.Note that it doesn't make any change to CRD struct; authors still need to add
FieldNameRef
andFieldNameSelector
fields on their own for the generated code to compile.Example usage:
The generated output:
I have:
make reviewable test
to ensure this PR is ready for review.How has this code been tested
Added a comprehensive unit tests and also tested the code with Go compiler using a provider-aws resource.