ClientClassInServerAnalyzer.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System.Collections.Immutable;
  2. using Microsoft.CodeAnalysis;
  3. using Microsoft.CodeAnalysis.CSharp;
  4. using Microsoft.CodeAnalysis.CSharp.Syntax;
  5. using Microsoft.CodeAnalysis.Diagnostics;
  6. namespace ET.Analyzer
  7. {
  8. [DiagnosticAnalyzer(LanguageNames.CSharp)]
  9. public class ClientClassInServerAnalyzer : DiagnosticAnalyzer
  10. {
  11. public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(ClientClassInServerAnalyzerRule.Rule);
  12. public override void Initialize(AnalysisContext context)
  13. {
  14. context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
  15. context.EnableConcurrentExecution();
  16. //context.RegisterSyntaxNodeAction(AnalyzeNode, SyntaxKind.UsingDirective);
  17. }
  18. private static void AnalyzeNode(SyntaxNodeAnalysisContext context)
  19. {
  20. if (!AnalyzerHelper.IsAssemblyNeedAnalyze(context.Compilation.AssemblyName, AnalyzeAssembly.ServerModelHotfix))
  21. {
  22. return;
  23. }
  24. var usingDirective = (UsingDirectiveSyntax)context.Node;
  25. var namespaceName = usingDirective.Name.ToString();
  26. if (namespaceName.StartsWith(Definition.ETClientNameSpace) && !context.Node.SyntaxTree.FilePath.Contains(Definition.ClientDirInServer))
  27. {
  28. var diagnostic = Diagnostic.Create(ClientClassInServerAnalyzerRule.Rule, usingDirective.GetLocation());
  29. context.ReportDiagnostic(diagnostic);
  30. }
  31. }
  32. }
  33. }