From 82d140d1af2cd6ab9d6e5c6c0820144c2907b6dc Mon Sep 17 00:00:00 2001 From: Shashank Mittal Date: Mon, 12 Feb 2024 23:42:59 +0530 Subject: [PATCH 01/13] lfx pre test lsp quick fix Signed-off-by: Shashank Mittal --- kclvm/Cargo.lock | 1 + kclvm/error/Cargo.toml | 1 + kclvm/error/src/diagnostic.rs | 25 ++++++++++++--- kclvm/error/src/lib.rs | 23 +++++++++++-- kclvm/sema/src/resolver/scope.rs | 3 +- kclvm/tools/src/LSP/src/quick_fix.rs | 48 ++++++++++++++++++++++++++-- kclvm/tools/src/LSP/src/to_lsp.rs | 14 ++++++-- 7 files changed, 102 insertions(+), 13 deletions(-) diff --git a/kclvm/Cargo.lock b/kclvm/Cargo.lock index 3350ec3a7..b3ca38cc7 100644 --- a/kclvm/Cargo.lock +++ b/kclvm/Cargo.lock @@ -1641,6 +1641,7 @@ dependencies = [ "indexmap 1.9.3", "kclvm-runtime", "kclvm-span", + "serde_json", "termize", "tracing", ] diff --git a/kclvm/error/Cargo.toml b/kclvm/error/Cargo.toml index c0c19466e..ae342ab4e 100644 --- a/kclvm/error/Cargo.toml +++ b/kclvm/error/Cargo.toml @@ -19,3 +19,4 @@ atty = "0.2" annotate-snippets = { version = "0.9.2", default-features = false, features = ["color"] } termize = "0.1.1" indexmap = "1.0" +serde_json = "1.0.86" diff --git a/kclvm/error/src/diagnostic.rs b/kclvm/error/src/diagnostic.rs index bbcb7f7e8..6c8034c2c 100644 --- a/kclvm/error/src/diagnostic.rs +++ b/kclvm/error/src/diagnostic.rs @@ -5,11 +5,23 @@ use std::hash::Hash; use crate::{ErrorKind, WarningKind}; /// Diagnostic structure. -#[derive(Clone, Debug, PartialEq, Eq, Hash)] +#[derive(Clone, Debug, PartialEq, Eq)] pub struct Diagnostic { pub level: Level, pub messages: Vec, pub code: Option, + pub data: Option, +} + +impl Hash for Diagnostic { + fn hash(&self, state: &mut H) { + self.level.hash(state); + for message in &self.messages { + message.hash(state); + } + self.code.hash(state); + // The `data` field is not included in the hash calculation due to complexity. + } } /// Position describes an arbitrary source position including the filename, @@ -106,18 +118,23 @@ impl Diagnostic { note: Option<&str>, range: Range, code: Option, - suggested_replacement: Option, + suggestions: Option>, ) -> Self { + let data = suggestions.clone().map(|suggs| { + serde_json::json!({ "suggested_replacements": suggs }) + }); + // println!("Data received: {:?}", data); Diagnostic { level, messages: vec![Message { range, style: Style::LineAndColumn, message: message.to_string(), - note: note.map(|s| s.to_string()), - suggested_replacement, + note: note.map(String::from), + suggested_replacement: None, // Assuming your Message struct has such a field }], code, + data, // Now includes suggestions if provided } } diff --git a/kclvm/error/src/lib.rs b/kclvm/error/src/lib.rs index 5af39db81..1109b6330 100644 --- a/kclvm/error/src/lib.rs +++ b/kclvm/error/src/lib.rs @@ -125,17 +125,31 @@ impl Handler { } /// Construct a type error and put it into the handler diagnostic buffer - pub fn add_compile_error(&mut self, msg: &str, range: Range) -> &mut Self { + pub fn add_compile_error( + &mut self, + msg: &str, + range: Range + ) -> &mut Self { + self.add_compile_error_with_suggestions(msg, range, None) + } + + pub fn add_compile_error_with_suggestions( + &mut self, + msg: &str, + range: Range, + suggestions: Option>, + ) -> &mut Self { let diag = Diagnostic::new_with_code( Level::Error, msg, None, range, Some(DiagnosticId::Error(E2L23.kind)), - None, + suggestions, ); + // println!("{:?}",suggestions.clone()); self.add_diagnostic(diag); - + self } @@ -165,6 +179,7 @@ impl Handler { level: Level::Error, messages: msgs.to_owned(), code: Some(DiagnosticId::Error(err)), + data: None, }; self.add_diagnostic(diag); @@ -183,6 +198,7 @@ impl Handler { suggested_replacement: None, }], code: Some(DiagnosticId::Suggestions), + data: None, }); }); @@ -208,6 +224,7 @@ impl Handler { level: Level::Warning, messages: msgs.to_owned(), code: Some(DiagnosticId::Warning(warning)), + data: None, }; self.add_diagnostic(diag); diff --git a/kclvm/sema/src/resolver/scope.rs b/kclvm/sema/src/resolver/scope.rs index dcb7a3623..da8ef92ff 100644 --- a/kclvm/sema/src/resolver/scope.rs +++ b/kclvm/sema/src/resolver/scope.rs @@ -432,13 +432,14 @@ impl<'ctx> Resolver<'ctx> { if suggs.len() > 0 { suggestion = format!(", did you mean '{:?}'?", suggs); } - self.handler.add_compile_error( + self.handler.add_compile_error_with_suggestions( &format!( "name '{}' is not defined{}", name.replace('@', ""), suggestion ), range, + Some(suggs.clone()), ); self.any_ty() } diff --git a/kclvm/tools/src/LSP/src/quick_fix.rs b/kclvm/tools/src/LSP/src/quick_fix.rs index 95f54dabd..821345956 100644 --- a/kclvm/tools/src/LSP/src/quick_fix.rs +++ b/kclvm/tools/src/LSP/src/quick_fix.rs @@ -1,9 +1,10 @@ use std::collections::HashMap; -use kclvm_error::{DiagnosticId, WarningKind}; +use kclvm_error::{DiagnosticId, WarningKind, ErrorKind}; use lsp_types::{ - CodeAction, CodeActionKind, CodeActionOrCommand, Diagnostic, NumberOrString, TextEdit, Url, + CodeAction, CodeActionKind, CodeActionOrCommand, Diagnostic, NumberOrString, TextEdit, Url }; +use serde_json::Value; pub(crate) fn quick_fix(uri: &Url, diags: &Vec) -> Vec { let mut code_actions: Vec = vec![]; @@ -11,7 +12,30 @@ pub(crate) fn quick_fix(uri: &Url, diags: &Vec) -> Vec continue, + DiagnosticId::Error(error) => match error { + ErrorKind::CompileError => { + let replacement_text = extract_suggested_replacements(&diag.data).unwrap_or_else(|| "".to_string()); + let mut changes = HashMap::new(); + changes.insert( + uri.clone(), + vec![TextEdit { + range: diag.range, + new_text: replacement_text, + }], + ); + code_actions.push(CodeActionOrCommand::CodeAction(CodeAction { + title: ErrorKind::CompileError.name(), + kind: Some(CodeActionKind::QUICKFIX), + diagnostics: Some(vec![diag.clone()]), + edit: Some(lsp_types::WorkspaceEdit { + changes: Some(changes), + ..Default::default() + }), + ..Default::default() + })) + } + _ => continue, + }, DiagnosticId::Warning(warn) => match warn { WarningKind::UnusedImportWarning => { let mut changes = HashMap::new(); @@ -63,6 +87,23 @@ pub(crate) fn quick_fix(uri: &Url, diags: &Vec) -> Vec) -> Option { + data.as_ref().and_then(|data| { + match data { + Value::Object(obj) => { + obj.get("suggested_replacements").and_then(|val| { + match val { + Value::String(s) => Some(s.clone()), + Value::Array(arr) if !arr.is_empty() => arr.iter().filter_map(|v| v.as_str()).next().map(String::from), + _ => None, + } + }) + }, + _ => None, + } + }) +} + pub(crate) fn conver_code_to_kcl_diag_id(code: &NumberOrString) -> Option { match code { NumberOrString::Number(_) => None, @@ -70,6 +111,7 @@ pub(crate) fn conver_code_to_kcl_diag_id(code: &NumberOrString) -> Option Some(DiagnosticId::Warning(WarningKind::CompilerWarning)), "UnusedImportWarning" => Some(DiagnosticId::Warning(WarningKind::UnusedImportWarning)), "ReimportWarning" => Some(DiagnosticId::Warning(WarningKind::ReimportWarning)), + "CompileError" => Some(DiagnosticId::Error(ErrorKind::CompileError)), "ImportPositionWarning" => { Some(DiagnosticId::Warning(WarningKind::ImportPositionWarning)) } diff --git a/kclvm/tools/src/LSP/src/to_lsp.rs b/kclvm/tools/src/LSP/src/to_lsp.rs index 87e8336d4..d13778ff8 100644 --- a/kclvm/tools/src/LSP/src/to_lsp.rs +++ b/kclvm/tools/src/LSP/src/to_lsp.rs @@ -97,12 +97,22 @@ pub fn kcl_diag_to_lsp_diags(diag: &KCLDiagnostic, file_name: &str) -> Vec Date: Tue, 13 Feb 2024 13:10:02 +0530 Subject: [PATCH 02/13] removed data field from KCL diagnostics Signed-off-by: Shashank Mittal --- kclvm/error/src/diagnostic.rs | 21 ++------------------- kclvm/error/src/lib.rs | 3 --- kclvm/tools/src/LSP/src/quick_fix.rs | 6 +++--- kclvm/tools/src/LSP/src/to_lsp.rs | 16 +++++++--------- 4 files changed, 12 insertions(+), 34 deletions(-) diff --git a/kclvm/error/src/diagnostic.rs b/kclvm/error/src/diagnostic.rs index 6c8034c2c..d2a203d6b 100644 --- a/kclvm/error/src/diagnostic.rs +++ b/kclvm/error/src/diagnostic.rs @@ -5,23 +5,11 @@ use std::hash::Hash; use crate::{ErrorKind, WarningKind}; /// Diagnostic structure. -#[derive(Clone, Debug, PartialEq, Eq)] +#[derive(Clone, Debug, PartialEq, Eq, Hash)] pub struct Diagnostic { pub level: Level, pub messages: Vec, pub code: Option, - pub data: Option, -} - -impl Hash for Diagnostic { - fn hash(&self, state: &mut H) { - self.level.hash(state); - for message in &self.messages { - message.hash(state); - } - self.code.hash(state); - // The `data` field is not included in the hash calculation due to complexity. - } } /// Position describes an arbitrary source position including the filename, @@ -120,10 +108,6 @@ impl Diagnostic { code: Option, suggestions: Option>, ) -> Self { - let data = suggestions.clone().map(|suggs| { - serde_json::json!({ "suggested_replacements": suggs }) - }); - // println!("Data received: {:?}", data); Diagnostic { level, messages: vec![Message { @@ -131,10 +115,9 @@ impl Diagnostic { style: Style::LineAndColumn, message: message.to_string(), note: note.map(String::from), - suggested_replacement: None, // Assuming your Message struct has such a field + suggested_replacement: suggestions.and_then(|v| v.into_iter().next()), }], code, - data, // Now includes suggestions if provided } } diff --git a/kclvm/error/src/lib.rs b/kclvm/error/src/lib.rs index 1109b6330..f805c3fcd 100644 --- a/kclvm/error/src/lib.rs +++ b/kclvm/error/src/lib.rs @@ -179,7 +179,6 @@ impl Handler { level: Level::Error, messages: msgs.to_owned(), code: Some(DiagnosticId::Error(err)), - data: None, }; self.add_diagnostic(diag); @@ -198,7 +197,6 @@ impl Handler { suggested_replacement: None, }], code: Some(DiagnosticId::Suggestions), - data: None, }); }); @@ -224,7 +222,6 @@ impl Handler { level: Level::Warning, messages: msgs.to_owned(), code: Some(DiagnosticId::Warning(warning)), - data: None, }; self.add_diagnostic(diag); diff --git a/kclvm/tools/src/LSP/src/quick_fix.rs b/kclvm/tools/src/LSP/src/quick_fix.rs index 821345956..a46ba5408 100644 --- a/kclvm/tools/src/LSP/src/quick_fix.rs +++ b/kclvm/tools/src/LSP/src/quick_fix.rs @@ -14,7 +14,7 @@ pub(crate) fn quick_fix(uri: &Url, diags: &Vec) -> Vec match error { ErrorKind::CompileError => { - let replacement_text = extract_suggested_replacements(&diag.data).unwrap_or_else(|| "".to_string()); + let replacement_text = extract_suggested_replacement(&diag.data).unwrap_or_else(|| "".to_string()); let mut changes = HashMap::new(); changes.insert( uri.clone(), @@ -87,11 +87,11 @@ pub(crate) fn quick_fix(uri: &Url, diags: &Vec) -> Vec) -> Option { +fn extract_suggested_replacement(data: &Option) -> Option { data.as_ref().and_then(|data| { match data { Value::Object(obj) => { - obj.get("suggested_replacements").and_then(|val| { + obj.get("suggested_replacement").and_then(|val| { match val { Value::String(s) => Some(s.clone()), Value::Array(arr) if !arr.is_empty() => arr.iter().filter_map(|v| v.as_str()).next().map(String::from), diff --git a/kclvm/tools/src/LSP/src/to_lsp.rs b/kclvm/tools/src/LSP/src/to_lsp.rs index d13778ff8..168b0e165 100644 --- a/kclvm/tools/src/LSP/src/to_lsp.rs +++ b/kclvm/tools/src/LSP/src/to_lsp.rs @@ -5,6 +5,7 @@ use kclvm_error::Message; use kclvm_error::Position as KCLPos; use lsp_types::*; use ra_ap_vfs::FileId; +use serde_json::json; use crate::state::LanguageServerSnapshot; use std::{ @@ -43,6 +44,10 @@ fn kcl_msg_to_lsp_diags( let start_position = lsp_pos(&range.0); let end_position = lsp_pos(&range.1); + let data = msg.suggested_replacement.as_ref().map(|s| { + json!({ "suggested_replacement": [s] }) + }); + let related_information = if related_msg.is_empty() { None } else { @@ -72,7 +77,7 @@ fn kcl_msg_to_lsp_diags( message: msg.message.clone(), related_information, tags: None, - data: None, + data: data, } } @@ -97,8 +102,6 @@ pub fn kcl_diag_to_lsp_diags(diag: &KCLDiagnostic, file_name: &str) -> Vec Vec Date: Fri, 16 Feb 2024 06:18:55 +0530 Subject: [PATCH 03/13] make fmt Signed-off-by: Shashank Mittal --- kclvm/error/src/lib.rs | 14 +++++--------- kclvm/tools/src/LSP/src/quick_fix.rs | 29 ++++++++++++++-------------- kclvm/tools/src/LSP/src/to_lsp.rs | 9 +++++---- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/kclvm/error/src/lib.rs b/kclvm/error/src/lib.rs index f805c3fcd..9fb127c15 100644 --- a/kclvm/error/src/lib.rs +++ b/kclvm/error/src/lib.rs @@ -125,18 +125,14 @@ impl Handler { } /// Construct a type error and put it into the handler diagnostic buffer - pub fn add_compile_error( - &mut self, - msg: &str, - range: Range - ) -> &mut Self { + pub fn add_compile_error(&mut self, msg: &str, range: Range) -> &mut Self { self.add_compile_error_with_suggestions(msg, range, None) } pub fn add_compile_error_with_suggestions( - &mut self, - msg: &str, - range: Range, + &mut self, + msg: &str, + range: Range, suggestions: Option>, ) -> &mut Self { let diag = Diagnostic::new_with_code( @@ -149,7 +145,7 @@ impl Handler { ); // println!("{:?}",suggestions.clone()); self.add_diagnostic(diag); - + self } diff --git a/kclvm/tools/src/LSP/src/quick_fix.rs b/kclvm/tools/src/LSP/src/quick_fix.rs index a46ba5408..1aa3f666c 100644 --- a/kclvm/tools/src/LSP/src/quick_fix.rs +++ b/kclvm/tools/src/LSP/src/quick_fix.rs @@ -1,8 +1,8 @@ use std::collections::HashMap; -use kclvm_error::{DiagnosticId, WarningKind, ErrorKind}; +use kclvm_error::{DiagnosticId, ErrorKind, WarningKind}; use lsp_types::{ - CodeAction, CodeActionKind, CodeActionOrCommand, Diagnostic, NumberOrString, TextEdit, Url + CodeAction, CodeActionKind, CodeActionOrCommand, Diagnostic, NumberOrString, TextEdit, Url, }; use serde_json::Value; @@ -14,7 +14,8 @@ pub(crate) fn quick_fix(uri: &Url, diags: &Vec) -> Vec match error { ErrorKind::CompileError => { - let replacement_text = extract_suggested_replacement(&diag.data).unwrap_or_else(|| "".to_string()); + let replacement_text = extract_suggested_replacement(&diag.data) + .unwrap_or_else(|| "".to_string()); let mut changes = HashMap::new(); changes.insert( uri.clone(), @@ -88,19 +89,17 @@ pub(crate) fn quick_fix(uri: &Url, diags: &Vec) -> Vec) -> Option { - data.as_ref().and_then(|data| { - match data { - Value::Object(obj) => { - obj.get("suggested_replacement").and_then(|val| { - match val { - Value::String(s) => Some(s.clone()), - Value::Array(arr) if !arr.is_empty() => arr.iter().filter_map(|v| v.as_str()).next().map(String::from), - _ => None, - } - }) - }, + data.as_ref().and_then(|data| match data { + Value::Object(obj) => obj.get("suggested_replacement").and_then(|val| match val { + Value::String(s) => Some(s.clone()), + Value::Array(arr) if !arr.is_empty() => arr + .iter() + .filter_map(|v| v.as_str()) + .next() + .map(String::from), _ => None, - } + }), + _ => None, }) } diff --git a/kclvm/tools/src/LSP/src/to_lsp.rs b/kclvm/tools/src/LSP/src/to_lsp.rs index 168b0e165..f19ecefc0 100644 --- a/kclvm/tools/src/LSP/src/to_lsp.rs +++ b/kclvm/tools/src/LSP/src/to_lsp.rs @@ -44,9 +44,10 @@ fn kcl_msg_to_lsp_diags( let start_position = lsp_pos(&range.0); let end_position = lsp_pos(&range.1); - let data = msg.suggested_replacement.as_ref().map(|s| { - json!({ "suggested_replacement": [s] }) - }); + let data = msg + .suggested_replacement + .as_ref() + .map(|s| json!({ "suggested_replacement": [s] })); let related_information = if related_msg.is_empty() { None @@ -77,7 +78,7 @@ fn kcl_msg_to_lsp_diags( message: msg.message.clone(), related_information, tags: None, - data: data, + data, } } From 3850faf270ed257c926ee0c424cab85adaf19688 Mon Sep 17 00:00:00 2001 From: Shashank Mittal Date: Sat, 17 Feb 2024 18:30:29 +0530 Subject: [PATCH 04/13] added test for CompileError quick fix Signed-off-by: Shashank Mittal --- .../test_vendor/.kpm/config/kpm.json | 1 + .../test_vendor/.kpm/config/package-cache | 0 .../tools/src/LSP/src/test_data/diagnostics.k | 2 ++ kclvm/tools/src/LSP/src/tests.rs | 20 ++++++++++++++++++- kclvm/tools/src/LSP/src/to_lsp.rs | 1 + 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json create mode 100644 kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache diff --git a/kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json b/kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json new file mode 100644 index 000000000..7c459d9c7 --- /dev/null +++ b/kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json @@ -0,0 +1 @@ +{"DefaultOciRegistry":"ghcr.io","DefaultOciRepo":"kcl-lang","DefaultOciPlainHttp":false} \ No newline at end of file diff --git a/kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache b/kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache new file mode 100644 index 000000000..e69de29bb diff --git a/kclvm/tools/src/LSP/src/test_data/diagnostics.k b/kclvm/tools/src/LSP/src/test_data/diagnostics.k index eeb396a83..f24dac378 100644 --- a/kclvm/tools/src/LSP/src/test_data/diagnostics.k +++ b/kclvm/tools/src/LSP/src/test_data/diagnostics.k @@ -7,3 +7,5 @@ c: Person = Person { d = 1 d = 2 +number = 2 +count = nu \ No newline at end of file diff --git a/kclvm/tools/src/LSP/src/tests.rs b/kclvm/tools/src/LSP/src/tests.rs index 04e1ce749..477a05d78 100644 --- a/kclvm/tools/src/LSP/src/tests.rs +++ b/kclvm/tools/src/LSP/src/tests.rs @@ -1,6 +1,7 @@ use crossbeam_channel::after; use crossbeam_channel::select; use indexmap::IndexSet; +use kclvm_error::diagnostic; use kclvm_sema::core::global_state::GlobalState; use lsp_server::RequestId; use lsp_server::Response; @@ -140,6 +141,7 @@ fn build_lsp_diag( severity: Option, related_info: Vec<(String, (u32, u32, u32, u32), String)>, code: Option, + data: Option ) -> Diagnostic { let related_information = if related_info.is_empty() { None @@ -184,7 +186,7 @@ fn build_lsp_diag( message, related_information, tags: None, - data: None, + data, } } @@ -201,6 +203,7 @@ fn build_expect_diags() -> Vec { Some(DiagnosticSeverity::ERROR), vec![], Some(NumberOrString::String("InvalidSyntax".to_string())), + None, ), build_lsp_diag( (0, 0, 0, 10), @@ -208,6 +211,7 @@ fn build_expect_diags() -> Vec { Some(DiagnosticSeverity::ERROR), vec![], Some(NumberOrString::String("CannotFindModule".to_string())), + None, ), build_lsp_diag( (0, 0, 0, 10), @@ -218,6 +222,7 @@ fn build_expect_diags() -> Vec { Some(DiagnosticSeverity::ERROR), vec![], Some(NumberOrString::String("CannotFindModule".to_string())), + None, ), build_lsp_diag( (8, 0, 8, 1), @@ -229,6 +234,7 @@ fn build_expect_diags() -> Vec { "The variable 'd' is declared here".to_string(), )], Some(NumberOrString::String("ImmutableError".to_string())), + None, ), build_lsp_diag( (7, 0, 7, 1), @@ -240,6 +246,7 @@ fn build_expect_diags() -> Vec { "Can not change the value of 'd', because it was declared immutable".to_string(), )], Some(NumberOrString::String("ImmutableError".to_string())), + None, ), build_lsp_diag( (2, 0, 2, 1), @@ -247,6 +254,15 @@ fn build_expect_diags() -> Vec { Some(DiagnosticSeverity::ERROR), vec![], Some(NumberOrString::String("TypeError".to_string())), + None, + ), + build_lsp_diag( + (10, 8, 10, 10), + "name 'nu' is not defined, did you mean '[\"number\", \"n\", \"num\"]'?".to_string(), + Some(DiagnosticSeverity::ERROR), + vec![], + Some(NumberOrString::String("CompileError".to_string())), + Some(serde_json::json!({ "suggested_replacement": ["number"] })), ), build_lsp_diag( (0, 0, 0, 10), @@ -254,7 +270,9 @@ fn build_expect_diags() -> Vec { Some(DiagnosticSeverity::WARNING), vec![], Some(NumberOrString::String("UnusedImportWarning".to_string())), + None, ), + ]; expected_diags } diff --git a/kclvm/tools/src/LSP/src/to_lsp.rs b/kclvm/tools/src/LSP/src/to_lsp.rs index f19ecefc0..29da9fc28 100644 --- a/kclvm/tools/src/LSP/src/to_lsp.rs +++ b/kclvm/tools/src/LSP/src/to_lsp.rs @@ -47,6 +47,7 @@ fn kcl_msg_to_lsp_diags( let data = msg .suggested_replacement .as_ref() + .filter(|s| !s.is_empty()) .map(|s| json!({ "suggested_replacement": [s] })); let related_information = if related_msg.is_empty() { From 9dd2de4cdcd7f3db85d9d8cd7b18756e5816999b Mon Sep 17 00:00:00 2001 From: Shashank Mittal Date: Sat, 17 Feb 2024 18:32:14 +0530 Subject: [PATCH 05/13] cleanup Signed-off-by: Shashank Mittal --- kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json | 1 - kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache | 0 2 files changed, 1 deletion(-) delete mode 100644 kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json delete mode 100644 kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache diff --git a/kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json b/kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json deleted file mode 100644 index 7c459d9c7..000000000 --- a/kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json +++ /dev/null @@ -1 +0,0 @@ -{"DefaultOciRegistry":"ghcr.io","DefaultOciRepo":"kcl-lang","DefaultOciPlainHttp":false} \ No newline at end of file diff --git a/kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache b/kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache deleted file mode 100644 index e69de29bb..000000000 From 54c6a33620b040bf2666b1077397364a7dedd45e Mon Sep 17 00:00:00 2001 From: Shashank Mittal Date: Sat, 17 Feb 2024 18:35:18 +0530 Subject: [PATCH 06/13] fmt Signed-off-by: Shashank Mittal --- kcl-lang.io | 1 + kclvm/tools/src/LSP/src/tests.rs | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 160000 kcl-lang.io diff --git a/kcl-lang.io b/kcl-lang.io new file mode 160000 index 000000000..d748eff61 --- /dev/null +++ b/kcl-lang.io @@ -0,0 +1 @@ +Subproject commit d748eff61e48af6bc5b26d181f1a9b44c281fbff diff --git a/kclvm/tools/src/LSP/src/tests.rs b/kclvm/tools/src/LSP/src/tests.rs index 477a05d78..8a2f2cd90 100644 --- a/kclvm/tools/src/LSP/src/tests.rs +++ b/kclvm/tools/src/LSP/src/tests.rs @@ -141,7 +141,7 @@ fn build_lsp_diag( severity: Option, related_info: Vec<(String, (u32, u32, u32, u32), String)>, code: Option, - data: Option + data: Option, ) -> Diagnostic { let related_information = if related_info.is_empty() { None @@ -272,7 +272,6 @@ fn build_expect_diags() -> Vec { Some(NumberOrString::String("UnusedImportWarning".to_string())), None, ), - ]; expected_diags } From d00bbbc0b73c31ad499ff0b2299d3eb76d4fa254 Mon Sep 17 00:00:00 2001 From: Shashank Mittal Date: Sat, 17 Feb 2024 18:37:39 +0530 Subject: [PATCH 07/13] fmt Signed-off-by: Shashank Mittal --- kcl-lang.io | 1 - 1 file changed, 1 deletion(-) delete mode 160000 kcl-lang.io diff --git a/kcl-lang.io b/kcl-lang.io deleted file mode 160000 index d748eff61..000000000 --- a/kcl-lang.io +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d748eff61e48af6bc5b26d181f1a9b44c281fbff From e2c5d16ccf2f2da6525e0741a206a6f5b23813bb Mon Sep 17 00:00:00 2001 From: Shashank Mittal Date: Sat, 17 Feb 2024 18:45:23 +0530 Subject: [PATCH 08/13] merge Signed-off-by: Shashank Mittal --- kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json | 1 + kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache | 0 2 files changed, 1 insertion(+) create mode 100644 kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json create mode 100644 kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache diff --git a/kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json b/kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json new file mode 100644 index 000000000..7c459d9c7 --- /dev/null +++ b/kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json @@ -0,0 +1 @@ +{"DefaultOciRegistry":"ghcr.io","DefaultOciRepo":"kcl-lang","DefaultOciPlainHttp":false} \ No newline at end of file diff --git a/kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache b/kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache new file mode 100644 index 000000000..e69de29bb From 405be6bbdc5feb8ffb6e6c92e20b7cabffb6c86f Mon Sep 17 00:00:00 2001 From: Shashank Mittal Date: Sat, 17 Feb 2024 18:45:43 +0530 Subject: [PATCH 09/13] merge Signed-off-by: Shashank Mittal --- kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json | 1 - kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache | 0 2 files changed, 1 deletion(-) delete mode 100644 kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json delete mode 100644 kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache diff --git a/kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json b/kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json deleted file mode 100644 index 7c459d9c7..000000000 --- a/kclvm/driver/src/test_data/test_vendor/.kpm/config/kpm.json +++ /dev/null @@ -1 +0,0 @@ -{"DefaultOciRegistry":"ghcr.io","DefaultOciRepo":"kcl-lang","DefaultOciPlainHttp":false} \ No newline at end of file diff --git a/kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache b/kclvm/driver/src/test_data/test_vendor/.kpm/config/package-cache deleted file mode 100644 index e69de29bb..000000000 From 2b5a60ab0130ee9f504f2a595739b8134fbf3632 Mon Sep 17 00:00:00 2001 From: Shashank Mittal Date: Sat, 17 Feb 2024 19:00:24 +0530 Subject: [PATCH 10/13] removed unused import Signed-off-by: Shashank Mittal --- kclvm/tools/src/LSP/src/tests.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/kclvm/tools/src/LSP/src/tests.rs b/kclvm/tools/src/LSP/src/tests.rs index 8a2f2cd90..b265a98b3 100644 --- a/kclvm/tools/src/LSP/src/tests.rs +++ b/kclvm/tools/src/LSP/src/tests.rs @@ -1,7 +1,6 @@ use crossbeam_channel::after; use crossbeam_channel::select; use indexmap::IndexSet; -use kclvm_error::diagnostic; use kclvm_sema::core::global_state::GlobalState; use lsp_server::RequestId; use lsp_server::Response; From adabe7e1a6f86de27bffbe8d377ead0761cbcd4f Mon Sep 17 00:00:00 2001 From: Shashank Mittal Date: Mon, 19 Feb 2024 01:37:22 +0530 Subject: [PATCH 11/13] requested changes made Signed-off-by: Shashank Mittal --- kclvm/error/src/lib.rs | 1 - kclvm/tools/src/LSP/src/quick_fix.rs | 46 ++++++++++++++++------------ 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/kclvm/error/src/lib.rs b/kclvm/error/src/lib.rs index 9fb127c15..c61935635 100644 --- a/kclvm/error/src/lib.rs +++ b/kclvm/error/src/lib.rs @@ -143,7 +143,6 @@ impl Handler { Some(DiagnosticId::Error(E2L23.kind)), suggestions, ); - // println!("{:?}",suggestions.clone()); self.add_diagnostic(diag); self diff --git a/kclvm/tools/src/LSP/src/quick_fix.rs b/kclvm/tools/src/LSP/src/quick_fix.rs index 1aa3f666c..e78b61c4d 100644 --- a/kclvm/tools/src/LSP/src/quick_fix.rs +++ b/kclvm/tools/src/LSP/src/quick_fix.rs @@ -14,32 +14,38 @@ pub(crate) fn quick_fix(uri: &Url, diags: &Vec) -> Vec match error { ErrorKind::CompileError => { - let replacement_text = extract_suggested_replacement(&diag.data) - .unwrap_or_else(|| "".to_string()); - let mut changes = HashMap::new(); - changes.insert( - uri.clone(), - vec![TextEdit { - range: diag.range, - new_text: replacement_text, - }], - ); - code_actions.push(CodeActionOrCommand::CodeAction(CodeAction { - title: ErrorKind::CompileError.name(), - kind: Some(CodeActionKind::QUICKFIX), - diagnostics: Some(vec![diag.clone()]), - edit: Some(lsp_types::WorkspaceEdit { - changes: Some(changes), + if let Some(replacement_text) = + extract_suggested_replacement(&diag.data) + { + let mut changes = HashMap::new(); + changes.insert( + uri.clone(), + vec![TextEdit { + range: diag.range, + new_text: replacement_text.clone(), + }], + ); + code_actions.push(CodeActionOrCommand::CodeAction(CodeAction { + title: format!( + "a local variable with a similar name exists: `{}`", + replacement_text), + kind: Some(CodeActionKind::QUICKFIX), + diagnostics: Some(vec![diag.clone()]), + edit: Some(lsp_types::WorkspaceEdit { + changes: Some(changes), + ..Default::default() + }), ..Default::default() - }), - ..Default::default() - })) + })) + } else { + continue; + } } _ => continue, }, DiagnosticId::Warning(warn) => match warn { WarningKind::UnusedImportWarning => { - let mut changes = HashMap::new(); + let mut chanfges = HashMap::new(); changes.insert( uri.clone(), vec![TextEdit { From 0caebe1b629db5b50cd6c12171c4cb47a226fe4f Mon Sep 17 00:00:00 2001 From: Shashank Mittal Date: Mon, 19 Feb 2024 01:40:46 +0530 Subject: [PATCH 12/13] fix Signed-off-by: Shashank Mittal --- kclvm/tools/src/LSP/src/quick_fix.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kclvm/tools/src/LSP/src/quick_fix.rs b/kclvm/tools/src/LSP/src/quick_fix.rs index e78b61c4d..b2fe6e24d 100644 --- a/kclvm/tools/src/LSP/src/quick_fix.rs +++ b/kclvm/tools/src/LSP/src/quick_fix.rs @@ -45,7 +45,7 @@ pub(crate) fn quick_fix(uri: &Url, diags: &Vec) -> Vec match warn { WarningKind::UnusedImportWarning => { - let mut chanfges = HashMap::new(); + let mut changes = HashMap::new(); changes.insert( uri.clone(), vec![TextEdit { From 8f84134ef77b9a88c0d3af21bbc5407486ed4bf4 Mon Sep 17 00:00:00 2001 From: Shashank Mittal Date: Mon, 19 Feb 2024 01:43:24 +0530 Subject: [PATCH 13/13] fmt Signed-off-by: Shashank Mittal --- kclvm/tools/src/LSP/src/quick_fix.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kclvm/tools/src/LSP/src/quick_fix.rs b/kclvm/tools/src/LSP/src/quick_fix.rs index b2fe6e24d..0c026783c 100644 --- a/kclvm/tools/src/LSP/src/quick_fix.rs +++ b/kclvm/tools/src/LSP/src/quick_fix.rs @@ -28,7 +28,8 @@ pub(crate) fn quick_fix(uri: &Url, diags: &Vec) -> Vec