/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/Test/Core/Compilation/TestSyntaxTreeOptionsProvider.cs
94 строки
4 KB
Tomas Matousek
Move
23 окт 2020, 21:06
23 окт 2020, 21:06
d49cd2b
Код
Авторство
О чём код?
// 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. using System.Collections.Generic; using System.Linq; using System.Threading; using Microsoft.CodeAnalysis; using static Microsoft.CodeAnalysis.AnalyzerConfig; namespace Roslyn.Utilities { public sealed class TestSyntaxTreeOptionsProvider : SyntaxTreeOptionsProvider { private readonly Dictionary<SyntaxTree, Dictionary<string, ReportDiagnostic>>? _options; private readonly Dictionary<SyntaxTree, GeneratedKind>? _isGenerated; private readonly Dictionary<string, ReportDiagnostic>? _globalOptions; public TestSyntaxTreeOptionsProvider( IEqualityComparer<string> comparer, (string? key, ReportDiagnostic diagnostic) globalOption, params (SyntaxTree, (string, ReportDiagnostic)[])[] options) { _options = options.ToDictionary( x => x.Item1, x => x.Item2.ToDictionary( x => x.Item1, x => x.Item2, comparer) ); if (globalOption.key is object) { _globalOptions = new Dictionary<string, ReportDiagnostic>(Section.PropertiesKeyComparer) { { globalOption.key, globalOption.diagnostic } }; } _isGenerated = null; } public TestSyntaxTreeOptionsProvider( params (SyntaxTree, (string, ReportDiagnostic)[])[] options) : this(CaseInsensitiveComparison.Comparer, globalOption: default, options) { } public TestSyntaxTreeOptionsProvider( (string, ReportDiagnostic) globalOption, params (SyntaxTree, (string, ReportDiagnostic)[])[] options) : this(CaseInsensitiveComparison.Comparer, globalOption: globalOption, options) { } public TestSyntaxTreeOptionsProvider( SyntaxTree tree, params (string, ReportDiagnostic)[] options) : this(globalOption: default, new[] { (tree, options) }) { } public TestSyntaxTreeOptionsProvider( params (SyntaxTree, GeneratedKind isGenerated)[] isGenerated ) { _options = null; _isGenerated = isGenerated.ToDictionary( x => x.Item1, x => x.isGenerated ); } public override GeneratedKind IsGenerated(SyntaxTree tree, CancellationToken cancellationToken) => _isGenerated != null && _isGenerated.TryGetValue(tree, out var kind) ? kind : GeneratedKind.Unknown; public override bool TryGetDiagnosticValue( SyntaxTree tree, string diagnosticId, CancellationToken cancellationToken, out ReportDiagnostic severity) { if (_options != null && _options.TryGetValue(tree, out var diags) && diags.TryGetValue(diagnosticId, out severity)) { return true; } severity = ReportDiagnostic.Default; return false; } public override bool TryGetGlobalDiagnosticValue(string diagnosticId, CancellationToken cancellationToken, out ReportDiagnostic severity) { if (_globalOptions is object && _globalOptions.TryGetValue(diagnosticId, out severity)) { return true; } severity = ReportDiagnostic.Default; return false; } } }