Example #1
0
 public Roslyn.Compilers.CSharp.DirectiveSyntax GetLastDirective(Func <Roslyn.Compilers.CSharp.DirectiveSyntax, bool> predicate = null)
 {
     foreach (SyntaxNodeOrToken syntaxNodeOrToken in this.ChildNodesAndTokens().Reverse())
     {
         if (syntaxNodeOrToken.HasDirectives)
         {
             if (syntaxNodeOrToken.IsNode)
             {
                 Roslyn.Compilers.CSharp.DirectiveSyntax lastDirective = syntaxNodeOrToken.AsNode().GetLastDirective(predicate);
                 if (lastDirective != null)
                 {
                     return(lastDirective);
                 }
             }
             else
             {
                 Roslyn.Compilers.CSharp.SyntaxToken syntaxToken = syntaxNodeOrToken.AsToken();
                 for (int index = syntaxToken.LeadingTrivia.Count - 1; index >= 0; --index)
                 {
                     Roslyn.Compilers.CSharp.SyntaxTrivia syntaxTrivia = syntaxToken.LeadingTrivia[index];
                     if (syntaxTrivia.IsDirective)
                     {
                         Roslyn.Compilers.CSharp.DirectiveSyntax directiveSyntax = (Roslyn.Compilers.CSharp.DirectiveSyntax)syntaxTrivia.GetStructure();
                         if (predicate == null || predicate(directiveSyntax))
                         {
                             return(directiveSyntax);
                         }
                     }
                 }
             }
         }
     }
     return((Roslyn.Compilers.CSharp.DirectiveSyntax)null);
 }
Example #2
0
 private static void GetDirectives <TDirective>(Roslyn.Compilers.CSharp.SyntaxToken token, Func <TDirective, bool> filter, ref List <TDirective> directives) where TDirective : Roslyn.Compilers.CSharp.DirectiveSyntax
 {
     if (!token.HasDirectives)
     {
         return;
     }
     Roslyn.Compilers.CSharp.SyntaxNode.GetDirectives <TDirective>(token.LeadingTrivia, filter, ref directives);
     Roslyn.Compilers.CSharp.SyntaxNode.GetDirectives <TDirective>(token.TrailingTrivia, filter, ref directives);
 }
Example #3
0
 private bool TryGetEofAt(int position, out Roslyn.Compilers.CSharp.SyntaxToken Eof)
 {
     if (position == this.End)
     {
         Roslyn.Compilers.CSharp.CompilationUnitSyntax compilationUnitSyntax = this as Roslyn.Compilers.CSharp.CompilationUnitSyntax;
         if (compilationUnitSyntax != null)
         {
             Eof = compilationUnitSyntax.EndOfFileToken;
             return(true);
         }
     }
     Eof = new Roslyn.Compilers.CSharp.SyntaxToken();
     return(false);
 }
 public Roslyn.Compilers.CSharp.IdentifierNameSyntax Update(Roslyn.Compilers.CSharp.SyntaxToken identifier)
 {
     if (!(identifier != this.Identifier))
     {
         return(this);
     }
     Roslyn.Compilers.CSharp.IdentifierNameSyntax node = Roslyn.Compilers.CSharp.Syntax.IdentifierName(identifier);
     SyntaxAnnotation[] annotations = this.GetAnnotations();
     if (annotations != null && annotations.Length > 0)
     {
         return(Roslyn.Compilers.CSharp.SyntaxNodeExtensions.WithAnnotations <Roslyn.Compilers.CSharp.IdentifierNameSyntax>(node, annotations));
     }
     else
     {
         return(node);
     }
 }
