我前幾天在TechEd,我看到this talk by Kevin Pilch-Bisson (relevent part starts at about 18 minutes) ......我覺得這很酷,所以我決定和Roslyn一起玩。將訪問修飾符添加到使用Roslyn CodeFixProvider的方法?
我想有一條規定, 「訪問修飾符必須聲明」(了StyleCop SA1400) - 這意味着,
這違反了規則:
static void Main(string[] args)
{
}
這是確定的:
public static void Main(string[] args)
{
}
它必須有一個明確的內部關鍵字,關鍵字public,private關鍵字,或親檢測關鍵字。
檢測違規是相當容易的,但現在我試圖提供一個修復程序。我一直在嘗試和搜索各處,但我無法找到如何添加訪問修飾符。
這是我到目前爲止有:
public async Task<IEnumerable<CodeAction>> GetFixesAsync(Document document, TextSpan span, IEnumerable<Diagnostic> diagnostics, CancellationToken cancellationToken)
{
var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);
var token = root.FindToken(span.Start);
var methodDeclaration = token.Parent as MethodDeclarationSyntax;
//var newModifiers = methodDeclaration.Modifiers.Add(SyntaxFactory.AccessorDeclaration(SyntaxKind.PublicKeyword));
//var newModifiers = new SyntaxTokenList() { new SyntaxToken() };
MethodDeclarationSyntax newMethodDeclaration = methodDeclaration.WithModifiers(methodDeclaration.Modifiers);
var newRoot = root.ReplaceNode(methodDeclaration, newMethodDeclaration);
var newDocument = document.WithSyntaxRoot(newRoot);
return new[] { CodeAction.Create("Add Public Keyword", newDocument) };
}
的WithModifiers
需要SyntaxTokenList
,我可以新建(),但我不知道如何使它的SyntaxKind.PublicKeyword
。我也不確定我是否想要新的它,或者使用SyntaxFactory
。然而,在使用時SyntaxFactory
,我也想不通,我需要創建的SyntaxKind.PublicKeyword
一個SyntaxToken
我可以張貼整個事情,包括DiagnosticAnalyzer
如果有興趣哪一種方法......
看起來不錯,除了你有一個未使用的本地「公共令牌列表」。你的Func將被調用來創建預覽以及點擊時,但是應該沒問題。 – 2014-11-02 21:23:23
好的,謝謝:)。 publicTokenList,通常resharper告訴我有關這些,但因爲我在vs14工作,它沒有.. – 2014-11-02 21:48:27