一键重命名多个变量

本文关键字:变量 重命名 一键 | 更新日期: 2023-09-27 18:02:25

我做了一个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++;

但是所有名为"variable"的变量都没有被重命名!Visual Studio已经有一个CodeFix来重命名其他被称为"variable"的变量,但它需要用户进行第二次操作。

你知道一个代码,我可以实现谁将重命名所有的变量直接?如果没有,有没有办法调用Visual Studio提供的CodeFix ?

一键重命名多个变量

您正在寻找Roslyn的语义重命名引擎。

Call Renamer.RenameSymbolAsync()