Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request]: Support for proc_macro APIs #85

Open
AZMCode opened this issue Aug 10, 2021 · 7 comments
Open

[Feature Request]: Support for proc_macro APIs #85

AZMCode opened this issue Aug 10, 2021 · 7 comments
Labels
enhancement New feature or request question Further information is requested

Comments

@AZMCode
Copy link

AZMCode commented Aug 10, 2021

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?

@sigmaSd
Copy link
Owner

sigmaSd commented Aug 10, 2021

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

@sigmaSd
Copy link
Owner

sigmaSd commented Aug 10, 2021

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.

@AZMCode
Copy link
Author

AZMCode commented Aug 11, 2021

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!

@sigmaSd
Copy link
Owner

sigmaSd commented Aug 11, 2021

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

@sigmaSd
Copy link
Owner

sigmaSd commented Aug 11, 2021

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

procmacrocrate.mp4

@AZMCode
Copy link
Author

AZMCode commented Aug 16, 2021

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

@sigmaSd
Copy link
Owner

sigmaSd commented Aug 16, 2021

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

@sigmaSd sigmaSd added enhancement New feature or request question Further information is requested labels Aug 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants