diff --git a/.github/workflows/CI-nodejs.yml b/.github/workflows/CI-nodejs.yml index da06197..22e39d7 100644 --- a/.github/workflows/CI-nodejs.yml +++ b/.github/workflows/CI-nodejs.yml @@ -9,7 +9,7 @@ permissions: 'on': push: branches: - - ignore-end-expression + - extending-link-hint-literal tags-ignore: - '**' paths-ignore: diff --git a/jinja-lsp-nodejs/index.d.ts b/jinja-lsp-nodejs/index.d.ts index d3a2110..154d3e1 100644 --- a/jinja-lsp-nodejs/index.d.ts +++ b/jinja-lsp-nodejs/index.d.ts @@ -77,10 +77,12 @@ export class NodejsLspFiles { constructor() /** Actions can come from unsaved context. */ addLinkHints(uri: string, actions?: Array | undefined | null): void + saveLinkHint(actions?: Array | undefined | null, hint?: string | undefined | null): void + removeTempLinkHint(hint?: string | undefined | null): void deleteAll(filename: string): void addOne(id: number, filename: string, content: string, line: number, ext: string, col?: number | undefined | null): Array getVariables(id: string, line: number): Array | null hover(id: number, filename: string, line: number, position: JsPosition): JsHover | null - complete(id: number, filename: string, line: number, position: JsPosition, linkHints?: string | undefined | null): Array | null + complete(id: number, filename: string, line: number, position: JsPosition): Array | null gotoDefinition(id: number, filename: string, line: number, position: JsPosition): Array | null } diff --git a/jinja-lsp-nodejs/npm/android-arm-eabi/package.json b/jinja-lsp-nodejs/npm/android-arm-eabi/package.json index 1da2e52..6a36249 100644 --- a/jinja-lsp-nodejs/npm/android-arm-eabi/package.json +++ b/jinja-lsp-nodejs/npm/android-arm-eabi/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-android-arm-eabi", - "version": "0.0.20", + "version": "0.0.21", "os": [ "android" ], diff --git a/jinja-lsp-nodejs/npm/android-arm64/package.json b/jinja-lsp-nodejs/npm/android-arm64/package.json index a18cb0b..8cbfe5e 100644 --- a/jinja-lsp-nodejs/npm/android-arm64/package.json +++ b/jinja-lsp-nodejs/npm/android-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-android-arm64", - "version": "0.0.20", + "version": "0.0.21", "os": [ "android" ], diff --git a/jinja-lsp-nodejs/npm/darwin-arm64/package.json b/jinja-lsp-nodejs/npm/darwin-arm64/package.json index cae1139..71bc41a 100644 --- a/jinja-lsp-nodejs/npm/darwin-arm64/package.json +++ b/jinja-lsp-nodejs/npm/darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-darwin-arm64", - "version": "0.0.20", + "version": "0.0.21", "os": [ "darwin" ], diff --git a/jinja-lsp-nodejs/npm/darwin-universal/package.json b/jinja-lsp-nodejs/npm/darwin-universal/package.json index edb7630..6e36d6f 100644 --- a/jinja-lsp-nodejs/npm/darwin-universal/package.json +++ b/jinja-lsp-nodejs/npm/darwin-universal/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-darwin-universal", - "version": "0.0.20", + "version": "0.0.21", "os": [ "darwin" ], diff --git a/jinja-lsp-nodejs/npm/freebsd-x64/package.json b/jinja-lsp-nodejs/npm/freebsd-x64/package.json index a656d09..5a574a1 100644 --- a/jinja-lsp-nodejs/npm/freebsd-x64/package.json +++ b/jinja-lsp-nodejs/npm/freebsd-x64/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-freebsd-x64", - "version": "0.0.20", + "version": "0.0.21", "os": [ "freebsd" ], diff --git a/jinja-lsp-nodejs/npm/linux-arm-gnueabihf/package.json b/jinja-lsp-nodejs/npm/linux-arm-gnueabihf/package.json index 7202988..8ef1d67 100644 --- a/jinja-lsp-nodejs/npm/linux-arm-gnueabihf/package.json +++ b/jinja-lsp-nodejs/npm/linux-arm-gnueabihf/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-linux-arm-gnueabihf", - "version": "0.0.20", + "version": "0.0.21", "os": [ "linux" ], diff --git a/jinja-lsp-nodejs/npm/linux-arm-musleabihf/package.json b/jinja-lsp-nodejs/npm/linux-arm-musleabihf/package.json index 4f3ed4e..f2fce72 100644 --- a/jinja-lsp-nodejs/npm/linux-arm-musleabihf/package.json +++ b/jinja-lsp-nodejs/npm/linux-arm-musleabihf/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-linux-arm-musleabihf", - "version": "0.0.20", + "version": "0.0.21", "os": [ "linux" ], diff --git a/jinja-lsp-nodejs/npm/linux-arm64-gnu/package.json b/jinja-lsp-nodejs/npm/linux-arm64-gnu/package.json index 29a80ab..1c3a5df 100644 --- a/jinja-lsp-nodejs/npm/linux-arm64-gnu/package.json +++ b/jinja-lsp-nodejs/npm/linux-arm64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-linux-arm64-gnu", - "version": "0.0.20", + "version": "0.0.21", "os": [ "linux" ], diff --git a/jinja-lsp-nodejs/npm/linux-arm64-musl/package.json b/jinja-lsp-nodejs/npm/linux-arm64-musl/package.json index 3257249..c88ae11 100644 --- a/jinja-lsp-nodejs/npm/linux-arm64-musl/package.json +++ b/jinja-lsp-nodejs/npm/linux-arm64-musl/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-linux-arm64-musl", - "version": "0.0.20", + "version": "0.0.21", "os": [ "linux" ], diff --git a/jinja-lsp-nodejs/npm/linux-riscv64-gnu/package.json b/jinja-lsp-nodejs/npm/linux-riscv64-gnu/package.json index 133920a..39747d0 100644 --- a/jinja-lsp-nodejs/npm/linux-riscv64-gnu/package.json +++ b/jinja-lsp-nodejs/npm/linux-riscv64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-linux-riscv64-gnu", - "version": "0.0.20", + "version": "0.0.21", "os": [ "linux" ], diff --git a/jinja-lsp-nodejs/npm/linux-x64-gnu/package.json b/jinja-lsp-nodejs/npm/linux-x64-gnu/package.json index 66b0fad..dbdfe78 100644 --- a/jinja-lsp-nodejs/npm/linux-x64-gnu/package.json +++ b/jinja-lsp-nodejs/npm/linux-x64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-linux-x64-gnu", - "version": "0.0.20", + "version": "0.0.21", "os": [ "linux" ], diff --git a/jinja-lsp-nodejs/npm/linux-x64-musl/package.json b/jinja-lsp-nodejs/npm/linux-x64-musl/package.json index 2b886bc..64c53aa 100644 --- a/jinja-lsp-nodejs/npm/linux-x64-musl/package.json +++ b/jinja-lsp-nodejs/npm/linux-x64-musl/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-linux-x64-musl", - "version": "0.0.20", + "version": "0.0.21", "os": [ "linux" ], diff --git a/jinja-lsp-nodejs/npm/win32-arm64-msvc/package.json b/jinja-lsp-nodejs/npm/win32-arm64-msvc/package.json index b4891d1..6d3e3d4 100644 --- a/jinja-lsp-nodejs/npm/win32-arm64-msvc/package.json +++ b/jinja-lsp-nodejs/npm/win32-arm64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-win32-arm64-msvc", - "version": "0.0.20", + "version": "0.0.21", "os": [ "win32" ], diff --git a/jinja-lsp-nodejs/npm/win32-ia32-msvc/package.json b/jinja-lsp-nodejs/npm/win32-ia32-msvc/package.json index de73203..0e09c7f 100644 --- a/jinja-lsp-nodejs/npm/win32-ia32-msvc/package.json +++ b/jinja-lsp-nodejs/npm/win32-ia32-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-win32-ia32-msvc", - "version": "0.0.20", + "version": "0.0.21", "os": [ "win32" ], diff --git a/jinja-lsp-nodejs/npm/win32-x64-msvc/package.json b/jinja-lsp-nodejs/npm/win32-x64-msvc/package.json index 9a8ff9a..2ab5fb9 100644 --- a/jinja-lsp-nodejs/npm/win32-x64-msvc/package.json +++ b/jinja-lsp-nodejs/npm/win32-x64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions-win32-x64-msvc", - "version": "0.0.20", + "version": "0.0.21", "os": [ "win32" ], diff --git a/jinja-lsp-nodejs/package-lock.json b/jinja-lsp-nodejs/package-lock.json index 4e68dc3..0763492 100644 --- a/jinja-lsp-nodejs/package-lock.json +++ b/jinja-lsp-nodejs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@jinja-lsp/functions", - "version": "0.0.20", + "version": "0.0.21", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@jinja-lsp/functions", - "version": "0.0.20", + "version": "0.0.21", "license": "MIT", "devDependencies": { "@napi-rs/cli": "^2.18.3", diff --git a/jinja-lsp-nodejs/package.json b/jinja-lsp-nodejs/package.json index 197fd6a..f7dfd52 100644 --- a/jinja-lsp-nodejs/package.json +++ b/jinja-lsp-nodejs/package.json @@ -1,6 +1,6 @@ { "name": "@jinja-lsp/functions", - "version": "0.0.20", + "version": "0.0.21", "main": "index.js", "types": "index.d.ts", "napi": { diff --git a/jinja-lsp-nodejs/src/lib.rs b/jinja-lsp-nodejs/src/lib.rs index bc1e38c..0e09797 100644 --- a/jinja-lsp-nodejs/src/lib.rs +++ b/jinja-lsp-nodejs/src/lib.rs @@ -92,6 +92,36 @@ impl NodejsLspFiles { } } + #[napi] + pub fn save_link_hint(&mut self, actions: Option>, hint: Option) { + let hint = hint.unwrap_or("temp".to_string()); + if let Some(actions) = actions { + let mut identifiers = vec![]; + let mut action_objects = vec![]; + for action in &actions { + let mut identifier = Identifier::new(&action.name, Point::new(0, 0), Point::new(0, 0)); + identifier.identifier_type = IdentifierType::BackendVariable; + identifiers.push(identifier); + let action = ActionObject::from(action); + action_objects.push(action); + } + self.action_objects.insert(hint.to_string(), action_objects); + self + .lsp_files + .variables + .insert(hint.to_string(), identifiers); + self.actions.insert(hint.to_string(), actions); + } + } + + #[napi] + pub fn remove_temp_link_hint(&mut self, hint: Option) { + let hint = hint.unwrap_or("temp".to_string()); + self.lsp_files.variables.remove(&hint); + self.actions.remove(&hint); + self.action_objects.remove(&hint); + } + #[napi] pub fn delete_all(&mut self, filename: String) { self.lsp_files.delete_documents_with_id(filename); @@ -132,7 +162,7 @@ impl NodejsLspFiles { .lsp_files .read_objects(Url::parse(&format!("file:///home/{filename}.{id}.{ext}")).unwrap()); if let Some(objects) = objects { - if let Some(global_actions) = self.action_objects.get(&filename.to_string()) { + if let Some(global_actions) = self.action_objects.get("temp") { for obj in &objects { let action_object = ActionObject::from(obj); for global_action in global_actions { @@ -160,7 +190,7 @@ impl NodejsLspFiles { .lsp_files .read_python_ids(Url::parse(&format!("file:///home/{filename}.{id}.{ext}")).unwrap()) { - if let Some(global_actions) = self.action_objects.get(&filename.to_string()) { + if let Some(global_actions) = self.action_objects.get("temp") { for obj in &ids { let action_object = ActionObject::from(obj); for global_action in global_actions { @@ -315,7 +345,6 @@ impl NodejsLspFiles { filename: String, line: u32, mut position: JsPosition, - link_hints: Option, ) -> Option> { position.line -= line; let original_uri = filename.to_string(); @@ -359,12 +388,21 @@ impl NodejsLspFiles { } CompletionType::Identifier => { - let url = link_hints.unwrap_or(original_uri.to_string()); - if let Some(variables) = self - .lsp_files - .read_variables(&uri, position, None, Some(url)) - { + let empty = vec![]; + let actions = self.actions.get("temp").unwrap_or(&empty); + if let Some(variables) = self.lsp_files.read_variables(&uri, position, None, None) { let mut ret = vec![]; + for item in actions { + ret.push(JsCompletionItem { + completion_type: JsCompletionType::Identifier, + label: item.name.to_string(), + kind: Kind2::VARIABLE, + description: item.description.to_string(), + new_text: None, + insert: None, + replace: None, + }); + } for item in variables { ret.push(JsCompletionItem { completion_type: JsCompletionType::Identifier, @@ -376,6 +414,7 @@ impl NodejsLspFiles { replace: None, }); } + items = Some(ret); } } @@ -406,10 +445,9 @@ impl NodejsLspFiles { CompletionType::IncompleteIdentifier { name, mut range } => { range.start.line += line; range.end.line += line; + let url = &original_uri.to_string(); let mut ret = vec![]; - let variables = self - .lsp_files - .get_variable(name, uri.to_string(), &filename)?; + let variables = self.lsp_files.get_variable(name, url.to_string(), "temp")?; for variable in variables { let item = JsCompletionItem { completion_type: JsCompletionType::Identifier, @@ -465,9 +503,8 @@ impl NodejsLspFiles { } GotoDefinitionResponse::Array(locations) => { for mut location in locations { - print!("{}", location.uri); let uri2 = location.uri.to_string(); - if uri2.contains(&filename) { + if uri2.contains("temp") { location.uri = Url::parse(&uri2).unwrap(); location.range.start.line += line; location.range.end.line += line; @@ -585,12 +622,14 @@ pub struct JsHover { } #[napi(object)] +#[derive(Debug)] pub struct JsRange { pub start: JsPosition, pub end: JsPosition, } #[napi(object)] +#[derive(Debug)] pub struct JsLocation { pub uri: String, pub range: JsRange, diff --git a/jinja-lsp-queries/src/search/test_queries.rs b/jinja-lsp-queries/src/search/test_queries.rs index f840468..9e71606 100644 --- a/jinja-lsp-queries/src/search/test_queries.rs +++ b/jinja-lsp-queries/src/search/test_queries.rs @@ -200,7 +200,7 @@ mod query_tests { {{ "|" }} {{ identifier }} {{}} - {{ identifier }} + {{ identifier }} "#; let cases = [ ( @@ -292,6 +292,7 @@ mod query_tests { Some((CompletionType::Identifier, false)), ), (Point::new(11, 19), None), + (Point::new(12, 28), None), ]; for case in cases { let tree = prepare_jinja_tree(source);