Skip to content

senseless line / column ?  #561

Closed
Closed
@Dushistov

Description

@Dushistov

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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions