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


C# AbstractSuppressionCodeFixProvider.GetNodeWithTokens方法代码示例

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


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

示例1: NormalizeTriviaOnTokens

            internal static void NormalizeTriviaOnTokens(AbstractSuppressionCodeFixProvider fixer, ref Document document, ref SuppressionTargetInfo suppressionTargetInfo)
            {
                // For pragma suppression fixes, we need to normalize the leading trivia on start token to account for
                // the trailing trivia on its previous token (and similarly normalize trailing trivia for end token).

                var startToken = suppressionTargetInfo.StartToken;
                var endToken = suppressionTargetInfo.EndToken;
                var nodeWithTokens = suppressionTargetInfo.NodeWithTokens;
                var startAndEndTokensAreSame = startToken == endToken;
                var isEndTokenEOF = fixer.IsEndOfFileToken(endToken);

                var previousOfStart = startToken.GetPreviousToken(includeZeroWidth: true);
                var nextOfEnd = !isEndTokenEOF ? endToken.GetNextToken(includeZeroWidth: true) : default(SyntaxToken);
                if (!previousOfStart.HasTrailingTrivia && !nextOfEnd.HasLeadingTrivia)
                {
                    return;
                }

                var root = nodeWithTokens.SyntaxTree.GetRoot();
                var spanEnd = !isEndTokenEOF ? nextOfEnd.FullSpan.End : endToken.FullSpan.End;
                var subtreeRoot = root.FindNode(new TextSpan(previousOfStart.FullSpan.Start, spanEnd - previousOfStart.FullSpan.Start));

                var currentStartToken = startToken;
                var currentEndToken = endToken;
                var newStartToken = startToken.WithLeadingTrivia(previousOfStart.TrailingTrivia.Concat(startToken.LeadingTrivia));

                SyntaxToken newEndToken = currentEndToken;
                if (startAndEndTokensAreSame)
                {
                    newEndToken = newStartToken;
                }

                newEndToken = newEndToken.WithTrailingTrivia(endToken.TrailingTrivia.Concat(nextOfEnd.LeadingTrivia));

                var newPreviousOfStart = previousOfStart.WithTrailingTrivia();
                var newNextOfEnd = nextOfEnd.WithLeadingTrivia();

                var newSubtreeRoot = subtreeRoot.ReplaceTokens(new[] { startToken, previousOfStart, endToken, nextOfEnd },
                    (o, n) =>
                    {
                        if (o == currentStartToken)
                        {
                            return startAndEndTokensAreSame ? newEndToken : newStartToken;
                        }
                        else if (o == previousOfStart)
                        {
                            return newPreviousOfStart;
                        }
                        else if (o == currentEndToken)
                        {
                            return newEndToken;
                        }
                        else if (o == nextOfEnd)
                        {
                            return newNextOfEnd;
                        }
                        else
                        {
                            return n;
                        }
                    });

                root = root.ReplaceNode(subtreeRoot, newSubtreeRoot);
                document = document.WithSyntaxRoot(root);
                suppressionTargetInfo.StartToken = root.FindToken(startToken.SpanStart);
                suppressionTargetInfo.EndToken = root.FindToken(endToken.SpanStart);
                suppressionTargetInfo.NodeWithTokens = fixer.GetNodeWithTokens(suppressionTargetInfo.StartToken, suppressionTargetInfo.EndToken, root);
            }
开发者ID:Rickinio,项目名称:roslyn,代码行数:68,代码来源:AbstractSuppressionCodeFixProvider.PragmaHelpers.cs

示例2: NormalizeTriviaOnTokens

                private static void NormalizeTriviaOnTokens(AbstractSuppressionCodeFixProvider fixer, ref Document document, ref SuppressionTargetInfo suppressionTargetInfo)
                {
                    var startToken = suppressionTargetInfo.StartToken;
                    var endToken = suppressionTargetInfo.EndToken;
                    var nodeWithTokens = suppressionTargetInfo.NodeWithTokens;
                    var startAndEndTokensAreSame = startToken == endToken;

                    var previousOfStart = startToken.GetPreviousToken();
                    var nextOfEnd = endToken.GetNextToken();
                    if (!previousOfStart.HasTrailingTrivia && !nextOfEnd.HasLeadingTrivia)
                    {
                        return;
                    }

                    var root = nodeWithTokens.SyntaxTree.GetRoot();
                    var subtreeRoot = root.FindNode(new TextSpan(previousOfStart.FullSpan.Start, nextOfEnd.FullSpan.End - previousOfStart.FullSpan.Start));

                    var currentStartToken = startToken;
                    var currentEndToken = endToken;
                    var newStartToken = startToken.WithLeadingTrivia(previousOfStart.TrailingTrivia.Concat(startToken.LeadingTrivia));

                    SyntaxToken newEndToken = currentEndToken;
                    if (startAndEndTokensAreSame)
                    {
                        newEndToken = newStartToken;
                    }

                    newEndToken = newEndToken.WithTrailingTrivia(endToken.TrailingTrivia.Concat(nextOfEnd.LeadingTrivia));

                    var newPreviousOfStart = previousOfStart.WithTrailingTrivia();
                    var newNextOfEnd = nextOfEnd.WithLeadingTrivia();

                    var newSubtreeRoot = subtreeRoot.ReplaceTokens(new[] { startToken, previousOfStart, endToken, nextOfEnd },
                        (o, n) =>
                        {
                            if (o == currentStartToken)
                            {
                                return newStartToken;
                            }
                            else if (o == previousOfStart)
                            {
                                return newPreviousOfStart;
                            }
                            else if (o == currentEndToken)
                            {
                                return newEndToken;
                            }
                            else if (o == nextOfEnd)
                            {
                                return newNextOfEnd;
                            }
                            else
                            {
                                return n;
                            }
                        });

                    root = root.ReplaceNode(subtreeRoot, newSubtreeRoot);
                    document = document.WithSyntaxRoot(root);
                    suppressionTargetInfo.StartToken = root.FindToken(startToken.SpanStart);
                    suppressionTargetInfo.EndToken = root.FindToken(endToken.SpanStart);
                    suppressionTargetInfo.NodeWithTokens = fixer.GetNodeWithTokens(suppressionTargetInfo.StartToken, suppressionTargetInfo.EndToken, root);
                }
开发者ID:COx2,项目名称:roslyn,代码行数:63,代码来源:AbstractSuppressionCodeFixProvider.RemoveSuppressionCodeAction_Pragma.cs


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