mirror of https://github.com/rwf2/Rocket.git
Give a nice error when uri! macro is empty.
This commit is contained in:
parent
c4524400b2
commit
02cff01e17
|
@ -25,14 +25,14 @@ pub fn uri(
|
|||
) -> Box<MacResult + 'static> {
|
||||
// Generate the path to the internal macro.
|
||||
let mut parser = ecx.new_parser_from_tts(args);
|
||||
let (_, mut macro_path) = try_parse!(sp, UriParams::parse_prelude(&mut parser));
|
||||
prefix_path(URI_INFO_MACRO_PREFIX, &mut macro_path);
|
||||
let (_, mut path) = try_parse!(sp, UriParams::parse_prelude(ecx, &mut parser));
|
||||
prefix_path(URI_INFO_MACRO_PREFIX, &mut path);
|
||||
|
||||
// It's incredibly important we use `sp` as the Span for the generated code
|
||||
// so that errors from the `internal` call show up on the user's code.
|
||||
let expr = parser.mk_mac_expr(sp,
|
||||
ast::Mac_ {
|
||||
path: macro_path,
|
||||
path: path,
|
||||
tts: args.to_vec().into_iter().collect::<TokenStream>().into(),
|
||||
},
|
||||
::syntax::util::ThinVec::new(),
|
||||
|
|
|
@ -65,8 +65,14 @@ impl Arg {
|
|||
impl UriParams {
|
||||
// Parses the mount point, if any, and route identifier.
|
||||
pub fn parse_prelude<'a>(
|
||||
ecx: &'a ExtCtxt,
|
||||
parser: &mut Parser<'a>
|
||||
) -> PResult<'a, (Option<Spanned<InternedString>>, Path)> {
|
||||
if parser.token == Token::Eof {
|
||||
return Err(ecx.struct_span_err(ecx.call_site(),
|
||||
"call to `uri!` cannot be empty"));
|
||||
}
|
||||
|
||||
// Parse the mount point and suffixing ',', if any.
|
||||
let mount_point = match parser.parse_optional_str() {
|
||||
Some((symbol, _, _)) => {
|
||||
|
@ -91,9 +97,12 @@ impl UriParams {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn parse<'a>( ecx: &'a ExtCtxt, parser: &mut Parser<'a>,) -> PResult<'a, UriParams> {
|
||||
pub fn parse<'a>(
|
||||
ecx: &'a ExtCtxt,
|
||||
parser: &mut Parser<'a>
|
||||
) -> PResult<'a, UriParams> {
|
||||
// Parse the mount point and suffixing ',', if any.
|
||||
let (mount_point, route_path) = Self::parse_prelude(parser)?;
|
||||
let (mount_point, route_path) = Self::parse_prelude(ecx, parser)?;
|
||||
|
||||
// If there are no arguments, finish early.
|
||||
if !parser.eat(&Token::Colon) {
|
||||
|
|
Loading…
Reference in New Issue