33using Microsoft . CodeAnalysis . CSharp . Syntax ;
44using System . Collections . Immutable ;
55using System . Reflection ;
6+ using System . Xml . Linq ;
67
78namespace ConsoleAppFramework ;
89
9-
10-
1110[ Generator ( LanguageNames . CSharp ) ]
1211public partial class ConsoleAppGenerator : IIncrementalGenerator
1312{
@@ -38,7 +37,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
3837 }
3938
4039 return false ;
41- } , ( context , ct ) => new RunNode ( ( InvocationExpressionSyntax ) context . Node , context . SemanticModel ) )
40+ } , ( context , ct ) => new RunContext ( ( InvocationExpressionSyntax ) context . Node , context . SemanticModel ) )
4241 . WithTrackingName ( "ConsoleApp.Run.CreateSyntaxProvider" ) ;
4342
4443 context . RegisterSourceOutput ( runSource , EmitConsoleAppRun ) ;
@@ -63,14 +62,14 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
6362 }
6463
6564 return false ;
66- } , ( context , ct ) => (
65+ } , ( context , ct ) => new BuilderContext (
6766 ( InvocationExpressionSyntax ) context . Node ,
6867 ( ( context . Node as InvocationExpressionSyntax ) ! . Expression as MemberAccessExpressionSyntax ) ! . Name . Identifier . Text ,
6968 context . SemanticModel ) )
7069 . WithTrackingName ( "ConsoleApp.Builder.CreateSyntaxProvider" )
7170 . Where ( x =>
7271 {
73- var model = x . SemanticModel . GetTypeInfo ( ( x . Item1 . Expression as MemberAccessExpressionSyntax ) ! . Expression ) ;
72+ var model = x . Model . GetTypeInfo ( ( x . Node . Expression as MemberAccessExpressionSyntax ) ! . Expression ) ;
7473 return model . Type ? . Name == "ConsoleAppBuilder" ;
7574 } )
7675 . WithTrackingName ( "ConsoleApp.Builder.Where" )
@@ -560,7 +559,7 @@ namespace ConsoleAppFramework;
560559
561560""" ;
562561
563- static void EmitConsoleAppRun ( SourceProductionContext sourceProductionContext , RunNode runNode )
562+ static void EmitConsoleAppRun ( SourceProductionContext sourceProductionContext , RunContext runNode )
564563 {
565564 var node = runNode . Node ;
566565 var model = runNode . SemanticModel ;
@@ -601,7 +600,7 @@ static void EmitConsoleAppRun(SourceProductionContext sourceProductionContext, R
601600 sourceProductionContext . AddSource ( "ConsoleApp.Run.Help.g.cs" , help . ToString ( ) ) ;
602601 }
603602
604- static void EmitConsoleAppBuilder ( SourceProductionContext sourceProductionContext , ImmutableArray < ( InvocationExpressionSyntax Node , string Name , SemanticModel Model ) > generatorSyntaxContexts )
603+ static void EmitConsoleAppBuilder ( SourceProductionContext sourceProductionContext , ImmutableArray < BuilderContext > generatorSyntaxContexts )
605604 {
606605 if ( generatorSyntaxContexts . Length == 0 ) return ;
607606
@@ -747,12 +746,12 @@ static void EmitConsoleAppBuilder(SourceProductionContext sourceProductionContex
747746 sourceProductionContext . AddSource ( "ConsoleApp.Builder.Help.g.cs" , help . ToString ( ) ) ;
748747 }
749748
750- class RunNode ( InvocationExpressionSyntax node , SemanticModel model ) : IEquatable < RunNode >
749+ readonly struct RunContext ( InvocationExpressionSyntax node , SemanticModel model ) : IEquatable < RunContext >
751750 {
752751 public InvocationExpressionSyntax Node => node ;
753752 public SemanticModel SemanticModel => model ;
754753
755- public bool Equals ( RunNode other )
754+ public bool Equals ( RunContext other )
756755 {
757756 if ( ! SyntaxNodeTextEqualityComparer . Default . Equals ( node . Expression , other . Node . Expression ) ) return false ;
758757
@@ -843,4 +842,24 @@ public override int GetHashCode()
843842 return SyntaxNodeTextEqualityComparer . Default . GetHashCode ( node ) ;
844843 }
845844 }
845+
846+ readonly struct BuilderContext ( InvocationExpressionSyntax node , string name , SemanticModel model ) : IEquatable < BuilderContext >
847+ {
848+ public InvocationExpressionSyntax Node => node ;
849+ public string Name => name ;
850+ public SemanticModel Model => model ;
851+
852+ public bool Equals ( BuilderContext other )
853+ {
854+ // TODO:
855+ return node == other . Node ;
856+ }
857+
858+ public override int GetHashCode ( )
859+ {
860+ // TODO:
861+ return base . GetHashCode ( ) ;
862+ }
863+ }
864+
846865}
0 commit comments