Closed
Description
I build syn
with procmacro2_semver_exempt
.
And for such wrong code (a: i32, <) -> i32;
it reports span: 1:0 - 1:11, in other words
(a: i32, <)
, but if print ParseStream I can see that it stops on <
,
so there is information about exact wrong token,
thus is it possible somehow report where parser stops in case of parenthesized
usage?
use quote::quote;
use syn::{
parenthesized,
parse::{Parse, ParseStream},
punctuated::Punctuated,
Result, Token,
};
struct Item;
impl Parse for Item {
fn parse(input: ParseStream) -> Result<Self> {
let args_parser;
parenthesized!(args_parser in input);
let args_in: Result<Punctuated<syn::FnArg, Token![,]>> =
args_parser.parse_terminated(syn::FnArg::parse);
println!("state, input {}\nargs_parser {}", input, args_parser);
let args_in = args_in?;
unimplemented!();
}
}
fn main() {
if let Err(err) = syn::parse_str::<Item>("(a: i32, <) -> i32;") {
println!(
"err: {}, at {}:{} - {}:{}",
err,
err.span().start().line,
err.span().start().column,
err.span().end().line,
err.span().end().column
);
}
}
Metadata
Metadata
Assignees
Labels
No labels