2015-01-17 4 views
3

Я смущен, какой метод использовать на объекте 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.

ответ

6

К сожалению, RegisterSymbolAction в настоящее время только методы работы и выше. Для местных жителей и параметров вам необходимо использовать RegisterSyntaxNodeAction. Мы надеемся решить эту проблему в более поздней версии.

+4

Каков статус этого? Мы хотели бы иметь возможность семантически анализировать локальные символы внутри методов/блоков кода? – Jaans