From ad288f5168e81f9c01758c1fdc30816855d73930 Mon Sep 17 00:00:00 2001 From: Josh McKinney Date: Mon, 3 Jul 2023 20:58:25 -0700 Subject: [PATCH] chore(features): enable building with all-features (#286) Before this change, it wasn't possible to build all features and all targets at the same time, which prevents rust-analyzer from working for the whole project. Adds a bacon.toml file to the project, which is used by bacon https://dystroy.org/bacon/ Configures docs.rs to show the feature flags that are necessary to make modules / types / functions available. --- Cargo.toml | 1 + bacon.toml | 91 +++++++++++++++++++++++++++++++++++++++++++ examples/demo/main.rs | 22 +++++------ src/lib.rs | 3 ++ 4 files changed, 105 insertions(+), 12 deletions(-) create mode 100644 bacon.toml diff --git a/Cargo.toml b/Cargo.toml index 82d3fead..d0ed108c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,6 +33,7 @@ serde = ["dep:serde", "bitflags/serde"] all-features = true # see https://doc.rust-lang.org/nightly/rustdoc/scraped-examples.html cargo-args = ["-Zunstable-options", "-Zrustdoc-scrape-examples"] +rustdoc-args = ["--cfg", "docsrs"] [dependencies] bitflags = "2.3" diff --git a/bacon.toml b/bacon.toml new file mode 100644 index 00000000..6ea03cb7 --- /dev/null +++ b/bacon.toml @@ -0,0 +1,91 @@ +# This is a configuration file for the bacon tool +# +# Bacon repository: https://github.com/Canop/bacon +# Complete help on configuration: https://dystroy.org/bacon/config/ +# You can also check bacon's own bacon.toml file +# as an example: https://github.com/Canop/bacon/blob/main/bacon.toml + +default_job = "check" + +[jobs.check] +command = ["cargo", "check", "--all-features", "--color", "always"] +need_stdout = false + +[jobs.check-all] +command = ["cargo", "check", "--all-targets", "--all-features", "--color", "always"] +need_stdout = false + +[jobs.clippy] +command = [ + "cargo", "clippy", + "--all-targets", + "--color", "always", +] +need_stdout = false + +[jobs.test] +command = [ + "cargo", "test", + "--all-features", + "--color", "always", + "--", "--color", "always", # see https://github.com/Canop/bacon/issues/124 +] +need_stdout = true + +[jobs.doc] +command = [ + "cargo", "+nightly", "doc", + "-Zunstable-options", "-Zrustdoc-scrape-examples", + "--all-features", + "--color", "always", + "--no-deps", +] +env.RUSTDOCFLAGS = "--cfg docsrs" +need_stdout = false + +# If the doc compiles, then it opens in your browser and bacon switches +# to the previous job +[jobs.doc-open] +command = [ + "cargo", "+nightly", "doc", + "-Zunstable-options", "-Zrustdoc-scrape-examples", + "--all-features", + "--color", "always", + "--no-deps", + "--open", +] +env.RUSTDOCFLAGS = "--cfg docsrs" +need_stdout = false +on_success = "job:doc" # so that we don't open the browser at each change + +# You can run your application and have the result displayed in bacon, +# *if* it makes sense for this crate. You can run an example the same +# way. Don't forget the `--color always` part or the errors won't be +# properly parsed. +[jobs.run] +command = [ + "cargo", "run", + "--color", "always", + # put launch parameters for your program behind a `--` separator +] +need_stdout = true +allow_warnings = true + +[jobs.check-crossterm] +command = ["cargo", "check", "--color", "always", "--all-targets", "--no-default-features", "--features", "crossterm"] + +[jobs.check-termion] +command = ["cargo", "check", "--color", "always", "--all-targets", "--no-default-features", "--features", "termion"] + +[jobs.check-termwiz] +command = ["cargo", "check", "--color", "always", "--all-targets", "--no-default-features", "--features", "termwiz"] + +# You may define here keybindings that would be specific to +# a project, for example a shortcut to launch a specific job. +# Shortcuts to internal functions (scrolling, toggling, etc.) +# should go in your personal global prefs.toml file instead. +[keybindings] +# alt-m = "job:my-job" +ctrl-c = "job:check-crossterm" +ctrl-t = "job:check-termion" +ctrl-w = "job:check-termwiz" diff --git a/examples/demo/main.rs b/examples/demo/main.rs index 3fee860d..c2f742bb 100644 --- a/examples/demo/main.rs +++ b/examples/demo/main.rs @@ -1,3 +1,7 @@ +use std::{error::Error, time::Duration}; + +use argh::FromArgs; + mod app; #[cfg(feature = "crossterm")] mod crossterm; @@ -8,17 +12,6 @@ mod termwiz; mod ui; -use std::{error::Error, time::Duration}; - -use argh::FromArgs; - -#[cfg(feature = "crossterm")] -use crate::crossterm::run; -#[cfg(feature = "termion")] -use crate::termion::run; -#[cfg(feature = "termwiz")] -use crate::termwiz::run; - /// Demo #[derive(Debug, FromArgs)] struct Cli { @@ -33,6 +26,11 @@ struct Cli { fn main() -> Result<(), Box> { let cli: Cli = argh::from_env(); let tick_rate = Duration::from_millis(cli.tick_rate); - run(tick_rate, cli.enhanced_graphics)?; + #[cfg(feature = "crossterm")] + crate::crossterm::run(tick_rate, cli.enhanced_graphics)?; + #[cfg(feature = "termion")] + crate::termion::run(tick_rate, cli.enhanced_graphics)?; + #[cfg(feature = "termwiz")] + crate::termwiz::run(tick_rate, cli.enhanced_graphics)?; Ok(()) } diff --git a/src/lib.rs b/src/lib.rs index bcb32578..d35602d5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -174,6 +174,9 @@ //! you might need a blank space somewhere, try to pass an additional constraint and don't use the //! corresponding area. +// show the feature flags in the generated documentation +#![cfg_attr(docsrs, feature(doc_auto_cfg))] + pub mod backend; pub mod buffer; pub mod layout;