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

feat(fmt): stabilize CSS, HTML and YAML formatters (#25753)

This commits stabilizes CSS, HTML and YAML formatters
in `deno fmt`.

It is no longer required to use either of these flags:
- `--unstable-css`
- `--unstable-html`
- `--unstable-yaml`
Or these `unstable` options in the config file:
- `fmt-css`
- `fmt-html`
- `html-yaml`
This commit is contained in:
Bartek Iwańczuk 2024-09-23 17:01:04 +01:00 committed by GitHub
parent be13da5d8d
commit a7ac89935b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 39 additions and 209 deletions

View file

@ -206,10 +206,7 @@ pub struct FmtFlags {
pub prose_wrap: Option<String>, pub prose_wrap: Option<String>,
pub no_semicolons: Option<bool>, pub no_semicolons: Option<bool>,
pub watch: Option<WatchFlags>, pub watch: Option<WatchFlags>,
pub unstable_css: bool,
pub unstable_html: bool,
pub unstable_component: bool, pub unstable_component: bool,
pub unstable_yaml: bool,
} }
impl FmtFlags { impl FmtFlags {
@ -2219,7 +2216,8 @@ Ignore formatting a file by adding an ignore comment at the top of the file:
.help("Enable formatting CSS, SCSS, Sass and Less files") .help("Enable formatting CSS, SCSS, Sass and Less files")
.value_parser(FalseyValueParser::new()) .value_parser(FalseyValueParser::new())
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help_heading(FMT_HEADING), .help_heading(FMT_HEADING)
.hide(true),
) )
.arg( .arg(
Arg::new("unstable-html") Arg::new("unstable-html")
@ -2227,7 +2225,8 @@ Ignore formatting a file by adding an ignore comment at the top of the file:
.help("Enable formatting HTML files") .help("Enable formatting HTML files")
.value_parser(FalseyValueParser::new()) .value_parser(FalseyValueParser::new())
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help_heading(FMT_HEADING), .help_heading(FMT_HEADING)
.hide(true),
) )
.arg( .arg(
Arg::new("unstable-component") Arg::new("unstable-component")
@ -2243,7 +2242,8 @@ Ignore formatting a file by adding an ignore comment at the top of the file:
.help("Enable formatting YAML files") .help("Enable formatting YAML files")
.value_parser(FalseyValueParser::new()) .value_parser(FalseyValueParser::new())
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.help_heading(FMT_HEADING), .help_heading(FMT_HEADING)
.hide(true),
) )
}) })
} }
@ -4374,10 +4374,7 @@ fn fmt_parse(
let single_quote = matches.remove_one::<bool>("single-quote"); let single_quote = matches.remove_one::<bool>("single-quote");
let prose_wrap = matches.remove_one::<String>("prose-wrap"); let prose_wrap = matches.remove_one::<String>("prose-wrap");
let no_semicolons = matches.remove_one::<bool>("no-semicolons"); let no_semicolons = matches.remove_one::<bool>("no-semicolons");
let unstable_css = matches.get_flag("unstable-css");
let unstable_html = matches.get_flag("unstable-html");
let unstable_component = matches.get_flag("unstable-component"); let unstable_component = matches.get_flag("unstable-component");
let unstable_yaml = matches.get_flag("unstable-yaml");
flags.subcommand = DenoSubcommand::Fmt(FmtFlags { flags.subcommand = DenoSubcommand::Fmt(FmtFlags {
check: matches.get_flag("check"), check: matches.get_flag("check"),
@ -4389,10 +4386,7 @@ fn fmt_parse(
prose_wrap, prose_wrap,
no_semicolons, no_semicolons,
watch: watch_arg_parse(matches)?, watch: watch_arg_parse(matches)?,
unstable_css,
unstable_html,
unstable_component, unstable_component,
unstable_yaml,
}); });
Ok(()) Ok(())
} }
@ -6272,10 +6266,7 @@ mod tests {
single_quote: None, single_quote: None,
prose_wrap: None, prose_wrap: None,
no_semicolons: None, no_semicolons: None,
unstable_css: false,
unstable_html: false,
unstable_component: false, unstable_component: false,
unstable_yaml: false,
watch: Default::default(), watch: Default::default(),
}), }),
..Flags::default() ..Flags::default()
@ -6298,10 +6289,7 @@ mod tests {
single_quote: None, single_quote: None,
prose_wrap: None, prose_wrap: None,
no_semicolons: None, no_semicolons: None,
unstable_css: false,
unstable_html: false,
unstable_component: false, unstable_component: false,
unstable_yaml: false,
watch: Default::default(), watch: Default::default(),
}), }),
..Flags::default() ..Flags::default()
@ -6324,10 +6312,7 @@ mod tests {
single_quote: None, single_quote: None,
prose_wrap: None, prose_wrap: None,
no_semicolons: None, no_semicolons: None,
unstable_css: false,
unstable_html: false,
unstable_component: false, unstable_component: false,
unstable_yaml: false,
watch: Default::default(), watch: Default::default(),
}), }),
..Flags::default() ..Flags::default()
@ -6350,10 +6335,7 @@ mod tests {
single_quote: None, single_quote: None,
prose_wrap: None, prose_wrap: None,
no_semicolons: None, no_semicolons: None,
unstable_css: false,
unstable_html: false,
unstable_component: false, unstable_component: false,
unstable_yaml: false,
watch: Some(Default::default()), watch: Some(Default::default()),
}), }),
..Flags::default() ..Flags::default()
@ -6385,10 +6367,7 @@ mod tests {
single_quote: None, single_quote: None,
prose_wrap: None, prose_wrap: None,
no_semicolons: None, no_semicolons: None,
unstable_css: true,
unstable_html: true,
unstable_component: true, unstable_component: true,
unstable_yaml: true,
watch: Some(WatchFlags { watch: Some(WatchFlags {
hmr: false, hmr: false,
no_clear_screen: true, no_clear_screen: true,
@ -6422,10 +6401,7 @@ mod tests {
single_quote: None, single_quote: None,
prose_wrap: None, prose_wrap: None,
no_semicolons: None, no_semicolons: None,
unstable_css: false,
unstable_html: false,
unstable_component: false, unstable_component: false,
unstable_yaml: false,
watch: Some(Default::default()), watch: Some(Default::default()),
}), }),
..Flags::default() ..Flags::default()
@ -6448,10 +6424,7 @@ mod tests {
single_quote: None, single_quote: None,
prose_wrap: None, prose_wrap: None,
no_semicolons: None, no_semicolons: None,
unstable_css: false,
unstable_html: false,
unstable_component: false, unstable_component: false,
unstable_yaml: false,
watch: Default::default(), watch: Default::default(),
}), }),
config_flag: ConfigFlag::Path("deno.jsonc".to_string()), config_flag: ConfigFlag::Path("deno.jsonc".to_string()),
@ -6482,10 +6455,7 @@ mod tests {
single_quote: None, single_quote: None,
prose_wrap: None, prose_wrap: None,
no_semicolons: None, no_semicolons: None,
unstable_css: false,
unstable_html: false,
unstable_component: false, unstable_component: false,
unstable_yaml: false,
watch: Some(Default::default()), watch: Some(Default::default()),
}), }),
config_flag: ConfigFlag::Path("deno.jsonc".to_string()), config_flag: ConfigFlag::Path("deno.jsonc".to_string()),
@ -6521,10 +6491,7 @@ mod tests {
single_quote: Some(true), single_quote: Some(true),
prose_wrap: Some("never".to_string()), prose_wrap: Some("never".to_string()),
no_semicolons: Some(true), no_semicolons: Some(true),
unstable_css: false,
unstable_html: false,
unstable_component: false, unstable_component: false,
unstable_yaml: false,
watch: Default::default(), watch: Default::default(),
}), }),
..Flags::default() ..Flags::default()
@ -6554,10 +6521,7 @@ mod tests {
single_quote: Some(false), single_quote: Some(false),
prose_wrap: None, prose_wrap: None,
no_semicolons: Some(false), no_semicolons: Some(false),
unstable_css: false,
unstable_html: false,
unstable_component: false, unstable_component: false,
unstable_yaml: false,
watch: Default::default(), watch: Default::default(),
}), }),
..Flags::default() ..Flags::default()

