mirror of
https://github.com/RGBCube/alejandra
synced 2025-07-30 12:07:46 +00:00
feat: rebase Vladimir's pr
This commit is contained in:
parent
d961847646
commit
ac93a779e7
84 changed files with 48 additions and 20 deletions
|
@ -1,4 +1,5 @@
|
|||
use crate::config::Config;
|
||||
use crate::config::Indentation;
|
||||
|
||||
#[derive(PartialEq)]
|
||||
pub(crate) enum Step {
|
||||
|
@ -15,14 +16,13 @@ pub(crate) enum Step {
|
|||
|
||||
#[derive(Clone)]
|
||||
pub(crate) struct BuildCtx {
|
||||
pub _config: Config,
|
||||
pub config: Config,
|
||||
pub force_wide: bool,
|
||||
pub force_wide_success: bool,
|
||||
pub indentation: usize,
|
||||
pub pos_old: crate::position::Position,
|
||||
pub path: String,
|
||||
pub vertical: bool,
|
||||
pub indent: String,
|
||||
}
|
||||
|
||||
pub(crate) fn build(
|
||||
|
@ -100,7 +100,12 @@ fn build_step(
|
|||
add_token(
|
||||
builder,
|
||||
rnix::SyntaxKind::TOKEN_WHITESPACE,
|
||||
&build_ctx.indent.repeat(build_ctx.indentation),
|
||||
&match build_ctx.config.indentation {
|
||||
Indentation::FourSpaces => " ",
|
||||
Indentation::Tabs => "\t",
|
||||
Indentation::TwoSpaces => " ",
|
||||
}
|
||||
.repeat(build_ctx.indentation),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,4 +2,19 @@ use serde::Deserialize;
|
|||
|
||||
/// Configuration used by the formatter
|
||||
#[derive(Clone, Copy, Default, Deserialize)]
|
||||
pub struct Config {}
|
||||
pub struct Config {
|
||||
/// Indentation to use
|
||||
pub indentation: Indentation,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Default, Deserialize)]
|
||||
/// Indentation options
|
||||
pub enum Indentation {
|
||||
/// Four spaces
|
||||
FourSpaces,
|
||||
/// Tabs
|
||||
Tabs,
|
||||
#[default]
|
||||
/// Two spaces
|
||||
TwoSpaces,
|
||||
}
|
||||
|
|
|
@ -32,14 +32,13 @@ pub fn in_memory(
|
|||
}
|
||||
|
||||
let mut build_ctx = crate::builder::BuildCtx {
|
||||
_config: config,
|
||||
config,
|
||||
force_wide: false,
|
||||
force_wide_success: true,
|
||||
indentation: 0,
|
||||
path,
|
||||
pos_old: crate::position::Position::default(),
|
||||
vertical: true,
|
||||
indent,
|
||||
};
|
||||
|
||||
let after = crate::builder::build(&mut build_ctx, ast.node().into())
|
||||
|
|
|
@ -1,32 +1,40 @@
|
|||
use std::collections::HashMap;
|
||||
use std::collections::HashSet;
|
||||
use std::io::Write;
|
||||
|
||||
use alejandra::config::Config;
|
||||
use alejandra::config::Indentation;
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
#[test]
|
||||
fn cases() {
|
||||
let should_update = std::env::var("UPDATE").is_ok();
|
||||
|
||||
let cases: HashSet<String> = std::fs::read_dir("tests/cases")
|
||||
.unwrap()
|
||||
.map(|entry| entry.unwrap().file_name().into_string().unwrap())
|
||||
.collect();
|
||||
let configs = HashMap::from([
|
||||
("default", Config::default()),
|
||||
("indentation-tabs", Config {
|
||||
indentation: Indentation::Tabs,
|
||||
..Default::default()
|
||||
}),
|
||||
]);
|
||||
|
||||
let configs = HashMap::from([("", Config::default())]);
|
||||
for (config_name, config) in configs {
|
||||
let cases: Vec<String> =
|
||||
std::fs::read_dir(format!("tests/cases/{}", config_name))
|
||||
.unwrap()
|
||||
.map(|entry| entry.unwrap().file_name().into_string().unwrap())
|
||||
.collect();
|
||||
|
||||
for case in cases {
|
||||
let path_in = format!("tests/cases/{}/in.nix", case);
|
||||
let content_in = std::fs::read_to_string(path_in.clone()).unwrap();
|
||||
for case in cases {
|
||||
let path_in =
|
||||
format!("tests/cases/{}/{}/in.nix", config_name, case);
|
||||
let content_in = std::fs::read_to_string(&path_in).unwrap();
|
||||
|
||||
for (config_name, config) in &configs {
|
||||
let path_out =
|
||||
format!("tests/cases/{}/out{}.nix", case, config_name);
|
||||
format!("tests/cases/{}/{}/out.nix", config_name, case);
|
||||
let content_got = alejandra::format::in_memory(
|
||||
path_in.clone(),
|
||||
content_in.clone(),
|
||||
config.clone(),
|
||||
config,
|
||||
)
|
||||
.1;
|
||||
|
||||
|
@ -42,8 +50,9 @@ fn cases() {
|
|||
|
||||
assert_eq!(
|
||||
content_out, content_got,
|
||||
"Test case `{case}` failed; see \
|
||||
`src/alejandra/tests/cases/{case}/`"
|
||||
"Test case `{}/{}` failed; see \
|
||||
`src/alejandra/tests/cases/{}/{}/`",
|
||||
config_name, case, config_name, case,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue