Я экспериментирую с созданием пользовательского анализатора Roslyn, чтобы вызвать ошибки компилятора при определенных обстоятельствах. Моим «доказательством концепции» является соблюдение брекетов вокруг тела операторов IF. Я создал минимальный анализатор и проект проверки, код в конце. То же самое произойдет, если я щелкну правой кнопкой мыши узел проекта и нажимаю «Build». Кроме того, ничто в редакторе не предполагает, что существует ошибка компилятора, где я обычно ожидаю увидеть кригливую красную линию под кодом оскорбления и/или запись в окне списка ошибок. />
Изменить: dotnet build < /code> вывод, как указано в комментариях: < /p>
C:\repos\AnalyserTest\src\CSharp\TestAnalyserProof>dotnet build
Restore complete (0.7s)
TestAnalyser succeeded with 1 warning(s) (1.2s) → C:\repos\AnalyserTest\src\CSharp\TestAnalyser\bin\Debug\netstandard2.0\TestAnalyser.dll
C:\repos\AnalyserTest\src\CSharp\TestAnalyser\IfStatementBracesAnalyzer.cs(19,13): warning RS2008: Enable analyzer release tracking for the analyzer project containing rule 'ENFB001' (https://github.com/dotnet/roslyn-analyz ... rs.Help.md)
TestAnalyserProof failed with 1 error(s) (1.2s)
C:\repos\AnalyserTest\src\CSharp\TestAnalyserProof\Program.cs(2,1): error ENFB001: Add braces to the 'if' statement
Build failed with 1 error(s) and 1 warning(s) in 3.7s
< /code>
dotnet run:
C:\repos\AnalyserTest\src\CSharp\TestAnalyserProof\Program.cs(2,1): error ENFB001: Add braces to the 'if' statement
The build failed. Fix the build errors and run again.
< /code>
Analyzer < /h2>
testanalyser/testanalyser.csproj
netstandard2.0
TestAnalyser
TestAnalyser
13
true
< /code>
TestAnalyser/IfStatementBrancesAnalyser.cs
using System.Collections.Immutable;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics;
namespace TestAnalyser
{
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class IfStatementBracesAnalyser : DiagnosticAnalyzer
{
public const string DiagnosticId = "ENFB001";
private static readonly LocalizableString Title = "If statement must use braces";
private static readonly LocalizableString MessageFormat = "Add braces to the 'if' statement";
private static readonly LocalizableString Description = "Single-line 'if' statements must always use braces.";
private const string Category = "Formatting";
private static readonly DiagnosticDescriptor Rule = new DiagnosticDescriptor(
DiagnosticId, Title, MessageFormat, Category,
DiagnosticSeverity.Error, isEnabledByDefault: true, description: Description);
public override ImmutableArray SupportedDiagnostics => ImmutableArray.Create(Rule);
public override void Initialize(AnalysisContext context)
{
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
context.EnableConcurrentExecution();
context.RegisterSyntaxNodeAction(AnalyzeIfStatement, SyntaxKind.IfStatement);
}
private static void AnalyzeIfStatement(SyntaxNodeAnalysisContext context)
{
var ifStatement = (IfStatementSyntax)context.Node;
// Check if the statement's embedded statement is NOT a block
if (ifStatement.Statement is not BlockSyntax)
{
var diagnostic = Diagnostic.Create(Rule, ifStatement.IfKeyword.GetLocation());
context.ReportDiagnostic(diagnostic);
}
else
{
var diagnostic = Diagnostic.Create(Rule, ifStatement.IfKeyword.GetLocation());
context.ReportDiagnostic(diagnostic);
}
}
}
}
proof
testanalyserprotect/testanalyserproof.csproj
Exe
net9.0
enable
enable
true
true
< /code>
TestAnalyserProof/Program.cs
var a = 1;
if (a == 2) Console.WriteLine("Hello world");
else Console.WriteLine("Test");
// should fail to compile
Подробнее здесь: https://stackoverflow.com/questions/796 ... yzer-error
Как сделать Visual Studio полностью поддержать пользовательскую ошибку Analyzer Roslyn ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как сделать Visual Studio полностью поддержать пользовательскую ошибку Analyzer Roslyn
Anonymous » » в форуме C# - 0 Ответы
- 0 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как сделать Visual Studio полностью поддержать пользовательскую ошибку Analyzer Roslyn
Anonymous » » в форуме C# - 0 Ответы
- 0 Просмотры
-
Последнее сообщение Anonymous
-