Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve incremental generator caching #1791

Open
TimothyMakkison opened this issue Aug 27, 2024 · 2 comments
Open

Improve incremental generator caching #1791

TimothyMakkison opened this issue Aug 27, 2024 · 2 comments
Labels

Comments

@TimothyMakkison
Copy link
Contributor

TimothyMakkison commented Aug 27, 2024

While working on a more source generated approach, I noticed that Refit does not correctly use incremental generator caching. While a previous PR uses some of the more modern techniques such as CreateSyntaxProvider, the lines 829-846 are functionally useless and will never successfully cache anything. This is due to how both ImmutableArray handles equality and the passing of the reference type Compilation (this will always change between re-runs).

  • Methods should be represented by a structurally comparable object
  • A benchmark could be created to confirm the benefits. Its possible that generating the code in a single pass is faster than caching.
  • Tests should be added to verify that the caching works as intended
  • Why is PreserveAttribute.cs added and then its namespace queried? Would the compiler change this? I assume it would always be global::RefitInternalGenerated.PreserveAttribute
  • CancellationToken should be respected to reduce IDE lag

I'll start work on a PR for this but I don't promise anything.

Related #1389

@ChrisPulman
Copy link
Member

Thanks Tim, much appreciated, I was going to head down the same rabbit hole and try to make things better, I see that AoT is important to many people too :)

@TimothyMakkison
Copy link
Contributor Author

Hey, added some preliminary benchmarks in #1798.

I was planning on adding some tests to verify steps in the incremental generator like I've done for Mediator. I used WithTrackingName to check specific steps. Unfortunately this is only available in Roslyn 4.1+. I believe I could either:

  • Update InterfaceStubGenerator.Roslyn40 to InterfaceStubGenerator.Roslyn41 (probably a breaking change)
  • Add InterfaceStubGenerator.Roslyn41 and use it for the tests.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants