use syntax::ast;
use syntax::parse::lexer::{self, Reader, StringReader};
+use syntax::parse::token::{self, Token};
+use syntax::parse::parser::Parser;
+use syntax::symbol::keywords;
use syntax::tokenstream::TokenTree;
use syntax_pos::*;
/// function returns the program text from the start of the span until the
/// end of the 'signature' part, that is up to, but not including an opening
/// brace or semicolon.
- pub fn signature_string_for_span(&self, span: Span) -> Option<String> {
+ pub fn signature_string_for_span(&self, span: Span) -> String {
let mut toks = self.span_to_tts(span).into_iter();
let mut prev = toks.next().unwrap();
let first_span = prev.get_span();
for tok in toks {
if let TokenTree::Token(_, ref tok) = prev {
angle_count += match *tok {
- token::Eof => { return None; }
+ token::Eof => { break; }
token::Lt => 1,
token::Gt => -1,
token::BinOp(token::Shl) => 2,
continue;
}
if let TokenTree::Token(_, token::Semi) = tok {
- return Some(self.snippet(mk_sp(first_span.lo, prev.get_span().hi)));
+ return self.snippet(mk_sp(first_span.lo, prev.get_span().hi));
} else if let TokenTree::Delimited(_, ref d) = tok {
if d.delim == token::Brace {
- return Some(self.snippet(mk_sp(first_span.lo, prev.get_span().hi)));
+ return self.snippet(mk_sp(first_span.lo, prev.get_span().hi));
}
}
prev = tok;
}
- None
+ self.snippet(span)
}
pub fn sub_span_before_token(&self, span: Span, tok: Token) -> Option<Span> {