sigmaSd / IRust

Cross Platform Rust Repl

Home Page:https://crates.io/crates/irust

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Feature Request]: Support for `proc_macro` APIs

AZMCode opened this issue · comments

Recently I've been trying to test some ideas for a proc_macro crate I'm building, and despite being able to load the proc_macro crate through the extern crate proc_macro, access to proc_macro APIs is followed by this error:

Out: thread 'main' panicked at 'procedural macro API is used outside of a procedural macro'

Perhaps there could be a command to enable or disable these APIs?

Good idea! I'm definitely interested in this, I'll try implementing this

I implemented the idea, but after testing it, it feels underwhelming since proc-macro are compile-time you can't really interact with them in the repl.
You can test the code here 0617d14 . The idea was to enable proc macros with :proc_macro and to switch between writing to main.rs and lib.rs using :file {file}

Like I said trying it out in practice its doesn't feel really interesting, on the other hand I want to mention you can already interact with proc macros crate using irust in a different way:

  • Create a proc macro cate
  • run irust
  • :add path to crate

Any change made to the crate will be immediately reflected, which I think has some of the advantages of supporting procmacros

Here is a demo

procmacro.mp4

One thing I noticed, is dbg! in proc-macros only appears if the compilation is not successful, I think that something that can be improved on.

Wait wait, I think we might be talking about different things here. What I at least intended to suggest in this specific issue was the ability to use the proc_macro API in irust (TokenStream, TokenTree, etc) to test out code for later use within a proc_macro crate. At least I tested the new version and had no luck getting it to work.

In any case, I'm not sure I fully understand the changes you've done. I tried doing the process enabling the proc_macro flag first, and no dice.

Here's an asciinema clip to show what i mean. In case you wonder what ./new_irust is, it's just a symlink to the compiled version of the commit you sent. In any case, very much thanks for the lightning fast response and enthusiasm!

Here is how you can use the new commit

procmacro2.mp4

(note: to be able to write #[proc_macro]fn ... -> after writing #[proc_macro] you can use alt+enter to add a new line instead of evaluating the input)

But I see what you're trying to do, It would be nice if there was an ergonomic way to call proc_macros apis

Think this is a way to achieve what you want https://github.com/sigmaSd/procmacro/blob/master/src/main.rs

procmacrocrate.mp4

Cool! Do I close the issue or do you wish to keep improving the feature?

I prefer to keep the issue open till I figure it out, thanks!