1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-24 15:19:26 -05:00

fix(fmt): --check was broken for CSS, YAML and HTML (#25848)

`deno fmt --check` was broken for CSS, YAML and HTML files.

Before this PR, formatting any of these file types would return a
string, even though the contract in `cli/tools/fmt.rs` is to only return a
string if the formatting changed. This causes wrong flagging of these files
as being badly formatted even though diffs showed nothing (because
they were in fact formatted properly).

Closes https://github.com/denoland/deno/issues/25840
This commit is contained in:
Bartek Iwańczuk 2024-09-24 14:54:48 +01:00 committed by GitHub
parent 7d7e541724
commit 3242550f5f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 82 additions and 24 deletions

View file

@ -297,12 +297,7 @@ fn format_markdown(
Ok(None)
}
}
"yml" | "yaml" => pretty_yaml::format_text(
text,
&get_resolved_yaml_config(fmt_options),
)
.map(Some)
.map_err(AnyError::from),
"yml" | "yaml" => format_yaml(text, fmt_options),
_ => {
let mut codeblock_config =
get_resolved_typescript_config(fmt_options);
@ -339,13 +334,33 @@ pub fn format_css(
file_text: &str,
fmt_options: &FmtOptionsConfig,
) -> Result<Option<String>, AnyError> {
malva::format_text(
let formatted_str = malva::format_text(
file_text,
malva::detect_syntax(file_path).unwrap_or(malva::Syntax::Css),
&get_resolved_malva_config(fmt_options),
)
.map(Some)
.map_err(AnyError::from)
.map_err(AnyError::from)?;
Ok(if formatted_str == file_text {
None
} else {
Some(formatted_str)
})
}
fn format_yaml(
file_text: &str,
fmt_options: &FmtOptionsConfig,
) -> Result<Option<String>, AnyError> {
let formatted_str =
pretty_yaml::format_text(file_text, &get_resolved_yaml_config(fmt_options))
.map_err(AnyError::from)?;
Ok(if formatted_str == file_text {
None
} else {
Some(formatted_str)
})
}
pub fn format_html(
@ -353,7 +368,7 @@ pub fn format_html(
file_text: &str,
fmt_options: &FmtOptionsConfig,
) -> Result<Option<String>, AnyError> {
markup_fmt::format_text(
let format_result = markup_fmt::format_text(
file_text,
markup_fmt::detect_language(file_path)
.unwrap_or(markup_fmt::Language::Html),
@ -419,7 +434,6 @@ pub fn format_html(
}
},
)
.map(Some)
.map_err(|error| match error {
markup_fmt::FormatError::Syntax(error) => AnyError::from(error),
markup_fmt::FormatError::External(errors) => {
@ -438,6 +452,14 @@ pub fn format_html(
.collect::<String>(),
)
}
});
let formatted_str = format_result?;
Ok(if formatted_str == file_text {
None
} else {
Some(formatted_str)
})
}
@ -469,12 +491,7 @@ pub fn format_file(
Ok(None)
}
}
"yml" | "yaml" => pretty_yaml::format_text(
file_text,
&get_resolved_yaml_config(fmt_options),
)
.map(Some)
.map_err(AnyError::from),
"yml" | "yaml" => format_yaml(file_text, fmt_options),
"ipynb" => dprint_plugin_jupyter::format_text(
file_text,
|file_path: &Path, file_text: String| {

View file

@ -1,5 +1,13 @@
{
"tempDir": true,
"args": "fmt",
"tests": {
"badly_formatted": {
"args": "fmt badly_formatted.css",
"output": "[WILDLINE]badly_formatted.css\nChecked 1 file\n"
},
"well_formatted": {
"args": "fmt --check well_formatted.css",
"output": "Checked 1 file\n"
}
}
}

View file

@ -0,0 +1,3 @@
#app > .btn {
color: #000;
}

View file

@ -1,5 +1,13 @@
{
"tempDir": true,
"args": "fmt --unstable-html",
"tests": {
"badly_formatted": {
"args": "fmt badly_formatted.html",
"output": "[WILDLINE]badly_formatted.html\nChecked 1 file\n"
},
"well_formatted": {
"args": "fmt --check well_formatted.html",
"output": "Checked 1 file\n"
}
}
}

View file

@ -0,0 +1,11 @@
<div class="container">content</div>
<script>
let counter = 0;
</script>
<style>
.container {
padding: 8px;
}
</style>

View file

@ -1,5 +1,13 @@
{
"tempDir": true,
"args": "fmt",
"tests": {
"badly_formatted": {
"args": "fmt badly_formatted.yml",
"output": "[WILDLINE]badly_formatted.yml\nChecked 1 file\n"
},
"well_formatted": {
"args": "fmt --check well_formatted.yml",
"output": "Checked 1 file\n"
}
}
}

View file

@ -0,0 +1,3 @@
- Test
- Test
- Test