Я смущен, какой метод использовать на объекте AnalysisContext context
, чтобы иметь локальные переменные локализации функции/метода: либо RegisterSymbolAction()
, либо RegisterSyntaxNodeAction()
.Как определить и проанализировать локальные переменные и параметры с помощью диагностики кода Roslyn?
Скорее всего, RegisterSymbolAction()
в соответствии с образцом Диагностика с кодом Fix (NuGet + VSIX) в Roslyn SDK Project Templates.vsix.
Я отлаживаю с помощью простого консольного приложения, у которого Main()
имеет несколько локальных переменных типа string
и int
.
Я пробовал эти два, но ни один из них не будет запускать любую переменную, подлежащую анализу, в их соответствующих методах обратного вызова . Точка останова в каждом из этих методов обратного вызова не попадает под локальные переменные.
Как получить локальные переменные для анализа в методе обратного вызова AnalyzeSymbol()
и/или что я делаю неправильно?
var symbolsToActOn = new[] { SymbolKind.Local, SymbolKind.Parameter, SymbolKind.Field };
context.RegisterSymbolAction(AnalyzeSymbol, symbolsToActOn);
или
var syntaxTypes = new[] { SyntaxKind.IdentifierName, SyntaxKind.IdentifierToken, SyntaxKind.Parameter };
context.RegisterSyntaxNodeAction(AnalyzeSyntaxNode, syntaxTypes);
Мои demo project is on GitHub для более близкого взгляда, и детализированным в DiagnosticAnalyzer.cs.
Каков статус этого? Мы хотели бы иметь возможность семантически анализировать локальные символы внутри методов/блоков кода? – Jaans