using System; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.VisualBasic; using Microsoft.CodeAnalysis.VisualBasic.Syntax; using Microsoft.CodeAnalysis.Editing; namespace CTA.Rules.Actions.VisualBasic { /// /// List of actions that can run on Identifier Names /// public class IdentifierNameActions { public Func GetReplaceIdentifierAction(string identifierName) { IdentifierNameSyntax ReplaceIdentifier(SyntaxGenerator syntaxGenerator, IdentifierNameSyntax node) { var leadingTrivia = node.GetLeadingTrivia(); var trailingTrivia = node.GetTrailingTrivia(); node = node.WithIdentifier(SyntaxFactory.Identifier(identifierName)).NormalizeWhitespace(); node = node.WithLeadingTrivia(leadingTrivia); node = node.WithTrailingTrivia(trailingTrivia); return node; } return ReplaceIdentifier; } public Func GetReplaceIdentifierInsideClassAction(string identifier, string classFullKey) { IdentifierNameSyntax ReplaceIdentifier2(SyntaxGenerator syntaxGenerator, IdentifierNameSyntax node) { var currentNode = node.Parent; while (currentNode != null && currentNode.GetType() != typeof(ClassBlockSyntax)) { currentNode = currentNode.Parent; } var classNode = currentNode as ClassBlockSyntax; while (currentNode != null && currentNode.GetType() != typeof(NamespaceBlockSyntax)) { currentNode = currentNode.Parent; } if (classNode == null || !(currentNode is NamespaceBlockSyntax namespaceNode)) { return node; } var fullName = string.Concat(namespaceNode.NamespaceStatement.Name, ".", classNode.ClassStatement.Identifier.Text); if (fullName == classFullKey) { var leadingTrivia = node.GetLeadingTrivia(); var trailingTrivia = node.GetTrailingTrivia(); node = node.WithIdentifier(SyntaxFactory.Identifier(identifier)).NormalizeWhitespace(); node = node.WithLeadingTrivia(leadingTrivia); node = node.WithTrailingTrivia(trailingTrivia); return node; } else { return node; } } return ReplaceIdentifier2; } } }