Disable block using rustc?


#1

If I want to disable a particular code block/function defn/etc from source, I can do something like this:

#[cfg(feature = "")]
{
    ...
}

Is there a way of disabling code from rustc itself? For example, something like rustc --disable foo.rs:32 (to disable the item starting at foo.rs line 32).

For context: I have a very large number of benchmarks in my crate, and as a result, doing a release build that includes tests (e.g., cargo bench) takes forever - about 4 minutes on my MacBook. I’m toying around with adding a flag to cargo test and cargo bench which only compiles the tests that are passed as an argument, and in order to do that, I need a way to not selectively disable certain pieces of code.


#2

uhm… you are already using #[cfg(feature = "foo")], so you can just do cargo build --features=foo to enable that piece of code


#3

Sorry, I was just using #[cfg(feature = "foo")] as an example. I want to be able to run this on code that I didn’t write and haven’t edited, so it’s not an option for me.


#4

Then you are out of luck. You’ll need to open pull requests.


#5

Ah oh well.


#6

Fork, and do whatever changes you want in a project. Then put a reference to your git repository in Cargo.toml (perhaps behind a feature). You can later track updates by pulling from original repository if needed.

#[cfg(feature = "bench")]
extern crate example_bench as example;
#[cfg(not(feature = "bench"))]
extern crate example;

And dynamically disable getting original example as so.

[dependencies]
example = { version = "version", optional = true }
example_bench = { git = "https://github.com/you/example_bench.git", optional = true }

[features]
bench = ["example_bench"]

[target.'cfg(not(feature = "bench"))'.dependencies]
example = "version"