View file

@ -281,10 +281,7 @@ impl BenchOptions {
#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)] #[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
pub struct UnstableFmtOptions { pub struct UnstableFmtOptions {
pub css: bool,
pub html: bool,
pub component: bool, pub component: bool,
pub yaml: bool,
} }
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
@ -317,10 +314,7 @@ impl FmtOptions {
Self { Self {
options: resolve_fmt_options(fmt_flags, fmt_config.options), options: resolve_fmt_options(fmt_flags, fmt_config.options),
unstable: UnstableFmtOptions { unstable: UnstableFmtOptions {
css: unstable.css || fmt_flags.unstable_css,
html: unstable.html || fmt_flags.unstable_html,
component: unstable.component || fmt_flags.unstable_component, component: unstable.component || fmt_flags.unstable_component,
yaml: unstable.yaml || fmt_flags.unstable_yaml,
}, },
files: fmt_config.files, files: fmt_config.files,
} }
@ -1301,10 +1295,7 @@ impl CliOptions {
pub fn resolve_config_unstable_fmt_options(&self) -> UnstableFmtOptions { pub fn resolve_config_unstable_fmt_options(&self) -> UnstableFmtOptions {
let workspace = self.workspace(); let workspace = self.workspace();
UnstableFmtOptions { UnstableFmtOptions {
css: workspace.has_unstable("fmt-css"),
html: workspace.has_unstable("fmt-html"),
component: workspace.has_unstable("fmt-component"), component: workspace.has_unstable("fmt-component"),
yaml: workspace.has_unstable("fmt-yaml"),
} }
} }
@ -1609,10 +1600,7 @@ impl CliOptions {
"sloppy-imports", "sloppy-imports",
"byonm", "byonm",
"bare-node-builtins", "bare-node-builtins",
"fmt-css",
"fmt-html",
"fmt-component", "fmt-component",
"fmt-yaml",
]); ]);
// add more unstable flags to the same vector holding granular flags // add more unstable flags to the same vector holding granular flags
all_valid_unstable_flags.append(&mut another_unstable_flags); all_valid_unstable_flags.append(&mut another_unstable_flags);

