IRust icon indicating copy to clipboard operation
IRust copied to clipboard

[Feature Request]: Support for `proc_macro` APIs

Open AZMCode opened this issue 4 years ago • 7 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?

AZMCode avatar Aug 10 '21 14:08 AZMCode

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

sigmaSd avatar Aug 10 '21 16:08 sigmaSd

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 https://github.com/sigmaSd/IRust/commit/0617d14b507e4ee102d58de919604ebc672f2ecd . 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

https://user-images.githubusercontent.com/22427111/128920846-d916f550-a226-4ab6-9954-46cb68391f06.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.

sigmaSd avatar Aug 10 '21 19:08 sigmaSd

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!

AZMCode avatar Aug 11 '21 02:08 AZMCode

Here is how you can use the new commit

https://user-images.githubusercontent.com/22427111/128981841-7d69e1d6-5d40-4390-96af-c83efbfb1b0d.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

sigmaSd avatar Aug 11 '21 06:08 sigmaSd

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

https://user-images.githubusercontent.com/22427111/128991190-dd99dbae-20be-441e-8cf0-3189b20a651b.mp4

sigmaSd avatar Aug 11 '21 07:08 sigmaSd

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

AZMCode avatar Aug 16 '21 00:08 AZMCode

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

sigmaSd avatar Aug 16 '21 00:08 sigmaSd