private static async Task <Document> GetTransformedDocumentForMultipleLinesAsync(Document document, Diagnostic diagnostic, CancellationToken cancellationToken) { var syntaxRoot = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var queryExpression = (QueryExpressionSyntax)syntaxRoot.FindNode(diagnostic.Location.SourceSpan).Parent; var replaceMap = new Dictionary <SyntaxToken, SyntaxToken>(); var nodeList = CreateQueryNodeList(queryExpression); var settings = SettingsHelper.GetStyleCopSettings(document.Project.AnalyzerOptions, syntaxRoot.SyntaxTree, cancellationToken); var indentationTrivia = QueryIndentationHelpers.GetQueryIndentationTrivia(settings.Indentation, queryExpression); for (var i = 1; i < nodeList.Length; i++) { var token = nodeList[i].GetFirstToken(); var precedingToken = token.GetPreviousToken(); if (precedingToken.GetLine() == token.GetLine()) { var triviaList = precedingToken.TrailingTrivia.AddRange(token.LeadingTrivia); var processedTriviaList = triviaList.WithoutTrailingWhitespace().Add(SyntaxFactory.CarriageReturnLineFeed); replaceMap.Add(precedingToken, precedingToken.WithTrailingTrivia(processedTriviaList)); replaceMap.Add(token, token.WithLeadingTrivia(indentationTrivia)); } } var newSyntaxRoot = syntaxRoot.ReplaceTokens(replaceMap.Keys, (t1, t2) => replaceMap[t1]).WithoutFormatting(); return(document.WithSyntaxRoot(newSyntaxRoot)); }
private static async Task <Document> GetTransformedDocumentAsync(Document document, Diagnostic diagnostic, CancellationToken cancellationToken) { var syntaxRoot = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var token = syntaxRoot.FindToken(diagnostic.Location.SourceSpan.Start); var indentationOptions = IndentationOptions.FromDocument(document); var indentationTrivia = QueryIndentationHelpers.GetQueryIndentationTrivia(indentationOptions, token); var precedingToken = token.GetPreviousToken(); var replaceMap = new Dictionary <SyntaxToken, SyntaxToken>() { [precedingToken] = precedingToken.WithTrailingTrivia(SyntaxFactory.CarriageReturnLineFeed), [token] = token.WithLeadingTrivia(indentationTrivia) }; var newSyntaxRoot = syntaxRoot.ReplaceTokens(replaceMap.Keys, (t1, t2) => replaceMap[t1]).WithoutFormatting(); return(document.WithSyntaxRoot(newSyntaxRoot)); }
private static async Task <Document> GetTransformedDocumentAsync(Document document, Diagnostic diagnostic, CancellationToken cancellationToken) { var syntaxRoot = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var token = syntaxRoot.FindToken(diagnostic.Location.SourceSpan.Start); var settings = SettingsHelper.GetStyleCopSettings(document.Project.AnalyzerOptions, syntaxRoot.SyntaxTree, cancellationToken); var indentationTrivia = QueryIndentationHelpers.GetQueryIndentationTrivia(settings.Indentation, token); var precedingToken = token.GetPreviousToken(); var triviaList = precedingToken.TrailingTrivia.AddRange(token.LeadingTrivia); var processedTriviaList = triviaList.WithoutTrailingWhitespace().Add(SyntaxFactory.CarriageReturnLineFeed); var replaceMap = new Dictionary <SyntaxToken, SyntaxToken>() { [precedingToken] = precedingToken.WithTrailingTrivia(processedTriviaList), [token] = token.WithLeadingTrivia(indentationTrivia), }; var newSyntaxRoot = syntaxRoot.ReplaceTokens(replaceMap.Keys, (t1, t2) => replaceMap[t1]).WithoutFormatting(); return(document.WithSyntaxRoot(newSyntaxRoot)); }