Example #5
0
 public Roslyn.Compilers.CSharp.SyntaxToken FindToken(int position, Func <Roslyn.Compilers.CSharp.SyntaxTrivia, bool> findInsideTrivia)
 {
     Roslyn.Compilers.CSharp.SyntaxToken syntaxToken = this.FindToken(position, false);
     if (findInsideTrivia != null)
     {
         Roslyn.Compilers.CSharp.SyntaxTrivia syntaxTrivia = new Roslyn.Compilers.CSharp.SyntaxTrivia();
         TextSpan span = syntaxToken.Span;
         if (position < span.Start && syntaxToken.HasLeadingTrivia)
         {
             syntaxTrivia = Roslyn.Compilers.CSharp.SyntaxNode.GetTriviaThatContainsPosition(syntaxToken.LeadingTrivia, position);
         }
         else if (position >= span.End && syntaxToken.HasTrailingTrivia)
         {
             syntaxTrivia = Roslyn.Compilers.CSharp.SyntaxNode.GetTriviaThatContainsPosition(syntaxToken.TrailingTrivia, position);
         }
         if (syntaxTrivia.HasStructure && findInsideTrivia(syntaxTrivia))
         {
             syntaxToken = syntaxTrivia.GetStructure().FindTokenInternal(position);
         }
     }
     return(syntaxToken);
 }
Example #6
0
 internal static Roslyn.Compilers.CSharp.SyntaxTrivia FindTriviaByOffset(Roslyn.Compilers.CSharp.SyntaxNode node, int textOffset, Func <Roslyn.Compilers.CSharp.SyntaxTrivia, bool> stepInto = null)
 {
     if (textOffset >= 0)
     {
         foreach (SyntaxNodeOrToken syntaxNodeOrToken in node.ChildNodesAndTokens())
         {
             int fullWidth = syntaxNodeOrToken.FullWidth;
             if (textOffset < fullWidth)
             {
                 if (syntaxNodeOrToken.IsNode)
                 {
                     return(Roslyn.Compilers.CSharp.SyntaxNode.FindTriviaByOffset(syntaxNodeOrToken.AsNode(), textOffset, stepInto));
                 }
                 if (syntaxNodeOrToken.IsToken)
                 {
                     Roslyn.Compilers.CSharp.SyntaxToken syntaxToken = syntaxNodeOrToken.AsToken();
                     int leadingWidth = syntaxToken.LeadingWidth;
                     if (textOffset < syntaxToken.LeadingWidth)
                     {
                         foreach (Roslyn.Compilers.CSharp.SyntaxTrivia syntaxTrivia in syntaxToken.LeadingTrivia)
                         {
                             if (textOffset < syntaxTrivia.FullWidth)
                             {
                                 if (syntaxTrivia.HasStructure && stepInto != null && stepInto(syntaxTrivia))
                                 {
                                     return(Roslyn.Compilers.CSharp.SyntaxNode.FindTriviaByOffset((Roslyn.Compilers.CSharp.SyntaxNode)syntaxTrivia.GetStructure(), textOffset, stepInto));
                                 }
                                 else
                                 {
                                     return(syntaxTrivia);
                                 }
                             }
                             else
                             {
                                 textOffset -= syntaxTrivia.FullWidth;
                             }
                         }
                     }
                     else if (textOffset >= leadingWidth + syntaxToken.Width)
                     {
                         textOffset -= leadingWidth + syntaxToken.Width;
                         foreach (Roslyn.Compilers.CSharp.SyntaxTrivia syntaxTrivia in syntaxToken.TrailingTrivia)
                         {
                             if (textOffset < syntaxTrivia.FullWidth)
                             {
                                 if (syntaxTrivia.HasStructure && stepInto != null && stepInto(syntaxTrivia))
                                 {
                                     return(Roslyn.Compilers.CSharp.SyntaxNode.FindTriviaByOffset((Roslyn.Compilers.CSharp.SyntaxNode)syntaxTrivia.GetStructure(), textOffset, stepInto));
                                 }
                                 else
                                 {
                                     return(syntaxTrivia);
                                 }
                             }
                             else
                             {
                                 textOffset -= syntaxTrivia.FullWidth;
                             }
                         }
                     }
                     return(new Roslyn.Compilers.CSharp.SyntaxTrivia());
                 }
             }
             textOffset -= fullWidth;
         }
     }
     return(new Roslyn.Compilers.CSharp.SyntaxTrivia());
 }