Exemple #1
0
 private static bool ShouldCacheTriviaInfo(SyntaxNode leadingTrivia, SyntaxNode trailingTrivia)
 {
     Debug.Assert(leadingTrivia != null);
     if (trailingTrivia == null)
     {
         return(false);
     }
     else
     {
         return(leadingTrivia.Kind == SyntaxKind.WhitespaceTrivia &&
                trailingTrivia.Kind == SyntaxKind.WhitespaceTrivia &&
                trailingTrivia.FullWidth == 1 &&
                trailingTrivia.ToFullString() == " " &&
                leadingTrivia.FullWidth <= maximumCachedTriviaWidth);
     }
 }
 private static bool ShouldCacheTriviaInfo(SyntaxNode leadingTrivia, SyntaxNode trailingTrivia)
 {
     Debug.Assert(leadingTrivia != null);
     if (trailingTrivia == null)
     {
         return false;
     }
     else
     {
         return leadingTrivia.Kind == SyntaxKind.WhitespaceTrivia &&
             trailingTrivia.Kind == SyntaxKind.WhitespaceTrivia &&
             trailingTrivia.FullWidth == 1 &&
             trailingTrivia.ToFullString() == " " &&
             leadingTrivia.FullWidth <= maximumCachedTriviaWidth;
     }
 }
Exemple #3
0
        private void FindBestMatch(Stack <SyntaxNode> stack, SyntaxNode node, out int index, out int similarity, int startIndex = 0)
        {
            index      = -1;
            similarity = -1;

            int i = 0;

            foreach (var stackNode in stack)
            {
                if (i >= MaxSearchLength)
                {
                    break;
                }

                if (i >= startIndex)
                {
                    if (AreIdentical(stackNode, node))
                    {
                        var sim = node.FullSpan.Length;
                        if (sim > similarity)
                        {
                            index      = i;
                            similarity = sim;
                            return;
                        }
                    }
                    else if (AreSimilar(stackNode, node))
                    {
                        var sim = GetSimilarity(stackNode, node);

                        // Are these really the same? This may be expensive so only check this if
                        // similarity is rated equal to them being identical.
                        if (sim == node.FullSpan.Length && node.IsToken)
                        {
                            if (stackNode.ToFullString() == node.ToFullString())
                            {
                                index      = i;
                                similarity = sim;
                                return;
                            }
                        }

                        if (sim > similarity)
                        {
                            index      = i;
                            similarity = sim;
                        }
                    }
                    else
                    {
                        // check one level deep inside list node's children
                        int j = 0;
                        foreach (var child in stackNode.ChildNodesAndTokens())
                        {
                            if (j >= MaxSearchLength)
                            {
                                break;
                            }

                            j++;

                            if (AreIdentical(child, node))
                            {
                                index      = i;
                                similarity = node.FullSpan.Length;
                                return;
                            }
                            else if (AreSimilar(child, node))
                            {
                                var sim = GetSimilarity(child, node);
                                if (sim > similarity)
                                {
                                    index      = i;
                                    similarity = sim;
                                }
                            }
                        }
                    }
                }

                i++;
            }
        }