interpolate_idents

Crates.iointerpolate_idents
lib.rsinterpolate_idents
version0.2.9
sourcesrc
created_at2015-03-22 14:51:44.561557
updated_at2018-11-08 08:22:56.132245
descriptionUseable macro identifier concatenation plugin
homepage
repositoryhttps://github.com/SkylerLipthay/interpolate_idents
max_upload_size
id1634
size13,896
gnzlbg (gnzlbg)

documentation

README

interpolate_idents

Deprecation warning

Because of the introduction of stable procedural macro support in Rust 1.30.0, it is now possible to accomplish what this crate set out to accomplish using entirely stable code. Please try @dtolnay's paste crate to see if it can fulfill all of your current use cases. paste can be used in stable production environments and is not nearly as prone to breakage between Rust versions.

Ideally, we will deprecate interpolate_idents as soon as we are confident that no users of this crate are left behind in the transition to paste. Please comment on issue #45 or open a new issue with any concerns and personal experiences. Thank you!

Summary

Travis-CI Status

Warning! This crate uses a procedural macro (known today as a compiler plugin) and can only be used with Rust's nightly distribution.

You cannot currently define a struct, enum, function, or field using concat_idents! due to the way macros are parsed by the Rust compiler. This will hopefully change in the future, but interpolate_idents! sloppily solves a side effect of the currently lacking macro system today.

#![feature(plugin)]
#![plugin(interpolate_idents)]

macro_rules! make_fn {
    ($x:ident) => ( interpolate_idents! {
        fn [my_ $x _fn]() -> u32 { 1000 }
    } )
}

Now make_fn!(favorite); is equivalent to fn my_favorite_fn() -> u32 { 1000 }.

In short, surround multiple space-separated identifiers (or macro identifer variables) with square brackets to concatenate the identifiers. Check tests/tests.rs for another example.

This plugin was quickly hacked together. It is likely not performant and most certainly not readable.

Crate upkeep

I'm not actively developing on nightly, so I haven't been using this plugin too often. I understand that libsyntax is a fickle beast, so please file an issue or PR if interpolate_idents fails to compile on the latest nightly!

Commit count: 84

cargo fmt