js-macros

Crates.io MIT/Apache 2.0 CI Crates.io

Quickly prototype Rust procedural macros using JavaScript or TypeScript!

Have you ever thought "this would be a great use case for a procedural macro," but didn't want to go through all the effort? This crate is the perfect fix for you!

toml [dependencies] js-macros = "0.1"

How to use

Setup is just three easy steps!

  1. Create a js-macros folder at the root of your cargo workspace
  2. Create a new .js or .ts macro file in the folder
  3. Import your new macro and use it anywhere in your project!

Helpful tip: These macros are invoked using node, allowing you to use tools like require()

Examples

Example macros can be found in this repository's js-macros folder, with example usage in the examples folder.

Here's all it takes to write a custom derive(Copy) macro: ```javascript //! JS_MACRO: derive(Copy)

const type = /(?:struct|enum) (.*?)\s/.exec(MACRO_INPUT)[1];

MACROOUTPUT = impl Copy for ${type} {}; `` Usage is as simple as#[derive(jsmacros::Copy, Clone)]`

Debugging Macros

Any errors thrown by your js code will be captured and turned into a procedural macro error at build time. You can take advantage of this by throwing errors to debug your js macros.

Build Time Impact

Each macro expansion takes somewhere in the ballpark of 10ms to 40ms, which can add up quickly.

Typescript compilation is cached and should only affect initial builds.

IDE Support