private async Task<Document> GetFix(Document document, SyntaxNode expression, CancellationToken cancellationToken) { // Rewrite the expression to include a .ConfigureAwait() after it. We reattach trailing trivia to the end. // This is especially important for VB, as the end-of-line may be in the trivia DocumentEditor editor = await DocumentEditor.CreateAsync(document, cancellationToken).ConfigureAwait(false); SyntaxGenerator generator = editor.Generator; SyntaxNode memberAccess = generator.MemberAccessExpression(expression.WithoutTrailingTrivia(), "ConfigureAwait"); SyntaxNode falseLiteral = generator.FalseLiteralExpression(); SyntaxNode invocation = generator.InvocationExpression(memberAccess, falseLiteral); invocation = invocation.WithLeadingTrivia(expression.GetLeadingTrivia()).WithTrailingTrivia(expression.GetTrailingTrivia()); editor.ReplaceNode(expression, invocation); return editor.GetChangedDocument(); }
internal SyntaxNode CreateEqualsExpression(SyntaxGenerator syntaxFactoryService, SemanticModel model, SyntaxNode operand1, SyntaxNode operand2, bool isEquals) { var stringType = model.Compilation.GetSpecialType(SpecialType.System_String); var memberAccess = syntaxFactoryService.MemberAccessExpression( syntaxFactoryService.TypeExpression(stringType), syntaxFactoryService.IdentifierName(UseOrdinalStringComparisonAnalyzer.EqualsMethodName)); var ordinal = CreateOrdinalMemberAccess(syntaxFactoryService, model); var invocation = syntaxFactoryService.InvocationExpression( memberAccess, operand1, operand2.WithoutTrailingTrivia(), ordinal) .WithAdditionalAnnotations(Formatter.Annotation); if (!isEquals) { invocation = syntaxFactoryService.LogicalNotExpression(invocation); } invocation = invocation.WithTrailingTrivia(operand2.GetTrailingTrivia()); return invocation; }