| File: Diagnostics\DiagnosticAnalyzerExtensions.cs | Web Access |
| Project: src\roslyn\src\Workspaces\Core\Portable\Microsoft.CodeAnalysis.Workspaces.csproj (Microsoft.CodeAnalysis.Workspaces) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. namespace Microsoft.CodeAnalysis.Diagnostics; internal static partial class DiagnosticAnalyzerExtensions { public static DiagnosticAnalyzerCategory GetDiagnosticAnalyzerCategory(this DiagnosticAnalyzer analyzer) => analyzer switch { FileContentLoadAnalyzer => DiagnosticAnalyzerCategory.SyntaxTreeWithoutSemanticsAnalysis, DocumentDiagnosticAnalyzer => DiagnosticAnalyzerCategory.SyntaxTreeWithoutSemanticsAnalysis | DiagnosticAnalyzerCategory.SemanticDocumentAnalysis, IBuiltInAnalyzer builtInAnalyzer => builtInAnalyzer.GetAnalyzerCategory(), // Compiler analyzer supports syntax diagnostics, span-based semantic diagnostics and project level diagnostics. // For a public analyzer it is not possible to know the diagnostic categorization, so return a worst-case categorization. _ => analyzer.IsCompilerAnalyzer() ? DiagnosticAnalyzerCategory.SyntaxTreeWithoutSemanticsAnalysis | DiagnosticAnalyzerCategory.SemanticSpanAnalysis : DiagnosticAnalyzerCategory.SyntaxTreeWithoutSemanticsAnalysis | DiagnosticAnalyzerCategory.SemanticDocumentAnalysis, }; public static bool SupportAnalysisKind(this DiagnosticAnalyzer analyzer, AnalysisKind kind) => kind switch { AnalysisKind.Syntax => analyzer.SupportsSyntaxDiagnosticAnalysis(), AnalysisKind.Semantic => analyzer.SupportsSemanticDiagnosticAnalysis(), _ => throw ExceptionUtilities.UnexpectedValue(kind) }; public static bool SupportsSyntaxDiagnosticAnalysis(this DiagnosticAnalyzer analyzer) { var category = analyzer.GetDiagnosticAnalyzerCategory(); return (category & DiagnosticAnalyzerCategory.SyntaxTreeWithoutSemanticsAnalysis) != 0; } public static bool SupportsSemanticDiagnosticAnalysis(this DiagnosticAnalyzer analyzer) { var category = analyzer.GetDiagnosticAnalyzerCategory(); return (category & (DiagnosticAnalyzerCategory.SemanticSpanAnalysis | DiagnosticAnalyzerCategory.SemanticDocumentAnalysis)) != 0; } public static bool SupportsSpanBasedSemanticDiagnosticAnalysis(this DiagnosticAnalyzer analyzer) { var category = analyzer.GetDiagnosticAnalyzerCategory(); return (category & DiagnosticAnalyzerCategory.SemanticSpanAnalysis) != 0; } }