Welcome to mirror list, hosted at ThFree Co, Russian Federation.

CSharpVerifierHelper.cs « Verifiers « ILLink.RoslynAnalyzer.Tests « test - github.com/mono/linker.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: f73c3a160456df5483a011cf864a4f0c18651258 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System;
using System.Collections.Immutable;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;

namespace ILLink.RoslynAnalyzer.Tests
{
	internal static class CSharpVerifierHelper
	{
		/// <summary>
		/// By default, the compiler reports diagnostics for nullable reference types at
		/// <see cref="DiagnosticSeverity.Warning"/>, and the analyzer test framework defaults to only validating
		/// diagnostics at <see cref="DiagnosticSeverity.Error"/>. This map contains all compiler diagnostic IDs
		/// related to nullability mapped to <see cref="ReportDiagnostic.Error"/>, which is then used to enable all
		/// of these warnings for default validation during analyzer and code fix tests.
		/// </summary>
		internal static ImmutableDictionary<string, ReportDiagnostic> NullableWarnings { get; } = GetNullableWarningsFromCompiler ();

		private static ImmutableDictionary<string, ReportDiagnostic> GetNullableWarningsFromCompiler ()
		{
			string[] args = { "/warnaserror:nullable" };
			var commandLineArguments = CSharpCommandLineParser.Default.Parse (args, baseDirectory: Environment.CurrentDirectory, sdkDirectory: Environment.CurrentDirectory);
			var nullableWarnings = commandLineArguments.CompilationOptions.SpecificDiagnosticOptions;

			// Workaround for https://github.com/dotnet/roslyn/issues/41610
			nullableWarnings = nullableWarnings
				.SetItem ("CS8632", ReportDiagnostic.Error)
				.SetItem ("CS8669", ReportDiagnostic.Error);

			return nullableWarnings;
		}
	}
}