View file

@ -1385,18 +1385,9 @@ impl Inner {
.data_for_specifier(&specifier) .data_for_specifier(&specifier)
.map(|d| &d.member_dir.workspace); .map(|d| &d.member_dir.workspace);
let unstable_options = UnstableFmtOptions { let unstable_options = UnstableFmtOptions {
css: maybe_workspace
.map(|w| w.has_unstable("fmt-css"))
.unwrap_or(false),
html: maybe_workspace
.map(|w| w.has_unstable("fmt-html"))
.unwrap_or(false),
component: maybe_workspace component: maybe_workspace
.map(|w| w.has_unstable("fmt-component")) .map(|w| w.has_unstable("fmt-component"))
.unwrap_or(false), .unwrap_or(false),
yaml: maybe_workspace
.map(|w| w.has_unstable("fmt-yaml"))
.unwrap_or(false),
}; };
let document = document.clone(); let document = document.clone();
move || { move || {

View file

@ -285,19 +285,9 @@ fn format_markdown(
dprint_plugin_json::format_text(&fake_filename, text, &json_config) dprint_plugin_json::format_text(&fake_filename, text, &json_config)
} }
"css" | "scss" | "sass" | "less" => { "css" | "scss" | "sass" | "less" => {
if unstable_options.css { format_css(&fake_filename, text, fmt_options)
format_css(&fake_filename, text, fmt_options)
} else {
Ok(None)
}
}
"html" => {
if unstable_options.html {
format_html(&fake_filename, text, fmt_options)
} else {
Ok(None)
}
} }
"html" => format_html(&fake_filename, text, fmt_options),
"svelte" | "vue" | "astro" => { "svelte" | "vue" | "astro" => {
if unstable_options.component { if unstable_options.component {
format_html(&fake_filename, text, fmt_options) format_html(&fake_filename, text, fmt_options)
@ -305,18 +295,12 @@ fn format_markdown(
Ok(None) Ok(None)
} }
} }
"yml" | "yaml" => { "yml" | "yaml" => pretty_yaml::format_text(
if unstable_options.yaml { text,
pretty_yaml::format_text( &get_resolved_yaml_config(fmt_options),
text, )
&get_resolved_yaml_config(fmt_options), .map(Some)
) .map_err(AnyError::from),
.map(Some)
.map_err(AnyError::from)
} else {
Ok(None)
}
}
_ => { _ => {
let mut codeblock_config = let mut codeblock_config =
get_resolved_typescript_config(fmt_options); get_resolved_typescript_config(fmt_options);
@ -473,19 +457,9 @@ pub fn format_file(
} }
"json" | "jsonc" => format_json(file_path, file_text, fmt_options), "json" | "jsonc" => format_json(file_path, file_text, fmt_options),
"css" | "scss" | "sass" | "less" => { "css" | "scss" | "sass" | "less" => {
if unstable_options.css { format_css(file_path, file_text, fmt_options)
format_css(file_path, file_text, fmt_options)
} else {
Ok(None)
}
}
"html" => {
if unstable_options.html {
format_html(file_path, file_text, fmt_options)
} else {
Ok(None)
}
} }
"html" => format_html(file_path, file_text, fmt_options),
"svelte" | "vue" | "astro" => { "svelte" | "vue" | "astro" => {
if unstable_options.component { if unstable_options.component {
format_html(file_path, file_text, fmt_options) format_html(file_path, file_text, fmt_options)
@ -493,18 +467,12 @@ pub fn format_file(
Ok(None) Ok(None)
} }
} }
"yml" | "yaml" => { "yml" | "yaml" => pretty_yaml::format_text(
if unstable_options.yaml { file_text,
pretty_yaml::format_text( &get_resolved_yaml_config(fmt_options),
file_text, )
&get_resolved_yaml_config(fmt_options), .map(Some)
) .map_err(AnyError::from),
.map(Some)
.map_err(AnyError::from)
} else {
Ok(None)
}
}
"ipynb" => dprint_plugin_jupyter::format_text( "ipynb" => dprint_plugin_jupyter::format_text(
file_text, file_text,
|file_path: &Path, file_text: String| { |file_path: &Path, file_text: String| {

View file

@ -10597,13 +10597,6 @@ fn lsp_format_markdown() {
fn lsp_format_html() { fn lsp_format_html() {
let context = TestContextBuilder::new().use_temp_cwd().build(); let context = TestContextBuilder::new().use_temp_cwd().build();
let temp_dir = context.temp_dir(); let temp_dir = context.temp_dir();
temp_dir.write(
"deno.json",
json!({
"unstable": ["fmt-html"],
})
.to_string(),
);
let html_file = let html_file =
source_file(temp_dir.path().join("file.html"), " <html></html>"); source_file(temp_dir.path().join("file.html"), " <html></html>");
let mut client = context.new_lsp_command().build(); let mut client = context.new_lsp_command().build();
@ -10644,13 +10637,6 @@ fn lsp_format_html() {
fn lsp_format_css() { fn lsp_format_css() {
let context = TestContextBuilder::new().use_temp_cwd().build(); let context = TestContextBuilder::new().use_temp_cwd().build();
let temp_dir = context.temp_dir(); let temp_dir = context.temp_dir();
temp_dir.write(
"deno.json",
json!({
"unstable": ["fmt-css"],
})
.to_string(),
);
let css_file = source_file(temp_dir.path().join("file.css"), " foo {}"); let css_file = source_file(temp_dir.path().join("file.css"), " foo {}");
let mut client = context.new_lsp_command().build(); let mut client = context.new_lsp_command().build();
client.initialize_default(); client.initialize_default();
@ -10690,13 +10676,6 @@ fn lsp_format_css() {
fn lsp_format_yaml() { fn lsp_format_yaml() {
let context = TestContextBuilder::new().use_temp_cwd().build(); let context = TestContextBuilder::new().use_temp_cwd().build();
let temp_dir = context.temp_dir(); let temp_dir = context.temp_dir();
temp_dir.write(
"deno.json",
json!({
"unstable": ["fmt-yaml"],
})
.to_string(),
);
let yaml_file = source_file(temp_dir.path().join("file.yaml"), " foo: 1"); let yaml_file = source_file(temp_dir.path().join("file.yaml"), " foo: 1");
let mut client = context.new_lsp_command().build(); let mut client = context.new_lsp_command().build();
client.initialize_default(); client.initialize_default();

View file

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

View file

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

View file

@ -6,14 +6,14 @@
"output": "Checked 1 file\n" "output": "Checked 1 file\n"
}, },
"flag": { "flag": {
"args": "fmt --unstable-css --unstable-component", "args": "fmt --unstable-component",
"output": "[WILDLINE]badly_formatted.svelte\nChecked 1 file\n" "output": "[WILDLINE]badly_formatted.svelte\nChecked 1 file\n"
}, },
"config_file": { "config_file": {
"steps": [{ "steps": [{
"args": [ "args": [
"eval", "eval",
"Deno.writeTextFile('deno.json', '{\\n \"unstable\": [\"fmt-css\", \"fmt-component\"]\\n}\\n')" "Deno.writeTextFile('deno.json', '{\\n \"unstable\": [\"fmt-component\"]\\n}\\n')"
], ],
"output": "[WILDCARD]" "output": "[WILDCARD]"
}, { }, {

View file

@ -1,25 +0,0 @@
{
"tempDir": true,
"tests": {
"nothing": {
"args": "fmt",
"output": "Checked 1 file\n"
},
"flag": {
"args": "fmt --unstable-css",
"output": "[WILDLINE]badly_formatted.css\nChecked 1 file\n"
},
"config_file": {
"steps": [{
"args": [
"eval",
"Deno.writeTextFile('deno.json', '{\\n \"unstable\": [\"fmt-css\"]\\n}\\n')"
],
"output": "[WILDCARD]"
}, {
"args": "fmt",
"output": "[WILDLINE]badly_formatted.css\nChecked 2 files\n"
}]
}
}
}

View file

@ -1,25 +0,0 @@
{
"tempDir": true,
"tests": {
"nothing": {
"args": "fmt",
"output": "Checked 1 file\n"
},
"flag": {
"args": "fmt --unstable-css --unstable-html",
"output": "[WILDLINE]badly_formatted.html\nChecked 1 file\n"
},
"config_file": {
"steps": [{
"args": [
"eval",
"Deno.writeTextFile('deno.json', '{\\n \"unstable\": [\"fmt-css\", \"fmt-html\"]\\n}\\n')"
],
"output": "[WILDCARD]"
}, {
"args": "fmt",
"output": "[WILDLINE]badly_formatted.html\nChecked 2 files\n"
}]
}
}
}

View file

@ -1,25 +0,0 @@
{
"tempDir": true,
"tests": {
"nothing": {
"args": "fmt",
"output": "Checked 1 file\n"
},
"flag": {
"args": "fmt --unstable-yaml",
"output": "[WILDLINE]badly_formatted.yml\nChecked 1 file\n"
},
"config_file": {
"steps": [{
"args": [
"eval",
"Deno.writeTextFile('deno.json', '{\\n \"unstable\": [\"fmt-yaml\"]\\n}\\n')"
],
"output": "[WILDCARD]"
}, {
"args": "fmt",
"output": "[WILDLINE]badly_formatted.yml\nChecked 2 files\n"
}]
}
}
}

View file

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