diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-10-26 14:49:07 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-26 14:49:07 +0000 |
| commit | 42df7cc0c8ce56fb8711ac8b0c11ee71a08c2ca8 (patch) | |
| tree | 0f81997e2c68cf0cf8a212178c5f56882a30c4b8 | |
| parent | a0f134686409161b5bbef47388db19b30e373c81 (diff) | |
| parent | 8982c0610f88145fa259534d7ab4b981e824ee32 (diff) | |
| download | rust-42df7cc0c8ce56fb8711ac8b0c11ee71a08c2ca8.tar.gz rust-42df7cc0c8ce56fb8711ac8b0c11ee71a08c2ca8.zip | |
Merge #6313
6313: Latest proposed LSP 3.16.0 and refresh semantic tokens r=matklad a=kjeremy Needs: https://github.com/gluon-lang/lsp-types/pull/183 Co-authored-by: kjeremy <kjeremy@gmail.com> Co-authored-by: Jeremy A. Kolb <jkolb@ara.com>
21 files changed, 77 insertions, 24 deletions
diff --git a/Cargo.lock b/Cargo.lock index 5c7bcb17b06..fe211b9b30f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -852,9 +852,9 @@ dependencies = [ [[package]] name = "lsp-types" -version = "0.82.0" +version = "0.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db895abb8527cf59e3de893ab2acf52cf904faeb65e60ea6f373e11fe86464e8" +checksum = "25e0bd4b95038f2c23bda332ba0ca684e8dda765db1f9bdb63dc4c3e01f3b456" dependencies = [ "base64", "bitflags", diff --git a/crates/rust-analyzer/Cargo.toml b/crates/rust-analyzer/Cargo.toml index 975b24aaf1b..d25c4bf8374 100644 --- a/crates/rust-analyzer/Cargo.toml +++ b/crates/rust-analyzer/Cargo.toml @@ -21,7 +21,7 @@ env_logger = { version = "0.8.1", default-features = false } itertools = "0.9.0" jod-thread = "0.1.0" log = "0.4.8" -lsp-types = { version = "0.82.0", features = ["proposed"] } +lsp-types = { version = "0.83.0", features = ["proposed"] } parking_lot = "0.11.0" pico-args = "0.3.1" oorandom = "11.1.2" diff --git a/crates/rust-analyzer/src/caps.rs b/crates/rust-analyzer/src/caps.rs index c589afeafcf..ff1ae9575ff 100644 --- a/crates/rust-analyzer/src/caps.rs +++ b/crates/rust-analyzer/src/caps.rs @@ -48,7 +48,7 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti references_provider: Some(OneOf::Left(true)), document_highlight_provider: Some(OneOf::Left(true)), document_symbol_provider: Some(OneOf::Left(true)), - workspace_symbol_provider: Some(true), + workspace_symbol_provider: Some(OneOf::Left(true)), code_action_provider: Some(code_action_provider), code_lens_provider: Some(CodeLensOptions { resolve_provider: Some(true) }), document_formatting_provider: Some(OneOf::Left(true)), @@ -113,6 +113,7 @@ fn code_action_capabilities(client_caps: &ClientCapabilities) -> CodeActionProvi CodeActionKind::REFACTOR_INLINE, CodeActionKind::REFACTOR_REWRITE, ]), + resolve_provider: None, work_done_progress_options: Default::default(), }) }) diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index 1b9b24698a9..2ed6a0d82e2 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -47,6 +47,7 @@ pub struct Config { pub call_info_full: bool, pub lens: LensConfig, pub hover: HoverConfig, + pub semantic_tokens_refresh: bool, pub with_sysroot: bool, pub linked_projects: Vec<LinkedProject>, @@ -193,6 +194,7 @@ impl Config { call_info_full: true, lens: LensConfig::default(), hover: HoverConfig::default(), + semantic_tokens_refresh: false, linked_projects: Vec::new(), root_path, } @@ -402,6 +404,14 @@ impl Config { self.client_caps.hover_actions = get_bool("hoverActions"); self.client_caps.status_notification = get_bool("statusNotification"); } + + if let Some(workspace_caps) = caps.workspace.as_ref() { + if let Some(refresh_support) = + workspace_caps.semantic_tokens.as_ref().and_then(|it| it.refresh_support) + { + self.semantic_tokens_refresh = refresh_support; + } + } } } diff --git a/crates/rust-analyzer/src/diagnostics/test_data/clippy_pass_by_ref.txt b/crates/rust-analyzer/src/diagnostics/test_data/clippy_pass_by_ref.txt index d0651712607..58d47d32a42 100644 --- a/crates/rust-analyzer/src/diagnostics/test_data/clippy_pass_by_ref.txt +++ b/crates/rust-analyzer/src/diagnostics/test_data/clippy_pass_by_ref.txt @@ -20,6 +20,7 @@ "trivially_copy_pass_by_ref", ), ), + code_description: None, source: Some( "clippy", ), @@ -61,6 +62,7 @@ ], ), tags: None, + data: None, }, fixes: [], }, diff --git a/crates/rust-analyzer/src/diagnostics/test_data/handles_macro_location.txt b/crates/rust-analyzer/src/diagnostics/test_data/handles_macro_location.txt index f5de2f07f3a..6aa26bf63ab 100644 --- a/crates/rust-analyzer/src/diagnostics/test_data/handles_macro_location.txt +++ b/crates/rust-analyzer/src/diagnostics/test_data/handles_macro_location.txt @@ -20,12 +20,14 @@ "E0277", ), ), + code_description: None, source: Some( "rustc", ), message: "can\'t compare `{integer}` with `&str`\nthe trait `std::cmp::PartialEq<&str>` is not implemented for `{integer}`", related_information: None, tags: None, + data: None, }, fixes: [], }, diff --git a/crates/rust-analyzer/src/diagnostics/test_data/macro_compiler_error.txt b/crates/rust-analyzer/src/diagnostics/test_data/macro_compiler_error.txt index 00e8da8a70c..7aaffaba251 100644 --- a/crates/rust-analyzer/src/diagnostics/test_data/macro_compiler_error.txt +++ b/crates/rust-analyzer/src/diagnostics/test_data/macro_compiler_error.txt @@ -16,6 +16,7 @@ Error, ), code: None, + code_description: None, source: Some( "rustc", ), @@ -41,6 +42,7 @@ ], ), tags: None, + data: None, }, fixes: [], }, @@ -61,6 +63,7 @@ Error, ), code: None, + code_description: None, source: Some( "rustc", ), @@ -86,6 +89,7 @@ ], ), tags: None, + data: None, }, fixes: [], }, diff --git a/crates/rust-analyzer/src/diagnostics/test_data/rustc_incompatible_type_for_trait.txt b/crates/rust-analyzer/src/diagnostics/test_data/rustc_incompatible_type_for_trait.txt index fc54440be23..58421342001 100644 --- a/crates/rust-analyzer/src/diagnostics/test_data/rustc_incompatible_type_for_trait.txt +++ b/crates/rust-analyzer/src/diagnostics/test_data/rustc_incompatible_type_for_trait.txt @@ -20,12 +20,14 @@ "E0053", ), ), + code_description: None, source: Some( "rustc", ), message: "method `next` has an incompatible type for trait\nexpected type `fn(&mut ty::list_iter::ListIterator<\'list, M>) -> std::option::Option<&ty::Ref<M>>`\n found type `fn(&ty::list_iter::ListIterator<\'list, M>) -> std::option::Option<&\'list ty::Ref<M>>`", related_information: None, tags: None, + data: None, }, fixes: [], }, diff --git a/crates/rust-analyzer/src/diagnostics/test_data/rustc_mismatched_type.txt b/crates/rust-analyzer/src/diagnostics/test_data/rustc_mismatched_type.txt index c269af218ce..2610e4e209a 100644 --- a/crates/rust-analyzer/src/diagnostics/test_data/rustc_mismatched_type.txt +++ b/crates/rust-analyzer/src/diagnostics/test_data/rustc_mismatched_type.txt @@ -20,12 +20,14 @@ "E0308", ), ), + code_description: None, source: Some( "rustc", ), message: "mismatched types\nexpected usize, found u32", related_information: None, tags: None, + data: None, }, fixes: [], }, diff --git a/crates/rust-analyzer/src/diagnostics/test_data/rustc_unused_variable.txt b/crates/rust-analyzer/src/diagnostics/test_data/rustc_unused_variable.txt index 74d91bc77c8..8dc53391e94 100644 --- a/crates/rust-analyzer/src/diagnostics/test_data/rustc_unused_variable.txt +++ b/crates/rust-analyzer/src/diagnostics/test_data/rustc_unused_variable.txt @@ -20,6 +20,7 @@ "unused_variables", ), ), + code_description: None, source: Some( "rustc", ), @@ -30,6 +31,7 @@ Unnecessary, ], ), + data: None, }, fixes: [ CodeAction { diff --git a/crates/rust-analyzer/src/diagnostics/test_data/rustc_unused_variable_as_hint.txt b/crates/rust-analyzer/src/diagnostics/test_data/rustc_unused_variable_as_hint.txt index 8a420c9495c..c8703194c83 100644 --- a/crates/rust-analyzer/src/diagnostics/test_data/rustc_unused_variable_as_hint.txt +++ b/crates/rust-analyzer/src/diagnostics/test_data/rustc_unused_variable_as_hint.txt @@ -20,6 +20,7 @@ "unused_variables", ), ), + code_description: None, source: Some( "rustc", ), @@ -30,6 +31,7 @@ Unnecessary, ], ), + data: None, }, fixes: [ CodeAction { diff --git a/crates/rust-analyzer/src/diagnostics/test_data/rustc_unused_variable_as_info.txt b/crates/rust-analyzer/src/diagnostics/test_data/rustc_unused_variable_as_info.txt index 79910660b7f..dc93227adf4 100644 --- a/crates/rust-analyzer/src/diagnostics/test_data/rustc_unused_variable_as_info.txt +++ b/crates/rust-analyzer/src/diagnostics/test_data/rustc_unused_variable_as_info.txt @@ -20,6 +20,7 @@ "unused_variables", ), ), + code_description: None, source: Some( "rustc", ), @@ -30,6 +31,7 @@ Unnecessary, ], ), + data: None, }, fixes: [ CodeAction { diff --git a/crates/rust-analyzer/src/diagnostics/test_data/rustc_wrong_number_of_parameters.txt b/crates/rust-analyzer/src/diagnostics/test_data/rustc_wrong_number_of_parameters.txt index efe37261db3..ba1b98b335e 100644 --- a/crates/rust-analyzer/src/diagnostics/test_data/rustc_wrong_number_of_parameters.txt +++ b/crates/rust-analyzer/src/diagnostics/test_data/rustc_wrong_number_of_parameters.txt @@ -20,6 +20,7 @@ "E0061", ), ), + code_description: None, source: Some( "rustc", ), @@ -45,6 +46,7 @@ ], ), tags: None, + data: None, }, fixes: [], }, diff --git a/crates/rust-analyzer/src/diagnostics/test_data/snap_multi_line_fix.txt b/crates/rust-analyzer/src/diagnostics/test_data/snap_multi_line_fix.txt index 4f811ab64bf..81f752672f0 100644 --- a/crates/rust-analyzer/src/diagnostics/test_data/snap_multi_line_fix.txt +++ b/crates/rust-analyzer/src/diagnostics/test_data/snap_multi_line_fix.txt @@ -20,6 +20,7 @@ "let_and_return", ), ), + code_description: None, source: Some( "clippy", ), @@ -45,6 +46,7 @@ ], ), tags: None, + data: None, }, fixes: [ CodeAction { diff --git a/crates/rust-analyzer/src/diagnostics/to_proto.rs b/crates/rust-analyzer/src/diagnostics/to_proto.rs index 33606edda4b..b949577c13d 100644 --- a/crates/rust-analyzer/src/diagnostics/to_proto.rs +++ b/crates/rust-analyzer/src/diagnostics/to_proto.rs @@ -248,10 +248,12 @@ pub(crate) fn map_rust_diagnostic_to_lsp( range: in_macro_location.range, severity, code: code.clone().map(lsp_types::NumberOrString::String), + code_description: None, source: Some(source.clone()), message: message.clone(), related_information: Some(information_for_additional_diagnostic), tags: if tags.is_empty() { None } else { Some(tags.clone()) }, + data: None, }; Some(MappedRustDiagnostic { @@ -267,6 +269,7 @@ pub(crate) fn map_rust_diagnostic_to_lsp( range: location.range, severity, code: code.clone().map(lsp_types::NumberOrString::String), + code_description: None, source: Some(source.clone()), message, related_information: if related_information.is_empty() { @@ -275,6 +278,7 @@ pub(crate) fn map_rust_diagnostic_to_lsp( Some(related_information.clone()) }, tags: if tags.is_empty() { None } else { Some(tags.clone()) }, + data: None, }; let main_diagnostic = diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index 2680e5f08bc..049c583a42c 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs @@ -1121,10 +1121,12 @@ pub(crate) fn publish_diagnostics( range: to_proto::range(&line_index, d.range), severity: Some(to_proto::diagnostic_severity(d.severity)), code: None, + code_description: None, source: Some("rust-analyzer".to_string()), message: d.message, related_information: None, tags: if d.unused { Some(vec![DiagnosticTag::Unnecessary]) } else { None }, + data: None, }) .collect(); Ok(diagnostics) diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs index ed529273304..ff855fe1a64 100644 --- a/crates/rust-analyzer/src/main_loop.rs +++ b/crates/rust-analyzer/src/main_loop.rs @@ -330,6 +330,12 @@ impl GlobalState { .collect::<Vec<_>>(); self.update_file_notifications_on_threadpool(subscriptions); + + // Refresh semantic tokens if the client supports it. + if self.config.semantic_tokens_refresh { + self.semantic_tokens_cache.lock().clear(); + self.send_request::<lsp_types::request::SemanticTokensRefesh>((), |_, _| ()); + } } if let Some(diagnostic_changes) = self.diagnostics.take_changes() { diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index 24a658fc653..92b7c7b6810 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs @@ -709,7 +709,16 @@ pub(crate) fn call_hierarchy_item( let detail = target.description.clone(); let kind = symbol_kind(target.kind); let (uri, range, selection_range) = location_info(snap, target)?; - Ok(lsp_types::CallHierarchyItem { name, kind, tags: None, detail, uri, range, selection_range }) + Ok(lsp_types::CallHierarchyItem { + name, + kind, + tags: None, + detail, + uri, + range, + selection_range, + data: None, + }) } pub(crate) fn code_action_kind(kind: AssistKind) -> lsp_types::CodeActionKind { diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json index 33d60d4ddff..83ef00058e4 100644 --- a/editors/code/package-lock.json +++ b/editors/code/package-lock.json @@ -2409,32 +2409,32 @@ } }, "vscode-jsonrpc": { - "version": "6.0.0-next.5", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0-next.5.tgz", - "integrity": "sha512-IAgsltQPwg/pXOPsdXgbUTCaO9VSKZwirZN5SGtkdYQ/R3VjeC4v00WTVvoNayWMZpoC3O9u0ogqmsKzKhVasQ==" + "version": "6.0.0-next.7", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0-next.7.tgz", + "integrity": "sha512-1nG+6cuTtpzmXe7yYfO9GCkYlyV6Ai+jDnwidHiT2T7zhc+bJM+VTtc0T/CdTlDyTNTqIcCj0V1nD4TcVjJ7Ug==" }, "vscode-languageclient": { - "version": "7.0.0-next.9", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0-next.9.tgz", - "integrity": "sha512-lFO+rN/i72CM2va6iKXq1lD7pJg8J93KEXf0w0boWVqU+DJhWzLrV3pXl8Xk1nCv//qOAyhlc/nx2KZCTeRF/A==", + "version": "7.0.0-next.12", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0-next.12.tgz", + "integrity": "sha512-OrzvOvhS5o26C0KctTJC7hkwh3avCwkVhllzy42AqwpIUZ3p2aVqkSG2uVxaeodq8ThBb3TLgtg50vxyWs6FEg==", "requires": { "semver": "^6.3.0", - "vscode-languageserver-protocol": "3.16.0-next.7" + "vscode-languageserver-protocol": "3.16.0-next.10" } }, "vscode-languageserver-protocol": { - "version": "3.16.0-next.7", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0-next.7.tgz", - "integrity": "sha512-tOjrg+K3RddJ547zpC9/LAgTbzadkPuHlqJFFWIcKjVhiJOh73XyY+Ngcu9wukGaTsuSGjJ0W8rlmwanixa0FQ==", + "version": "3.16.0-next.10", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0-next.10.tgz", + "integrity": "sha512-YRTctHUZvts0Z1xXKNYU0ha0o+Tlgtwr+6O8OmDquM086N8exiSKBMwMC+Ra1QtIE+1mfW43Wxsme2FnMkAS9A==", "requires": { - "vscode-jsonrpc": "6.0.0-next.5", - "vscode-languageserver-types": "3.16.0-next.3" + "vscode-jsonrpc": "6.0.0-next.7", + "vscode-languageserver-types": "3.16.0-next.4" } }, "vscode-languageserver-types": { - "version": "3.16.0-next.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.3.tgz", - "integrity": "sha512-s/z5ZqSe7VpoXJ6JQcvwRiPPA3nG0nAcJ/HH03zoU6QaFfnkcgPK+HshC3WKPPnC2G08xA0iRB6h7kmyBB5Adg==" + "version": "3.16.0-next.4", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.4.tgz", + "integrity": "sha512-NlKJyGcET/ZBCCLBYIPaGo2c37R03bPYeWXozUtnjyye7+9dhlbMSODyoG2INcQf8zFmB4qhm2UOJjgYEgPCNA==" }, "vscode-test": { "version": "1.4.0", diff --git a/editors/code/package.json b/editors/code/package.json index af845d7bc42..eccafccdd9e 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -36,7 +36,7 @@ }, "dependencies": { "node-fetch": "^2.6.1", - "vscode-languageclient": "7.0.0-next.9" + "vscode-languageclient": "7.0.0-next.12" }, "devDependencies": { "@rollup/plugin-commonjs": "^13.0.2", diff --git a/editors/code/src/util.ts b/editors/code/src/util.ts index 08159b43c3e..53492a445c4 100644 --- a/editors/code/src/util.ts +++ b/editors/code/src/util.ts @@ -75,12 +75,11 @@ export async function sendRequestWithRetry<TParam, TRet>( log.warn("LSP request timed out", { method: reqType.method, param, error }); throw error; } - - if (error.code === lc.ErrorCodes.RequestCancelled) { + if (error.code === lc.LSPErrorCodes.RequestCancelled) { throw error; } - if (error.code !== lc.ErrorCodes.ContentModified) { + if (error.code !== lc.LSPErrorCodes.ContentModified) { log.warn("LSP request failed", { method: reqType.method, param, error }); throw error; } |
