Description
I'd like to use this library for some refactoring and analysis tools. It would be very helpful to have source line/column information available on the AST nodes, something along the lines of Span
from syn
. (https://docs.rs/syn/1.0.17/syn/spanned/trait.Spanned.html)
I see that line/column is already tracked in the tokenizer. I'm thinking something along the lines of:
struct LineColumn {
pub line: usize,
pub column: usize,
}
struct Span {
pub start: LineColumn,
pub end: LineColumn,
}
struct TokenOccurence {
pub token: Token,
pub span: Span
}
struct Query {
pub span: Span,
pub ctes: Vec<Cte>,
...
}
The main objection I can think of is that it some bulk to Token
s, and to each AST node. This could be alleviated, if desired, by hiding them behind a feature flag. I looked at syn
to see how they do it; the approach there is very similar. Afict, their feature flagging doesn't actually affect the node representation / token representation. They just carry it all the time.
Since the implementation here doesn't appear to be hyper-optimized, and since it's good enough for syn, it seems like this approach should be okay.
If I submitted a PR along these lines, would you consider accepting it?
Related work: