mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-14 14:13:58 +00:00
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>
This commit is contained in:
commit
42df7cc0c8
21 changed files with 77 additions and 24 deletions
4
Cargo.lock
generated
4
Cargo.lock
generated
|
@ -852,9 +852,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lsp-types"
|
name = "lsp-types"
|
||||||
version = "0.82.0"
|
version = "0.83.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "db895abb8527cf59e3de893ab2acf52cf904faeb65e60ea6f373e11fe86464e8"
|
checksum = "25e0bd4b95038f2c23bda332ba0ca684e8dda765db1f9bdb63dc4c3e01f3b456"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"bitflags",
|
"bitflags",
|
||||||
|
|
|
@ -21,7 +21,7 @@ env_logger = { version = "0.8.1", default-features = false }
|
||||||
itertools = "0.9.0"
|
itertools = "0.9.0"
|
||||||
jod-thread = "0.1.0"
|
jod-thread = "0.1.0"
|
||||||
log = "0.4.8"
|
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"
|
parking_lot = "0.11.0"
|
||||||
pico-args = "0.3.1"
|
pico-args = "0.3.1"
|
||||||
oorandom = "11.1.2"
|
oorandom = "11.1.2"
|
||||||
|
|
|
@ -48,7 +48,7 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti
|
||||||
references_provider: Some(OneOf::Left(true)),
|
references_provider: Some(OneOf::Left(true)),
|
||||||
document_highlight_provider: Some(OneOf::Left(true)),
|
document_highlight_provider: Some(OneOf::Left(true)),
|
||||||
document_symbol_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_action_provider: Some(code_action_provider),
|
||||||
code_lens_provider: Some(CodeLensOptions { resolve_provider: Some(true) }),
|
code_lens_provider: Some(CodeLensOptions { resolve_provider: Some(true) }),
|
||||||
document_formatting_provider: Some(OneOf::Left(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_INLINE,
|
||||||
CodeActionKind::REFACTOR_REWRITE,
|
CodeActionKind::REFACTOR_REWRITE,
|
||||||
]),
|
]),
|
||||||
|
resolve_provider: None,
|
||||||
work_done_progress_options: Default::default(),
|
work_done_progress_options: Default::default(),
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -47,6 +47,7 @@ pub struct Config {
|
||||||
pub call_info_full: bool,
|
pub call_info_full: bool,
|
||||||
pub lens: LensConfig,
|
pub lens: LensConfig,
|
||||||
pub hover: HoverConfig,
|
pub hover: HoverConfig,
|
||||||
|
pub semantic_tokens_refresh: bool,
|
||||||
|
|
||||||
pub with_sysroot: bool,
|
pub with_sysroot: bool,
|
||||||
pub linked_projects: Vec<LinkedProject>,
|
pub linked_projects: Vec<LinkedProject>,
|
||||||
|
@ -193,6 +194,7 @@ impl Config {
|
||||||
call_info_full: true,
|
call_info_full: true,
|
||||||
lens: LensConfig::default(),
|
lens: LensConfig::default(),
|
||||||
hover: HoverConfig::default(),
|
hover: HoverConfig::default(),
|
||||||
|
semantic_tokens_refresh: false,
|
||||||
linked_projects: Vec::new(),
|
linked_projects: Vec::new(),
|
||||||
root_path,
|
root_path,
|
||||||
}
|
}
|
||||||
|
@ -402,6 +404,14 @@ impl Config {
|
||||||
self.client_caps.hover_actions = get_bool("hoverActions");
|
self.client_caps.hover_actions = get_bool("hoverActions");
|
||||||
self.client_caps.status_notification = get_bool("statusNotification");
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
"trivially_copy_pass_by_ref",
|
"trivially_copy_pass_by_ref",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
code_description: None,
|
||||||
source: Some(
|
source: Some(
|
||||||
"clippy",
|
"clippy",
|
||||||
),
|
),
|
||||||
|
@ -61,6 +62,7 @@
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
tags: None,
|
tags: None,
|
||||||
|
data: None,
|
||||||
},
|
},
|
||||||
fixes: [],
|
fixes: [],
|
||||||
},
|
},
|
||||||
|
|
|
@ -20,12 +20,14 @@
|
||||||
"E0277",
|
"E0277",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
code_description: None,
|
||||||
source: Some(
|
source: Some(
|
||||||
"rustc",
|
"rustc",
|
||||||
),
|
),
|
||||||
message: "can\'t compare `{integer}` with `&str`\nthe trait `std::cmp::PartialEq<&str>` is not implemented for `{integer}`",
|
message: "can\'t compare `{integer}` with `&str`\nthe trait `std::cmp::PartialEq<&str>` is not implemented for `{integer}`",
|
||||||
related_information: None,
|
related_information: None,
|
||||||
tags: None,
|
tags: None,
|
||||||
|
data: None,
|
||||||
},
|
},
|
||||||
fixes: [],
|
fixes: [],
|
||||||
},
|
},
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
Error,
|
Error,
|
||||||
),
|
),
|
||||||
code: None,
|
code: None,
|
||||||
|
code_description: None,
|
||||||
source: Some(
|
source: Some(
|
||||||
"rustc",
|
"rustc",
|
||||||
),
|
),
|
||||||
|
@ -41,6 +42,7 @@
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
tags: None,
|
tags: None,
|
||||||
|
data: None,
|
||||||
},
|
},
|
||||||
fixes: [],
|
fixes: [],
|
||||||
},
|
},
|
||||||
|
@ -61,6 +63,7 @@
|
||||||
Error,
|
Error,
|
||||||
),
|
),
|
||||||
code: None,
|
code: None,
|
||||||
|
code_description: None,
|
||||||
source: Some(
|
source: Some(
|
||||||
"rustc",
|
"rustc",
|
||||||
),
|
),
|
||||||
|
@ -86,6 +89,7 @@
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
tags: None,
|
tags: None,
|
||||||
|
data: None,
|
||||||
},
|
},
|
||||||
fixes: [],
|
fixes: [],
|
||||||
},
|
},
|
||||||
|
|
|
@ -20,12 +20,14 @@
|
||||||
"E0053",
|
"E0053",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
code_description: None,
|
||||||
source: Some(
|
source: Some(
|
||||||
"rustc",
|
"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>>`",
|
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,
|
related_information: None,
|
||||||
tags: None,
|
tags: None,
|
||||||
|
data: None,
|
||||||
},
|
},
|
||||||
fixes: [],
|
fixes: [],
|
||||||
},
|
},
|
||||||
|
|
|
@ -20,12 +20,14 @@
|
||||||
"E0308",
|
"E0308",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
code_description: None,
|
||||||
source: Some(
|
source: Some(
|
||||||
"rustc",
|
"rustc",
|
||||||
),
|
),
|
||||||
message: "mismatched types\nexpected usize, found u32",
|
message: "mismatched types\nexpected usize, found u32",
|
||||||
related_information: None,
|
related_information: None,
|
||||||
tags: None,
|
tags: None,
|
||||||
|
data: None,
|
||||||
},
|
},
|
||||||
fixes: [],
|
fixes: [],
|
||||||
},
|
},
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
"unused_variables",
|
"unused_variables",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
code_description: None,
|
||||||
source: Some(
|
source: Some(
|
||||||
"rustc",
|
"rustc",
|
||||||
),
|
),
|
||||||
|
@ -30,6 +31,7 @@
|
||||||
Unnecessary,
|
Unnecessary,
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
data: None,
|
||||||
},
|
},
|
||||||
fixes: [
|
fixes: [
|
||||||
CodeAction {
|
CodeAction {
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
"unused_variables",
|
"unused_variables",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
code_description: None,
|
||||||
source: Some(
|
source: Some(
|
||||||
"rustc",
|
"rustc",
|
||||||
),
|
),
|
||||||
|
@ -30,6 +31,7 @@
|
||||||
Unnecessary,
|
Unnecessary,
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
data: None,
|
||||||
},
|
},
|
||||||
fixes: [
|
fixes: [
|
||||||
CodeAction {
|
CodeAction {
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
"unused_variables",
|
"unused_variables",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
code_description: None,
|
||||||
source: Some(
|
source: Some(
|
||||||
"rustc",
|
"rustc",
|
||||||
),
|
),
|
||||||
|
@ -30,6 +31,7 @@
|
||||||
Unnecessary,
|
Unnecessary,
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
data: None,
|
||||||
},
|
},
|
||||||
fixes: [
|
fixes: [
|
||||||
CodeAction {
|
CodeAction {
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
"E0061",
|
"E0061",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
code_description: None,
|
||||||
source: Some(
|
source: Some(
|
||||||
"rustc",
|
"rustc",
|
||||||
),
|
),
|
||||||
|
@ -45,6 +46,7 @@
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
tags: None,
|
tags: None,
|
||||||
|
data: None,
|
||||||
},
|
},
|
||||||
fixes: [],
|
fixes: [],
|
||||||
},
|
},
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
"let_and_return",
|
"let_and_return",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
code_description: None,
|
||||||
source: Some(
|
source: Some(
|
||||||
"clippy",
|
"clippy",
|
||||||
),
|
),
|
||||||
|
@ -45,6 +46,7 @@
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
tags: None,
|
tags: None,
|
||||||
|
data: None,
|
||||||
},
|
},
|
||||||
fixes: [
|
fixes: [
|
||||||
CodeAction {
|
CodeAction {
|
||||||
|
|
|
@ -248,10 +248,12 @@ pub(crate) fn map_rust_diagnostic_to_lsp(
|
||||||
range: in_macro_location.range,
|
range: in_macro_location.range,
|
||||||
severity,
|
severity,
|
||||||
code: code.clone().map(lsp_types::NumberOrString::String),
|
code: code.clone().map(lsp_types::NumberOrString::String),
|
||||||
|
code_description: None,
|
||||||
source: Some(source.clone()),
|
source: Some(source.clone()),
|
||||||
message: message.clone(),
|
message: message.clone(),
|
||||||
related_information: Some(information_for_additional_diagnostic),
|
related_information: Some(information_for_additional_diagnostic),
|
||||||
tags: if tags.is_empty() { None } else { Some(tags.clone()) },
|
tags: if tags.is_empty() { None } else { Some(tags.clone()) },
|
||||||
|
data: None,
|
||||||
};
|
};
|
||||||
|
|
||||||
Some(MappedRustDiagnostic {
|
Some(MappedRustDiagnostic {
|
||||||
|
@ -267,6 +269,7 @@ pub(crate) fn map_rust_diagnostic_to_lsp(
|
||||||
range: location.range,
|
range: location.range,
|
||||||
severity,
|
severity,
|
||||||
code: code.clone().map(lsp_types::NumberOrString::String),
|
code: code.clone().map(lsp_types::NumberOrString::String),
|
||||||
|
code_description: None,
|
||||||
source: Some(source.clone()),
|
source: Some(source.clone()),
|
||||||
message,
|
message,
|
||||||
related_information: if related_information.is_empty() {
|
related_information: if related_information.is_empty() {
|
||||||
|
@ -275,6 +278,7 @@ pub(crate) fn map_rust_diagnostic_to_lsp(
|
||||||
Some(related_information.clone())
|
Some(related_information.clone())
|
||||||
},
|
},
|
||||||
tags: if tags.is_empty() { None } else { Some(tags.clone()) },
|
tags: if tags.is_empty() { None } else { Some(tags.clone()) },
|
||||||
|
data: None,
|
||||||
};
|
};
|
||||||
|
|
||||||
let main_diagnostic =
|
let main_diagnostic =
|
||||||
|
|
|
@ -1121,10 +1121,12 @@ pub(crate) fn publish_diagnostics(
|
||||||
range: to_proto::range(&line_index, d.range),
|
range: to_proto::range(&line_index, d.range),
|
||||||
severity: Some(to_proto::diagnostic_severity(d.severity)),
|
severity: Some(to_proto::diagnostic_severity(d.severity)),
|
||||||
code: None,
|
code: None,
|
||||||
|
code_description: None,
|
||||||
source: Some("rust-analyzer".to_string()),
|
source: Some("rust-analyzer".to_string()),
|
||||||
message: d.message,
|
message: d.message,
|
||||||
related_information: None,
|
related_information: None,
|
||||||
tags: if d.unused { Some(vec![DiagnosticTag::Unnecessary]) } else { None },
|
tags: if d.unused { Some(vec![DiagnosticTag::Unnecessary]) } else { None },
|
||||||
|
data: None,
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
Ok(diagnostics)
|
Ok(diagnostics)
|
||||||
|
|
|
@ -330,6 +330,12 @@ impl GlobalState {
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
self.update_file_notifications_on_threadpool(subscriptions);
|
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() {
|
if let Some(diagnostic_changes) = self.diagnostics.take_changes() {
|
||||||
|
|
|
@ -709,7 +709,16 @@ pub(crate) fn call_hierarchy_item(
|
||||||
let detail = target.description.clone();
|
let detail = target.description.clone();
|
||||||
let kind = symbol_kind(target.kind);
|
let kind = symbol_kind(target.kind);
|
||||||
let (uri, range, selection_range) = location_info(snap, target)?;
|
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 {
|
pub(crate) fn code_action_kind(kind: AssistKind) -> lsp_types::CodeActionKind {
|
||||||
|
|
30
editors/code/package-lock.json
generated
30
editors/code/package-lock.json
generated
|
@ -2409,32 +2409,32 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vscode-jsonrpc": {
|
"vscode-jsonrpc": {
|
||||||
"version": "6.0.0-next.5",
|
"version": "6.0.0-next.7",
|
||||||
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0-next.5.tgz",
|
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0-next.7.tgz",
|
||||||
"integrity": "sha512-IAgsltQPwg/pXOPsdXgbUTCaO9VSKZwirZN5SGtkdYQ/R3VjeC4v00WTVvoNayWMZpoC3O9u0ogqmsKzKhVasQ=="
|
"integrity": "sha512-1nG+6cuTtpzmXe7yYfO9GCkYlyV6Ai+jDnwidHiT2T7zhc+bJM+VTtc0T/CdTlDyTNTqIcCj0V1nD4TcVjJ7Ug=="
|
||||||
},
|
},
|
||||||
"vscode-languageclient": {
|
"vscode-languageclient": {
|
||||||
"version": "7.0.0-next.9",
|
"version": "7.0.0-next.12",
|
||||||
"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0-next.9.tgz",
|
"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0-next.12.tgz",
|
||||||
"integrity": "sha512-lFO+rN/i72CM2va6iKXq1lD7pJg8J93KEXf0w0boWVqU+DJhWzLrV3pXl8Xk1nCv//qOAyhlc/nx2KZCTeRF/A==",
|
"integrity": "sha512-OrzvOvhS5o26C0KctTJC7hkwh3avCwkVhllzy42AqwpIUZ3p2aVqkSG2uVxaeodq8ThBb3TLgtg50vxyWs6FEg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"semver": "^6.3.0",
|
"semver": "^6.3.0",
|
||||||
"vscode-languageserver-protocol": "3.16.0-next.7"
|
"vscode-languageserver-protocol": "3.16.0-next.10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vscode-languageserver-protocol": {
|
"vscode-languageserver-protocol": {
|
||||||
"version": "3.16.0-next.7",
|
"version": "3.16.0-next.10",
|
||||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0-next.7.tgz",
|
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0-next.10.tgz",
|
||||||
"integrity": "sha512-tOjrg+K3RddJ547zpC9/LAgTbzadkPuHlqJFFWIcKjVhiJOh73XyY+Ngcu9wukGaTsuSGjJ0W8rlmwanixa0FQ==",
|
"integrity": "sha512-YRTctHUZvts0Z1xXKNYU0ha0o+Tlgtwr+6O8OmDquM086N8exiSKBMwMC+Ra1QtIE+1mfW43Wxsme2FnMkAS9A==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"vscode-jsonrpc": "6.0.0-next.5",
|
"vscode-jsonrpc": "6.0.0-next.7",
|
||||||
"vscode-languageserver-types": "3.16.0-next.3"
|
"vscode-languageserver-types": "3.16.0-next.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vscode-languageserver-types": {
|
"vscode-languageserver-types": {
|
||||||
"version": "3.16.0-next.3",
|
"version": "3.16.0-next.4",
|
||||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.3.tgz",
|
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.4.tgz",
|
||||||
"integrity": "sha512-s/z5ZqSe7VpoXJ6JQcvwRiPPA3nG0nAcJ/HH03zoU6QaFfnkcgPK+HshC3WKPPnC2G08xA0iRB6h7kmyBB5Adg=="
|
"integrity": "sha512-NlKJyGcET/ZBCCLBYIPaGo2c37R03bPYeWXozUtnjyye7+9dhlbMSODyoG2INcQf8zFmB4qhm2UOJjgYEgPCNA=="
|
||||||
},
|
},
|
||||||
"vscode-test": {
|
"vscode-test": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"node-fetch": "^2.6.1",
|
"node-fetch": "^2.6.1",
|
||||||
"vscode-languageclient": "7.0.0-next.9"
|
"vscode-languageclient": "7.0.0-next.12"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@rollup/plugin-commonjs": "^13.0.2",
|
"@rollup/plugin-commonjs": "^13.0.2",
|
||||||
|
|
|
@ -75,12 +75,11 @@ export async function sendRequestWithRetry<TParam, TRet>(
|
||||||
log.warn("LSP request timed out", { method: reqType.method, param, error });
|
log.warn("LSP request timed out", { method: reqType.method, param, error });
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
if (error.code === lc.LSPErrorCodes.RequestCancelled) {
|
||||||
if (error.code === lc.ErrorCodes.RequestCancelled) {
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error.code !== lc.ErrorCodes.ContentModified) {
|
if (error.code !== lc.LSPErrorCodes.ContentModified) {
|
||||||
log.warn("LSP request failed", { method: reqType.method, param, error });
|
log.warn("LSP request failed", { method: reqType.method, param, error });
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue