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); }
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); }
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); } }
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); }
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()); }