示例#1
0
        public async Task TestAnalyzerConfigurationDoesNotAffectCompilerDiagnostics()
        {
            var source = @"
class C
{
    void M()
    {
        // warning CS0168:  The variable 'x' is declared but never used.
        int x;
    }
}
";
            // Verify CS0168 reported from 'Compilation.GetDiagnostics'
            var compilation         = CreateCompilation(source);
            var compilerDiagnostics = compilation.GetDiagnostics();

            verifyDiagnostics(compilerDiagnostics);

            // Verify CS0168 reported from 'CSharpCompilerDiagnosticAnalyzer', i.e. the diagnostic analyzer used in the IDE layer to report live compiler diagnostics.
            var analyzers = ImmutableArray.Create <DiagnosticAnalyzer>(new CSharpCompilerDiagnosticAnalyzer());
            var compilationWithAnalyzers = compilation.WithAnalyzers(analyzers, new AnalyzerOptions(ImmutableArray <AdditionalText> .Empty));
            var analyzerDiagnostics      = await compilationWithAnalyzers.GetAnalyzerDiagnosticsAsync();

            verifyDiagnostics(analyzerDiagnostics);

            // Verify CS0168 reported by CSharpCompilerDiagnosticAnalyzer is not affected by "dotnet_analyzer_diagnostic = none"
            var analyzerConfigOptions         = new CompilerAnalyzerConfigOptions(ImmutableDictionary <string, string> .Empty.Add("dotnet_analyzer_diagnostic.severity", "none"));
            var analyzerConfigOptionsProvider = new CompilerAnalyzerConfigOptionsProvider(
                ImmutableDictionary <object, AnalyzerConfigOptions> .Empty.Add(compilation.SyntaxTrees.Single(), analyzerConfigOptions));
            var analyzerOptions = new AnalyzerOptions(ImmutableArray <AdditionalText> .Empty, analyzerConfigOptionsProvider);

            compilationWithAnalyzers = compilation.WithAnalyzers(analyzers, analyzerOptions);
            analyzerDiagnostics      = await compilationWithAnalyzers.GetAnalyzerDiagnosticsAsync();

            verifyDiagnostics(analyzerDiagnostics);
    private SourceText GenerateSource(AdditionalText additionalFile, string scalarFieldTypeMappingProviderTypeName)
    {
        var configurationOptions =
            new Dictionary <string, string>
        {
            { "build_property.GraphQlClientGenerator_ClassPrefix", "SourceGenerated" },
            { "build_property.GraphQlClientGenerator_ClassSuffix", "V2" },
            { "build_property.GraphQlClientGenerator_IncludeDeprecatedFields", "true" },
            { "build_property.GraphQlClientGenerator_CommentGeneration", "CodeSummary" },
            { "build_property.GraphQlClientGenerator_FloatTypeMapping", "Double" },
            { "build_property.GraphQlClientGenerator_BooleanTypeMapping", "Boolean" },
            { "build_property.GraphQlClientGenerator_IdTypeMapping", "String" },
            { "build_property.GraphQlClientGenerator_JsonPropertyGeneration", "Always" },
            { "build_property.GraphQlClientGenerator_CustomClassMapping", "Query:Tibber|RootMutation:TibberMutation Consumption:ConsumptionEntry;Production:ProductionEntry" },
            { "build_property.GraphQlClientGenerator_Headers", "Authorization:Basic XXX|X-REQUEST-ID:123456789" },
            { "build_property.GraphQlClientGenerator_HttpMethod", "GET" },
            { "build_property.GraphQlClientGenerator_EnumValueNaming", "CSharp" }
        };

        if (scalarFieldTypeMappingProviderTypeName is not null)
        {
            configurationOptions.Add("build_property.GraphQlClientGenerator_ScalarFieldTypeMappingProvider", scalarFieldTypeMappingProviderTypeName);
        }

        var compilerAnalyzerConfigOptionsProvider = new CompilerAnalyzerConfigOptionsProvider(new CompilerAnalyzerConfigOptions(configurationOptions));

        var compilation = CompilationHelper.CreateCompilation(null, "SourceGeneratorTestAssembly");

        var additionalFiles = new List <AdditionalText> {
            _fileGraphQlSchema
        };

        if (additionalFile is not null)
        {
            additionalFiles.Add(additionalFile);
        }

        var sourceGenerator = new GraphQlClientSourceGenerator();
        var driver          = CSharpGeneratorDriver.Create(new [] { sourceGenerator }, additionalFiles, optionsProvider: compilerAnalyzerConfigOptionsProvider);
        var csharpDriver    = driver.RunGenerators(compilation);
        var runResult       = csharpDriver.GetRunResult();
        var results         = runResult.Results;

        results.Length.ShouldBe(1);
        results[0].GeneratedSources.Length.ShouldBe(1);
        return(results[0].GeneratedSources[0].SourceText);
    }