我已经创建了一个CodeFix,如果它的名称与某些法律不符,则会重命名该变量。 例如," int"变量需要以" i"开头。我已经制作了这个CodeFix并且它有效:
public async Task<IEnumerable<CodeAction>> GetFixesAsync(Document document, TextSpan
span, IEnumerable<Diagnostic> diagnostics, CancellationToken cancellationToken)
{
var root = await document.GetSyntaxRootAsync(cancellationToken);
var token = root.FindToken(span.Start);
var node = root.FindNode(span);
if (node.IsKind(SyntaxKind.VariableDeclarator))
{
if (node.Parent.Parent is LocalDeclarationStatementSyntax)
{
var Verify = (LocalDeclarationStatementSyntax)node.Parent.Parent;
var Verify2 = (VariableDeclarationSyntax)node.Parent;
if (!Verify.Modifiers.Any(SyntaxKind.ConstKeyword))
{
if (Verify2.Type.ToString() == "int")
{
if (token.IsKind(SyntaxKind.IdentifierToken))
{
var variable = (VariableDeclaratorSyntax)node;
string newName = variable.Identifier.ValueText;
if (newName.Length > 1)
{
newName = char.ToUpper(newName[0]) + newName.Substring(1);
}
var leading = variable.Identifier.LeadingTrivia;
var trailing = variable.Identifier.TrailingTrivia;
VariableDeclaratorSyntax newVariable = variable.WithIdentifier(SyntaxFactory.Identifier(leading, "i" + newName, trailing));
var newRoot = root.ReplaceNode(variable, newVariable);
return new[] { CodeAction.Create("Add 'i'", document.WithSyntaxRoot(newRoot)) };
}
}
}
}
}
return null;
}
所以,如果我有这样的代码:
int variable = 0;
variable++;
我有一个警告,并且只需点击一下即可重命名声明。所以代码改变如下:
int iVariable = 0;
variable++;
但所有变量名称为&#34;变量&#34;没有重命名! Visual Studio已经有一个CodeFix来重命名被称为&#34; variable&#34;的其他变量,但它需要为用户进行第二次操作。
您知道我可以实现的代码如何直接重命名所有变量吗? 如果没有,有没有办法调用Visual Studio提供的CodeFix?