From c7f7e4d98b30a5308d243ecd4cdf3d38b66d18f9 Mon Sep 17 00:00:00 2001 From: scarf Date: Fri, 24 Nov 2023 11:48:45 +0900 Subject: [PATCH 1/8] refactor: destructure range --- src/text_changes.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/text_changes.rs b/src/text_changes.rs index e9ebedd..86279fb 100644 --- a/src/text_changes.rs +++ b/src/text_changes.rs @@ -32,27 +32,27 @@ pub fn apply_text_changes(source: &str, mut changes: Vec) -> String let mut last_index = 0; let mut final_text = String::new(); - for (i, change) in changes.iter().enumerate() { - if change.range.start > change.range.end { + for (i, TextChange { range, new_text, .. }) in changes.iter().enumerate() { + if range.start > range.end { panic!( "Text change had start index {} greater than end index {}.\n\n{:?}", - change.range.start, - change.range.end, + range.start, + range.end, &changes[0..i + 1], ) } - if change.range.start < last_index { + if range.start < last_index { panic!( "Text changes were overlapping. Past index was {}, but new change had index {}.\n\n{:?}", last_index, - change.range.start, + range.start, &changes[0..i + 1] ); - } else if change.range.start > last_index && last_index < source.len() { - final_text.push_str(&source[last_index..std::cmp::min(source.len(), change.range.start)]); + } else if range.start > last_index && last_index < source.len() { + final_text.push_str(&source[last_index..std::cmp::min(source.len(), range.start)]); } - final_text.push_str(&change.new_text); - last_index = change.range.end; + final_text.push_str(&new_text); + last_index = range.end; } if last_index < source.len() { From d14cfe6232af6a4a41108f1591734cda4f3e3ac7 Mon Sep 17 00:00:00 2001 From: scarf Date: Fri, 24 Nov 2023 12:10:40 +0900 Subject: [PATCH 2/8] style: clippy --- src/text_changes.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/text_changes.rs b/src/text_changes.rs index 86279fb..0579aae 100644 --- a/src/text_changes.rs +++ b/src/text_changes.rs @@ -51,7 +51,7 @@ pub fn apply_text_changes(source: &str, mut changes: Vec) -> String } else if range.start > last_index && last_index < source.len() { final_text.push_str(&source[last_index..std::cmp::min(source.len(), range.start)]); } - final_text.push_str(&new_text); + final_text.push_str(new_text); last_index = range.end; } From f2cc7c8844b77b4e3e7b71fea33bdc19d5f0d39f Mon Sep 17 00:00:00 2001 From: scarf Date: Fri, 24 Nov 2023 16:16:14 +0900 Subject: [PATCH 3/8] refactor: extract options --- src/format_text.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/format_text.rs b/src/format_text.rs index 5d16cce..d6284f2 100644 --- a/src/format_text.rs +++ b/src/format_text.rs @@ -8,22 +8,22 @@ use anyhow::Result; use jsonc_parser::CollectOptions; use jsonc_parser::ParseOptions; +const COLLECT_OPTIONS: CollectOptions = CollectOptions { + comments: false, + tokens: false, +}; + +const PARSE_OPTIONS: ParseOptions = ParseOptions { + allow_comments: true, + allow_loose_object_property_names: true, + allow_trailing_commas: true, +}; + pub fn format_text( input_text: &str, format_with_host: impl FnMut(&Path, String) -> Result>, ) -> Result> { - let parse_result = jsonc_parser::parse_to_ast( - input_text, - &CollectOptions { - comments: false, - tokens: false, - }, - &ParseOptions { - allow_comments: true, - allow_loose_object_property_names: true, - allow_trailing_commas: true, - }, - )?; + let parse_result = jsonc_parser::parse_to_ast(input_text, &COLLECT_OPTIONS, &PARSE_OPTIONS)?; let Some(root_value) = parse_result.value else { return Ok(None); }; From d4bc4d71ed49160223102681a4a5f507086c0374 Mon Sep 17 00:00:00 2001 From: scarf Date: Fri, 24 Nov 2023 17:24:57 +0900 Subject: [PATCH 4/8] refactor: collect `text_changes` immutably --- src/format_text.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/format_text.rs b/src/format_text.rs index d6284f2..6397c48 100644 --- a/src/format_text.rs +++ b/src/format_text.rs @@ -39,13 +39,13 @@ fn format_root( let root_obj = root_value.as_object()?; let maybe_default_language = get_metadata_language(root_obj); let cells = root_value.as_object()?.get_array("cells")?; - let mut text_changes = Vec::new(); - for element in &cells.elements { - let maybe_text_change = get_cell_text_change(input_text, element, maybe_default_language, &mut format_with_host); - if let Some(text_change) = maybe_text_change { - text_changes.push(text_change); - } - } + + let text_changes: Vec = cells + .elements + .iter() + .filter_map(|element| get_cell_text_change(input_text, element, maybe_default_language, &mut format_with_host)) + .collect(); + if text_changes.is_empty() { None } else { @@ -105,6 +105,7 @@ fn analyze_code_block<'a>(cell: &jsonc_parser::ast::Object<'a>, file_text: &'a s } strings.push(&string_lit.value); } + let mut text = String::with_capacity(strings.iter().map(|s| s.len()).sum::()); for string in strings { text.push_str(string); From ace848ee553df10aeb9b7308d29832678ddac79f Mon Sep 17 00:00:00 2001 From: scarf Date: Fri, 24 Nov 2023 17:35:57 +0900 Subject: [PATCH 5/8] refactor: inline format arguments --- src/format_text.rs | 4 ++-- src/text_changes.rs | 16 ++++++++-------- src/wasm_plugin.rs | 5 +---- tests/test.rs | 6 +++--- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/format_text.rs b/src/format_text.rs index 6397c48..6d4ba66 100644 --- a/src/format_text.rs +++ b/src/format_text.rs @@ -138,7 +138,7 @@ fn build_json_text(formatted_text: &str, indent_text: &str) -> String { if is_last_line { Cow::Borrowed(line) } else { - Cow::Owned(format!("{}\n", line)) + Cow::Owned(format!("{line}\n")) } .as_ref(), ) @@ -184,7 +184,7 @@ fn language_to_path(language: &str) -> Option { "yaml" => Some("yml"), _ => None, }; - ext.map(|ext| PathBuf::from(format!("code_block.{}", ext))) + ext.map(|ext| PathBuf::from(format!("code_block.{ext}"))) } fn get_indent_text(file_text: &str, start_pos: usize) -> &str { diff --git a/src/text_changes.rs b/src/text_changes.rs index 0579aae..3fd9bd8 100644 --- a/src/text_changes.rs +++ b/src/text_changes.rs @@ -35,18 +35,18 @@ pub fn apply_text_changes(source: &str, mut changes: Vec) -> String for (i, TextChange { range, new_text, .. }) in changes.iter().enumerate() { if range.start > range.end { panic!( - "Text change had start index {} greater than end index {}.\n\n{:?}", - range.start, - range.end, - &changes[0..i + 1], + "Text change had start index {start} greater than end index {end}.\n\n{changes:?}", + start = range.start, + end = range.end, + changes = &changes[0..i + 1], ) } if range.start < last_index { panic!( - "Text changes were overlapping. Past index was {}, but new change had index {}.\n\n{:?}", - last_index, - range.start, - &changes[0..i + 1] + "Text changes were overlapping. Past index was {past}, but new change had index {new}.\n\n{changes:?}", + past = last_index, + new = range.start, + changes = &changes[0..i + 1] ); } else if range.start > last_index && last_index < source.len() { final_text.push_str(&source[last_index..std::cmp::min(source.len(), range.start)]); diff --git a/src/wasm_plugin.rs b/src/wasm_plugin.rs index 450bedb..912bafa 100644 --- a/src/wasm_plugin.rs +++ b/src/wasm_plugin.rs @@ -28,10 +28,7 @@ impl SyncPluginHandler for JupyterPluginHandler { version: version.clone(), config_key: "jupyter".to_string(), help_url: "https://dprint.dev/plugins/jupyter".to_string(), - config_schema_url: format!( - "https://plugins.dprint.dev/dprint/dprint-plugin-jupyter/{}/schema.json", - version - ), + config_schema_url: format!("https://plugins.dprint.dev/dprint/dprint-plugin-jupyter/{version}/schema.json"), update_url: Some("https://plugins.dprint.dev/dprint/dprint-plugin-jupyter/latest.json".to_string()), }, file_matching: FileMatchingInfo { diff --git a/tests/test.rs b/tests/test.rs index b04524b..b81fa7c 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -31,19 +31,19 @@ fn test_specs() { |path, text| { if path.ends_with("code_block.py") { if !text.ends_with("_python") { - Ok(Some(format!("{}_python", text))) + Ok(Some(format!("{text}_python"))) } else { Ok(None) } } else if path.ends_with("code_block.md") { if !text.ends_with("_markdown") { - Ok(Some(format!("{}_markdown", text))) + Ok(Some(format!("{text}_markdown"))) } else { Ok(None) } } else if path.ends_with("code_block.ts") { if !text.ends_with("_typescript") { - Ok(Some(format!("{}_typescript", text))) + Ok(Some(format!("{text}_typescript"))) } else { Ok(None) } From 2ba9324f7bc008c7f37c32fedca0314a1c76f45f Mon Sep 17 00:00:00 2001 From: scarf Date: Sat, 25 Nov 2023 15:48:28 +0900 Subject: [PATCH 6/8] Revert "refactor: inline format arguments" This reverts commit ace848ee553df10aeb9b7308d29832678ddac79f. --- src/format_text.rs | 4 ++-- src/text_changes.rs | 16 ++++++++-------- src/wasm_plugin.rs | 5 ++++- tests/test.rs | 6 +++--- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/format_text.rs b/src/format_text.rs index 6d4ba66..6397c48 100644 --- a/src/format_text.rs +++ b/src/format_text.rs @@ -138,7 +138,7 @@ fn build_json_text(formatted_text: &str, indent_text: &str) -> String { if is_last_line { Cow::Borrowed(line) } else { - Cow::Owned(format!("{line}\n")) + Cow::Owned(format!("{}\n", line)) } .as_ref(), ) @@ -184,7 +184,7 @@ fn language_to_path(language: &str) -> Option { "yaml" => Some("yml"), _ => None, }; - ext.map(|ext| PathBuf::from(format!("code_block.{ext}"))) + ext.map(|ext| PathBuf::from(format!("code_block.{}", ext))) } fn get_indent_text(file_text: &str, start_pos: usize) -> &str { diff --git a/src/text_changes.rs b/src/text_changes.rs index 3fd9bd8..0579aae 100644 --- a/src/text_changes.rs +++ b/src/text_changes.rs @@ -35,18 +35,18 @@ pub fn apply_text_changes(source: &str, mut changes: Vec) -> String for (i, TextChange { range, new_text, .. }) in changes.iter().enumerate() { if range.start > range.end { panic!( - "Text change had start index {start} greater than end index {end}.\n\n{changes:?}", - start = range.start, - end = range.end, - changes = &changes[0..i + 1], + "Text change had start index {} greater than end index {}.\n\n{:?}", + range.start, + range.end, + &changes[0..i + 1], ) } if range.start < last_index { panic!( - "Text changes were overlapping. Past index was {past}, but new change had index {new}.\n\n{changes:?}", - past = last_index, - new = range.start, - changes = &changes[0..i + 1] + "Text changes were overlapping. Past index was {}, but new change had index {}.\n\n{:?}", + last_index, + range.start, + &changes[0..i + 1] ); } else if range.start > last_index && last_index < source.len() { final_text.push_str(&source[last_index..std::cmp::min(source.len(), range.start)]); diff --git a/src/wasm_plugin.rs b/src/wasm_plugin.rs index 912bafa..450bedb 100644 --- a/src/wasm_plugin.rs +++ b/src/wasm_plugin.rs @@ -28,7 +28,10 @@ impl SyncPluginHandler for JupyterPluginHandler { version: version.clone(), config_key: "jupyter".to_string(), help_url: "https://dprint.dev/plugins/jupyter".to_string(), - config_schema_url: format!("https://plugins.dprint.dev/dprint/dprint-plugin-jupyter/{version}/schema.json"), + config_schema_url: format!( + "https://plugins.dprint.dev/dprint/dprint-plugin-jupyter/{}/schema.json", + version + ), update_url: Some("https://plugins.dprint.dev/dprint/dprint-plugin-jupyter/latest.json".to_string()), }, file_matching: FileMatchingInfo { diff --git a/tests/test.rs b/tests/test.rs index b81fa7c..b04524b 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -31,19 +31,19 @@ fn test_specs() { |path, text| { if path.ends_with("code_block.py") { if !text.ends_with("_python") { - Ok(Some(format!("{text}_python"))) + Ok(Some(format!("{}_python", text))) } else { Ok(None) } } else if path.ends_with("code_block.md") { if !text.ends_with("_markdown") { - Ok(Some(format!("{text}_markdown"))) + Ok(Some(format!("{}_markdown", text))) } else { Ok(None) } } else if path.ends_with("code_block.ts") { if !text.ends_with("_typescript") { - Ok(Some(format!("{text}_typescript"))) + Ok(Some(format!("{}_typescript", text))) } else { Ok(None) } From f1cbf18c0a06a72513f3dcd44830aab7ce1ce5f1 Mon Sep 17 00:00:00 2001 From: scarf Date: Sat, 25 Nov 2023 15:48:41 +0900 Subject: [PATCH 7/8] Revert "refactor: extract options" This reverts commit f2cc7c8844b77b4e3e7b71fea33bdc19d5f0d39f. --- src/format_text.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/format_text.rs b/src/format_text.rs index 6397c48..25c5a49 100644 --- a/src/format_text.rs +++ b/src/format_text.rs @@ -8,22 +8,22 @@ use anyhow::Result; use jsonc_parser::CollectOptions; use jsonc_parser::ParseOptions; -const COLLECT_OPTIONS: CollectOptions = CollectOptions { - comments: false, - tokens: false, -}; - -const PARSE_OPTIONS: ParseOptions = ParseOptions { - allow_comments: true, - allow_loose_object_property_names: true, - allow_trailing_commas: true, -}; - pub fn format_text( input_text: &str, format_with_host: impl FnMut(&Path, String) -> Result>, ) -> Result> { - let parse_result = jsonc_parser::parse_to_ast(input_text, &COLLECT_OPTIONS, &PARSE_OPTIONS)?; + let parse_result = jsonc_parser::parse_to_ast( + input_text, + &CollectOptions { + comments: false, + tokens: false, + }, + &ParseOptions { + allow_comments: true, + allow_loose_object_property_names: true, + allow_trailing_commas: true, + }, + )?; let Some(root_value) = parse_result.value else { return Ok(None); }; From d9a7005952385b92c99dc360d2c46dea0b1e7c19 Mon Sep 17 00:00:00 2001 From: scarf Date: Sat, 25 Nov 2023 15:49:37 +0900 Subject: [PATCH 8/8] Revert "refactor: destructure range" This reverts commit c7f7e4d98b30a5308d243ecd4cdf3d38b66d18f9. --- src/text_changes.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/text_changes.rs b/src/text_changes.rs index 0579aae..e9ebedd 100644 --- a/src/text_changes.rs +++ b/src/text_changes.rs @@ -32,27 +32,27 @@ pub fn apply_text_changes(source: &str, mut changes: Vec) -> String let mut last_index = 0; let mut final_text = String::new(); - for (i, TextChange { range, new_text, .. }) in changes.iter().enumerate() { - if range.start > range.end { + for (i, change) in changes.iter().enumerate() { + if change.range.start > change.range.end { panic!( "Text change had start index {} greater than end index {}.\n\n{:?}", - range.start, - range.end, + change.range.start, + change.range.end, &changes[0..i + 1], ) } - if range.start < last_index { + if change.range.start < last_index { panic!( "Text changes were overlapping. Past index was {}, but new change had index {}.\n\n{:?}", last_index, - range.start, + change.range.start, &changes[0..i + 1] ); - } else if range.start > last_index && last_index < source.len() { - final_text.push_str(&source[last_index..std::cmp::min(source.len(), range.start)]); + } else if change.range.start > last_index && last_index < source.len() { + final_text.push_str(&source[last_index..std::cmp::min(source.len(), change.range.start)]); } - final_text.push_str(new_text); - last_index = range.end; + final_text.push_str(&change.new_text); + last_index = change.range.end; } if last_index < source.len() {