| File: Microsoft.NetCore.Analyzers\Runtime\BasicUseOrdinalStringComparison.Fixer.vb | Web Access |
| Project: src\sdk\src\Microsoft.CodeAnalysis.NetAnalyzers\src\Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers\Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers.vbproj (Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers) |
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information. Imports System.Composition Imports Microsoft.NetCore.Analyzers.Runtime Imports Microsoft.CodeAnalysis Imports Microsoft.CodeAnalysis.CodeFixes Imports Microsoft.CodeAnalysis.Editing Imports Microsoft.CodeAnalysis.Formatting Imports Microsoft.CodeAnalysis.VisualBasic Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.NetCore.VisualBasic.Analyzers.Runtime <ExportCodeFixProvider(LanguageNames.VisualBasic), [Shared]> Public Class BasicUseOrdinalStringComparisonFixer Inherits UseOrdinalStringComparisonFixerBase Protected Overrides Function IsInArgumentContext(node As SyntaxNode) As Boolean Return node.IsKind(SyntaxKind.SimpleArgument) AndAlso Not DirectCast(node, SimpleArgumentSyntax).IsNamed AndAlso DirectCast(node, SimpleArgumentSyntax).Expression.IsKind(SyntaxKind.SimpleMemberAccessExpression) End Function Protected Overrides Sub FixArgument(argument As SyntaxNode, editor As SyntaxEditor) Dim memberAccess = TryCast(DirectCast(argument, SimpleArgumentSyntax).Expression, MemberAccessExpressionSyntax) If memberAccess Is Nothing Then Return End If ' preserve the "IgnoreCase" suffix if present Dim isIgnoreCase = memberAccess.Name.GetText().ToString().EndsWith(UseOrdinalStringComparisonAnalyzer.IgnoreCaseText, StringComparison.Ordinal) Dim newOrdinalText = If(isIgnoreCase, UseOrdinalStringComparisonAnalyzer.OrdinalIgnoreCaseText, UseOrdinalStringComparisonAnalyzer.OrdinalText) editor.ReplaceNode( memberAccess, Function(currentMemberAccess, generator) DirectCast(currentMemberAccess, MemberAccessExpressionSyntax). WithName(CType(generator.IdentifierName(newOrdinalText), SimpleNameSyntax)). WithAdditionalAnnotations(Formatter.Annotation)) End Sub Protected Overrides Function IsInIdentifierNameContext(node As SyntaxNode) As Boolean Return node.IsKind(SyntaxKind.IdentifierName) AndAlso GetInvocation(node) IsNot Nothing End Function Protected Overrides Function GetInvocation(identifier As SyntaxNode) As SyntaxNode Return identifier.Parent?.FirstAncestorOrSelf(Of InvocationExpressionSyntax)() End Function Protected Overrides Function AddArgument(invocation As SyntaxNode, argument As SyntaxNode) As SyntaxNode Return DirectCast(invocation, InvocationExpressionSyntax). AddArgumentListArguments(CType(argument, ArgumentSyntax)). WithAdditionalAnnotations(Formatter.Annotation) End Function End Class End Namespace