internal static SourceRange GetSignatureHelpSpan <TArgumentList>( TArgumentList argumentList, SourceLocation start, Func <TArgumentList, SyntaxToken> getCloseToken) where TArgumentList : SyntaxNode { var closeToken = getCloseToken(argumentList); if (closeToken.RawKind != 0 && !closeToken.IsMissing) { return(SourceRange.FromBounds(start, closeToken.SourceRange.Start)); } // Missing close paren, the span is up to the start of the next token. var lastToken = argumentList.GetLastToken(); var nextToken = lastToken.GetNextToken(); if (nextToken == null) { nextToken = argumentList.AncestorsAndSelf().Last().GetLastToken(includeZeroLength: true); } return(SourceRange.FromBounds(start, nextToken.SourceRange.Start)); }