dotnet / roslyn

The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.
https://docs.microsoft.com/dotnet/csharp/roslyn-sdk/
MIT License
18.71k stars 3.98k forks source link

[Source Generators] ISyntaxReceiver instances should be able to access AdditionalFiles #74167

Open raffaeler opened 1 week ago

raffaeler commented 1 week ago

Version Used: 4.10.0

Steps to Reproduce:

  1. Create a generator
  2. Create a SyntaxReceiver and register it in the generator
  3. Add a file in the AdditionalFiles
  4. Try to access the AdditionalFiles from the SyntaxReceiver

Expected Behavior: I would expect to be able to access the AdditionalFiles

Actual Behavior: I am not able to access the AdditionalFiles

Rationale: The standard workflow for code generators is to use a SyntaxReceiver to identify the portions of the syntax trees useful to generate new code. In many cases, we can use a generated attribute to annotate the portions of code that a SyntaxReceiver should capture. In other cases, it is not possible to annotate the code because it has been generated using T4Templates or because it comes from external tools that can generate file.

In these cases, it would make sense to access the AdditionalFiles from the SyntaxReceiver in order to minimize the amount of data provided to the generator.

Since the AdditionalFiles are not available in a SyntaxReceiver, the generator must do all the processing inside the Execute method which forces processing all the SyntaxTrees instead of just the ones that are captured by a SyntaxReceiver. It's not even possible to make the pre-processing in the Initialize method as the AdditionalFiles are not accessible there.

jaredpar commented 1 week ago

Create a generator

What kind of generator: incremental, ISourceGenerator?

Create a SyntaxReceiver and register it in the generator

Can you show us a sample of whhere you are trying to access this?