diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2022-03-07 16:49:12 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-07 16:49:12 +0000 |
| commit | 49646b71d49cc3c94aa0105223be0ff71cbb6b7d (patch) | |
| tree | 533597081181df411cf4c043152f65a55f4f03dd | |
| parent | 18d0faf027a0ea2808b842f2dfbd7b7e12438f44 (diff) | |
| parent | 88a2141b7702a553050dc46653251550300e6269 (diff) | |
| download | rust-49646b71d49cc3c94aa0105223be0ff71cbb6b7d.tar.gz rust-49646b71d49cc3c94aa0105223be0ff71cbb6b7d.zip | |
Merge #11445
11445: Upstream inlay hints r=lnicola a=lnicola Closes https://github.com/rust-analyzer/rust-analyzer/issues/2797 Closes https://github.com/rust-analyzer/rust-analyzer/issues/3394 (since now resolve the hints for the range given only, not for the whole document. We don't actually resolve anything due to [hard requirement](https://github.com/rust-analyzer/rust-analyzer/pull/11445#issuecomment-1035227434) on label being immutable. Any further heavy actions could go to the `resolve` method that's now available via the official Code API for hints) Based on `@SomeoneToIgnore's` branch, with a couple of updates: - I squashed, more or less successfully, the commits on that branch - downloading the `.d.ts` no longer works, but you can get it manually from https://raw.githubusercontent.com/microsoft/vscode/release/1.64/src/vscode-dts/vscode.proposed.inlayHints.d.ts - you might need to pass `--enable-proposed-api matklad.rust-analyzer` - if I'm reading the definition right, `InlayHintKind` needs to be serialized as a number, not string - this doesn't work anyway -- the client-side gets the hints, but they don't display Co-authored-by: Kirill Bulatov <mail4score@gmail.com> Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
| -rw-r--r-- | crates/ide/src/inlay_hints.rs | 113 | ||||
| -rw-r--r-- | crates/ide/src/lib.rs | 3 | ||||
| -rw-r--r-- | crates/ide/src/static_index.rs | 1 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/caps.rs | 1 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/handlers.rs | 15 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/lsp_ext.rs | 23 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/to_proto.rs | 14 | ||||
| -rw-r--r-- | docs/dev/lsp-extensions.md | 15 | ||||
| -rw-r--r-- | editors/code/.gitignore | 2 | ||||
| -rw-r--r-- | editors/code/package-lock.json | 627 | ||||
| -rw-r--r-- | editors/code/package.json | 87 | ||||
| -rw-r--r-- | editors/code/src/inlay_hints.ts | 277 | ||||
| -rw-r--r-- | editors/code/src/lsp_ext.ts | 20 |
13 files changed, 555 insertions, 643 deletions
diff --git a/crates/ide/src/inlay_hints.rs b/crates/ide/src/inlay_hints.rs index f77cae3e3cc..8ecc5567b43 100644 --- a/crates/ide/src/inlay_hints.rs +++ b/crates/ide/src/inlay_hints.rs @@ -5,7 +5,7 @@ use itertools::Itertools; use stdx::to_lower_snake_case; use syntax::{ ast::{self, AstNode, HasArgList, HasName, UnaryOp}, - match_ast, Direction, NodeOrToken, SmolStr, SyntaxKind, TextRange, T, + match_ast, Direction, NodeOrToken, SmolStr, SyntaxKind, SyntaxNode, TextRange, T, }; use crate::FileId; @@ -58,6 +58,7 @@ pub struct InlayHint { pub(crate) fn inlay_hints( db: &RootDatabase, file_id: FileId, + range_limit: Option<FileRange>, config: &InlayHintsConfig, ) -> Vec<InlayHint> { let _p = profile::span("inlay_hints"); @@ -65,25 +66,50 @@ pub(crate) fn inlay_hints( let file = sema.parse(file_id); let file = file.syntax(); - let mut res = Vec::new(); - - for node in file.descendants() { - if let Some(expr) = ast::Expr::cast(node.clone()) { - get_chaining_hints(&mut res, &sema, config, &expr); - match expr { - ast::Expr::CallExpr(it) => { - get_param_name_hints(&mut res, &sema, config, ast::Expr::from(it)); - } - ast::Expr::MethodCallExpr(it) => { - get_param_name_hints(&mut res, &sema, config, ast::Expr::from(it)); + let mut hints = Vec::new(); + + if let Some(range_limit) = range_limit { + let range_limit = range_limit.range; + match file.covering_element(range_limit) { + NodeOrToken::Token(_) => return hints, + NodeOrToken::Node(n) => { + for node in n + .descendants() + .filter(|descendant| range_limit.contains_range(descendant.text_range())) + { + get_hints(&mut hints, &sema, config, node); } - _ => (), } - } else if let Some(it) = ast::IdentPat::cast(node.clone()) { - get_bind_pat_hints(&mut res, &sema, config, &it); } + } else { + for node in file.descendants() { + get_hints(&mut hints, &sema, config, node); + } + } + + hints +} + +fn get_hints( + hints: &mut Vec<InlayHint>, + sema: &Semantics<RootDatabase>, + config: &InlayHintsConfig, + node: SyntaxNode, +) { + if let Some(expr) = ast::Expr::cast(node.clone()) { + get_chaining_hints(hints, sema, config, &expr); + match expr { + ast::Expr::CallExpr(it) => { + get_param_name_hints(hints, sema, config, ast::Expr::from(it)); + } + ast::Expr::MethodCallExpr(it) => { + get_param_name_hints(hints, sema, config, ast::Expr::from(it)); + } + _ => (), + } + } else if let Some(it) = ast::IdentPat::cast(node) { + get_bind_pat_hints(hints, sema, config, &it); } - res } fn get_chaining_hints( @@ -541,6 +567,8 @@ fn get_callable( #[cfg(test)] mod tests { use expect_test::{expect, Expect}; + use ide_db::base_db::FileRange; + use syntax::{TextRange, TextSize}; use test_utils::extract_annotations; use crate::{fixture, inlay_hints::InlayHintsConfig}; @@ -604,7 +632,7 @@ mod tests { fn check_with_config(config: InlayHintsConfig, ra_fixture: &str) { let (analysis, file_id) = fixture::file(ra_fixture); let expected = extract_annotations(&*analysis.file_text(file_id).unwrap()); - let inlay_hints = analysis.inlay_hints(&config, file_id).unwrap(); + let inlay_hints = analysis.inlay_hints(&config, file_id, None).unwrap(); let actual = inlay_hints.into_iter().map(|it| (it.range, it.label.to_string())).collect::<Vec<_>>(); assert_eq!(expected, actual, "\nExpected:\n{:#?}\n\nActual:\n{:#?}", expected, actual); @@ -613,7 +641,7 @@ mod tests { #[track_caller] fn check_expect(config: InlayHintsConfig, ra_fixture: &str, expect: Expect) { let (analysis, file_id) = fixture::file(ra_fixture); - let inlay_hints = analysis.inlay_hints(&config, file_id).unwrap(); + let inlay_hints = analysis.inlay_hints(&config, file_id, None).unwrap(); expect.assert_debug_eq(&inlay_hints) } @@ -1046,6 +1074,55 @@ fn main() { } #[test] + fn check_hint_range_limit() { + let fixture = r#" + //- minicore: fn, sized + fn foo() -> impl Fn() { loop {} } + fn foo1() -> impl Fn(f64) { loop {} } + fn foo2() -> impl Fn(f64, f64) { loop {} } + fn foo3() -> impl Fn(f64, f64) -> u32 { loop {} } + fn foo4() -> &'static dyn Fn(f64, f64) -> u32 { loop {} } + fn foo5() -> &'static dyn Fn(&'static dyn Fn(f64, f64) -> u32, f64) -> u32 { loop {} } + fn foo6() -> impl Fn(f64, f64) -> u32 + Sized { loop {} } + fn foo7() -> *const (impl Fn(f64, f64) -> u32 + Sized) { loop {} } + + fn main() { + let foo = foo(); + let foo = foo1(); + let foo = foo2(); + let foo = foo3(); + // ^^^ impl Fn(f64, f64) -> u32 + let foo = foo4(); + // ^^^ &dyn Fn(f64, f64) -> u32 + let foo = foo5(); + let foo = foo6(); + let foo = foo7(); + } + "#; + let (analysis, file_id) = fixture::file(fixture); + let expected = extract_annotations(&*analysis.file_text(file_id).unwrap()); + let inlay_hints = analysis + .inlay_hints( + &InlayHintsConfig { + parameter_hints: false, + type_hints: true, + chaining_hints: false, + hide_named_constructor_hints: false, + max_length: None, + }, + file_id, + Some(FileRange { + file_id, + range: TextRange::new(TextSize::from(500), TextSize::from(600)), + }), + ) + .unwrap(); + let actual = + inlay_hints.into_iter().map(|it| (it.range, it.label.to_string())).collect::<Vec<_>>(); + assert_eq!(expected, actual, "\nExpected:\n{:#?}\n\nActual:\n{:#?}", expected, actual); + } + + #[test] fn fn_hints_ptr_rpit_fn_parentheses() { check_types( r#" diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs index 4028b0bc725..1acaaaccf0d 100644 --- a/crates/ide/src/lib.rs +++ b/crates/ide/src/lib.rs @@ -358,8 +358,9 @@ impl Analysis { &self, config: &InlayHintsConfig, file_id: FileId, + range: Option<FileRange>, ) -> Cancellable<Vec<InlayHint>> { - self.with_db(|db| inlay_hints::inlay_hints(db, file_id, config)) + self.with_db(|db| inlay_hints::inlay_hints(db, file_id, range, config)) } /// Returns the set of folding ranges. diff --git a/crates/ide/src/static_index.rs b/crates/ide/src/static_index.rs index fb94342a785..31d85c60e7a 100644 --- a/crates/ide/src/static_index.rs +++ b/crates/ide/src/static_index.rs @@ -112,6 +112,7 @@ impl StaticIndex<'_> { max_length: Some(25), }, file_id, + None, ) .unwrap(); // hovers diff --git a/crates/rust-analyzer/src/caps.rs b/crates/rust-analyzer/src/caps.rs index 457399a6189..dc6cf61f79a 100644 --- a/crates/rust-analyzer/src/caps.rs +++ b/crates/rust-analyzer/src/caps.rs @@ -115,6 +115,7 @@ pub fn server_capabilities(config: &Config) -> ServerCapabilities { experimental: Some(json!({ "externalDocs": true, "hoverRange": true, + "inlayHints": true, "joinLines": true, "matchingBrace": true, "moveItem": true, diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index b45fbe698c9..249e861f9b7 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs @@ -1318,11 +1318,22 @@ pub(crate) fn handle_inlay_hints( params: InlayHintsParams, ) -> Result<Vec<InlayHint>> { let _p = profile::span("handle_inlay_hints"); - let file_id = from_proto::file_id(&snap, ¶ms.text_document.uri)?; + let document_uri = ¶ms.text_document.uri; + let file_id = from_proto::file_id(&snap, document_uri)?; let line_index = snap.file_line_index(file_id)?; + let range = params + .range + .map(|range| { + from_proto::file_range( + &snap, + TextDocumentIdentifier::new(document_uri.to_owned()), + range, + ) + }) + .transpose()?; Ok(snap .analysis - .inlay_hints(&snap.config.inlay_hints(), file_id)? + .inlay_hints(&snap.config.inlay_hints(), file_id, range)? .into_iter() .map(|it| to_proto::inlay_hint(&line_index, it)) .collect()) diff --git a/crates/rust-analyzer/src/lsp_ext.rs b/crates/rust-analyzer/src/lsp_ext.rs index ea98d099352..846f1513044 100644 --- a/crates/rust-analyzer/src/lsp_ext.rs +++ b/crates/rust-analyzer/src/lsp_ext.rs @@ -233,27 +233,34 @@ pub enum InlayHints {} impl Request for InlayHints { type Params = InlayHintsParams; type Result = Vec<InlayHint>; - const METHOD: &'static str = "rust-analyzer/inlayHints"; + const METHOD: &'static str = "experimental/inlayHints"; } #[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct InlayHintsParams { pub text_document: TextDocumentIdentifier, + pub range: Option<lsp_types::Range>, } -#[derive(Debug, PartialEq, Eq, Deserialize, Serialize)] -pub enum InlayKind { - TypeHint, - ParameterHint, - ChainingHint, +#[derive(Eq, PartialEq, Debug, Copy, Clone, Serialize, Deserialize)] +#[serde(transparent)] +pub struct InlayHintKind(u8); + +impl InlayHintKind { + pub const TYPE: InlayHintKind = InlayHintKind(1); + pub const PARAMETER: InlayHintKind = InlayHintKind(2); } #[derive(Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] pub struct InlayHint { - pub range: Range, - pub kind: InlayKind, pub label: String, + pub position: Position, + pub kind: Option<InlayHintKind>, + pub tooltip: Option<String>, + pub padding_left: Option<bool>, + pub padding_right: Option<bool>, } pub enum Ssr {} diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index 4a2b3a1b47b..3ba097dc7ff 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs @@ -416,12 +416,18 @@ pub(crate) fn signature_help( pub(crate) fn inlay_hint(line_index: &LineIndex, inlay_hint: InlayHint) -> lsp_ext::InlayHint { lsp_ext::InlayHint { label: inlay_hint.label.to_string(), - range: range(line_index, inlay_hint.range), + position: match inlay_hint.kind { + InlayKind::ParameterHint => position(line_index, inlay_hint.range.start()), + _ => position(line_index, inlay_hint.range.end()), + }, kind: match inlay_hint.kind { - InlayKind::ParameterHint => lsp_ext::InlayKind::ParameterHint, - InlayKind::TypeHint => lsp_ext::InlayKind::TypeHint, - InlayKind::ChainingHint => lsp_ext::InlayKind::ChainingHint, + InlayKind::ParameterHint => Some(lsp_ext::InlayHintKind::PARAMETER), + InlayKind::TypeHint => Some(lsp_ext::InlayHintKind::TYPE), + InlayKind::ChainingHint => None, }, + tooltip: None, + padding_left: Some(true), + padding_right: Some(true), } } diff --git a/docs/dev/lsp-extensions.md b/docs/dev/lsp-extensions.md index 85df1188a8a..9f1c7fe0a3a 100644 --- a/docs/dev/lsp-extensions.md +++ b/docs/dev/lsp-extensions.md @@ -1,5 +1,5 @@ <!--- -lsp_ext.rs hash: 5b53b92c9f9d6650 +lsp_ext.rs hash: e32fdde032ff6ebc If you need to change the above hash to make the test pass, please check if you need to adjust this doc as well and ping this issue: @@ -562,11 +562,11 @@ Expands macro call at a given position. ## Inlay Hints -**Method:** `rust-analyzer/inlayHints` +**Method:** `experimental/inlayHints` This request is sent from client to server to render "inlay hints" -- virtual text inserted into editor to show things like inferred types. Generally, the client should re-query inlay hints after every modification. -Note that we plan to move this request to `experimental/inlayHints`, as it is not really Rust-specific, but the current API is not necessary the right one. +Until it gets upstreamed, this follows the VS Code API. Upstream issues: https://github.com/microsoft/language-server-protocol/issues/956 , https://github.com/rust-analyzer/rust-analyzer/issues/2797 **Request:** @@ -581,9 +581,12 @@ interface InlayHintsParams { ```typescript interface InlayHint { - kind: "TypeHint" | "ParameterHint" | "ChainingHint", - range: Range, - label: string, + position: Position; + label: string | InlayHintLabelPart[]; + tooltip?: string | MarkdownString | undefined; + kind?: InlayHintKind; + paddingLeft?: boolean; + paddingRight?: boolean; } ``` diff --git a/editors/code/.gitignore b/editors/code/.gitignore index 3acb6b3f620..2c975a947eb 100644 --- a/editors/code/.gitignore +++ b/editors/code/.gitignore @@ -3,3 +3,5 @@ node_modules server .vscode-test/ *.vsix +bundle +vscode.proposed.d.ts diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json index 1f0c97ad270..d2015b3bce5 100644 --- a/editors/code/package-lock.json +++ b/editors/code/package-lock.json @@ -11,34 +11,34 @@ "dependencies": { "d3": "^7.3.0", "d3-graphviz": "^4.0.0", - "vscode-languageclient": "8.0.0-next.8" + "vscode-languageclient": "8.0.0-next.12" }, "devDependencies": { "@types/node": "~14.17.5", - "@types/vscode": "~1.63.0", + "@types/vscode": "~1.65.0", "@typescript-eslint/eslint-plugin": "^5.10.0", "@typescript-eslint/parser": "^5.10.0", "@vscode/test-electron": "^2.1.1", "esbuild": "^0.14.12", - "eslint": "^8.7.0", + "eslint": "^8.10.0", "tslib": "^2.3.0", "typescript": "^4.5.5", "typescript-formatter": "^7.2.2", - "vsce": "^2.6.3" + "vsce": "^2.6.7" }, "engines": { - "vscode": "^1.63.0" + "vscode": "^1.65.0" } }, "node_modules/@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", + "espree": "^9.3.1", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", @@ -141,9 +141,9 @@ "dev": true }, "node_modules/@types/vscode": { - "version": "1.63.1", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.63.1.tgz", - "integrity": "sha512-Z+ZqjRcnGfHP86dvx/BtSwWyZPKQ/LBdmAVImY82TphyjOw2KgTKcp7Nx92oNwCTsHzlshwexAG/WiY2JuUm3g==", + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.65.0.tgz", + "integrity": "sha512-wQhExnh2nEzpjDMSKhUvnNmz3ucpd3E+R7wJkOhBNK3No6fG3VUdmVmMOKD0A8NDZDDDiQcLNxe3oGmX5SjJ5w==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -1514,39 +1514,60 @@ } }, "node_modules/esbuild": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.12.tgz", - "integrity": "sha512-o1vQkG+eSDLkWDqWfR8v6eI+byGAUkbRs30eAJcJxUFp3dwMGWR0tAjtam1Bb1RSS2j+4kAUFiuJTnW3J4CYcw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.25.tgz", + "integrity": "sha512-4JHEIOMNFvK09ziiL+iVmldIhLbn49V4NAVo888tcGFKedEZY/Y8YapfStJ6zSE23tzYPKxqKwQBnQoIO0BI/Q==", "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" }, + "engines": { + "node": ">=12" + }, "optionalDependencies": { - "esbuild-android-arm64": "0.14.12", - "esbuild-darwin-64": "0.14.12", - "esbuild-darwin-arm64": "0.14.12", - "esbuild-freebsd-64": "0.14.12", - "esbuild-freebsd-arm64": "0.14.12", - "esbuild-linux-32": "0.14.12", - "esbuild-linux-64": "0.14.12", - "esbuild-linux-arm": "0.14.12", - "esbuild-linux-arm64": "0.14.12", - "esbuild-linux-mips64le": "0.14.12", - "esbuild-linux-ppc64le": "0.14.12", - "esbuild-linux-s390x": "0.14.12", - "esbuild-netbsd-64": "0.14.12", - "esbuild-openbsd-64": "0.14.12", - "esbuild-sunos-64": "0.14.12", - "esbuild-windows-32": "0.14.12", - "esbuild-windows-64": "0.14.12", - "esbuild-windows-arm64": "0.14.12" + "esbuild-android-64": "0.14.25", + "esbuild-android-arm64": "0.14.25", + "esbuild-darwin-64": "0.14.25", + "esbuild-darwin-arm64": "0.14.25", + "esbuild-freebsd-64": "0.14.25", + "esbuild-freebsd-arm64": "0.14.25", + "esbuild-linux-32": "0.14.25", + "esbuild-linux-64": "0.14.25", + "esbuild-linux-arm": "0.14.25", + "esbuild-linux-arm64": "0.14.25", + "esbuild-linux-mips64le": "0.14.25", + "esbuild-linux-ppc64le": "0.14.25", + "esbuild-linux-riscv64": "0.14.25", + "esbuild-linux-s390x": "0.14.25", + "esbuild-netbsd-64": "0.14.25", + "esbuild-openbsd-64": "0.14.25", + "esbuild-sunos-64": "0.14.25", + "esbuild-windows-32": "0.14.25", + "esbuild-windows-64": "0.14.25", + "esbuild-windows-arm64": "0.14.25" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.25.tgz", + "integrity": "sha512-L5vCUk7TzFbBnoESNoXjU3x9+/+7TDIE/1mTfy/erAfvZAqC+S3sp/Qa9wkypFMcFvN9FzvESkTlpeQDolREtQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, "node_modules/esbuild-android-arm64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.12.tgz", - "integrity": "sha512-eO4JHwnTeJq1/xC9K0FdHNEYztwT0HaWHnOzR5kXKwJxHatxDNZ+lCHOSxMzh9uVSmnA8YwdSiXPWbwTlWZVrw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.25.tgz", + "integrity": "sha512-4jv5xPjM/qNm27T5j3ZEck0PvjgQtoMHnz4FzwF5zNP56PvY2CT0WStcAIl6jNlsuDdN63rk2HRBIsO6xFbcFw==", "cpu": [ "arm64" ], @@ -1554,12 +1575,15 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-darwin-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.12.tgz", - "integrity": "sha512-LyZ81assnJWhq2IxKEVipwddKlXLTubbz/IObyKOm5cWS9jQCpuwQey2PpzroWSiy7QLGV8XCGWY5b8U8fsmWA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.25.tgz", + "integrity": "sha512-TGp8tuudIxOyWd1+8aYPxQmC1ZQyvij/AfNBa35RubixD0zJ1vkKHVAzo0Zao1zcG6pNqiSyzfPto8vmg0s7oA==", "cpu": [ "x64" ], @@ -1567,12 +1591,15 @@ "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-darwin-arm64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.12.tgz", - "integrity": "sha512-jj27iSbDS4KlftN1PHHNiTrtXPQIk11J/qpQiQLwKJpeEMNeJUBfQlS7X7dXgFFMxV0rNtcRl8AimEFl+qEMRQ==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.25.tgz", + "integrity": "sha512-oTcDgdm0MDVEmw2DWu8BV68pYuImpFgvWREPErBZmNA4MYKGuBRaCiJqq6jZmBR1x+3y1DWCjez+5uLtuAm6mw==", "cpu": [ "arm64" ], @@ -1580,12 +1607,15 @@ "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-freebsd-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.12.tgz", - "integrity": "sha512-RnTty09bA8Ts/eWnrJsYiE2dFM6ZseKYQ/7QCM5QYphU6GbifooO9oGjc/UE3Sg8R58yZVO15vnIV0i+kTgDOw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.25.tgz", + "integrity": "sha512-ueAqbnMZ8arnuLH8tHwTCQYeptnHOUV7vA6px6j4zjjQwDx7TdP7kACPf3TLZLdJQ3CAD1XCvQ2sPhX+8tacvQ==", "cpu": [ "x64" ], @@ -1593,12 +1623,15 @@ "optional": true, "os": [ "freebsd" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.12.tgz", - "integrity": "sha512-AvAQoEgsHE53hucgoVWdHnXJBl0r9W/7eUCaBvpcgYu3W/EbPZ26VnZwfSXLpk0Pf3t7o6SRwrU+KDTKPscDTw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.25.tgz", + "integrity": "sha512-+ZVWud2HKh+Ob6k/qiJWjBtUg4KmJGGmbvEXXW1SNKS7hW7HU+Zq2ZCcE1akFxOPkVB+EhOty/sSek30tkCYug==", "cpu": [ "arm64" ], @@ -1606,12 +1639,15 @@ "optional": true, "os": [ "freebsd" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-linux-32": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.12.tgz", - "integrity": "sha512-na4I5i2c9ACPuglfYmrnJ6qGQnFJb59dFjyFk5OHTCtoKCq3lXbGHrvYa+3sYlOrRax1kYuRDRGse7YsDLbr3Q==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.25.tgz", + "integrity": "sha512-3OP/lwV3kCzEz45tobH9nj+uE4ubhGsfx+tn0L26WAGtUbmmcRpqy7XRG/qK7h1mClZ+eguIANcQntYMdYklfw==", "cpu": [ "ia32" ], @@ -1619,12 +1655,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-linux-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.12.tgz", - "integrity": "sha512-ObPoYGakJLx/RldQsFQiwsQ7N9YbQ4LLazHtpKx34bjqFjhqO5JiHPVAJYCmAtci3cJMsZ5DtEFXvijytTBz1g==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.25.tgz", + "integrity": "sha512-+aKHdHZmX9qwVlQmu5xYXh7GsBFf4TWrePgeJTalhXHOG7NNuUwoHmketGiZEoNsWyyqwH9rE5BC+iwcLY30Ug==", "cpu": [ "x64" ], @@ -1632,12 +1671,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-linux-arm": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.12.tgz", - "integrity": "sha512-tD4q/zVUeYkThGehYAJQElo80+ysxvq5vpd2QvykDp4hvIidEUJu2hf+NzG5OuMJSQJmAeAWPrkFOXN+6di9cA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.25.tgz", + "integrity": "sha512-aTLcE2VBoLydL943REcAcgnDi3bHtmULSXWLbjtBdtykRatJVSxKMjK9YlBXUZC4/YcNQfH7AxwVeQr9fNxPhw==", "cpu": [ "arm" ], @@ -1645,12 +1687,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-linux-arm64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.12.tgz", - "integrity": "sha512-i1/ikCl9gG9yx6QuI+8yJMk9XHUu8ekIQOo6cex2pDqXY5KVHSXDTAT4FDWOd5YXQ1QTjneBAQHcKGft4pd6PQ==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.25.tgz", + "integrity": "sha512-UxfenPx/wSZx55gScCImPtXekvZQLI2GW3qe5dtlmU7luiqhp5GWPzGeQEbD3yN3xg/pHc671m5bma5Ns7lBHw==", "cpu": [ "arm64" ], @@ -1658,12 +1703,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-linux-mips64le": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.12.tgz", - "integrity": "sha512-+/a6/tiKUCENep8ryUR75Jba4znG51Sb75OzKT6phZFEkB7fao4+GZD39Zxx3EaaA5OC10MsJPjJMFrn0dMusg==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.25.tgz", + "integrity": "sha512-wLWYyqVfYx9Ur6eU5RT92yJVsaBGi5RdkoWqRHOqcJ38Kn60QMlcghsKeWfe9jcYut8LangYZ98xO1LxIoSXrQ==", "cpu": [ "mips64el" ], @@ -1671,12 +1719,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.12.tgz", - "integrity": "sha512-SD7e2VLza/cEU2qKuD18Ibt1V0h3TUuerC1Mp3jRJ4RRGXWAyUt4gUpqKSiB7R0rHe6LWECdLbeVFAuGEntCeA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.25.tgz", + "integrity": "sha512-0dR6Csl6Zas3g4p9ULckEl8Mo8IInJh33VCJ3eaV1hj9+MHGdmDOakYMN8MZP9/5nl+NU/0ygpd14cWgy8uqRw==", "cpu": [ "ppc64" ], @@ -1684,12 +1735,31 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.25.tgz", + "integrity": "sha512-J4d20HDmTrgvhR0bdkDhvvJGaikH3LzXQnNaseo8rcw9Yqby9A90gKUmWpfwqLVNRILvNnAmKLfBjCKU9ajg8w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-linux-s390x": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.12.tgz", - "integrity": "sha512-KZmjYgAvYUpPBG0v6xv8qCngbfcRKC2AdYx3H3j3VqJfICgjt5XYsyG7ntWdc8Rdw9jZxr9sni6othy2Rp/T+A==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.25.tgz", + "integrity": "sha512-YI2d5V6nTE73ZnhEKQD7MtsPs1EtUZJ3obS21oxQxGbbRw1G+PtJKjNyur+3t6nzHP9oTg6GHQ3S3hOLLmbDIQ==", "cpu": [ "s390x" ], @@ -1697,12 +1767,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-netbsd-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.12.tgz", - "integrity": "sha512-dG+hbCIJC65fHqzkTEYbrPSYG3m8pEaI9A1VDtqHfV13Oiw9/tua1odd47iwoWvTyurErb49wanHsIAKb8/2oQ==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.25.tgz", + "integrity": "sha512-TKIVgNWLUOkr+Exrye70XTEE1lJjdQXdM4tAXRzfHE9iBA7LXWcNtVIuSnphTqpanPzTDFarF0yqq4kpbC6miA==", "cpu": [ "x64" ], @@ -1710,12 +1783,15 @@ "optional": true, "os": [ "netbsd" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-openbsd-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.12.tgz", - "integrity": "sha512-W3SwxnMjJR3HtBD0aij5WPd0ow2bRB5BsW6FjhN7FgwDBQ+jgniFs1dq54HOkjQ2qBJrt8JvPDFAxacWjdD6Jw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.25.tgz", + "integrity": "sha512-QgFJ37A15D7NIXBTYEqz29+uw3nNBOIyog+3kFidANn6kjw0GHZ0lEYQn+cwjyzu94WobR+fes7cTl/ZYlHb1A==", "cpu": [ "x64" ], @@ -1723,12 +1799,15 @@ "optional": true, "os": [ "openbsd" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-sunos-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.12.tgz", - "integrity": "sha512-jU/IcTFwvUtt21wOmqKJrevyHQ5XRfiCdFbPie4wsYr8VFcPZZsz18A9lcoI8gZdrF/8pBdD0V+L2UuUY0KsGg==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.25.tgz", + "integrity": "sha512-rmWfjUItYIVlqr5EnTH1+GCxXiBOC42WBZ3w++qh7n2cS9Xo0lO5pGSG2N+huOU2fX5L+6YUuJ78/vOYvefeFw==", "cpu": [ "x64" ], @@ -1736,12 +1815,15 @@ "optional": true, "os": [ "sunos" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-windows-32": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.12.tgz", - "integrity": "sha512-6luae9cmTB0rSPMCQFWMgf0SLNZ9hxusoS0poVEUHJf3n8bW6wgdyLE2xfYcEcXPMsjAt2e71/etkpqlFxeuYg==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.25.tgz", + "integrity": "sha512-HGAxVUofl3iUIz9W10Y9XKtD0bNsK9fBXv1D55N/ljNvkrAYcGB8YCm0v7DjlwtyS6ws3dkdQyXadbxkbzaKOA==", "cpu": [ "ia32" ], @@ -1749,12 +1831,15 @@ "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-windows-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.12.tgz", - "integrity": "sha512-CdCXvME/7s0uMt+4rYd8d5roHJJ5k2VDOzWaOMWExjroet+nSSZngfLpxI5St+28lXLeBorUxeBS+p1qcfEDfw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.25.tgz", + "integrity": "sha512-TirEohRkfWU9hXLgoDxzhMQD1g8I2mOqvdQF2RS9E/wbkORTAqJHyh7wqGRCQAwNzdNXdg3JAyhQ9/177AadWA==", "cpu": [ "x64" ], @@ -1762,12 +1847,15 @@ "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/esbuild-windows-arm64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.12.tgz", - "integrity": "sha512-vNuLQh/MpYDepK0GNpEWHy0Kn7Jf3Shz/Xetf8hUIc31jgCR1qbLVLDf3ckQdanD2U430YZupOGtEZKRwno79w==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.25.tgz", + "integrity": "sha512-4ype9ERiI45rSh+R8qUoBtaj6kJvUOI7oVLhKqPEpcF4Pa5PpT3hm/mXAyotJHREkHpM87PAJcA442mLnbtlNA==", "cpu": [ "arm64" ], @@ -1775,7 +1863,10 @@ "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": ">=12" + } }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -1790,12 +1881,12 @@ } }, "node_modules/eslint": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", - "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.0.5", + "@eslint/eslintrc": "^1.2.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -1803,10 +1894,10 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -1882,18 +1973,18 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -1913,14 +2004,14 @@ } }, "node_modules/espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, "dependencies": { "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2243,9 +2334,9 @@ } }, "node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3764,39 +3855,39 @@ } }, "node_modules/vscode-jsonrpc": { - "version": "8.0.0-next.5", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.5.tgz", - "integrity": "sha512-owRllqcFTnz5rXxcbmHPFGmpFmLqj9Z1V3Dzrv+s8ejOHLIT62Pyb5Uqzyl2/in2VP22DmzErPgZwrxjLCIKiQ==", + "version": "8.0.0-next.6", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.6.tgz", + "integrity": "sha512-6Ld3RYjygn5Ih7CkAtcAwiDQC+rakj2O+PnASfNyYv3sLmm44eJpEKzuPUN30Iy2UB09AZg8T6LBKWTJTEJDVw==", "engines": { "node": ">=14.0.0" } }, "node_modules/vscode-languageclient": { - "version": "8.0.0-next.8", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.0-next.8.tgz", - "integrity": "sha512-CBdYRIVqqlRmZ2YBeTk0S2QMtsL8ZJfbddlfvERmRPXW4Pimr7Nk+mYq16F/k3HbrO9Xt+RAFP1t6FIIbmuUGw==", + "version": "8.0.0-next.12", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.0-next.12.tgz", + "integrity": "sha512-4+kr1BQcoh+sA5/4XJDJXrQXGQ5Yz/x+WpsVGGzK/TOB7RwQ63ooxG6Ej7i/+aOQM4/QdmcYWmipDtG7vqcOiw==", "dependencies": { "minimatch": "^3.0.4", "semver": "^7.3.5", - "vscode-languageserver-protocol": "3.17.0-next.12" + "vscode-languageserver-protocol": "3.17.0-next.14" }, "engines": { "vscode": "^1.63.0" } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.17.0-next.12", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.12.tgz", - "integrity": "sha512-VLRcWKOpCXcx9UrqrS+NSF6pNxV498VGYGW+eyp9a79/F9ElUq3wdG6acXYlEfpWHuIxpm6MXps8FU88wqIgTg==", + "version": "3.17.0-next.14", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.14.tgz", + "integrity": "sha512-iangobY8dL6sFZkOx4OhRPJM9gN0I1caUsOVR+MnPozsqQUtwMXmbIcfaIf0Akp0pd3KhJDPf/tdwRX68QGeeA==", "dependencies": { - "vscode-jsonrpc": "8.0.0-next.5", - "vscode-languageserver-types": "3.17.0-next.6" + "vscode-jsonrpc": "8.0.0-next.6", + "vscode-languageserver-types": "3.17.0-next.7" } }, "node_modules/vscode-languageserver-types": { - "version": "3.17.0-next.6", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.6.tgz", - "integrity": "sha512-rHYeCotiabJHgvIYzWjV8g0dHCxyOQtcryTv1Xa1horaQ4jx2V+rjLBstc6zMpCyrnZcjorwEcAvGBDCd6wudw==" + "version": "3.17.0-next.7", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.7.tgz", + "integrity": "sha512-KH4zdG1qBXxoso61ChgpeoZYyHGJo8bV7Jv4I+fwQ1Ryy59JAxoZ9GAbhR5TeeafHctLcg6RFvY3m8Jqfu17cg==" }, "node_modules/which": { "version": "2.0.2", @@ -3886,14 +3977,14 @@ }, "dependencies": { "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", + "espree": "^9.3.1", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", @@ -3977,9 +4068,9 @@ "dev": true }, "@types/vscode": { - "version": "1.63.1", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.63.1.tgz", - "integrity": "sha512-Z+ZqjRcnGfHP86dvx/BtSwWyZPKQ/LBdmAVImY82TphyjOw2KgTKcp7Nx92oNwCTsHzlshwexAG/WiY2JuUm3g==", + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.65.0.tgz", + "integrity": "sha512-wQhExnh2nEzpjDMSKhUvnNmz3ucpd3E+R7wJkOhBNK3No6fG3VUdmVmMOKD0A8NDZDDDiQcLNxe3oGmX5SjJ5w==", "dev": true }, "@typescript-eslint/eslint-plugin": { @@ -4977,154 +5068,170 @@ "dev": true }, "esbuild": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.12.tgz", - "integrity": "sha512-o1vQkG+eSDLkWDqWfR8v6eI+byGAUkbRs30eAJcJxUFp3dwMGWR0tAjtam1Bb1RSS2j+4kAUFiuJTnW3J4CYcw==", - "dev": true, - "requires": { - "esbuild-android-arm64": "0.14.12", - "esbuild-darwin-64": "0.14.12", - "esbuild-darwin-arm64": "0.14.12", - "esbuild-freebsd-64": "0.14.12", - "esbuild-freebsd-arm64": "0.14.12", - "esbuild-linux-32": "0.14.12", - "esbuild-linux-64": "0.14.12", - "esbuild-linux-arm": "0.14.12", - "esbuild-linux-arm64": "0.14.12", - "esbuild-linux-mips64le": "0.14.12", - "esbuild-linux-ppc64le": "0.14.12", - "esbuild-linux-s390x": "0.14.12", - "esbuild-netbsd-64": "0.14.12", - "esbuild-openbsd-64": "0.14.12", - "esbuild-sunos-64": "0.14.12", - "esbuild-windows-32": "0.14.12", - "esbuild-windows-64": "0.14.12", - "esbuild-windows-arm64": "0.14.12" - } + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.25.tgz", + "integrity": "sha512-4JHEIOMNFvK09ziiL+iVmldIhLbn49V4NAVo888tcGFKedEZY/Y8YapfStJ6zSE23tzYPKxqKwQBnQoIO0BI/Q==", + "dev": true, + "requires": { + "esbuild-android-64": "0.14.25", + "esbuild-android-arm64": "0.14.25", + "esbuild-darwin-64": "0.14.25", + "esbuild-darwin-arm64": "0.14.25", + "esbuild-freebsd-64": "0.14.25", + "esbuild-freebsd-arm64": "0.14.25", + "esbuild-linux-32": "0.14.25", + "esbuild-linux-64": "0.14.25", + "esbuild-linux-arm": "0.14.25", + "esbuild-linux-arm64": "0.14.25", + "esbuild-linux-mips64le": "0.14.25", + "esbuild-linux-ppc64le": "0.14.25", + "esbuild-linux-riscv64": "0.14.25", + "esbuild-linux-s390x": "0.14.25", + "esbuild-netbsd-64": "0.14.25", + "esbuild-openbsd-64": "0.14.25", + "esbuild-sunos-64": "0.14.25", + "esbuild-windows-32": "0.14.25", + "esbuild-windows-64": "0.14.25", + "esbuild-windows-arm64": "0.14.25" + } + }, + "esbuild-android-64": { + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.25.tgz", + "integrity": "sha512-L5vCUk7TzFbBnoESNoXjU3x9+/+7TDIE/1mTfy/erAfvZAqC+S3sp/Qa9wkypFMcFvN9FzvESkTlpeQDolREtQ==", + "dev": true, + "optional": true }, "esbuild-android-arm64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.12.tgz", - "integrity": "sha512-eO4JHwnTeJq1/xC9K0FdHNEYztwT0HaWHnOzR5kXKwJxHatxDNZ+lCHOSxMzh9uVSmnA8YwdSiXPWbwTlWZVrw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.25.tgz", + "integrity": "sha512-4jv5xPjM/qNm27T5j3ZEck0PvjgQtoMHnz4FzwF5zNP56PvY2CT0WStcAIl6jNlsuDdN63rk2HRBIsO6xFbcFw==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.12.tgz", - "integrity": "sha512-LyZ81assnJWhq2IxKEVipwddKlXLTubbz/IObyKOm5cWS9jQCpuwQey2PpzroWSiy7QLGV8XCGWY5b8U8fsmWA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.25.tgz", + "integrity": "sha512-TGp8tuudIxOyWd1+8aYPxQmC1ZQyvij/AfNBa35RubixD0zJ1vkKHVAzo0Zao1zcG6pNqiSyzfPto8vmg0s7oA==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.12.tgz", - "integrity": "sha512-jj27iSbDS4KlftN1PHHNiTrtXPQIk11J/qpQiQLwKJpeEMNeJUBfQlS7X7dXgFFMxV0rNtcRl8AimEFl+qEMRQ==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.25.tgz", + "integrity": "sha512-oTcDgdm0MDVEmw2DWu8BV68pYuImpFgvWREPErBZmNA4MYKGuBRaCiJqq6jZmBR1x+3y1DWCjez+5uLtuAm6mw==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.12.tgz", - "integrity": "sha512-RnTty09bA8Ts/eWnrJsYiE2dFM6ZseKYQ/7QCM5QYphU6GbifooO9oGjc/UE3Sg8R58yZVO15vnIV0i+kTgDOw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.25.tgz", + "integrity": "sha512-ueAqbnMZ8arnuLH8tHwTCQYeptnHOUV7vA6px6j4zjjQwDx7TdP7kACPf3TLZLdJQ3CAD1XCvQ2sPhX+8tacvQ==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.12.tgz", - "integrity": "sha512-AvAQoEgsHE53hucgoVWdHnXJBl0r9W/7eUCaBvpcgYu3W/EbPZ26VnZwfSXLpk0Pf3t7o6SRwrU+KDTKPscDTw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.25.tgz", + "integrity": "sha512-+ZVWud2HKh+Ob6k/qiJWjBtUg4KmJGGmbvEXXW1SNKS7hW7HU+Zq2ZCcE1akFxOPkVB+EhOty/sSek30tkCYug==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.12.tgz", - "integrity": "sha512-na4I5i2c9ACPuglfYmrnJ6qGQnFJb59dFjyFk5OHTCtoKCq3lXbGHrvYa+3sYlOrRax1kYuRDRGse7YsDLbr3Q==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.25.tgz", + "integrity": "sha512-3OP/lwV3kCzEz45tobH9nj+uE4ubhGsfx+tn0L26WAGtUbmmcRpqy7XRG/qK7h1mClZ+eguIANcQntYMdYklfw==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.12.tgz", - "integrity": "sha512-ObPoYGakJLx/RldQsFQiwsQ7N9YbQ4LLazHtpKx34bjqFjhqO5JiHPVAJYCmAtci3cJMsZ5DtEFXvijytTBz1g==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.25.tgz", + "integrity": "sha512-+aKHdHZmX9qwVlQmu5xYXh7GsBFf4TWrePgeJTalhXHOG7NNuUwoHmketGiZEoNsWyyqwH9rE5BC+iwcLY30Ug==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.12.tgz", - "integrity": "sha512-tD4q/zVUeYkThGehYAJQElo80+ysxvq5vpd2QvykDp4hvIidEUJu2hf+NzG5OuMJSQJmAeAWPrkFOXN+6di9cA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.25.tgz", + "integrity": "sha512-aTLcE2VBoLydL943REcAcgnDi3bHtmULSXWLbjtBdtykRatJVSxKMjK9YlBXUZC4/YcNQfH7AxwVeQr9fNxPhw==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.12.tgz", - "integrity": "sha512-i1/ikCl9gG9yx6QuI+8yJMk9XHUu8ekIQOo6cex2pDqXY5KVHSXDTAT4FDWOd5YXQ1QTjneBAQHcKGft4pd6PQ==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.25.tgz", + "integrity": "sha512-UxfenPx/wSZx55gScCImPtXekvZQLI2GW3qe5dtlmU7luiqhp5GWPzGeQEbD3yN3xg/pHc671m5bma5Ns7lBHw==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.12.tgz", - "integrity": "sha512-+/a6/tiKUCENep8ryUR75Jba4znG51Sb75OzKT6phZFEkB7fao4+GZD39Zxx3EaaA5OC10MsJPjJMFrn0dMusg==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.25.tgz", + "integrity": "sha512-wLWYyqVfYx9Ur6eU5RT92yJVsaBGi5RdkoWqRHOqcJ38Kn60QMlcghsKeWfe9jcYut8LangYZ98xO1LxIoSXrQ==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.12.tgz", - "integrity": "sha512-SD7e2VLza/cEU2qKuD18Ibt1V0h3TUuerC1Mp3jRJ4RRGXWAyUt4gUpqKSiB7R0rHe6LWECdLbeVFAuGEntCeA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.25.tgz", + "integrity": "sha512-0dR6Csl6Zas3g4p9ULckEl8Mo8IInJh33VCJ3eaV1hj9+MHGdmDOakYMN8MZP9/5nl+NU/0ygpd14cWgy8uqRw==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.25.tgz", + "integrity": "sha512-J4d20HDmTrgvhR0bdkDhvvJGaikH3LzXQnNaseo8rcw9Yqby9A90gKUmWpfwqLVNRILvNnAmKLfBjCKU9ajg8w==", "dev": true, "optional": true }, "esbuild-linux-s390x": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.12.tgz", - "integrity": "sha512-KZmjYgAvYUpPBG0v6xv8qCngbfcRKC2AdYx3H3j3VqJfICgjt5XYsyG7ntWdc8Rdw9jZxr9sni6othy2Rp/T+A==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.25.tgz", + "integrity": "sha512-YI2d5V6nTE73ZnhEKQD7MtsPs1EtUZJ3obS21oxQxGbbRw1G+PtJKjNyur+3t6nzHP9oTg6GHQ3S3hOLLmbDIQ==", "dev": true, "optional": true }, "esbuild-netbsd-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.12.tgz", - "integrity": "sha512-dG+hbCIJC65fHqzkTEYbrPSYG3m8pEaI9A1VDtqHfV13Oiw9/tua1odd47iwoWvTyurErb49wanHsIAKb8/2oQ==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.25.tgz", + "integrity": "sha512-TKIVgNWLUOkr+Exrye70XTEE1lJjdQXdM4tAXRzfHE9iBA7LXWcNtVIuSnphTqpanPzTDFarF0yqq4kpbC6miA==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.12.tgz", - "integrity": "sha512-W3SwxnMjJR3HtBD0aij5WPd0ow2bRB5BsW6FjhN7FgwDBQ+jgniFs1dq54HOkjQ2qBJrt8JvPDFAxacWjdD6Jw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.25.tgz", + "integrity": "sha512-QgFJ37A15D7NIXBTYEqz29+uw3nNBOIyog+3kFidANn6kjw0GHZ0lEYQn+cwjyzu94WobR+fes7cTl/ZYlHb1A==", "dev": true, "optional": true }, "esbuild-sunos-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.12.tgz", - "integrity": "sha512-jU/IcTFwvUtt21wOmqKJrevyHQ5XRfiCdFbPie4wsYr8VFcPZZsz18A9lcoI8gZdrF/8pBdD0V+L2UuUY0KsGg==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.25.tgz", + "integrity": "sha512-rmWfjUItYIVlqr5EnTH1+GCxXiBOC42WBZ3w++qh7n2cS9Xo0lO5pGSG2N+huOU2fX5L+6YUuJ78/vOYvefeFw==", "dev": true, "optional": true }, "esbuild-windows-32": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.12.tgz", - "integrity": "sha512-6luae9cmTB0rSPMCQFWMgf0SLNZ9hxusoS0poVEUHJf3n8bW6wgdyLE2xfYcEcXPMsjAt2e71/etkpqlFxeuYg==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.25.tgz", + "integrity": "sha512-HGAxVUofl3iUIz9W10Y9XKtD0bNsK9fBXv1D55N/ljNvkrAYcGB8YCm0v7DjlwtyS6ws3dkdQyXadbxkbzaKOA==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.12.tgz", - "integrity": "sha512-CdCXvME/7s0uMt+4rYd8d5roHJJ5k2VDOzWaOMWExjroet+nSSZngfLpxI5St+28lXLeBorUxeBS+p1qcfEDfw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.25.tgz", + "integrity": "sha512-TirEohRkfWU9hXLgoDxzhMQD1g8I2mOqvdQF2RS9E/wbkORTAqJHyh7wqGRCQAwNzdNXdg3JAyhQ9/177AadWA==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.12.tgz", - "integrity": "sha512-vNuLQh/MpYDepK0GNpEWHy0Kn7Jf3Shz/Xetf8hUIc31jgCR1qbLVLDf3ckQdanD2U430YZupOGtEZKRwno79w==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.25.tgz", + "integrity": "sha512-4ype9ERiI45rSh+R8qUoBtaj6kJvUOI7oVLhKqPEpcF4Pa5PpT3hm/mXAyotJHREkHpM87PAJcA442mLnbtlNA==", "dev": true, "optional": true }, @@ -5135,12 +5242,12 @@ "dev": true }, "eslint": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", - "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.0.5", + "@eslint/eslintrc": "^1.2.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -5148,10 +5255,10 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -5178,9 +5285,9 @@ }, "dependencies": { "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -5223,20 +5330,20 @@ } }, "eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, "requires": { "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "eslint-visitor-keys": "^3.3.0" } }, "esquery": { @@ -5506,9 +5613,9 @@ } }, "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -6671,33 +6778,33 @@ } }, "vscode-jsonrpc": { - "version": "8.0.0-next.5", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.5.tgz", - "integrity": "sha512-owRllqcFTnz5rXxcbmHPFGmpFmLqj9Z1V3Dzrv+s8ejOHLIT62Pyb5Uqzyl2/in2VP22DmzErPgZwrxjLCIKiQ==" + "version": "8.0.0-next.6", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.6.tgz", + "integrity": "sha512-6Ld3RYjygn5Ih7CkAtcAwiDQC+rakj2O+PnASfNyYv3sLmm44eJpEKzuPUN30Iy2UB09AZg8T6LBKWTJTEJDVw==" }, "vscode-languageclient": { - "version": "8.0.0-next.8", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.0-next.8.tgz", - "integrity": "sha512-CBdYRIVqqlRmZ2YBeTk0S2QMtsL8ZJfbddlfvERmRPXW4Pimr7Nk+mYq16F/k3HbrO9Xt+RAFP1t6FIIbmuUGw==", + "version": "8.0.0-next.12", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.0-next.12.tgz", + "integrity": "sha512-4+kr1BQcoh+sA5/4XJDJXrQXGQ5Yz/x+WpsVGGzK/TOB7RwQ63ooxG6Ej7i/+aOQM4/QdmcYWmipDtG7vqcOiw==", "requires": { "minimatch": "^3.0.4", "semver": "^7.3.5", - "vscode-languageserver-protocol": "3.17.0-next.12" + "vscode-languageserver-protocol": "3.17.0-next.14" } }, "vscode-languageserver-protocol": { - "version": "3.17.0-next.12", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.12.tgz", - "integrity": "sha512-VLRcWKOpCXcx9UrqrS+NSF6pNxV498VGYGW+eyp9a79/F9ElUq3wdG6acXYlEfpWHuIxpm6MXps8FU88wqIgTg==", + "version": "3.17.0-next.14", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.14.tgz", + "integrity": "sha512-iangobY8dL6sFZkOx4OhRPJM9gN0I1caUsOVR+MnPozsqQUtwMXmbIcfaIf0Akp0pd3KhJDPf/tdwRX68QGeeA==", "requires": { - "vscode-jsonrpc": "8.0.0-next.5", - "vscode-languageserver-types": "3.17.0-next.6" + "vscode-jsonrpc": "8.0.0-next.6", + "vscode-languageserver-types": "3.17.0-next.7" } }, "vscode-languageserver-types": { - "version": "3.17.0-next.6", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.6.tgz", - "integrity": "sha512-rHYeCotiabJHgvIYzWjV8g0dHCxyOQtcryTv1Xa1horaQ4jx2V+rjLBstc6zMpCyrnZcjorwEcAvGBDCd6wudw==" + "version": "3.17.0-next.7", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.7.tgz", + "integrity": "sha512-KH4zdG1qBXxoso61ChgpeoZYyHGJo8bV7Jv4I+fwQ1Ryy59JAxoZ9GAbhR5TeeafHctLcg6RFvY3m8Jqfu17cg==" }, "which": { "version": "2.0.2", diff --git a/editors/code/package.json b/editors/code/package.json index 4843ea84218..c94a09f084d 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -21,9 +21,9 @@ "Programming Languages" ], "engines": { - "vscode": "^1.63.0" + "vscode": "^1.65.0" }, - "enableProposedApi": true, + "enabledApiProposals": [], "scripts": { "vscode:prepublish": "npm run build-base -- --minify", "package": "vsce package -o rust-analyzer.vsix", @@ -36,18 +36,18 @@ "test": "node ./out/tests/runTests.js" }, "dependencies": { - "vscode-languageclient": "8.0.0-next.8", + "vscode-languageclient": "8.0.0-next.12", "d3": "^7.3.0", "d3-graphviz": "^4.0.0" }, "devDependencies": { "@types/node": "~14.17.5", - "@types/vscode": "~1.63.0", + "@types/vscode": "~1.65.0", "@typescript-eslint/eslint-plugin": "^5.10.0", "@typescript-eslint/parser": "^5.10.0", "@vscode/test-electron": "^2.1.1", "esbuild": "^0.14.12", - "eslint": "^8.7.0", + "eslint": "^8.10.0", "tslib": "^2.3.0", "typescript": "^4.5.5", "typescript-formatter": "^7.2.2", @@ -298,11 +298,6 @@ "default": true, "description": "Whether to show inlay hints." }, - "rust-analyzer.inlayHints.smallerHints": { - "type": "boolean", - "default": true, - "description": "Whether inlay hints font size should be smaller than editor's font size." - }, "rust-analyzer.server.path": { "type": [ "null", @@ -1084,78 +1079,6 @@ ], "colors": [ { - "id": "rust_analyzer.inlayHints.foreground", - "description": "Foreground color of inlay hints (is overriden by more specific rust_analyzer.inlayHints.foreground.* configurations)", - "defaults": { - "dark": "#A0A0A0F0", - "light": "#747474", - "highContrast": "#BEBEBE" - } - }, - { - "id": "rust_analyzer.inlayHints.background", - "description": "Background color of inlay hints (is overriden by more specific rust_analyzer.inlayHints.background.* configurations)", - "defaults": { - "dark": "#11223300", - "light": "#11223300", - "highContrast": "#11223300" - } - }, - { - "id": "rust_analyzer.inlayHints.foreground.typeHints", - "description": "Foreground color of inlay type hints for variables (overrides rust_analyzer.inlayHints.foreground)", - "defaults": { - "dark": "rust_analyzer.inlayHints.foreground", - "light": "rust_analyzer.inlayHints.foreground", - "highContrast": "rust_analyzer.inlayHints.foreground" - } - }, - { - "id": "rust_analyzer.inlayHints.foreground.chainingHints", - "description": "Foreground color of inlay type hints for method chains (overrides rust_analyzer.inlayHints.foreground)", - "defaults": { - "dark": "rust_analyzer.inlayHints.foreground", - "light": "rust_analyzer.inlayHints.foreground", - "highContrast": "rust_analyzer.inlayHints.foreground" - } - }, - { - "id": "rust_analyzer.inlayHints.foreground.parameterHints", - "description": "Foreground color of function parameter name inlay hints at the call site (overrides rust_analyzer.inlayHints.foreground)", - "defaults": { - "dark": "rust_analyzer.inlayHints.foreground", - "light": "rust_analyzer.inlayHints.foreground", - "highContrast": "rust_analyzer.inlayHints.foreground" - } - }, - { - "id": "rust_analyzer.inlayHints.background.typeHints", - "description": "Background color of inlay type hints for variables (overrides rust_analyzer.inlayHints.background)", - "defaults": { - "dark": "rust_analyzer.inlayHints.background", - "light": "rust_analyzer.inlayHints.background", - "highContrast": "rust_analyzer.inlayHints.background" - } - }, - { - "id": "rust_analyzer.inlayHints.background.chainingHints", - "description": "Background color of inlay type hints for method chains (overrides rust_analyzer.inlayHints.background)", - "defaults": { - "dark": "rust_analyzer.inlayHints.background", - "light": "rust_analyzer.inlayHints.background", - "highContrast": "rust_analyzer.inlayHints.background" - } - }, - { - "id": "rust_analyzer.inlayHints.background.parameterHints", - "description": "Background color of function parameter name inlay hints at the call site (overrides rust_analyzer.inlayHints.background)", - "defaults": { - "dark": "rust_analyzer.inlayHints.background", - "light": "rust_analyzer.inlayHints.background", - "highContrast": "rust_analyzer.inlayHints.background" - } - }, - { "id": "rust_analyzer.syntaxTreeBorder", "description": "Color of the border displayed in the Rust source code for the selected syntax node (see \"Show Syntax Tree\" command)", "defaults": { diff --git a/editors/code/src/inlay_hints.ts b/editors/code/src/inlay_hints.ts index c23d6f7384b..441370a677a 100644 --- a/editors/code/src/inlay_hints.ts +++ b/editors/code/src/inlay_hints.ts @@ -1,267 +1,54 @@ -import * as lc from "vscode-languageclient"; import * as vscode from 'vscode'; import * as ra from './lsp_ext'; import { Ctx, Disposable } from './ctx'; -import { sendRequestWithRetry, isRustDocument, RustDocument, RustEditor, sleep } from './util'; - -interface InlayHintStyle { - decorationType: vscode.TextEditorDecorationType; - toDecoration(hint: ra.InlayHint, conv: lc.Protocol2CodeConverter): vscode.DecorationOptions; -}; - -interface InlayHintsStyles { - typeHints: InlayHintStyle; - paramHints: InlayHintStyle; - chainingHints: InlayHintStyle; -} - +import { sendRequestWithRetry, isRustDocument } from './util'; export function activateInlayHints(ctx: Ctx) { const maybeUpdater = { - updater: null as null | HintsUpdater, + hintsProvider: null as Disposable | null, + updateHintsEventEmitter: new vscode.EventEmitter<void>(), + async onConfigChange() { + this.dispose(); + const anyEnabled = ctx.config.inlayHints.typeHints || ctx.config.inlayHints.parameterHints || ctx.config.inlayHints.chainingHints; const enabled = ctx.config.inlayHints.enable && anyEnabled; + if (!enabled) return; + + const event = this.updateHintsEventEmitter.event; + this.hintsProvider = vscode.languages.registerInlayHintsProvider({ scheme: 'file', language: 'rust' }, new class implements vscode.InlayHintsProvider { + onDidChangeInlayHints = event; + async provideInlayHints(document: vscode.TextDocument, range: vscode.Range, token: vscode.CancellationToken): Promise<vscode.InlayHint[]> { + const request = { textDocument: { uri: document.uri.toString() }, range: { start: range.start, end: range.end } }; + const hints = await sendRequestWithRetry(ctx.client, ra.inlayHints, request, token).catch(_ => null); + if (hints == null) { + return []; + } else { + return hints; + } + } + }); + }, - if (!enabled) return this.dispose(); - - await sleep(100); - if (this.updater) { - this.updater.updateInlayHintsStyles(); - this.updater.syncCacheAndRenderHints(); - } else { - this.updater = new HintsUpdater(ctx); - } + onDidChangeTextDocument({ contentChanges, document }: vscode.TextDocumentChangeEvent) { + if (contentChanges.length === 0 || !isRustDocument(document)) return; + this.updateHintsEventEmitter.fire(); }, + dispose() { - this.updater?.dispose(); - this.updater = null; - } + this.hintsProvider?.dispose(); + this.hintsProvider = null; + this.updateHintsEventEmitter.dispose(); + }, }; ctx.pushCleanup(maybeUpdater); - vscode.workspace.onDidChangeConfiguration( - maybeUpdater.onConfigChange, maybeUpdater, ctx.subscriptions - ); + vscode.workspace.onDidChangeConfiguration(maybeUpdater.onConfigChange, maybeUpdater, ctx.subscriptions); + vscode.workspace.onDidChangeTextDocument(maybeUpdater.onDidChangeTextDocument, maybeUpdater, ctx.subscriptions); maybeUpdater.onConfigChange().catch(console.error); } - -function createHintStyle(hintKind: "type" | "parameter" | "chaining", smallerHints: boolean): InlayHintStyle { - // U+200C is a zero-width non-joiner to prevent the editor from forming a ligature - // between code and type hints - const [pos, render] = ({ - type: ["after", (label: string) => `\u{200c}: ${label}`], - parameter: ["before", (label: string) => `${label}: `], - chaining: ["after", (label: string) => `\u{200c}: ${label}`], - } as const)[hintKind]; - - const fg = new vscode.ThemeColor(`rust_analyzer.inlayHints.foreground.${hintKind}Hints`); - const bg = new vscode.ThemeColor(`rust_analyzer.inlayHints.background.${hintKind}Hints`); - return { - decorationType: vscode.window.createTextEditorDecorationType({ - [pos]: { - color: fg, - backgroundColor: bg, - fontStyle: "normal", - fontWeight: "normal", - textDecoration: smallerHints ? ";font-size:smaller" : "none", - }, - }), - toDecoration(hint: ra.InlayHint, conv: lc.Protocol2CodeConverter): vscode.DecorationOptions { - return { - range: conv.asRange(hint.range), - renderOptions: { [pos]: { contentText: render(hint.label) } } - }; - } - }; -} - -const smallHintsStyles = { - typeHints: createHintStyle("type", true), - paramHints: createHintStyle("parameter", true), - chainingHints: createHintStyle("chaining", true), -}; - -const biggerHintsStyles = { - typeHints: createHintStyle("type", false), - paramHints: createHintStyle("parameter", false), - chainingHints: createHintStyle("chaining", false), -}; - -class HintsUpdater implements Disposable { - private sourceFiles = new Map<string, RustSourceFile>(); // map Uri -> RustSourceFile - private readonly disposables: Disposable[] = []; - private pendingDisposeDecorations: undefined | InlayHintsStyles = undefined; - private inlayHintsStyles!: InlayHintsStyles; - - constructor(private readonly ctx: Ctx) { - vscode.window.onDidChangeVisibleTextEditors( - this.onDidChangeVisibleTextEditors, - this, - this.disposables - ); - - vscode.workspace.onDidChangeTextDocument( - this.onDidChangeTextDocument, - this, - this.disposables - ); - - // Set up initial cache shape - ctx.visibleRustEditors.forEach(editor => this.sourceFiles.set( - editor.document.uri.toString(), - { - document: editor.document, - inlaysRequest: null, - cachedDecorations: null - } - )); - - this.updateInlayHintsStyles(); - this.syncCacheAndRenderHints(); - } - - dispose() { - this.sourceFiles.forEach(file => file.inlaysRequest?.cancel()); - this.ctx.visibleRustEditors.forEach(editor => this.renderDecorations(editor, { param: [], type: [], chaining: [] })); - this.disposables.forEach(d => d.dispose()); - } - - onDidChangeTextDocument({ contentChanges, document }: vscode.TextDocumentChangeEvent) { - if (contentChanges.length === 0 || !isRustDocument(document)) return; - this.syncCacheAndRenderHints(); - } - - updateInlayHintsStyles() { - const inlayHintsStyles = this.ctx.config.inlayHints.smallerHints ? smallHintsStyles : biggerHintsStyles; - - if (inlayHintsStyles !== this.inlayHintsStyles) { - this.pendingDisposeDecorations = this.inlayHintsStyles; - this.inlayHintsStyles = inlayHintsStyles; - } - } - - syncCacheAndRenderHints() { - this.sourceFiles.forEach((file, uri) => this.fetchHints(file).then(hints => { - if (!hints) return; - - file.cachedDecorations = this.hintsToDecorations(hints); - - for (const editor of this.ctx.visibleRustEditors) { - if (editor.document.uri.toString() === uri) { - this.renderDecorations(editor, file.cachedDecorations); - } - } - })); - } - - onDidChangeVisibleTextEditors() { - const newSourceFiles = new Map<string, RustSourceFile>(); - - // Rerendering all, even up-to-date editors for simplicity - this.ctx.visibleRustEditors.forEach(async editor => { - const uri = editor.document.uri.toString(); - const file = this.sourceFiles.get(uri) ?? { - document: editor.document, - inlaysRequest: null, - cachedDecorations: null - }; - newSourceFiles.set(uri, file); - - // No text documents changed, so we may try to use the cache - if (!file.cachedDecorations) { - const hints = await this.fetchHints(file); - if (!hints) return; - - file.cachedDecorations = this.hintsToDecorations(hints); - } - - this.renderDecorations(editor, file.cachedDecorations); - }); - - // Cancel requests for no longer visible (disposed) source files - this.sourceFiles.forEach((file, uri) => { - if (!newSourceFiles.has(uri)) file.inlaysRequest?.cancel(); - }); - - this.sourceFiles = newSourceFiles; - } - - private renderDecorations(editor: RustEditor, decorations: InlaysDecorations) { - const { typeHints, paramHints, chainingHints } = this.inlayHintsStyles; - if (this.pendingDisposeDecorations !== undefined) { - const { typeHints, paramHints, chainingHints } = this.pendingDisposeDecorations; - editor.setDecorations(typeHints.decorationType, []); - editor.setDecorations(paramHints.decorationType, []); - editor.setDecorations(chainingHints.decorationType, []); - } - editor.setDecorations(typeHints.decorationType, decorations.type); - editor.setDecorations(paramHints.decorationType, decorations.param); - editor.setDecorations(chainingHints.decorationType, decorations.chaining); - } - - private hintsToDecorations(hints: ra.InlayHint[]): InlaysDecorations { - const { typeHints, paramHints, chainingHints } = this.inlayHintsStyles; - const decorations: InlaysDecorations = { type: [], param: [], chaining: [] }; - const conv = this.ctx.client.protocol2CodeConverter; - - for (const hint of hints) { - switch (hint.kind) { - case ra.InlayHint.Kind.TypeHint: { - decorations.type.push(typeHints.toDecoration(hint, conv)); - continue; - } - case ra.InlayHint.Kind.ParamHint: { - decorations.param.push(paramHints.toDecoration(hint, conv)); - continue; - } - case ra.InlayHint.Kind.ChainingHint: { - decorations.chaining.push(chainingHints.toDecoration(hint, conv)); - continue; - } - } - } - return decorations; - } - - private async fetchHints(file: RustSourceFile): Promise<null | ra.InlayHint[]> { - file.inlaysRequest?.cancel(); - - const tokenSource = new vscode.CancellationTokenSource(); - file.inlaysRequest = tokenSource; - - const request = { textDocument: { uri: file.document.uri.toString() } }; - - return sendRequestWithRetry(this.ctx.client, ra.inlayHints, request, tokenSource.token) - .catch(_ => null) - .finally(() => { - if (file.inlaysRequest === tokenSource) { - file.inlaysRequest = null; - } - }); - } -} - -interface InlaysDecorations { - type: vscode.DecorationOptions[]; - param: vscode.DecorationOptions[]; - chaining: vscode.DecorationOptions[]; -} - -interface RustSourceFile { - /** - * Source of the token to cancel in-flight inlay hints request if any. - */ - inlaysRequest: null | vscode.CancellationTokenSource; - /** - * Last applied decorations. - */ - cachedDecorations: null | InlaysDecorations; - - document: RustDocument; -} diff --git a/editors/code/src/lsp_ext.ts b/editors/code/src/lsp_ext.ts index 9248bd1b6f6..9493a034819 100644 --- a/editors/code/src/lsp_ext.ts +++ b/editors/code/src/lsp_ext.ts @@ -2,6 +2,7 @@ * This file mirrors `crates/rust-analyzer/src/lsp_ext.rs` declarations. */ +import { InlayHint } from "vscode"; import * as lc from "vscode-languageclient"; export interface AnalyzerStatusParams { @@ -99,26 +100,11 @@ export interface TestInfo { export const relatedTests = new lc.RequestType<lc.TextDocumentPositionParams, TestInfo[], void>("rust-analyzer/relatedTests"); -export type InlayHint = InlayHint.TypeHint | InlayHint.ParamHint | InlayHint.ChainingHint; - -export namespace InlayHint { - export const enum Kind { - TypeHint = "TypeHint", - ParamHint = "ParameterHint", - ChainingHint = "ChainingHint", - } - interface Common { - range: lc.Range; - label: string; - } - export type TypeHint = Common & { kind: Kind.TypeHint }; - export type ParamHint = Common & { kind: Kind.ParamHint }; - export type ChainingHint = Common & { kind: Kind.ChainingHint }; -} export interface InlayHintsParams { textDocument: lc.TextDocumentIdentifier; + range: lc.Range; } -export const inlayHints = new lc.RequestType<InlayHintsParams, InlayHint[], void>("rust-analyzer/inlayHints"); +export const inlayHints = new lc.RequestType<InlayHintsParams, InlayHint[], void>("experimental/inlayHints"); export interface SsrParams { query: string; |
