21 stable releases

1.2.1 Feb 27, 2025
1.1.2 Jan 25, 2025
1.1.1 Feb 4, 2024
1.1.0 Jan 30, 2024
1.0.2 Aug 30, 2020

#20 in Configuration

Download history 209/week @ 2024-11-17 215/week @ 2024-11-24 258/week @ 2024-12-01 407/week @ 2024-12-08 274/week @ 2024-12-15 127/week @ 2024-12-22 118/week @ 2024-12-29 227/week @ 2025-01-05 306/week @ 2025-01-12 352/week @ 2025-01-19 318/week @ 2025-01-26 524/week @ 2025-02-02 329/week @ 2025-02-09 214/week @ 2025-02-16 539/week @ 2025-02-23 238/week @ 2025-03-02

1,377 downloads per month
Used in 6 crates (3 directly)

CC0 license

42KB
730 lines

inline_tweak

Crates.io

Tweak any literal directly from your code, changes to the source appear while running the program.
It works by parsing the file when a change occurs.

The library is minimal with 0 dependencies.
In release mode, the tweaking code is disabled and compiled away.

The derive feature exposes a proc macro to turn all literals from a function body into tweakable values.

inline_tweak is based on this blogpost by tuxedo labs.

Usage

use inline_tweak::*;

fn main() {
    loop {
        println!("{}", tweak!(3.14)); // Try changing the value while the application is running
    }
}

Extra features

derive

The derive feature allows to tweak any number/bool/char literal in a function. It avoids cluttering the code with inline_tweak::tweak! calls.

#[inline_tweak::tweak_fn]
fn main() {
    loop {
       let v = 1.0; // Try changing this value!
       println!("{}", v);
       std::thread::sleep(Duration::from_millis(200)); // or even this value :)
    }
}

Note that it requires syn/quote/proc_macro2 dependencies which makes the crate slower to compile.
Contrary to tweak!, it does not allow tweaking literals in macro calls (like println!), as it cannot reliably replace literals by a function call since macros can have custom syntax.

watch!

inline_tweak provides a watch!() macro that sleeps until the file is modified, akin to a breakpoint:

use inline_tweak::*;

fn main() {
    loop {
        println!("{}", tweak!("hello world"));
        watch!(); // The thread will sleep here until anything in the file changes
    }
}

Expressions

inline_tweak allows to tweak expressions by providing a value later. For example:

tweak!(rng.gen_range(0.0, 1.0))

can then be replaced by a constant value by modifying the file (even while the application is running) to

tweak!(5.0; rng.gen_range(0.0, 1.0)) // will always return 5.0

See the "expression" example in action

Note that this works only for expressions that return a tweakable type. (number/boolean literals)

release_tweak!

The release_tweak! macro acts exactly like tweak! except that it also works in release mode.
It is accessible behind the feature flag "release_tweak" which is not enabled by default.

Installation

Simply add this line to your Cargo.toml

inline_tweak = "1.0.10"

Dependencies

~160KB