Improve contextual options gen incrementality#6932
Open
Youssef1313 wants to merge 2 commits intodotnet:mainfrom
Open
Improve contextual options gen incrementality#6932Youssef1313 wants to merge 2 commits intodotnet:mainfrom
Youssef1313 wants to merge 2 commits intodotnet:mainfrom
Conversation
Contributor
There was a problem hiding this comment.
Pull Request Overview
This PR refactors the contextual options generator to improve incrementality by following Roslyn best practices for source generators. The main goal is to enhance IDE performance by reducing unnecessary recomputation during typing in large solutions.
Key Changes:
- Simplified the generator pipeline by processing types individually rather than collecting them first
- Removed diagnostic validation logic from the generator (to be moved to separate analyzers)
- Modified the model to avoid storing
INamedTypeSymbolreferences, improving caching behavior
Reviewed Changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| ContextualOptionsGenerator.cs | Streamlined the generator pipeline to process types incrementally and removed compilation-dependent logic |
| Parser.cs | Simplified to return single types instead of collections; commented out diagnostic checks pending analyzer migration |
| OptionsContextType.cs | Changed to store primitive string values instead of symbol/syntax references for better incrementality |
src/Generators/Microsoft.Gen.ContextualOptions/ContextualOptionsGenerator.cs
Show resolved
Hide resolved
src/Generators/Microsoft.Gen.ContextualOptions/Model/OptionsContextType.cs
Show resolved
Hide resolved
f3e01bc to
0a5db80
Compare
e5b30ff to
9d671dc
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Current generator implementation doesn't follow Roslyn best practices, and can likely be very slow in big solutions while typing in IDE.
The PR isn't yet complete. All diagnostics produced by the generator needs to move to separate DiagnosticAnalyzer implementations. Before putting some time on it, I'd like to get an initial review and whether or not you are comfortable with the changes.
@CyrusNajmabadi @chsienki If you have time to take a high-level look on the changes here please.
Microsoft Reviewers: Open in CodeFlow
Few notes on the changes:
HandleAnnotatedTypesbut was unnecessarily and not needed. ForAttributeWithMetadataName already gives us what we want. This was probably a left over from a transition from ISourceGenerator to IIncrementalGenerator.