maghoff / bart

A compile time templating language for Rust inspired by Mustache
https://crates.io/crates/bart
MIT License
37 stars 7 forks source link

Relative paths #11

Open anowell opened 7 years ago

anowell commented 7 years ago

When I move modules around, I end up breaking Bart rendered components because of the path being relative to crate root. It might just be that I also happen to be using a lot of include_str! which has me used to using paths relative to the file that invokes the macro, but I find relative paths to be a bit nicer. On the flip side, someone with all their templates in a root templates dir would probably feel the opposite, so take this with a grain of salt. I wonder if you could use a prefix / to indicate crate root.

(feel free to disregard/close.. just sharing feedback)

maghoff commented 7 years ago

The crux here seems to be that I don't know how to implement relative include paths. My preference is to relative paths as well. Leading / for crate root would probably also be a nice feature.

I have not been able to figure out which rust source file is currently being compiled when the procedural macro gets executed, so the only thing I have to go by is the current working directory, which is the crate root.

maghoff commented 5 years ago

Hm, maybe https://www.reddit.com/r/rust/comments/a3fgp6/procmacro_determining_the_callers_module_path/ is a lead. I would first need to get hold of a Span. Maybe I could go token_stream.iter().next().unwrap().span().call_site().source_file() or something like that.

Note: source_file() is experimental (https://github.com/rust-lang/rust/issues/54725)

TheButlah commented 2 years ago

Just discovered this, maybe its helpful. It doesn't work on the current version of Rust but I've submitted a pr to fix it.

Its also very cursed.

maghoff commented 2 years ago

@TheButlah Ah, cool. Definitely something for me to keep an eye on. Not too stoked about using nightly, but thank you for the heads up!