当前位置: 首页>>代码示例>>C#>>正文


C# SyntaxNode.ReplaceSyntax方法代码示例

本文整理汇总了C#中Microsoft.CodeAnalysis.SyntaxNode.ReplaceSyntax方法的典型用法代码示例。如果您正苦于以下问题:C# SyntaxNode.ReplaceSyntax方法的具体用法?C# SyntaxNode.ReplaceSyntax怎么用?C# SyntaxNode.ReplaceSyntax使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Microsoft.CodeAnalysis.SyntaxNode的用法示例。


在下文中一共展示了SyntaxNode.ReplaceSyntax方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: GetRootWithAnnotatedElements

        private static SyntaxNode GetRootWithAnnotatedElements(SyntaxNode root,
            Dictionary<SyntaxNodeOrToken, Diagnostic> elementDiagnosticPairs,
            BidirectionalDictionary<Diagnostic, SyntaxAnnotation> diagnosticAnnotationPairs)
        {
            var nodes = elementDiagnosticPairs.Keys.Where(k => k.IsNode).Select(k => k.AsNode());
            var tokens = elementDiagnosticPairs.Keys.Where(k => k.IsToken).Select(k => k.AsToken());

            return root.ReplaceSyntax(
                nodes,
                (original, rewritten) =>
                {
                    var annotation = diagnosticAnnotationPairs.GetByA(elementDiagnosticPairs[original]);
                    return rewritten.WithAdditionalAnnotations(annotation);
                },
                tokens,
                (original, rewritten) =>
                {
                    var annotation = diagnosticAnnotationPairs.GetByA(elementDiagnosticPairs[original]);
                    return rewritten.WithAdditionalAnnotations(annotation);
                },
                null, null);
        }
开发者ID:dbolkensteyn,项目名称:sonarlint-vs,代码行数:22,代码来源:DocumentBasedFixAllProvider.cs

示例2: ReformatStatementAndParent

        private static SyntaxNode ReformatStatementAndParent(Document document, SyntaxNode syntaxRoot, StatementSyntax statement)
        {
            var parentLastToken = statement.GetFirstToken().GetPreviousToken();

            var parentEndLine = parentLastToken.GetEndLine();
            var statementStartLine = statement.GetFirstToken().GetLine();

            var newParentLastToken = parentLastToken;
            if (parentEndLine == statementStartLine)
            {
                var newTrailingTrivia = parentLastToken.TrailingTrivia
                    .WithoutTrailingWhitespace()
                    .Add(SyntaxFactory.CarriageReturnLineFeed);

                newParentLastToken = newParentLastToken.WithTrailingTrivia(newTrailingTrivia);
            }

            var parentNextToken = statement.GetLastToken().GetNextToken();

            var nextTokenLine = parentNextToken.GetLine();
            var statementCloseLine = statement.GetLastToken().GetEndLine();

            var newParentNextToken = parentNextToken;
            if (nextTokenLine == statementCloseLine)
            {
                var indentationOptions = IndentationOptions.FromDocument(document);
                var parentIndentationLevel = IndentationHelper.GetIndentationSteps(indentationOptions, GetStatementParent(statement.Parent));
                var indentationString = IndentationHelper.GenerateIndentationString(indentationOptions, parentIndentationLevel);
                newParentNextToken = newParentNextToken.WithLeadingTrivia(SyntaxFactory.Whitespace(indentationString));
            }

            var newStatement = ReformatStatement(document, statement);
            var newSyntaxRoot = syntaxRoot.ReplaceSyntax(
                new[] { statement },
                (originalNode, rewrittenNode) => originalNode == statement ? newStatement : rewrittenNode,
                new[] { parentLastToken, parentNextToken },
                (originalToken, rewrittenToken) =>
                {
                    if (originalToken == parentLastToken)
                    {
                        return newParentLastToken;
                    }
                    else if (originalToken == parentNextToken)
                    {
                        return newParentNextToken;
                    }
                    else
                    {
                        return rewrittenToken;
                    }
                },
                Enumerable.Empty<SyntaxTrivia>(),
                (originalTrivia, rewrittenTrivia) => rewrittenTrivia);

            return newSyntaxRoot.WithoutFormatting();
        }
开发者ID:JaRau,项目名称:StyleCopAnalyzers,代码行数:56,代码来源:SA1501CodeFixProvider.cs


注:本文中的Microsoft.CodeAnalysis.SyntaxNode.ReplaceSyntax方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。