This utility is capable of calling compiled Rust custom derive dynamic libraries on arbitrary code.
IMPORTANT: compiler API, used in this utility, is not in stable rustc
build.
Use nightly rustc version to build it.
IMPORTANT: should be built with RUSTFLAGS='--cfg procmacro2_semver_exempt'
as stated here.
Expander launches as CLI tool and accepts json array of expansion tasks from stdin.
Assuming you have expansion_task.json
in current directory,
and compiled procedural macro id_macro
somewhere:
[
{
"macro_body": "struct S {}",
"macro_name": "id_macro",
"libs": [ "path/to/libid_macro.so" ]
}
]
you can launch proc_macro_expander like this:
> cat expansion_task.json | ./proc_macro_expander
[ {"type": "success", "expansion": "struct S { }"} ]
You can launch tests with this command:
> RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo +nightly-2019-04-01 test
Current stable and nighly builds are having incompatible ABIs due to this PR.
That is why nightly-2019-04-01
is used. As soon as changes from this PR make it into the stable branch, tests should be
able to run on current nightly
.