1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use std::env;
use std::fs;
use std::io::Read;

use sourcemap::{decode, DecodedMap, RewriteOptions, SourceMap};

fn load_from_reader<R: Read>(mut rdr: R) -> SourceMap {
    match decode(&mut rdr).unwrap() {
        DecodedMap::Regular(sm) => sm,
        DecodedMap::Index(idx) => idx
            .flatten_and_rewrite(&RewriteOptions {
                load_local_source_contents: true,
                ..Default::default()
            })
            .unwrap(),
        _ => panic!("unexpected sourcemap format"),
    }
}

fn main() {
    let args: Vec<_> = env::args().collect();
    let mut f = fs::File::open(&args[1]).unwrap();
    let sm = load_from_reader(&mut f);

    let line = if args.len() > 2 {
        args[2].parse::<u32>().unwrap()
    } else {
        0
    };
    let column = if args.len() > 3 {
        args[3].parse::<u32>().unwrap()
    } else {
        0
    };

    let token = sm.lookup_token(line, column).unwrap(); // line-number and column
    println!("token: {token}");
}