mirror of
https://github.com/astral-sh/ruff.git
synced 2025-11-20 04:29:47 +00:00
<!-- Thank you for contributing to Ruff! To help us out with reviewing, please consider the following: - Does this pull request include a summary of the change? (See below.) - Does this pull request include a descriptive title? - Does this pull request include references to any relevant issues? --> ## Summary Fixes #8334. `Display` has been implemented for `ruff_workspace::Settings`, which gives a much nicer and more readable output to `--show-settings`. Internally, a `display_settings` utility macro has been implemented to reduce the boilerplate of the display code. ### Work to be done - [x] A lot of formatting for `Vec<_>` and `HashSet<_>` types have been stubbed out, using `Debug` as a fallback. There should be a way to add generic formatting support for these types as a modifier in `display_settings`. - [x] Several complex types were also stubbed out and need proper `Display` implementations rather than falling back on `Debug`. - [x] An open question needs to be answered: how important is it that the output be valid TOML? Some types in settings, such as a hash-map from a glob pattern to a multi-variant enum, will be hard to rework into valid _and_ readable TOML. - [x] Tests need to be implemented. ## Test Plan Tests consist of a snapshot test for the default `--show-settings` output and a doctest for `display_settings!`.
29 lines
1 KiB
Rust
29 lines
1 KiB
Rust
use insta_cmd::{assert_cmd_snapshot, get_cargo_bin};
|
|
use std::path::Path;
|
|
use std::process::Command;
|
|
|
|
const BIN_NAME: &str = "ruff";
|
|
|
|
#[cfg(not(target_os = "windows"))]
|
|
const TEST_FILTERS: &[(&str, &str)] = &[
|
|
("\"[^\\*\"]*/pyproject.toml", "\"[BASEPATH]/pyproject.toml"),
|
|
("\".*/crates", "\"[BASEPATH]/crates"),
|
|
("\".*/\\.ruff_cache", "\"[BASEPATH]/.ruff_cache"),
|
|
("\".*/ruff\"", "\"[BASEPATH]\""),
|
|
];
|
|
#[cfg(target_os = "windows")]
|
|
const TEST_FILTERS: &[(&str, &str)] = &[
|
|
(r#""[^\*"]*\\pyproject.toml"#, "\"[BASEPATH]/pyproject.toml"),
|
|
(r#"".*\\crates"#, "\"[BASEPATH]/crates"),
|
|
(r#"".*\\\.ruff_cache"#, "\"[BASEPATH]/.ruff_cache"),
|
|
(r#"".*\\ruff""#, "\"[BASEPATH]\""),
|
|
(r#"\\+(\w\w|\s|")"#, "/$1"),
|
|
];
|
|
|
|
#[test]
|
|
fn display_default_settings() {
|
|
insta::with_settings!({ filters => TEST_FILTERS.to_vec() }, {
|
|
assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME))
|
|
.args(["check", "--show-settings", "unformatted.py"]).current_dir(Path::new("./resources/test/fixtures")));
|
|
});
|
|
}
|