diff --git a/src/formatters/biome.rs b/src/formatters/biome.rs index bc2f8e8e..dc7069e6 100644 --- a/src/formatters/biome.rs +++ b/src/formatters/biome.rs @@ -1,22 +1,20 @@ -use super::{execute_command, read_snippet}; +use super::execute_command; #[inline] -pub fn format_using_biome(file_path: &std::path::Path) -> std::io::Result> { +pub fn format_using_biome( + snippet_path: &std::path::Path, +) -> std::io::Result<(bool, Option)> { // TODO: use installed biome instead let mut cmd = std::process::Command::new("npx"); - // Incase the use hasn't installed biome + // Incase the user hasn't installed biome cmd.arg("--yes") .arg("@biomejs/biome") .arg("format") .arg("--write") - .arg(file_path); + .arg(snippet_path); - if execute_command(&mut cmd)? { - return read_snippet(file_path).map(Some); - } - - Ok(None) + execute_command(&mut cmd, snippet_path) } #[cfg(test)] @@ -52,6 +50,7 @@ mod test_biome { let output = format_using_biome(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); @@ -78,6 +77,7 @@ mod test_biome { let output = format_using_biome(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); @@ -107,6 +107,7 @@ number> let output = format_using_biome(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); diff --git a/src/formatters/gleam_format.rs b/src/formatters/gleam_format.rs index 1cf23416..7abc4a87 100644 --- a/src/formatters/gleam_format.rs +++ b/src/formatters/gleam_format.rs @@ -1,17 +1,14 @@ -use super::{execute_command, read_snippet}; +use super::execute_command; #[inline] -pub fn format_using_gleam_format(file_path: &std::path::Path) -> std::io::Result> { +pub fn format_using_gleam_format( + snippet_path: &std::path::Path, +) -> std::io::Result<(bool, Option)> { let mut cmd = std::process::Command::new("gleam"); - // Incase the use hasn't installed biome - cmd.arg("format").arg(file_path); + cmd.arg("format").arg(snippet_path); - if execute_command(&mut cmd)? { - return read_snippet(file_path).map(Some); - } - - Ok(None) + execute_command(&mut cmd, snippet_path) } #[cfg(test)] @@ -34,6 +31,7 @@ mod test_gleam_format { let output = format_using_gleam_format(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); diff --git a/src/formatters/mix_format.rs b/src/formatters/mix_format.rs index 6e2e36a9..11ea1151 100644 --- a/src/formatters/mix_format.rs +++ b/src/formatters/mix_format.rs @@ -1,17 +1,14 @@ -use super::{execute_command, read_snippet}; +use super::execute_command; #[inline] -pub fn format_using_mix_format(file_path: &std::path::Path) -> std::io::Result> { +pub fn format_using_mix_format( + snippet_path: &std::path::Path, +) -> std::io::Result<(bool, Option)> { let mut cmd = std::process::Command::new("mix"); - // Incase the use hasn't installed biome - cmd.arg("format").arg(file_path); + cmd.arg("format").arg(snippet_path); - if execute_command(&mut cmd)? { - return read_snippet(file_path).map(Some); - } - - Ok(None) + execute_command(&mut cmd, snippet_path) } #[cfg(test)] @@ -37,6 +34,7 @@ end let output = format_using_mix_format(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); diff --git a/src/formatters/mod.rs b/src/formatters/mod.rs index 7c57db02..0631e560 100644 --- a/src/formatters/mod.rs +++ b/src/formatters/mod.rs @@ -41,7 +41,26 @@ pub fn read_snippet(file_path: &std::path::Path) -> std::io::Result { } #[inline] -pub fn execute_command(cmd: &mut Command) -> std::io::Result { +fn handle_post_execution( + result: std::io::Result, + snippet_path: &std::path::Path, +) -> std::io::Result<(bool, Option)> { + if let Err(err) = result { + if err.kind() == std::io::ErrorKind::NotFound { + return Ok((true, None)); + } + + return Err(err); + } + + if matches!(result, Ok(true)) { + return read_snippet(snippet_path).map(|code| (false, Some(code))); + } + + Ok((false, None)) +} + +fn spawn_command(cmd: &mut Command) -> std::io::Result { Ok(cmd .stdout(Stdio::null()) .stderr(Stdio::null()) @@ -50,6 +69,14 @@ pub fn execute_command(cmd: &mut Command) -> std::io::Result { .success()) } +#[inline] +pub fn execute_command( + cmd: &mut Command, + snippet_path: &std::path::Path, +) -> std::io::Result<(bool, Option)> { + handle_post_execution(spawn_command(cmd), snippet_path) +} + #[inline] pub fn format_snippet(config: &MdsfConfig, language: &Language, code: &str) -> String { if let Ok(snippet) = setup_snippet(code, language.to_file_ext()) { diff --git a/src/formatters/nimpretty.rs b/src/formatters/nimpretty.rs index 2e9a0f03..c3cfbdcf 100644 --- a/src/formatters/nimpretty.rs +++ b/src/formatters/nimpretty.rs @@ -1,16 +1,14 @@ -use super::{execute_command, read_snippet}; +use super::execute_command; #[inline] -pub fn format_using_nimpretty(file_path: &std::path::Path) -> std::io::Result> { +pub fn format_using_nimpretty( + snippet_path: &std::path::Path, +) -> std::io::Result<(bool, Option)> { let mut cmd = std::process::Command::new("nimpretty"); - cmd.arg(file_path); + cmd.arg(snippet_path); - if execute_command(&mut cmd)? { - return read_snippet(file_path).map(Some); - } - - Ok(None) + execute_command(&mut cmd, snippet_path) } #[cfg(test)] @@ -34,6 +32,7 @@ mod test_nimpretty { let output = format_using_nimpretty(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); diff --git a/src/formatters/prettier.rs b/src/formatters/prettier.rs index 5aa54f63..9c8ee354 100644 --- a/src/formatters/prettier.rs +++ b/src/formatters/prettier.rs @@ -1,27 +1,51 @@ -use super::{execute_command, read_snippet}; +use crate::runners::npx::new_npx_cmd; + +use super::execute_command; #[inline] -pub fn format_using_prettier( +fn set_prettier_args( + cmd: &mut std::process::Command, snippet_path: &std::path::Path, embedded_language_formatting: bool, -) -> std::io::Result> { - // TODO: use installed prettier instead - let mut cmd = std::process::Command::new("npx"); - - // Incase the use hasn't installed prettier - cmd.arg("--yes").arg("prettier"); - +) { if !embedded_language_formatting { cmd.arg("--embedded-language-formatting").arg("off"); } cmd.arg("--write").arg(snippet_path); +} - if execute_command(&mut cmd)? { - return read_snippet(snippet_path).map(Some); +#[inline] +fn invoke_prettier( + mut cmd: std::process::Command, + snippet_path: &std::path::Path, + embedded_language_formatting: bool, +) -> std::io::Result<(bool, Option)> { + set_prettier_args(&mut cmd, snippet_path, embedded_language_formatting); + + execute_command(&mut cmd, snippet_path) +} + +#[inline] +pub fn format_using_prettier( + snippet_path: &std::path::Path, + embedded_language_formatting: bool, +) -> std::io::Result<(bool, Option)> { + let path_result = invoke_prettier( + std::process::Command::new("prettier"), + snippet_path, + embedded_language_formatting, + )?; + + if !path_result.0 { + return Ok(path_result); } - Ok(None) + invoke_prettier( + new_npx_cmd("prettier"), + snippet_path, + embedded_language_formatting, + ) } #[cfg(test)] @@ -57,6 +81,7 @@ mod test_prettier { let output = format_using_prettier(snippet.path(), true) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); @@ -83,6 +108,7 @@ mod test_prettier { let output = format_using_prettier(snippet.path(), true) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); @@ -112,6 +138,7 @@ number> let output = format_using_prettier(snippet.path(), true) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); @@ -138,6 +165,7 @@ this is a paragraph let output = format_using_prettier(snippet.path(), false) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); @@ -164,6 +192,7 @@ number> let output = format_using_prettier(snippet.path(), false) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(input, output); @@ -200,6 +229,7 @@ number> let output = format_using_prettier(snippet.path(), true) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); @@ -222,6 +252,7 @@ p { let output = format_using_prettier(snippet.path(), true) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); @@ -277,6 +308,7 @@ updates: let output = format_using_prettier(snippet.path(), false) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); diff --git a/src/formatters/ruff.rs b/src/formatters/ruff.rs index 830eac43..708df40e 100644 --- a/src/formatters/ruff.rs +++ b/src/formatters/ruff.rs @@ -1,19 +1,16 @@ -use super::{execute_command, read_snippet}; +use super::execute_command; #[inline] -pub fn format_using_ruff(file_path: &std::path::Path) -> std::io::Result> { +pub fn format_using_ruff( + snippet_path: &std::path::Path, +) -> std::io::Result<(bool, Option)> { let mut cmd = std::process::Command::new("ruff"); cmd.arg("format"); cmd.arg("--quiet"); - cmd.arg("--no-cache"); - cmd.arg(file_path); + cmd.arg(snippet_path); - if execute_command(&mut cmd)? { - return read_snippet(file_path).map(Some); - } - - Ok(None) + execute_command(&mut cmd, snippet_path) } #[cfg(test)] @@ -33,6 +30,7 @@ mod test_ruff { let output = format_using_ruff(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); diff --git a/src/formatters/rustfmt.rs b/src/formatters/rustfmt.rs index ce3c4782..ba97644f 100644 --- a/src/formatters/rustfmt.rs +++ b/src/formatters/rustfmt.rs @@ -1,19 +1,17 @@ -use super::{execute_command, read_snippet}; +use super::execute_command; #[inline] -pub fn format_using_rustfmt(file_path: &std::path::Path) -> std::io::Result> { +pub fn format_using_rustfmt( + snippet_path: &std::path::Path, +) -> std::io::Result<(bool, Option)> { let mut cmd = std::process::Command::new("rustfmt"); // Needed for async cmd.arg("--edition").arg("2021"); - cmd.arg(file_path); + cmd.arg(snippet_path); - if execute_command(&mut cmd)? { - return read_snippet(file_path).map(Some); - } - - Ok(None) + execute_command(&mut cmd, snippet_path) } #[cfg(test)] @@ -37,6 +35,7 @@ mod test_rustfmt { let output = format_using_rustfmt(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); diff --git a/src/formatters/shfmt.rs b/src/formatters/shfmt.rs index 2badfc4c..c7aa8782 100644 --- a/src/formatters/shfmt.rs +++ b/src/formatters/shfmt.rs @@ -1,17 +1,12 @@ -use super::{execute_command, read_snippet}; +use super::execute_command; #[inline] -pub fn format_using_shfmt(file_path: &std::path::Path) -> std::io::Result> { +pub fn format_using_shfmt(file_path: &std::path::Path) -> std::io::Result<(bool, Option)> { let mut cmd = std::process::Command::new("shfmt"); - // Incase the use hasn't installed biome cmd.arg("--write").arg(file_path); - if execute_command(&mut cmd)? { - return read_snippet(file_path).map(Some); - } - - Ok(None) + execute_command(&mut cmd, file_path) } #[cfg(test)] @@ -51,6 +46,7 @@ add() { let output = format_using_shfmt(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); @@ -86,6 +82,7 @@ add() { let output = format_using_shfmt(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); diff --git a/src/formatters/stylua.rs b/src/formatters/stylua.rs index 49d370bf..9d15948c 100644 --- a/src/formatters/stylua.rs +++ b/src/formatters/stylua.rs @@ -1,17 +1,15 @@ -use super::{execute_command, read_snippet}; +use super::execute_command; #[inline] -pub fn format_using_stylua(file_path: &std::path::Path) -> std::io::Result> { +pub fn format_using_stylua( + snippet_path: &std::path::Path, +) -> std::io::Result<(bool, Option)> { let mut cmd = std::process::Command::new("stylua"); cmd.arg("--verify"); - cmd.arg(file_path); + cmd.arg(snippet_path); - if execute_command(&mut cmd)? { - return read_snippet(file_path).map(Some); - } - - Ok(None) + execute_command(&mut cmd, snippet_path) } #[cfg(test)] @@ -42,6 +40,7 @@ end let output = format_using_stylua(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); diff --git a/src/formatters/taplo.rs b/src/formatters/taplo.rs index d906079b..998166b4 100644 --- a/src/formatters/taplo.rs +++ b/src/formatters/taplo.rs @@ -1,19 +1,35 @@ -use super::{execute_command, read_snippet}; +use crate::runners::npx::new_npx_cmd; -#[inline] -pub fn format_using_taplo(file_path: &std::path::Path) -> std::io::Result> { - let mut cmd = std::process::Command::new("taplo"); +use super::execute_command; +#[inline] +fn set_taplo_args(cmd: &mut std::process::Command, snippet_path: &std::path::Path) { cmd.arg("fmt"); - cmd.arg(file_path); + cmd.arg(snippet_path); +} - if execute_command(&mut cmd)? { - return read_snippet(file_path).map(Some); - } +#[inline] +fn invoke_taplo( + mut cmd: std::process::Command, + snippet_path: &std::path::Path, +) -> std::io::Result<(bool, Option)> { + set_taplo_args(&mut cmd, snippet_path); - Ok(None) + execute_command(&mut cmd, snippet_path) } +#[inline] +pub fn format_using_taplo( + snippet_path: &std::path::Path, +) -> std::io::Result<(bool, Option)> { + let path_result = invoke_taplo(std::process::Command::new("taplo"), snippet_path)?; + + if !path_result.0 { + return Ok(path_result); + } + + invoke_taplo(new_npx_cmd("@taplo/cli"), snippet_path) +} #[cfg(test)] mod test_taplo { use crate::{ @@ -36,6 +52,7 @@ author = \"Mads Hougesen\" let output = format_using_taplo(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); diff --git a/src/formatters/zigfmt.rs b/src/formatters/zigfmt.rs index 2e2657de..9c862ba5 100644 --- a/src/formatters/zigfmt.rs +++ b/src/formatters/zigfmt.rs @@ -1,18 +1,16 @@ -use super::{execute_command, read_snippet}; +use super::execute_command; #[inline] -pub fn format_using_zigfmt(file_path: &std::path::Path) -> std::io::Result> { +pub fn format_using_zigfmt( + snippet_path: &std::path::Path, +) -> std::io::Result<(bool, Option)> { let mut cmd = std::process::Command::new("zig"); cmd.arg("fmt"); - cmd.arg(file_path); + cmd.arg(snippet_path); - if execute_command(&mut cmd)? { - return read_snippet(file_path).map(Some); - } - - Ok(None) + execute_command(&mut cmd, snippet_path) } #[cfg(test)] @@ -41,6 +39,7 @@ mod test_zigfmt { let output = format_using_zigfmt(snippet.path()) .expect("it to be successful") + .1 .expect("it to be some"); assert_eq!(expected_output, output); diff --git a/src/languages/css.rs b/src/languages/css.rs index 9e85249d..04576565 100644 --- a/src/languages/css.rs +++ b/src/languages/css.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Css { } match self.formatter { - CssFormatter::Prettier => format_using_prettier(snippet_path, true), + CssFormatter::Prettier => format_using_prettier(snippet_path, true).map(|res| res.1), } } } diff --git a/src/languages/elixir.rs b/src/languages/elixir.rs index e81d4bd0..b72fcd7d 100644 --- a/src/languages/elixir.rs +++ b/src/languages/elixir.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Elixir { } match self.formatter { - ElixirFormatter::MixFormat => format_using_mix_format(snippet_path), + ElixirFormatter::MixFormat => format_using_mix_format(snippet_path).map(|res| res.1), } } } diff --git a/src/languages/gleam.rs b/src/languages/gleam.rs index cf6a427a..3e9cca25 100644 --- a/src/languages/gleam.rs +++ b/src/languages/gleam.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Gleam { } match self.formatter { - GleamFormatter::GleamFormat => format_using_gleam_format(snippet_path), + GleamFormatter::GleamFormat => format_using_gleam_format(snippet_path).map(|res| res.1), } } } diff --git a/src/languages/html.rs b/src/languages/html.rs index e2a21293..7166733c 100644 --- a/src/languages/html.rs +++ b/src/languages/html.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Html { } match self.formatter { - HtmlFormatter::Prettier => format_using_prettier(snippet_path, true), + HtmlFormatter::Prettier => format_using_prettier(snippet_path, true).map(|res| res.1), } } } diff --git a/src/languages/javascript.rs b/src/languages/javascript.rs index e11a749a..26cc03c5 100644 --- a/src/languages/javascript.rs +++ b/src/languages/javascript.rs @@ -42,8 +42,10 @@ impl LanguageFormatter for JavaScript { } match self.formatter { - JavaScriptFormatter::Biome => format_using_biome(snippet_path), - JavaScriptFormatter::Prettier => format_using_prettier(snippet_path, true), + JavaScriptFormatter::Biome => format_using_biome(snippet_path).map(|res| res.1), + JavaScriptFormatter::Prettier => { + format_using_prettier(snippet_path, true).map(|res| res.1) + } } } } diff --git a/src/languages/json.rs b/src/languages/json.rs index 542e1a2e..2f0a75e5 100644 --- a/src/languages/json.rs +++ b/src/languages/json.rs @@ -42,8 +42,8 @@ impl LanguageFormatter for Json { } match self.formatter { - JsonFormatter::Biome => format_using_biome(snippet_path), - JsonFormatter::Prettier => format_using_prettier(snippet_path, true), + JsonFormatter::Biome => format_using_biome(snippet_path).map(|res| res.1), + JsonFormatter::Prettier => format_using_prettier(snippet_path, true).map(|res| res.1), } } } diff --git a/src/languages/lua.rs b/src/languages/lua.rs index e801a016..c705ed40 100644 --- a/src/languages/lua.rs +++ b/src/languages/lua.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Lua { } match self.formatter { - LuaFormatter::Stylua => format_using_stylua(snippet_path), + LuaFormatter::Stylua => format_using_stylua(snippet_path).map(|res| res.1), } } } diff --git a/src/languages/markdown.rs b/src/languages/markdown.rs index 1605883e..0a80b74c 100644 --- a/src/languages/markdown.rs +++ b/src/languages/markdown.rs @@ -37,7 +37,9 @@ impl LanguageFormatter for Markdown { } match self.formatter { - MarkdownFormatter::Prettier => format_using_prettier(snippet_path, false), + MarkdownFormatter::Prettier => { + format_using_prettier(snippet_path, false).map(|res| res.1) + } } } } diff --git a/src/languages/mod.rs b/src/languages/mod.rs index f9897b1a..70cf5d56 100644 --- a/src/languages/mod.rs +++ b/src/languages/mod.rs @@ -28,6 +28,20 @@ pub enum Language { // TODO: Kotlin, // TODO: CSharp, // TODO: FSharp, + // TODO: Swift, + // TODO: Svelte, + // TODO: Dart, + // TODO: Julia, + // TODO: Dockerfile, + // TODO: XML, + // TODO: D, + // TODO: Erlang, + // TODO: Elm, + // TODO: Scala, + // TODO: R, + // TODO: GraphQL, + // TODO: Protobuf, + // TODO: SQL, } pub mod css; diff --git a/src/languages/nim.rs b/src/languages/nim.rs index bd9966b0..4957edd3 100644 --- a/src/languages/nim.rs +++ b/src/languages/nim.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Nim { } match self.formatter { - NimFormatter::Nimpretty => format_using_nimpretty(snippet_path), + NimFormatter::Nimpretty => format_using_nimpretty(snippet_path).map(|res| res.1), } } } diff --git a/src/languages/python.rs b/src/languages/python.rs index f64f6d1e..21d9c33c 100644 --- a/src/languages/python.rs +++ b/src/languages/python.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Python { } match self.formatter { - PythonFormatter::Ruff => format_using_ruff(snippet_path), + PythonFormatter::Ruff => format_using_ruff(snippet_path).map(|res| res.1), } } } diff --git a/src/languages/rust.rs b/src/languages/rust.rs index dba8efb4..f0fb1182 100644 --- a/src/languages/rust.rs +++ b/src/languages/rust.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Rust { } match self.formatter { - RustFormatter::RustFmt => format_using_rustfmt(snippet_path), + RustFormatter::RustFmt => format_using_rustfmt(snippet_path).map(|res| res.1), } } } diff --git a/src/languages/shell.rs b/src/languages/shell.rs index 7e3de03f..2301c8ca 100644 --- a/src/languages/shell.rs +++ b/src/languages/shell.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Shell { } match self.formatter { - ShellFormatter::Shfmt => format_using_shfmt(snippet_path), + ShellFormatter::Shfmt => format_using_shfmt(snippet_path).map(|res| res.1), } } } diff --git a/src/languages/toml.rs b/src/languages/toml.rs index 4a3c58a0..c67da44e 100644 --- a/src/languages/toml.rs +++ b/src/languages/toml.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Toml { } match self.formatter { - TomlFormatter::Taplo => format_using_taplo(snippet_path), + TomlFormatter::Taplo => format_using_taplo(snippet_path).map(|res| res.1), } } } diff --git a/src/languages/typescript.rs b/src/languages/typescript.rs index 337c741c..1519429c 100644 --- a/src/languages/typescript.rs +++ b/src/languages/typescript.rs @@ -42,8 +42,10 @@ impl LanguageFormatter for TypeScript { } match self.formatter { - TypeScriptFormatter::Biome => format_using_biome(snippet_path), - TypeScriptFormatter::Prettier => format_using_prettier(snippet_path, true), + TypeScriptFormatter::Biome => format_using_biome(snippet_path).map(|res| res.1), + TypeScriptFormatter::Prettier => { + format_using_prettier(snippet_path, true).map(|res| res.1) + } } } } diff --git a/src/languages/vue.rs b/src/languages/vue.rs index b46e8ccc..8099d11f 100644 --- a/src/languages/vue.rs +++ b/src/languages/vue.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Vue { } match self.formatter { - VueFormatter::Prettier => format_using_prettier(snippet_path, true), + VueFormatter::Prettier => format_using_prettier(snippet_path, true).map(|res| res.1), } } } diff --git a/src/languages/yaml.rs b/src/languages/yaml.rs index 6b3b3f91..eb5f58b8 100644 --- a/src/languages/yaml.rs +++ b/src/languages/yaml.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Yaml { } match self.formatter { - YamlFormatter::Prettier => format_using_prettier(snippet_path, true), + YamlFormatter::Prettier => format_using_prettier(snippet_path, true).map(|res| res.1), } } } diff --git a/src/languages/zig.rs b/src/languages/zig.rs index 95713202..bd15a41c 100644 --- a/src/languages/zig.rs +++ b/src/languages/zig.rs @@ -37,7 +37,7 @@ impl LanguageFormatter for Zig { } match self.formatter { - ZigFormatter::ZigFmt => format_using_zigfmt(snippet_path), + ZigFormatter::ZigFmt => format_using_zigfmt(snippet_path).map(|res| res.1), } } } diff --git a/src/lib.rs b/src/lib.rs index eaa25c09..e4f9603c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,6 +10,7 @@ pub mod config; pub mod error; pub mod formatters; pub mod languages; +mod runners; #[inline] fn write_unchanged_line(path: &std::path::Path, dur: core::time::Duration) { diff --git a/src/runners/mod.rs b/src/runners/mod.rs new file mode 100644 index 00000000..54958b1f --- /dev/null +++ b/src/runners/mod.rs @@ -0,0 +1 @@ +pub mod npx; diff --git a/src/runners/npx.rs b/src/runners/npx.rs new file mode 100644 index 00000000..9b58a3a1 --- /dev/null +++ b/src/runners/npx.rs @@ -0,0 +1,11 @@ +#[inline] +pub fn new_npx_cmd(package_name: &str) -> std::process::Command { + let mut cmd = std::process::Command::new("npx"); + + // Auto install package + cmd.arg("--yes"); + + cmd.arg(package_name); + + cmd +}