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::Config;
|
||||||
|
use crate::config::Indentation;
|
||||||
|
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
pub(crate) enum Step {
|
pub(crate) enum Step {
|
||||||
|
@ -15,14 +16,13 @@ pub(crate) enum Step {
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub(crate) struct BuildCtx {
|
pub(crate) struct BuildCtx {
|
||||||
pub _config: Config,
|
pub config: Config,
|
||||||
pub force_wide: bool,
|
pub force_wide: bool,
|
||||||
pub force_wide_success: bool,
|
pub force_wide_success: bool,
|
||||||
pub indentation: usize,
|
pub indentation: usize,
|
||||||
pub pos_old: crate::position::Position,
|
pub pos_old: crate::position::Position,
|
||||||
pub path: String,
|
pub path: String,
|
||||||
pub vertical: bool,
|
pub vertical: bool,
|
||||||
pub indent: String,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn build(
|
pub(crate) fn build(
|
||||||
|
@ -100,7 +100,12 @@ fn build_step(
|
||||||
add_token(
|
add_token(
|
||||||
builder,
|
builder,
|
||||||
rnix::SyntaxKind::TOKEN_WHITESPACE,
|
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
|
/// Configuration used by the formatter
|
||||||
#[derive(Clone, Copy, Default, Deserialize)]
|
#[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 {
|
let mut build_ctx = crate::builder::BuildCtx {
|
||||||
_config: config,
|
config,
|
||||||
force_wide: false,
|
force_wide: false,
|
||||||
force_wide_success: true,
|
force_wide_success: true,
|
||||||
indentation: 0,
|
indentation: 0,
|
||||||
path,
|
path,
|
||||||
pos_old: crate::position::Position::default(),
|
pos_old: crate::position::Position::default(),
|
||||||
vertical: true,
|
vertical: true,
|
||||||
indent,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let after = crate::builder::build(&mut build_ctx, ast.node().into())
|
let after = crate::builder::build(&mut build_ctx, ast.node().into())
|
||||||
|
|
|
@ -1,32 +1,40 @@
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::collections::HashSet;
|
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
||||||
use alejandra::config::Config;
|
use alejandra::config::Config;
|
||||||
|
use alejandra::config::Indentation;
|
||||||
use pretty_assertions::assert_eq;
|
use pretty_assertions::assert_eq;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn cases() {
|
fn cases() {
|
||||||
let should_update = std::env::var("UPDATE").is_ok();
|
let should_update = std::env::var("UPDATE").is_ok();
|
||||||
|
|
||||||
let cases: HashSet<String> = std::fs::read_dir("tests/cases")
|
let configs = HashMap::from([
|
||||||
.unwrap()
|
("default", Config::default()),
|
||||||
.map(|entry| entry.unwrap().file_name().into_string().unwrap())
|
("indentation-tabs", Config {
|
||||||
.collect();
|
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 {
|
for case in cases {
|
||||||
let path_in = format!("tests/cases/{}/in.nix", case);
|
let path_in =
|
||||||
let content_in = std::fs::read_to_string(path_in.clone()).unwrap();
|
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 =
|
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(
|
let content_got = alejandra::format::in_memory(
|
||||||
path_in.clone(),
|
path_in.clone(),
|
||||||
content_in.clone(),
|
content_in.clone(),
|
||||||
config.clone(),
|
config,
|
||||||
)
|
)
|
||||||
.1;
|
.1;
|
||||||
|
|
||||||
|
@ -42,8 +50,9 @@ fn cases() {
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
content_out, content_got,
|
content_out, content_got,
|
||||||
"Test case `{case}` failed; see \
|
"Test case `{}/{}` failed; see \
|
||||||
`src/alejandra/tests/cases/{case}/`"
|
`src/alejandra/tests/cases/{}/{}/`",
|
||||||
|
config_name, case, config_name, case,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue