public static IEnumerable <SyntaxToken> TokensOfTheSameLine(this SyntaxToken token) { // instead of going through the ALL tokens go only through the tokens from the same parent // and within the same line var lineNumber = token.GetLineNumber(); var tokens = token.SyntaxTree.GetRoot().DescendantTokens() .Where(x => x.GetLineNumber() == lineNumber) .ToArray(); var parent = token.Parent; while (parent != null) { parent = parent.Parent; if (parent.GetFirstToken().GetLineNumber() != lineNumber) { break; } } return(parent.DescendantTokens() .SkipWhile(x => x.GetLineNumber() != lineNumber) .TakeWhile(x => x.GetLineNumber() == lineNumber) .ToArray()); }
private static bool TryGetPreviousTokenInSameLine(SyntaxToken token, out SyntaxToken previousToken) { previousToken = token.GetPreviousToken(); return(previousToken.GetLineNumber() == token.GetLineNumber()); }