From 6f4b274d2d47bfbd9b3100f0dda647de199fce19 Mon Sep 17 00:00:00 2001 From: Liu-Cheng Xu Date: Thu, 14 Mar 2024 09:32:37 +0800 Subject: [PATCH] Introduce `remote_sink` in provider (#1056) * refactor Linter trait * Impl remote_sink() in lsp provider * Nits * Nits * [on_move] eliminate the cursorline parsing This can be replaced with fetching the corresponding original item by converting the trait object to the concrete type. * . * Friendly message when LSP service unavailable * Add unimplemented message * Move .cargo/config.toml to config.toml * Reduce one clone * Use patched highlights.scm for cpp * cargo update * Update CHANGELOG * Commit queries * fix vint --- CHANGELOG.md | 2 + Cargo.lock | 786 ++++++++---------- autoload/clap.vim | 11 +- autoload/clap/handler.vim | 16 +- autoload/clap/picker.vim | 1 + autoload/clap/plugin/lsp.vim | 2 +- autoload/clap/selection.vim | 5 + .cargo/config => config.toml | 0 crates/code_tools/src/linting/linters/go.rs | 7 +- .../code_tools/src/linting/linters/python.rs | 7 +- crates/code_tools/src/linting/linters/sh.rs | 7 +- .../code_tools/src/linting/linters/typos.rs | 7 +- crates/code_tools/src/linting/linters/vim.rs | 7 +- crates/code_tools/src/linting/mod.rs | 12 +- crates/maple_core/src/searcher/file.rs | 2 +- crates/maple_core/src/searcher/files.rs | 2 +- .../src/searcher/grep/stoppable_searcher.rs | 2 +- crates/maple_core/src/searcher/tagfiles.rs | 2 +- .../src/stdio_server/diagnostics_worker.rs | 18 +- crates/maple_core/src/stdio_server/input.rs | 18 +- crates/maple_core/src/stdio_server/mod.rs | 3 +- .../src/stdio_server/plugin/diagnostics.rs | 2 +- .../src/stdio_server/plugin/linter.rs | 2 +- .../maple_core/src/stdio_server/plugin/lsp.rs | 86 +- .../src/stdio_server/plugin/syntax.rs | 12 +- .../provider/impls/generic_provider.rs | 2 +- .../src/stdio_server/provider/impls/lsp.rs | 166 ++-- .../src/stdio_server/provider/mod.rs | 111 ++- crates/maple_core/src/stdio_server/service.rs | 67 +- crates/maple_core/src/stdio_server/vim.rs | 63 -- crates/maple_lsp/src/lib.rs | 4 + crates/printer/src/lib.rs | 15 +- crates/tree_sitter/queries/cpp/highlights.scm | 270 ++++++ crates/tree_sitter/src/language.rs | 4 +- crates/types/src/source_item.rs | 1 + docs/src/plugins/plugins.md | 3 + 36 files changed, 1042 insertions(+), 683 deletions(-) rename .cargo/config => config.toml (100%) create mode 100644 crates/tree_sitter/queries/cpp/highlights.scm diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ba9f2127..92e55f41c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## [unreleased] +- Introduce `remote_sink` in provider in order to implement the sink function on the Rust side, particularly useful for the providers with static list of source like lsp. + ## [0.52] 2024-2-29 ### Plugins diff --git a/Cargo.lock b/Cargo.lock index 0340204a8..95450c4c4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,9 +49,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.4" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" dependencies = [ "anstyle", "anstyle-parse", @@ -63,53 +63,53 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" [[package]] name = "anstyle-parse" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" [[package]] name = "async-trait" -version = "0.1.74" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -141,9 +141,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.5" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "bincode" @@ -162,9 +162,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" [[package]] name = "block" @@ -174,12 +174,12 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "bstr" -version = "1.7.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c79ad7fb2dd38f3dabd76b09c6a5a20c038fc0213ef1e9afd30eb777f120f019" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" dependencies = [ "memchr", - "regex-automata 0.4.3", + "regex-automata 0.4.6", "serde", ] @@ -195,9 +195,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" [[package]] name = "bytecount" @@ -234,9 +234,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12024c4645c97566567129c204f65d5815a8c9aecf30fcbe682b2fe034996d36" +checksum = "694c8807f2ae16faecc43dc17d74b3eb042482789fd0eb64b39a2e04e087053f" dependencies = [ "serde", ] @@ -263,9 +263,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.83" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" dependencies = [ "jobserver", "libc", @@ -285,9 +285,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.31" +version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a" dependencies = [ "android-tzdata", "iana-time-zone", @@ -295,7 +295,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.48.5", + "windows-targets 0.52.4", ] [[package]] @@ -336,9 +336,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.7" +version = "4.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" +checksum = "b230ab84b0ffdf890d5a10abdbc8b83ae1c4918275daea1ab8801f71536b2651" dependencies = [ "clap_builder", "clap_derive", @@ -346,33 +346,33 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.7" +version = "4.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] name = "clap_derive" -version = "4.4.7" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] name = "clap_lex" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "cli" @@ -453,21 +453,21 @@ dependencies = [ [[package]] name = "console" -version = "0.15.7" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" dependencies = [ "encode_unicode", "lazy_static", "libc", - "windows-sys 0.45.0", + "windows-sys 0.52.0", ] [[package]] name = "copypasta" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d35364349bf9e9e1c3a035ddcb00d188d23a3c40c50244c03c27a99fc6a65ae" +checksum = "deb85422867ca93da58b7f95fb5c0c10f6183ed6e1ef8841568968a896d3a858" dependencies = [ "clipboard-win", "objc", @@ -478,9 +478,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -488,15 +488,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" dependencies = [ "cfg-if", ] @@ -539,46 +539,37 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset 0.9.0", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -588,9 +579,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "darling" -version = "0.20.3" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" dependencies = [ "darling_core", "darling_macro", @@ -598,34 +589,34 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.3" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim", - "syn 2.0.38", + "strsim 0.10.0", + "syn 2.0.52", ] [[package]] name = "darling_macro" -version = "0.20.3" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] name = "deranged" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", ] @@ -699,9 +690,9 @@ checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" [[package]] name = "either" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" [[package]] name = "encode_unicode" @@ -781,18 +772,18 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] name = "futures" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -805,9 +796,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -815,15 +806,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -832,38 +823,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-macro" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] name = "futures-sink" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -888,19 +879,19 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.3.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb65d4ba3173c56a500b555b532f72c42e8d1fe64962b518897f8959fae2c177" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" dependencies = [ "libc", - "winapi", + "windows-targets 0.48.5", ] [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "libc", @@ -909,9 +900,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "git2" @@ -943,15 +934,15 @@ dependencies = [ [[package]] name = "globset" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" dependencies = [ "aho-corasick", "bstr", - "fnv", "log", - "regex", + "regex-automata 0.4.6", + "regex-syntax 0.8.2", ] [[package]] @@ -972,7 +963,7 @@ dependencies = [ "bstr", "grep-matcher", "log", - "regex-automata 0.4.3", + "regex-automata 0.4.6", "regex-syntax 0.8.2", ] @@ -993,9 +984,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" dependencies = [ "bytes", "fnv", @@ -1003,7 +994,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap", "slab", "tokio", "tokio-util", @@ -1012,9 +1003,9 @@ dependencies = [ [[package]] name = "half" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" +checksum = "b5eceaaeec696539ddaf7b333340f1af35a5aa87ae3e4f3ead0532f72affab2e" dependencies = [ "cfg-if", "crunchy", @@ -1022,15 +1013,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "heck" @@ -1040,24 +1025,24 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.3.3" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "home" -version = "0.5.5" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "http" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", @@ -1066,9 +1051,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", @@ -1089,9 +1074,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -1104,7 +1089,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.10", + "socket2", "tokio", "tower-service", "tracing", @@ -1127,9 +1112,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.58" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1165,9 +1150,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -1175,39 +1160,28 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.20" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" dependencies = [ + "crossbeam-deque", "globset", - "lazy_static", "log", "memchr", - "regex", + "regex-automata 0.4.6", "same-file", - "thread_local", "walkdir", "winapi-util", ] [[package]] name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.1.0" +version = "2.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" dependencies = [ "equivalent", - "hashbrown 0.14.2", + "hashbrown", ] [[package]] @@ -1265,9 +1239,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "jni" @@ -1293,18 +1267,18 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.65" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] @@ -1323,9 +1297,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.149" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libgit2-sys" @@ -1341,6 +1315,17 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall 0.4.1", +] + [[package]] name = "libssh2-sys" version = "0.2.23" @@ -1357,9 +1342,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.12" +version = "1.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +checksum = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6" dependencies = [ "cc", "libc", @@ -1384,9 +1369,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "lock_api" @@ -1400,9 +1385,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "lsp-types" @@ -1488,7 +1473,7 @@ dependencies = [ "rpc", "serde", "serde_json", - "strsim", + "strsim 0.10.0", "sublime_syntax", "subprocess", "thiserror", @@ -1511,7 +1496,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", "types", ] @@ -1557,37 +1542,19 @@ dependencies = [ [[package]] name = "memchr" -version = "2.6.4" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "memmap2" -version = "0.9.0" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba38d7abf1d4cca21cc89e932e542ba2b9258664d2a9ef0e61512039c9375" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] - [[package]] name = "mime" version = "0.3.17" @@ -1596,18 +1563,18 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "wasi", @@ -1620,18 +1587,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.7.1", -] - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -1642,11 +1597,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", ] @@ -1704,18 +1665,18 @@ dependencies = [ [[package]] name = "object" -version = "0.32.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "onig" @@ -1753,9 +1714,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.100" +version = "0.9.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae94056a791d0e1217d18b6cbdccb02c61e3054fc69893607f4067e3bb0b1fd1" +checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" dependencies = [ "cc", "libc", @@ -1819,9 +1780,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project-lite" @@ -1837,18 +1798,18 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plist" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a4a0cfc5fb21a09dc6af4bf834cf10d4a32fccd9e2ea468c4b1751a097487aa" +checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" dependencies = [ - "base64 0.21.5", - "indexmap 1.9.3", + "base64 0.21.7", + "indexmap", "line-wrap", "quick-xml", "serde", @@ -1913,27 +1874,27 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] [[package]] name = "quick-xml" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -1976,9 +1937,9 @@ checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" [[package]] name = "rayon" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +checksum = "e4963ed1bc86e4f3ee217022bd855b297cef07fb9eac5dfa1f788b220b49b3bd" dependencies = [ "either", "rayon-core", @@ -1986,9 +1947,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -2020,24 +1981,24 @@ checksum = "20145670ba436b55d91fc92d25e71160fbfbdd57831631c8d7d36377a476f1cb" [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ "getrandom", - "redox_syscall 0.2.16", + "libredox", "thiserror", ] [[package]] name = "regex" -version = "1.10.2" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.3", + "regex-automata 0.4.6", "regex-syntax 0.8.2", ] @@ -2052,9 +2013,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", @@ -2067,12 +2028,6 @@ version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" -[[package]] -name = "regex-syntax" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" - [[package]] name = "regex-syntax" version = "0.8.2" @@ -2081,11 +2036,11 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" -version = "0.11.22" +version = "0.11.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" +checksum = "78bf93c4af7a8bb7d879d51cebe797356ff10ae8516ace542b5182d9dcac10b2" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", @@ -2107,6 +2062,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", "system-configuration", "tokio", "tokio-rustls", @@ -2127,16 +2083,17 @@ checksum = "1ebca96b1c05912d531790498048bab5b7b97a756a7bb9df71fa4ef7ef9814e1" [[package]] name = "ring" -version = "0.17.5" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", + "cfg-if", "getrandom", "libc", "spin", "untrusted", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2158,22 +2115,22 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.38.21" +version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.4.2", "errno", "libc", "linux-raw-sys", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "rustls" -version = "0.21.8" +version = "0.21.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", "ring", @@ -2183,11 +2140,11 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", ] [[package]] @@ -2202,9 +2159,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "safemem" @@ -2239,38 +2196,38 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.190" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.190" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] name = "serde_json" -version = "1.0.108" +version = "1.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" dependencies = [ "itoa", "ryu", @@ -2279,13 +2236,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -2344,28 +2301,18 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2380,6 +2327,12 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "strsim" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" + [[package]] name = "sublime_syntax" version = "0.1.52" @@ -2413,20 +2366,26 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.38" +version = "2.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "syntect" -version = "5.1.0" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02b4b303bf8d08bfeb0445cba5068a3d306b6baece1d5582171a9bf49188f91" +checksum = "874dcfa363995604333cf947ae9f751ca3af4522c60886774c4963943b4746b1" dependencies = [ "bincode", "bitflags 1.3.2", @@ -2435,8 +2394,9 @@ dependencies = [ "once_cell", "onig", "plist", - "regex-syntax 0.7.5", + "regex-syntax 0.8.2", "serde", + "serde_derive", "serde_json", "thiserror", "walkdir", @@ -2478,29 +2438,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.50" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if", "once_cell", @@ -2508,12 +2468,13 @@ dependencies = [ [[package]] name = "time" -version = "0.3.30" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" dependencies = [ "deranged", "itoa", + "num-conv", "powerfmt", "serde", "time-core", @@ -2528,10 +2489,11 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" dependencies = [ + "num-conv", "time-core", ] @@ -2573,7 +2535,7 @@ dependencies = [ "num_cpus", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.5", + "socket2", "tokio-macros", "windows-sys 0.48.0", ] @@ -2586,7 +2548,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -2634,7 +2596,7 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 2.1.0", + "indexmap", "toml_datetime", "winnow", ] @@ -2658,11 +2620,12 @@ dependencies = [ [[package]] name = "tracing-appender" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" dependencies = [ "crossbeam-channel", + "thiserror", "time", "tracing-subscriber", ] @@ -2675,7 +2638,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -2690,9 +2653,9 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ "log", "once_cell", @@ -2701,9 +2664,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers", "nu-ansi-term", @@ -2729,9 +2692,9 @@ dependencies = [ [[package]] name = "tree-sitter-bash" -version = "0.20.3" +version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "096f57b3b44c04bfc7b21a4da44bfa16adf1f88aba18993b8478a091076d0968" +checksum = "57da2032c37eb2ce29fd18df7d3b94355fec8d6d854d8f80934955df542b5906" dependencies = [ "cc", "tree-sitter", @@ -2739,9 +2702,9 @@ dependencies = [ [[package]] name = "tree-sitter-c" -version = "0.20.6" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b03bdf218020057abee831581a74bff8c298323d6c6cd1a70556430ded9f4b" +checksum = "4bbd5f3d8658c08581f8f2adac6c391c2e9fa00fe9246bf6c5f52213b9cc6b72" dependencies = [ "cc", "tree-sitter", @@ -2749,9 +2712,9 @@ dependencies = [ [[package]] name = "tree-sitter-cpp" -version = "0.20.3" +version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b4b625f46a7370544b9cf0545532c26712ae49bfc02eb09825db358b9f79e1" +checksum = "46b04a5ada71059afb9895966a6cc1094acc8d2ea1971006db26573e7dfebb74" dependencies = [ "cc", "tree-sitter", @@ -2789,9 +2752,9 @@ dependencies = [ [[package]] name = "tree-sitter-javascript" -version = "0.20.1" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edbc663376bdd294bd1f0a6daf859aedb9aa5bdb72217d7ad8ba2d5314102cf7" +checksum = "d015c02ea98b62c806f7329ff71c383286dfc3a7a7da0cc484f6e42922f73c2c" dependencies = [ "cc", "tree-sitter", @@ -2799,9 +2762,9 @@ dependencies = [ [[package]] name = "tree-sitter-json" -version = "0.20.1" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d82d2e33ee675dc71289e2ace4f8f9cf96d36d81400e9dae5ea61edaf5dea6" +checksum = "5a9a38a9c679b55cc8d17350381ec08d69fa1a17a53fcf197f344516e485ed4d" dependencies = [ "cc", "tree-sitter", @@ -2898,9 +2861,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "types" @@ -2912,9 +2875,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" @@ -2924,9 +2887,9 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] @@ -2955,9 +2918,9 @@ dependencies = [ [[package]] name = "url" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -2994,9 +2957,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "walkdir" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", @@ -3019,9 +2982,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.88" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -3029,24 +2992,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.88" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.38" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" dependencies = [ "cfg-if", "js-sys", @@ -3056,9 +3019,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.88" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3066,28 +3029,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.88" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.88" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "web-sys" -version = "0.3.65" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", @@ -3095,9 +3058,9 @@ dependencies = [ [[package]] name = "webbrowser" -version = "0.8.12" +version = "0.8.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71" +checksum = "d1b04c569c83a9bb971dd47ec6fd48753315f4bf989b9b04a2e7ca4d7f0dc950" dependencies = [ "core-foundation", "home", @@ -3112,9 +3075,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.2" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "which" @@ -3154,15 +3117,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "winapi-wsapoll" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -3171,11 +3125,11 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.51.1" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.48.5", + "windows-targets 0.52.4", ] [[package]] @@ -3202,7 +3156,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.4", ] [[package]] @@ -3237,17 +3191,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", ] [[package]] @@ -3264,9 +3218,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" [[package]] name = "windows_aarch64_msvc" @@ -3282,9 +3236,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" [[package]] name = "windows_i686_gnu" @@ -3300,9 +3254,9 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" [[package]] name = "windows_i686_msvc" @@ -3318,9 +3272,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" [[package]] name = "windows_x86_64_gnu" @@ -3336,9 +3290,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" [[package]] name = "windows_x86_64_gnullvm" @@ -3354,9 +3308,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" [[package]] name = "windows_x86_64_msvc" @@ -3372,15 +3326,15 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" [[package]] name = "winnow" -version = "0.5.18" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176b6138793677221d420fd2f0aeeced263f197688b36484660da767bca2fa32" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] @@ -3403,34 +3357,30 @@ checksum = "23f6174b2566cc4a74f95e1367ec343e7fa80c93cc8087f5c4a3d6a1088b2118" [[package]] name = "x11-clipboard" -version = "0.8.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41aca1115b1f195f21c541c5efb423470848d48143127d0f07f8b90c27440df" +checksum = "b98785a09322d7446e28a13203d2cae1059a0dd3dfb32cb06d0a225f023d8286" dependencies = [ + "libc", "x11rb", ] [[package]] name = "x11rb" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1641b26d4dec61337c35a1b1aaf9e3cba8f46f0b43636c609ab0291a648040a" +checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" dependencies = [ "gethostname", - "nix", - "winapi", - "winapi-wsapoll", + "rustix", "x11rb-protocol", ] [[package]] name = "x11rb-protocol" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d6c3f9a0fb6701fab8f6cea9b0c0bd5d6876f1f89f7fada07e558077c344bc" -dependencies = [ - "nix", -] +checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" [[package]] name = "xshell" diff --git a/autoload/clap.vim b/autoload/clap.vim index 3b3c98ff9..6546f3827 100644 --- a/autoload/clap.vim +++ b/autoload/clap.vim @@ -157,7 +157,10 @@ endfunction function! clap#_exit_provider() abort call g:clap.provider.jobstop() - call clap#maple#notify_exit_provider() + " The provider backend will be terminated automatically if remote_sink is invoked. + if !get(g:, '__clap_remote_sink_triggered', v:false) + call clap#maple#notify_exit_provider() + endif noautocmd call g:clap.close_win() call g:clap.preview.clear() @@ -209,8 +212,10 @@ endfunction function! s:validate_provider(registration_info) abort " Every provider should specify the sink option. - if !has_key(a:registration_info, 'sink') && !has_key(get(a:registration_info, 'mappings', {}), "") - call clap#helper#echo_error('A valid provider must provide either sink or mapping') + if !has_key(a:registration_info, 'sink') + \ && !has_key(a:registration_info, 'remote_sink') + \ && !has_key(get(a:registration_info, 'mappings', {}), '') + call clap#helper#echo_error('A valid provider must provide either sink/remote_sink or mapping') return v:false endif if has_key(a:registration_info, 'source') diff --git a/autoload/clap/handler.vim b/autoload/clap/handler.vim index 3d85823e6..94496f5f6 100644 --- a/autoload/clap/handler.vim +++ b/autoload/clap/handler.vim @@ -56,7 +56,7 @@ function! s:handle_no_matches() abort endif endfunction -function! s:provider_sink() abort +function! s:local_sink() abort " This could be more robust by checking the exact matches count, but this should also be enough. if empty(g:clap.display.getcurline()) \ || g:clap.display.get_lines() == [g:clap_no_matches_msg] @@ -91,6 +91,20 @@ function! s:provider_sink() abort endtry endfunction +function! s:provider_sink() abort + if has_key(g:clap.provider._(), 'remote_sink') + let g:__clap_remote_sink_triggered = v:true + " All the state needed for remote_sink should be shipped in the params as + " the provider will be closed immediately after sending the request. + call clap#client#notify_provider('remote_sink', { 'line_numbers': clap#selection#line_numbers() }) + call s:internal_exit() + call g:clap.provider.on_exit() + silent doautocmd User ClapOnExit + else + call s:local_sink() + endif +endfunction + " Similar to s:provider_sink() but using a custom Sink function and without " handling the no matches case. function! clap#handler#sink_with(SinkFn, ...) abort diff --git a/autoload/clap/picker.vim b/autoload/clap/picker.vim index b9b5e77b2..adf200270 100644 --- a/autoload/clap/picker.vim +++ b/autoload/clap/picker.vim @@ -192,6 +192,7 @@ function! clap#picker#clear_state_pre() abort \ 'g:__clap_provider_cwd', \ 'g:__clap_provider_did_sink', \ 'g:__clap_forerunner_result', + \ 'g:__clap_remote_sink_triggered', \ 'g:__clap_match_scope_enum', \ 'g:__clap_recent_files_dyn_tmp', \ 'g:__clap_forerunner_tempfile', diff --git a/autoload/clap/plugin/lsp.vim b/autoload/clap/plugin/lsp.vim index 1d94c76ef..0a60d1501 100644 --- a/autoload/clap/plugin/lsp.vim +++ b/autoload/clap/plugin/lsp.vim @@ -26,7 +26,7 @@ function! clap#plugin#lsp#open_picker(title) abort \ 'title': a:title, \ 'on_typed': { -> clap#client#notify_provider('on_typed') }, \ 'on_move': { -> clap#client#notify_provider('on_move') }, - \ 'sink': 'e', + \ 'remote_sink': v:true, \ 'icon': 'lsp', \ } call clap#run(provider) diff --git a/autoload/clap/selection.vim b/autoload/clap/selection.vim index 8aa64ca94..a690b228e 100644 --- a/autoload/clap/selection.vim +++ b/autoload/clap/selection.vim @@ -21,6 +21,11 @@ function! clap#selection#get_sink_or_sink_star_params() abort return [Sink, sink_args] endfunction +function! clap#selection#line_numbers() abort + let selected = clap#sign#get() + return s:multi_select_enabled && !empty(selected) ? selected : [g:clap.display.getcurlnum()] +endfunction + function! clap#selection#get_action_or_action_star_params() abort let selected = clap#sign#get() if len(selected) > 1 diff --git a/.cargo/config b/config.toml similarity index 100% rename from .cargo/config rename to config.toml diff --git a/crates/code_tools/src/linting/linters/go.rs b/crates/code_tools/src/linting/linters/go.rs index bbf858409..ec3ad2240 100644 --- a/crates/code_tools/src/linting/linters/go.rs +++ b/crates/code_tools/src/linting/linters/go.rs @@ -44,13 +44,8 @@ pub struct Gopls; impl Linter for Gopls { const EXE: &'static str = "gopls"; - fn linter_command( - base_cmd: tokio::process::Command, - source_file: &Path, - ) -> tokio::process::Command { - let mut cmd = base_cmd; + fn add_args(cmd: &mut tokio::process::Command, source_file: &Path) { cmd.arg("check").arg(source_file); - cmd } fn parse_line(&self, line: &[u8]) -> Option { diff --git a/crates/code_tools/src/linting/linters/python.rs b/crates/code_tools/src/linting/linters/python.rs index 1ff9d9c0d..0893bad76 100644 --- a/crates/code_tools/src/linting/linters/python.rs +++ b/crates/code_tools/src/linting/linters/python.rs @@ -51,15 +51,10 @@ pub struct Ruff; impl Linter for Ruff { const EXE: &'static str = "ruff"; - fn linter_command( - base_cmd: tokio::process::Command, - source_file: &Path, - ) -> tokio::process::Command { - let mut cmd = base_cmd; + fn add_args(cmd: &mut tokio::process::Command, source_file: &Path) { cmd.arg("check") .arg("--output-format=json-lines") .arg(source_file); - cmd } fn parse_line(&self, line: &[u8]) -> Option { diff --git a/crates/code_tools/src/linting/linters/sh.rs b/crates/code_tools/src/linting/linters/sh.rs index b4251affc..91fa65da7 100644 --- a/crates/code_tools/src/linting/linters/sh.rs +++ b/crates/code_tools/src/linting/linters/sh.rs @@ -52,13 +52,8 @@ pub struct ShellCheck; impl Linter for ShellCheck { const EXE: &'static str = "shellcheck"; - fn linter_command( - base_cmd: tokio::process::Command, - source_file: &Path, - ) -> tokio::process::Command { - let mut cmd = base_cmd; + fn add_args(cmd: &mut tokio::process::Command, source_file: &Path) { cmd.arg("--format=json").arg(source_file); - cmd } async fn lint_file( diff --git a/crates/code_tools/src/linting/linters/typos.rs b/crates/code_tools/src/linting/linters/typos.rs index df5e2c74f..aa582e976 100644 --- a/crates/code_tools/src/linting/linters/typos.rs +++ b/crates/code_tools/src/linting/linters/typos.rs @@ -112,13 +112,8 @@ pub struct Typos; impl Linter for Typos { const EXE: &'static str = "typos"; - fn linter_command( - base_cmd: tokio::process::Command, - source_file: &Path, - ) -> tokio::process::Command { - let mut cmd = base_cmd; + fn add_args(cmd: &mut tokio::process::Command, source_file: &Path) { cmd.arg("--format=json").arg(source_file); - cmd } fn parse_line(&self, line: &[u8]) -> Option { diff --git a/crates/code_tools/src/linting/linters/vim.rs b/crates/code_tools/src/linting/linters/vim.rs index c60f34f52..b254b82e1 100644 --- a/crates/code_tools/src/linting/linters/vim.rs +++ b/crates/code_tools/src/linting/linters/vim.rs @@ -42,13 +42,8 @@ pub struct Vint; impl Linter for Vint { const EXE: &'static str = "vint"; - fn linter_command( - base_cmd: tokio::process::Command, - source_file: &Path, - ) -> tokio::process::Command { - let mut cmd = base_cmd; + fn add_args(cmd: &mut tokio::process::Command, source_file: &Path) { cmd.arg("-j").arg(source_file); - cmd } async fn lint_file( diff --git a/crates/code_tools/src/linting/mod.rs b/crates/code_tools/src/linting/mod.rs index c4b7a0302..3d5857890 100644 --- a/crates/code_tools/src/linting/mod.rs +++ b/crates/code_tools/src/linting/mod.rs @@ -159,20 +159,16 @@ trait Linter { } /// Append the linter-specific args to the linter executable. - fn linter_command( - base_cmd: tokio::process::Command, - source_file: &Path, - ) -> tokio::process::Command; + fn add_args(base_cmd: &mut tokio::process::Command, source_file: &Path); /// Constructs the final linter command. fn command( source_file: &Path, workspace_root: &Path, ) -> std::io::Result { - Ok(Self::linter_command( - Self::base_command(workspace_root)?, - source_file, - )) + let mut cmd = Self::base_command(workspace_root)?; + Self::add_args(&mut cmd, source_file); + Ok(cmd) } /// Parses the diagnostic message from linter in a line-wise manner. diff --git a/crates/maple_core/src/searcher/file.rs b/crates/maple_core/src/searcher/file.rs index c907f151b..d09cc1895 100644 --- a/crates/maple_core/src/searcher/file.rs +++ b/crates/maple_core/src/searcher/file.rs @@ -155,6 +155,6 @@ pub async fn search( total_processed, total_matched, ?query, - "Searching is complete in {elapsed:?}ms" + "Searching completed in {elapsed:?}ms" ); } diff --git a/crates/maple_core/src/searcher/files.rs b/crates/maple_core/src/searcher/files.rs index ec0dc52a7..2d7feebd3 100644 --- a/crates/maple_core/src/searcher/files.rs +++ b/crates/maple_core/src/searcher/files.rs @@ -132,6 +132,6 @@ pub async fn search(query: String, hidden: bool, matcher: Matcher, search_contex total_processed, total_matched, ?query, - "Searching is complete in {elapsed:?}ms" + "Searching completed in {elapsed:?}ms" ); } diff --git a/crates/maple_core/src/searcher/grep/stoppable_searcher.rs b/crates/maple_core/src/searcher/grep/stoppable_searcher.rs index 5b93069f3..76510ce95 100644 --- a/crates/maple_core/src/searcher/grep/stoppable_searcher.rs +++ b/crates/maple_core/src/searcher/grep/stoppable_searcher.rs @@ -346,6 +346,6 @@ pub async fn search(query: String, matcher: Matcher, search_context: SearchConte total_processed, total_matched, ?query, - "Searching is complete in {elapsed:?}ms" + "Searching completed in {elapsed:?}ms" ); } diff --git a/crates/maple_core/src/searcher/tagfiles.rs b/crates/maple_core/src/searcher/tagfiles.rs index 7f011dd98..8ef965dc5 100644 --- a/crates/maple_core/src/searcher/tagfiles.rs +++ b/crates/maple_core/src/searcher/tagfiles.rs @@ -360,7 +360,7 @@ pub async fn search(query: String, cwd: PathBuf, matcher: Matcher, search_contex total_processed, total_matched, ?query, - "Searching is complete in {elapsed:?}ms" + "Searching completed in {elapsed:?}ms" ); } diff --git a/crates/maple_core/src/stdio_server/diagnostics_worker.rs b/crates/maple_core/src/stdio_server/diagnostics_worker.rs index 7191938bf..629b0cbe3 100644 --- a/crates/maple_core/src/stdio_server/diagnostics_worker.rs +++ b/crates/maple_core/src/stdio_server/diagnostics_worker.rs @@ -116,7 +116,7 @@ impl BufferDiagnostics { } } - async fn display_diagnostics_at_cursor(&self, vim: &Vim) -> VimResult<()> { + async fn display_diagnostics_under_cursor(&self, vim: &Vim) -> VimResult<()> { let lnum = vim.line(".").await?; let col = vim.col(".").await?; @@ -210,7 +210,9 @@ fn update_buffer_diagnostics( let vim = vim.clone(); async move { - let _ = buffer_diagnostics.display_diagnostics_at_cursor(&vim).await; + let _ = buffer_diagnostics + .display_diagnostics_under_cursor(&vim) + .await; } }); @@ -261,8 +263,8 @@ fn convert_lsp_diagnostic_to_diagnostic(lsp_diag: maple_lsp::lsp::Diagnostic) -> pub enum WorkerMessage { ShowDiagnostics(usize), - ShowDiagnosticsAtCursor(usize), - ShowDiagnosticsAtCursorInFloatWin(usize), + ShowDiagnosticsUnderCursor(usize), + ShowDiagnosticsUnderCursorInFloatWin(usize), NavigateDiagnostics((usize, DiagnosticKind, Direction)), ResetBufferDiagnostics(usize), LinterDiagnostics((usize, LinterDiagnostics)), @@ -292,7 +294,7 @@ impl BufferDiagnosticsWorker { .echo_message(format!("diagnostics not found for buffer {bufnr}"))?; } } - WorkerMessage::ShowDiagnosticsAtCursor(bufnr) => { + WorkerMessage::ShowDiagnosticsUnderCursor(bufnr) => { if let Some(diagnostics) = self.buffer_diagnostics.get(&bufnr) { let Ok(lnum) = self.vim.line(".").await else { continue; @@ -320,9 +322,11 @@ impl BufferDiagnosticsWorker { } } } - WorkerMessage::ShowDiagnosticsAtCursorInFloatWin(bufnr) => { + WorkerMessage::ShowDiagnosticsUnderCursorInFloatWin(bufnr) => { if let Some(diagnostics) = self.buffer_diagnostics.get(&bufnr) { - diagnostics.display_diagnostics_at_cursor(&self.vim).await?; + diagnostics + .display_diagnostics_under_cursor(&self.vim) + .await?; } } WorkerMessage::ResetBufferDiagnostics(bufnr) => { diff --git a/crates/maple_core/src/stdio_server/input.rs b/crates/maple_core/src/stdio_server/input.rs index 2b21c21ab..4c918531b 100644 --- a/crates/maple_core/src/stdio_server/input.rs +++ b/crates/maple_core/src/stdio_server/input.rs @@ -40,6 +40,7 @@ impl PluginEvent { pub enum ProviderEvent { OnMove(Params), OnTyped(Params), + RemoteSink(Params), Exit, Key(KeyEvent), /// Signal fired internally. @@ -112,6 +113,9 @@ impl Event { match notification.method.as_str() { "new_provider" => Ok(Self::NewProvider(notification.params)), "exit_provider" => Ok(Self::ProviderWorker(ProviderEvent::Exit)), + "remote_sink" => Ok(Self::ProviderWorker(ProviderEvent::RemoteSink( + notification.params, + ))), "on_move" => Ok(Self::ProviderWorker(ProviderEvent::OnMove( notification.params, ))), @@ -215,20 +219,20 @@ impl InputRecorder { } pub fn try_record(&mut self, new: String) { - let new = new.trim(); + let trimmed_new = new.trim(); - if new.is_empty() || self.inputs.iter().any(|s| s == new) { + if trimmed_new.is_empty() || self.inputs.iter().any(|s| s == trimmed_new) { return; } - // New input is part of some old input. - if self.inputs.iter().any(|old| old.starts_with(new)) { + // trimmed_new input is part of some old input. + if self.inputs.iter().any(|old| old.starts_with(trimmed_new)) { return; } // Prune the last input if the consecutive input is extending it. // Avoid recording the partial incomplete list, e.g., `i, in, inp, inpu, input`. - if new.starts_with(&self.last_input) { + if trimmed_new.starts_with(&self.last_input) { if let Some(pos) = self .inputs .iter() @@ -244,8 +248,8 @@ impl InputRecorder { if !self.inputs.is_empty() { self.current_index += 1; } - self.inputs.push_back(new.to_string()); - self.last_input = new.to_string(); + self.inputs.push_back(new.clone()); + self.last_input = new; if self.inputs.len() > Self::MAX_INPUTS { self.inputs.pop_front(); diff --git a/crates/maple_core/src/stdio_server/mod.rs b/crates/maple_core/src/stdio_server/mod.rs index ed7bc156f..bb5e55d35 100644 --- a/crates/maple_core/src/stdio_server/mod.rs +++ b/crates/maple_core/src/stdio_server/mod.rs @@ -11,10 +11,11 @@ mod winbar; pub use self::input::InputHistory; use self::input::{ActionEvent, Event, ProviderEvent}; use self::plugin::PluginId; +pub use self::provider::SearchProgressor; use self::provider::{create_provider, Context, ProviderError}; use self::service::ServiceManager; +pub use self::vim::Vim; use self::vim::{initialize_filetype_map, VimError, VimResult}; -pub use self::vim::{SearchProgressor, Vim}; use parking_lot::Mutex; use rpc::vim::VimMessage; use rpc::{RpcNotification, RpcRequest}; diff --git a/crates/maple_core/src/stdio_server/plugin/diagnostics.rs b/crates/maple_core/src/stdio_server/plugin/diagnostics.rs index 7da6d28cd..658fb6f99 100644 --- a/crates/maple_core/src/stdio_server/plugin/diagnostics.rs +++ b/crates/maple_core/src/stdio_server/plugin/diagnostics.rs @@ -69,7 +69,7 @@ impl ClapPlugin for Diagnostics { let bufnr = self.vim.bufnr("").await?; let _ = self .diagnostics_worker_msg_sender - .send(WorkerMessage::ShowDiagnosticsAtCursor(bufnr)); + .send(WorkerMessage::ShowDiagnosticsUnderCursor(bufnr)); } DiagnosticsAction::FirstError => { self.navigate_diagnostics(Error, First).await?; diff --git a/crates/maple_core/src/stdio_server/plugin/linter.rs b/crates/maple_core/src/stdio_server/plugin/linter.rs index 06473bbd9..e524dbbf5 100644 --- a/crates/maple_core/src/stdio_server/plugin/linter.rs +++ b/crates/maple_core/src/stdio_server/plugin/linter.rs @@ -127,7 +127,7 @@ impl Linter { async fn on_cursor_moved(&self, bufnr: usize) -> VimResult<()> { let _ = self .diagnostics_worker_msg_sender - .send(WorkerMessage::ShowDiagnosticsAtCursorInFloatWin(bufnr)); + .send(WorkerMessage::ShowDiagnosticsUnderCursorInFloatWin(bufnr)); Ok(()) } diff --git a/crates/maple_core/src/stdio_server/plugin/lsp.rs b/crates/maple_core/src/stdio_server/plugin/lsp.rs index 209d5a7fd..673b6288e 100644 --- a/crates/maple_core/src/stdio_server/plugin/lsp.rs +++ b/crates/maple_core/src/stdio_server/plugin/lsp.rs @@ -59,6 +59,7 @@ struct FileLocation { #[derive(Debug, Clone)] struct GotoRequest { + ty: Goto, bufnr: usize, language_id: LanguageId, cursor_pos: (usize, usize), @@ -147,16 +148,17 @@ pub struct LspPlugin { vim: Vim, /// Active language server clients. clients: HashMap>, - /// Documents being tracked, keyed by buffer number. + /// Track the documents with LSP function enabled, keyed by the buffer number. attached_buffers: HashMap, - /// Skip the buffer if its filetype is in this list. + /// Ignore the buffer if its filetype is in this list. filetype_blocklist: Vec, - /// Goto request in fly. - current_goto_request: Option, + /// Global goto request in fly. + goto_request_inflight: Option, diagnostics_worker_msg_sender: UnboundedSender, toggle: Toggle, } +// Vim change. #[allow(unused)] #[derive(Debug, serde::Deserialize)] struct Change { @@ -201,7 +203,7 @@ impl LspPlugin { vim: Vim, diagnostics_worker_msg_sender: UnboundedSender, ) -> Self { - const FILETYPE_BLOCKLIST: &[&str] = &["clap_input", "coc-explorer"]; + const FILETYPE_BLOCKLIST: &[&str] = &["coc-explorer"]; let mut filetype_blocklist = maple_config::config().plugin.lsp.filetype_blocklist.clone(); @@ -215,7 +217,7 @@ impl LspPlugin { vim, clients: HashMap::new(), attached_buffers: HashMap::new(), - current_goto_request: None, + goto_request_inflight: None, diagnostics_worker_msg_sender, filetype_blocklist, toggle: Toggle::On, @@ -230,7 +232,11 @@ impl LspPlugin { let filetype = self.vim.getbufvar::(bufnr, "&filetype").await?; - if filetype.is_empty() || self.filetype_blocklist.contains(&filetype) { + if filetype.is_empty() + || self.filetype_blocklist.contains(&filetype) + // Ignore all clap related filetypes. + || filetype.starts_with("clap_") + { return Ok(()); } @@ -251,13 +257,13 @@ impl LspPlugin { }, }; - tracing::debug!(language_id, bufnr, "buffer attached"); - let Some(language_server_config) = get_language_server_config(language_id) else { - tracing::warn!("language server config not found for {language_id}"); + tracing::warn!(language_id, "language server config not found"); return Ok(()); }; + tracing::debug!(language_id, bufnr, "buffer attached"); + let bufname = self.vim.bufname(bufnr).await?; let buffer = Buffer { language_id, @@ -425,13 +431,14 @@ impl LspPlugin { } async fn on_cursor_moved(&mut self, bufnr: usize) -> VimResult<()> { - if let Some(request_in_fly) = self.current_goto_request.take() { + if let Some(request_inflight) = self.goto_request_inflight.take() { let (_bufnr, row, column) = self.vim.get_cursor_pos().await?; - if request_in_fly.bufnr == bufnr && request_in_fly.cursor_pos != (row, column) { - self.vim.update_lsp_status("cancelling request")?; + if request_inflight.bufnr == bufnr && request_inflight.cursor_pos != (row, column) { + self.vim + .update_lsp_status(format!("cancelling {:?} request", request_inflight.ty))?; tokio::spawn({ let vim = self.vim.clone(); - let language_id = request_in_fly.language_id; + let language_id = request_inflight.language_id; async move { tokio::time::sleep(std::time::Duration::from_millis(500)).await; let _ = vim.update_lsp_status(language_id); @@ -503,24 +510,29 @@ impl LspPlugin { _ => self.vim.get_cursor_pos().await?, }; - let document = self.get_buffer(bufnr)?; + let Ok(document) = self.get_buffer(bufnr) else { + self.vim.echo_message("LSP service not available")?; + return Ok(()); + }; - let client = self - .clients - .get(&document.language_id) - .ok_or(Error::ClientNotFound)?; + let Some(client) = self.clients.get(&document.language_id) else { + self.vim + .echo_message("Language server not found for this buffer")?; + return Ok(()); + }; - let path = self.vim.bufabspath(bufnr).await?; let position = lsp::Position { line: row as u32 - 1, character: column as u32 - 1, }; + let path = self.vim.bufabspath(bufnr).await?; let text_document = doc_id(&path)?; - tracing::debug!(bufnr, doc = ?text_document, "Calling goto, position: {position:?}"); + tracing::debug!(bufnr, doc = ?text_document, ?position, "requesting {goto:?}"); self.vim.update_lsp_status(format!("requesting {goto:?}"))?; - self.current_goto_request.replace(GotoRequest { + self.goto_request_inflight.replace(GotoRequest { + ty: goto, bufnr, language_id: document.language_id, cursor_pos: (row, column), @@ -560,7 +572,7 @@ impl LspPlugin { let (_bufnr, new_row, new_column) = self.vim.get_cursor_pos().await?; if (new_row, new_column) != (row, column) { - self.current_goto_request.take(); + self.goto_request_inflight.take(); self.vim.update_lsp_status("cancelling request")?; return Ok(()); } @@ -570,11 +582,22 @@ impl LspPlugin { return Ok(()); } - self.vim.update_lsp_status("rust-analyzer")?; - self.current_goto_request.take(); + self.vim.update_lsp_status(client.name())?; + self.goto_request_inflight.take(); if locations.len() == 1 { - self.vim.exec("clap#plugin#lsp#jump_to", [&locations[0]])?; + let loc = &locations[0]; + let path = loc.uri.path(); + let row = loc.range.start.line + 1; + let column = loc.range.start.character + 1; + self.vim.exec( + "clap#plugin#lsp#jump_to", + serde_json::json!({ + "path": path, + "row": row, + "column": column + }), + )?; return Ok(()); } @@ -801,7 +824,11 @@ impl LspPlugin { } let bufnr = self.vim.bufnr("").await?; - let buffer = self.get_buffer(bufnr)?; + + let Ok(buffer) = self.get_buffer(bufnr) else { + self.vim.echo_message("LSP service not available")?; + return Ok(()); + }; let client = self .clients @@ -851,7 +878,10 @@ impl LspPlugin { } let bufnr = self.vim.bufnr("").await?; - let buffer = self.get_buffer(bufnr)?; + let Ok(buffer) = self.get_buffer(bufnr) else { + self.vim.echo_message("LSP service not available")?; + return Ok(()); + }; let client = self .clients diff --git a/crates/maple_core/src/stdio_server/plugin/syntax.rs b/crates/maple_core/src/stdio_server/plugin/syntax.rs index 21999ff15..6f81dd617 100644 --- a/crates/maple_core/src/stdio_server/plugin/syntax.rs +++ b/crates/maple_core/src/stdio_server/plugin/syntax.rs @@ -97,7 +97,7 @@ impl std::fmt::Display for FileSize { "treeSitterHighlight", "treeSitterHighlightDisable", "treeSitterListScopes", - "treeSitterPropsAtCursor", + "treeSitterPropsUnderCursor", "toggle", ], )] @@ -298,7 +298,7 @@ impl Syntax { ); // Keep the changed highlights only. - let diff_highlights = new_vim_highlights + let highlights_diff = new_vim_highlights .iter() .filter(|item| changed_lines.contains(&item.0)) .collect::>(); @@ -313,7 +313,7 @@ impl Syntax { self.vim.exec( "clap#highlighter#add_ts_highlights", - (bufnr, changed_ranges, diff_highlights), + (bufnr, changed_ranges, highlights_diff), )?; } else { self.vim.exec( @@ -354,7 +354,7 @@ impl Syntax { Ok(()) } - async fn tree_sitter_props_at_cursor(&mut self) -> Result<(), PluginError> { + async fn tree_sitter_props_under_cursor(&mut self) -> Result<(), PluginError> { let (bufnr, row, column) = self.vim.get_cursor_pos().await?; if let Some(ts_info) = self.ts_bufs.get(&bufnr) { @@ -511,8 +511,8 @@ impl ClapPlugin for Syntax { self.vim.echo_message(format!("{highlight_scopes:?}"))?; } } - SyntaxAction::TreeSitterPropsAtCursor => { - self.tree_sitter_props_at_cursor().await?; + SyntaxAction::TreeSitterPropsUnderCursor => { + self.tree_sitter_props_under_cursor().await?; } SyntaxAction::SublimeSyntaxHighlight => { let bufnr = self.vim.bufnr("").await?; diff --git a/crates/maple_core/src/stdio_server/provider/impls/generic_provider.rs b/crates/maple_core/src/stdio_server/provider/impls/generic_provider.rs index 30a14819e..b94dd5a60 100644 --- a/crates/maple_core/src/stdio_server/provider/impls/generic_provider.rs +++ b/crates/maple_core/src/stdio_server/provider/impls/generic_provider.rs @@ -2,7 +2,7 @@ use crate::stdio_server::provider::hooks::{initialize_provider, CachedPreviewImp use crate::stdio_server::provider::{ BaseArgs, ClapProvider, Context, ProviderError, ProviderResult as Result, ProviderSource, }; -use crate::stdio_server::vim::SearchProgressor; +use crate::stdio_server::SearchProgressor; use filter::{FilterContext, ParallelSource}; use parking_lot::Mutex; use printer::Printer; diff --git a/crates/maple_core/src/stdio_server/provider/impls/lsp.rs b/crates/maple_core/src/stdio_server/provider/impls/lsp.rs index 15b5e37e2..902f25011 100644 --- a/crates/maple_core/src/stdio_server/provider/impls/lsp.rs +++ b/crates/maple_core/src/stdio_server/provider/impls/lsp.rs @@ -1,11 +1,13 @@ use crate::stdio_server::provider::hooks::PreviewTarget; -use crate::stdio_server::provider::{ClapProvider, Context, ProviderResult as Result}; +use crate::stdio_server::provider::{ + ClapProvider, Context, ProviderError, ProviderResult as Result, +}; use crate::types::Goto; use maple_lsp::lsp; use matcher::MatchScope; use once_cell::sync::Lazy; use parking_lot::Mutex; -use printer::Printer; +use printer::{DisplayLines, Printer}; use std::borrow::Cow; use std::path::PathBuf; use std::sync::Arc; @@ -93,17 +95,19 @@ fn to_kind_str(kind: lsp::SymbolKind) -> &'static str { pub struct LocationItem { pub file_path: String, pub output_text: String, + pub location: lsp::Location, } impl LocationItem { - fn from_location(location: &lsp::Location, project_root: &str) -> Option { + fn from_location(location: lsp::Location, project_root: &str) -> Option { let file_path = location .uri .to_file_path() .ok()? .to_string_lossy() .to_string(); - let start_line = location.range.start.line; + // location is 0-based. + let start_line = location.range.start.line + 1; let start_character = location.range.start.character; let line = utils::read_line_at(&file_path, start_line as usize) .ok() @@ -118,6 +122,7 @@ impl LocationItem { Some(Self { file_path, output_text, + location, }) } } @@ -247,6 +252,8 @@ enum SourceItems { pub struct LspProvider { printer: Printer, source_items: SourceItems, + current_items: Vec>, + current_display_lines: DisplayLines, } impl LspProvider { @@ -282,7 +289,7 @@ impl LspProvider { let items = locations .iter() .filter_map(|location| { - LocationItem::from_location(location, root) + LocationItem::from_location(location.clone(), root) .map(|item| Arc::new(item) as Arc) }) .collect::>(); @@ -295,12 +302,54 @@ impl LspProvider { Self { printer, source_items, + current_items: Vec::new(), + current_display_lines: Default::default(), } } - fn process_query(&mut self, query: String, ctx: &Context) -> Result<()> { - let matcher = ctx.matcher_builder().build(Query::from(&query)); + fn fetch_location_at(&self, line_number: usize) -> Option { + match &self.source_items { + SourceItems::Document((uri, _)) => { + let doc_item = self + .current_items + .get(line_number - 1) + .and_then(|item| item.as_any().downcast_ref::())?; + + Some(FileLocation { + path: uri.path().to_string(), + row: doc_item.location.range.start.line as usize + 1, + column: doc_item.location.range.start.character as usize + 1, + }) + } + SourceItems::Workspace(_) => { + let workspace_item = self + .current_items + .get(line_number - 1) + .and_then(|item| item.as_any().downcast_ref::())?; + + Some(FileLocation { + path: workspace_item.path.clone(), + row: workspace_item.location.range.start.line as usize + 1, + column: workspace_item.location.range.start.character as usize + 1, + }) + } + SourceItems::Locations(_) => { + let location_item = self + .current_items + .get(line_number - 1) + .and_then(|item| item.as_any().downcast_ref::())?; + + Some(FileLocation { + path: location_item.file_path.clone(), + row: location_item.location.range.start.line as usize + 1, + column: location_item.location.range.start.character as usize + 1, + }) + } + SourceItems::Empty => None, + } + } + fn process_query(&mut self, query: String, ctx: &Context) -> Result<()> { let items = match &self.source_items { SourceItems::Document((_uri, ref items)) => items, SourceItems::Workspace(ref items) => items, @@ -310,7 +359,7 @@ impl LspProvider { } }; - let processed = items.len(); + let matcher = ctx.matcher_builder().build(Query::from(&query)); let mut ranked = filter::par_filter_items(items, &matcher); @@ -319,24 +368,41 @@ impl LspProvider { // Only display the top 200 items. ranked.truncate(200); - let mut display_lines = self.printer.to_display_lines(ranked); - - // The indices are empty on the empty query. - display_lines.indices.retain(|i| !i.is_empty()); + self.current_items = ranked.iter().map(|r| r.item.clone()).collect(); + let display_lines = self.printer.to_display_lines(ranked); let update_info = printer::PickerUpdateInfo { matched, - processed, + processed: items.len(), display_lines, ..Default::default() }; - ctx.vim.exec("clap#picker#update", update_info)?; + ctx.vim.exec("clap#picker#update", &update_info)?; + + self.current_display_lines = update_info.display_lines; Ok(()) } } +struct FileLocation { + path: String, + // 1-based + row: usize, + // 1-based + column: usize, +} + +impl FileLocation { + fn into_preview_target(self) -> PreviewTarget { + PreviewTarget::LineInFile { + path: PathBuf::from(self.path), + line_number: self.row, + } + } +} + #[async_trait::async_trait] impl ClapProvider for LspProvider { async fn on_initialize(&mut self, ctx: &mut Context) -> Result<()> { @@ -353,51 +419,33 @@ impl ClapProvider for LspProvider { return Ok(()); } ctx.preview_manager.reset_scroll(); - let preview_target = match &self.source_items { - SourceItems::Document((uri, _)) => { - let curline = ctx.vim.display_getcurline().await?; - let Some(line_number) = curline - .split_whitespace() - .last() - .and_then(|n| n.parse::().ok()) - else { - return Ok(()); - }; - - Some(PreviewTarget::LineInFile { - path: PathBuf::from(uri.path()), - line_number, - }) - } - SourceItems::Workspace(_) => { - let curline = ctx.vim.display_getcurline().await?; - let Some(path_and_lnum) = curline.split_whitespace().last() else { - return Ok(()); - }; - - path_and_lnum.split_once(':').and_then(|(path, lnum)| { - Some(PreviewTarget::LineInFile { - path: path.into(), - line_number: lnum.parse::().ok()?, - }) - }) - } - SourceItems::Locations(_) => { - let curline = ctx.vim.display_getcurline().await?; - let Some((fpath, lnum, _col, _cache_line)) = - pattern::extract_grep_position(&curline) - else { - return Ok(()); - }; - - Some(PreviewTarget::LineInFile { - path: fpath.into(), - line_number: lnum + 1, - }) - } - SourceItems::Empty => return Ok(()), - }; - ctx.update_preview(preview_target).await + + let line_number = ctx.vim.display_getcurlnum().await?; + let loc = self + .fetch_location_at(line_number) + .ok_or(ProviderError::PreviewItemNotFound { line_number })?; + ctx.update_preview(Some(loc.into_preview_target())).await + } + + async fn remote_sink(&mut self, ctx: &mut Context, line_numbers: Vec) -> Result<()> { + if line_numbers.len() == 1 { + let line_number = line_numbers[0]; + let loc = self + .fetch_location_at(line_number) + .ok_or(ProviderError::PreviewItemNotFound { line_number })?; + ctx.vim.exec( + "clap#plugin#lsp#jump_to", + serde_json::json!({ + "path": loc.path, + "row": loc.row, + "column": loc.column + }), + )?; + } else { + ctx.vim + .echo_message("unimplemented remote sink for multiple selections")?; + } + Ok(()) } fn on_terminate(&mut self, ctx: &mut Context, session_id: u64) { diff --git a/crates/maple_core/src/stdio_server/provider/mod.rs b/crates/maple_core/src/stdio_server/provider/mod.rs index e943c1fdb..e9a1d33e2 100644 --- a/crates/maple_core/src/stdio_server/provider/mod.rs +++ b/crates/maple_core/src/stdio_server/provider/mod.rs @@ -14,7 +14,7 @@ use matcher::{Bonus, MatchScope, Matcher, MatcherBuilder}; use once_cell::sync::OnceCell; use parking_lot::RwLock; use paths::AbsPathBuf; -use printer::Printer; +use printer::{DisplayLines, Printer}; use rpc::Params; use serde::{Deserialize, Serialize}; use serde_json::json; @@ -25,13 +25,15 @@ use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; use std::time::Duration; use tokio::sync::mpsc::UnboundedSender; -use types::{ClapItem, MatchedItem}; +use types::{ClapItem, MatchedItem, SearchProgressUpdate}; pub use self::impls::filer::read_dir_entries; pub use self::impls::{create_provider, lsp}; #[derive(Debug, thiserror::Error)] pub enum ProviderError { + #[error("can not find the item at line_number {line_number}")] + PreviewItemNotFound { line_number: usize }, #[error("can not scroll the preview as preview target does not exist")] PreviewTargetNotFound, #[error("preview scroll is only available for the file preview target")] @@ -135,6 +137,7 @@ pub struct ProviderEnvironment { } impl ProviderEnvironment { + /// Returns `true` if the scrollbar should be added to the preview window. pub fn should_add_scrollbar(&self, total: usize) -> bool { self.is_nvim && self.preview_direction.is_left_right() && total > 0 } @@ -265,6 +268,66 @@ impl PreviewManager { } } +pub struct SearchProgressor { + vim: Vim, + stopped: Arc, +} + +impl SearchProgressor { + pub fn new(vim: Vim, stopped: Arc) -> Self { + Self { vim, stopped } + } +} + +impl SearchProgressUpdate for SearchProgressor { + fn quick_update(&self, total_matched: usize, total_processed: usize) { + if self.stopped.load(Ordering::Relaxed) { + return; + } + + let _ = self.vim.exec( + "clap#picker#process_progress", + [total_matched, total_processed], + ); + } + + fn update_all( + &self, + display_lines: &DisplayLines, + total_matched: usize, + total_processed: usize, + ) { + if self.stopped.load(Ordering::Relaxed) { + return; + } + let update_info = printer::PickerUpdateInfoRef { + matched: total_matched, + processed: total_processed, + display_lines, + display_syntax: None, + }; + let _ = self.vim.exec("clap#picker#update", update_info); + } + + fn on_finished( + &self, + display_lines: DisplayLines, + total_matched: usize, + total_processed: usize, + ) { + if self.stopped.load(Ordering::Relaxed) { + return; + } + let update_info = printer::PickerUpdateInfo { + matched: total_matched, + processed: total_processed, + display_lines, + ..Default::default() + }; + let _ = self.vim.exec("clap#picker#update", update_info); + } +} + #[derive(Debug, Clone)] pub struct Context { pub cwd: AbsPathBuf, @@ -320,9 +383,9 @@ impl Context { let display_winwidth = vim.winwidth(display.winid).await?; let display_winheight = vim.winheight(display.winid).await?; - let is_nvim: usize = vim.call("has", ["nvim"]).await?; - let has_nvim_09: usize = vim.call("has", ["nvim-0.9"]).await?; - let preview_enabled: usize = vim.bare_call("clap#preview#is_enabled").await?; + let is_nvim = vim.call::("has", ["nvim"]).await? == 1; + let has_nvim_09 = vim.call::("has", ["nvim-0.9"]).await? == 1; + let preview_enabled = vim.bare_call::("clap#preview#is_enabled").await? == 1; let preview_direction = { let preview_direction: String = vim.bare_call("clap#preview#direction").await?; match preview_direction.to_uppercase().as_str() { @@ -334,22 +397,21 @@ impl Context { let popup_border: String = vim.eval("g:clap_popup_border").await?; // Sign column occupies 2 spaces. - let display_line_width = display_winwidth - 2; - let display_line_width = match provider_id.as_str() { - "grep" => display_line_width - 2, - _ => display_line_width, - }; + let mut display_line_width = display_winwidth - 2; + if provider_id.as_str() == "grep" { + display_line_width -= 2; + } let env = ProviderEnvironment { - is_nvim: is_nvim == 1, - has_nvim_09: has_nvim_09 == 1, + is_nvim, + has_nvim_09, provider_id, start, input, display, no_cache, source_is_list, - preview_enabled: preview_enabled == 1, + preview_enabled, preview_border_enabled: popup_border != "nil", preview_direction, start_buffer_path, @@ -382,20 +444,6 @@ impl Context { }) } - // let root_markers = vec![".root".to_string(), ".git".to_string(), ".git/".to_string()]; - // let cwd = if start_buffer_path.exists() { - // match paths::find_project_root(&start_buffer_path, &root_markers) { - // Some(project_root) => project_root - // .to_path_buf() - // .try_into() - // .expect("project_root must be absolute path; qed"), - // None => vim.bare_call("getcwd").await?, - // } - // } else { - // vim.bare_call("getcwd").await? - // }; - // vim.set_var("g:__clap_provider_cwd", serde_json::json!([&cwd]))?; - pub fn provider_id(&self) -> &str { self.env.provider_id.as_str() } @@ -827,6 +875,15 @@ pub trait ClapProvider: Debug + Send + Sync + 'static { async fn on_typed(&mut self, ctx: &mut Context) -> ProviderResult<()>; + /// Handle the sink on the Rust side instead of the Vim side. + async fn remote_sink( + &mut self, + _ctx: &mut Context, + _line_numbers: Vec, + ) -> ProviderResult<()> { + Ok(()) + } + /// On receiving the Terminate event. /// /// Sets the running signal to false, in case of the forerunner thread is still working. diff --git a/crates/maple_core/src/stdio_server/service.rs b/crates/maple_core/src/stdio_server/service.rs index a66d3dfed..3a0fb9bec 100644 --- a/crates/maple_core/src/stdio_server/service.rs +++ b/crates/maple_core/src/stdio_server/service.rs @@ -6,6 +6,7 @@ use crate::stdio_server::input::{ }; use crate::stdio_server::plugin::{ActionType, ClapPlugin, PluginId}; use crate::stdio_server::provider::{ClapProvider, Context, ProviderId}; +use rpc::Params; use std::collections::hash_map::Entry; use std::collections::HashMap; use std::fmt::Debug; @@ -114,10 +115,6 @@ impl ProviderSession { } } } - ProviderEvent::Exit => { - self.provider.on_terminate(&mut self.ctx, self.provider_session_id); - break; - } ProviderEvent::OnMove(_params) => { on_move_dirty = true; on_move_timer.as_mut().reset(Instant::now() + on_move_delay); @@ -131,6 +128,14 @@ impl ProviderSession { tracing::error!(?err, "Failed to process key_event"); } } + ProviderEvent::Exit => { + self.handle_exit(); + return; + } + ProviderEvent::RemoteSink(params) => { + self.handle_remote_sink(params).await; + return; + } } } None => break, // channel has closed. @@ -170,11 +175,6 @@ impl ProviderSession { break; } } - ProviderEvent::Exit => { - self.provider - .on_terminate(&mut self.ctx, self.provider_session_id); - break; - } ProviderEvent::OnMove(_params) => { if let Err(err) = self.provider.on_move(&mut self.ctx).await { tracing::debug!(?err, "Failed to process OnMove"); @@ -191,10 +191,50 @@ impl ProviderSession { tracing::error!(?err, "Failed to process key_event"); } } + ProviderEvent::Exit => { + self.handle_exit(); + break; + } + ProviderEvent::RemoteSink(params) => { + self.handle_remote_sink(params).await; + break; + } } } } + fn handle_exit(&mut self) { + self.provider + .on_terminate(&mut self.ctx, self.provider_session_id); + } + + async fn handle_remote_sink(&mut self, params: Params) { + #[derive(serde::Deserialize)] + struct RemoteSinkParams { + line_numbers: Vec, + } + + let RemoteSinkParams { line_numbers } = match params.parse() { + Ok(v) => v, + Err(err) => { + tracing::error!( + ?err, + "Failed to parse RemoteSink params, provider terminated" + ); + self.provider + .on_terminate(&mut self.ctx, self.provider_session_id); + return; + } + }; + + if let Err(err) = self.provider.remote_sink(&mut self.ctx, line_numbers).await { + tracing::error!(?err, "Failed to process remote_sink"); + } + + self.provider + .on_terminate(&mut self.ctx, self.provider_session_id); + } + /// Handles the internal provider event, returns an optional new debounce delay when the /// control flow continues. async fn handle_internal_event( @@ -213,10 +253,7 @@ impl ProviderSession { Ok(()) => { // Try to fulfill the preview window if let Err(err) = self.provider.on_move(&mut self.ctx).await { - tracing::debug!( - ?err, - "Failed to preview after on_initialize completed" - ); + tracing::debug!(?err, "Preview after on_initialize failure"); } } Err(err) => { @@ -268,7 +305,7 @@ impl PluginSession { } fn start_event_loop_without_debounce(mut self) { - tracing::debug!(id = ?self.plugin.id(), debounce = false, "Starting a new plugin service"); + tracing::debug!(debounce = false, id = ?self.plugin.id(), "starting a new plugin"); tokio::spawn(async move { loop { @@ -294,7 +331,7 @@ impl PluginSession { fn start_event_loop(mut self, event_delay: Duration) { let id = self.plugin.id(); - tracing::debug!(?id, debounce = ?event_delay, "Starting a new plugin service"); + tracing::debug!(debounce = ?event_delay, ?id, "starting a new plugin"); tokio::spawn(async move { // If the debounce timer isn't active, it will be set to expire "never", diff --git a/crates/maple_core/src/stdio_server/vim.rs b/crates/maple_core/src/stdio_server/vim.rs index 5b20ea7ae..30e69d468 100644 --- a/crates/maple_core/src/stdio_server/vim.rs +++ b/crates/maple_core/src/stdio_server/vim.rs @@ -1,7 +1,6 @@ use crate::stdio_server::provider::ProviderId; use once_cell::sync::{Lazy, OnceCell}; use paths::AbsPathBuf; -use printer::DisplayLines; use rpc::vim::RpcClient; use rpc::Id; use serde::de::DeserializeOwned; @@ -11,9 +10,7 @@ use std::collections::HashMap; use std::fmt::{Debug, Display}; use std::ops::Deref; use std::path::Path; -use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; -use types::SearchProgressUpdate; static FILENAME_SYNTAX_MAP: Lazy> = Lazy::new(|| { HashMap::from([ @@ -167,66 +164,6 @@ impl PreviewConfig { } } -pub struct SearchProgressor { - vim: Vim, - stopped: Arc, -} - -impl SearchProgressor { - pub fn new(vim: Vim, stopped: Arc) -> Self { - Self { vim, stopped } - } -} - -impl SearchProgressUpdate for SearchProgressor { - fn quick_update(&self, total_matched: usize, total_processed: usize) { - if self.stopped.load(Ordering::Relaxed) { - return; - } - - let _ = self.vim.exec( - "clap#picker#process_progress", - [total_matched, total_processed], - ); - } - - fn update_all( - &self, - display_lines: &DisplayLines, - total_matched: usize, - total_processed: usize, - ) { - if self.stopped.load(Ordering::Relaxed) { - return; - } - let update_info = printer::PickerUpdateInfoRef { - matched: total_matched, - processed: total_processed, - display_lines, - display_syntax: None, - }; - let _ = self.vim.exec("clap#picker#update", update_info); - } - - fn on_finished( - &self, - display_lines: DisplayLines, - total_matched: usize, - total_processed: usize, - ) { - if self.stopped.load(Ordering::Relaxed) { - return; - } - let update_info = printer::PickerUpdateInfo { - matched: total_matched, - processed: total_processed, - display_lines, - ..Default::default() - }; - let _ = self.vim.exec("clap#picker#update", update_info); - } -} - // Vim may return 1/0 for true/false. #[inline(always)] fn from_vim_bool(value: Value) -> bool { diff --git a/crates/maple_lsp/src/lib.rs b/crates/maple_lsp/src/lib.rs index 08281a7e9..7955872bf 100644 --- a/crates/maple_lsp/src/lib.rs +++ b/crates/maple_lsp/src/lib.rs @@ -607,6 +607,10 @@ impl Client { Ok(client) } + pub fn name(&self) -> &str { + &self._name + } + pub fn try_add_workspace(&self, root_uri: Option) -> Result<(), Error> { let workspace_exists = root_uri .clone() diff --git a/crates/printer/src/lib.rs b/crates/printer/src/lib.rs index ec2b1d703..e985f43dc 100644 --- a/crates/printer/src/lib.rs +++ b/crates/printer/src/lib.rs @@ -78,6 +78,13 @@ impl DisplayLines { } } + // line_number is 1-based. + pub fn get_line(&self, line_number: usize) -> &str { + self.truncated_map + .get(&line_number) + .unwrap_or_else(|| &self.lines[line_number - 1]) + } + pub fn print_json(&self, total: usize) { let Self { lines, @@ -211,7 +218,13 @@ impl Printer { Default::default() }; - convert_truncated_matched_items_to_display_lines(matched_items, *icon, truncated_map) + let mut display_lines = + convert_truncated_matched_items_to_display_lines(matched_items, *icon, truncated_map); + + // The indices are empty on the empty query. + display_lines.indices.retain(|i| !i.is_empty()); + + display_lines } } diff --git a/crates/tree_sitter/queries/cpp/highlights.scm b/crates/tree_sitter/queries/cpp/highlights.scm new file mode 100644 index 000000000..b3f698812 --- /dev/null +++ b/crates/tree_sitter/queries/cpp/highlights.scm @@ -0,0 +1,270 @@ +; inherits: c +; Copied from https://github.com/nvim-treesitter/nvim-treesitter/blob/76f699dcc89642eedf69fafaef79bc235b7ef51e/queries/cpp/highlights.scm + +((identifier) @variable.member + (#lua-match? @variable.member "^m_.*$")) + +(parameter_declaration + declarator: (reference_declarator) @variable.parameter) + +; function(Foo ...foo) +(variadic_parameter_declaration + declarator: + (variadic_declarator + (_) @variable.parameter)) + +; int foo = 0 +(optional_parameter_declaration + declarator: (_) @variable.parameter) + +;(field_expression) @variable.parameter ;; How to highlight this? +((field_expression + (field_identifier) @function.method) @_parent + (#has-parent? @_parent template_method function_declarator)) + +(field_declaration + (field_identifier) @variable.member) + +(field_initializer + (field_identifier) @property) + +(function_declarator + declarator: (field_identifier) @function.method) + +(concept_definition + name: (identifier) @type.definition) + +(alias_declaration + name: (type_identifier) @type.definition) + +(auto) @type.builtin + +(namespace_identifier) @module + +((namespace_identifier) @type + (#lua-match? @type "^[%u]")) + +(case_statement + value: + (qualified_identifier + (identifier) @constant)) + +(using_declaration + . + "using" + . + "namespace" + . + [ + (qualified_identifier) + (identifier) + ] @module) + +(destructor_name + (identifier) @function.method) + +; functions +(function_declarator + (qualified_identifier + (identifier) @function)) + +(function_declarator + (qualified_identifier + (qualified_identifier + (identifier) @function))) + +(function_declarator + (qualified_identifier + (qualified_identifier + (qualified_identifier + (identifier) @function)))) + +((qualified_identifier + (qualified_identifier + (qualified_identifier + (qualified_identifier + (identifier) @function)))) @_parent + (#has-ancestor? @_parent function_declarator)) + +(function_declarator + (template_function + (identifier) @function)) + +(operator_name) @function + +"operator" @function + +"static_assert" @function.builtin + +(call_expression + (qualified_identifier + (identifier) @function.call)) + +(call_expression + (qualified_identifier + (qualified_identifier + (identifier) @function.call))) + +(call_expression + (qualified_identifier + (qualified_identifier + (qualified_identifier + (identifier) @function.call)))) + +((qualified_identifier + (qualified_identifier + (qualified_identifier + (qualified_identifier + (identifier) @function.call)))) @_parent + (#has-ancestor? @_parent call_expression)) + +(call_expression + (template_function + (identifier) @function.call)) + +(call_expression + (qualified_identifier + (template_function + (identifier) @function.call))) + +(call_expression + (qualified_identifier + (qualified_identifier + (template_function + (identifier) @function.call)))) + +(call_expression + (qualified_identifier + (qualified_identifier + (qualified_identifier + (template_function + (identifier) @function.call))))) + +((qualified_identifier + (qualified_identifier + (qualified_identifier + (qualified_identifier + (template_function + (identifier) @function.call))))) @_parent + (#has-ancestor? @_parent call_expression)) + +; methods +(function_declarator + (template_method + (field_identifier) @function.method)) + +(call_expression + (field_expression + (field_identifier) @function.method.call)) + +; constructors +((function_declarator + (qualified_identifier + (identifier) @constructor)) + (#lua-match? @constructor "^%u")) + +((call_expression + function: (identifier) @constructor) + (#lua-match? @constructor "^%u")) + +((call_expression + function: + (qualified_identifier + name: (identifier) @constructor)) + (#lua-match? @constructor "^%u")) + +((call_expression + function: + (field_expression + field: (field_identifier) @constructor)) + (#lua-match? @constructor "^%u")) + +; constructing a type in an initializer list: Constructor (): **SuperType (1)** +((field_initializer + (field_identifier) @constructor + (argument_list)) + (#lua-match? @constructor "^%u")) + +; Constants +(this) @variable.builtin + +(null + "nullptr" @constant.builtin) + +(true) @boolean + +(false) @boolean + +; Literals +(raw_string_literal) @string + +; Keywords +[ + "try" + "catch" + "noexcept" + "throw" +] @keyword.exception + +[ + "class" + "decltype" + "explicit" + "friend" + "namespace" + "override" + "template" + "typename" + "using" + "concept" + "requires" + "constexpr" +] @keyword + +[ + "co_await" + "co_yield" + "co_return" +] @keyword.coroutine + +[ + "public" + "private" + "protected" + "virtual" + "final" +] @type.qualifier + +[ + "new" + "delete" + "xor" + "bitand" + "bitor" + "compl" + "not" + "xor_eq" + "and_eq" + "or_eq" + "not_eq" + "and" + "or" +] @keyword.operator + +"<=>" @operator + +"::" @punctuation.delimiter + +(template_argument_list + [ + "<" + ">" + ] @punctuation.bracket) + +(template_parameter_list + [ + "<" + ">" + ] @punctuation.bracket) + +(literal_suffix) @operator diff --git a/crates/tree_sitter/src/language.rs b/crates/tree_sitter/src/language.rs index 9d4f38b53..445726712 100644 --- a/crates/tree_sitter/src/language.rs +++ b/crates/tree_sitter/src/language.rs @@ -161,6 +161,7 @@ impl FromStr for Language { let language = match s.to_ascii_lowercase().as_str() { "bash" => Self::Bash, "c" => Self::C, + "cpp" => Self::Cpp, "dockerfile" => Self::Dockerfile, "go" => Self::Go, "javascript" => Self::Javascript, @@ -272,7 +273,8 @@ impl Language { ), Language::Cpp => HighlightConfiguration::new( tree_sitter_cpp::language(), - tree_sitter_cpp::HIGHLIGHT_QUERY, + // Use the local highlights.scm as tree_sitter_cpp::HIGHLIGHT_QUERY is relatively unpolished. + include_str!("../queries/cpp/highlights.scm"), "", "", ), diff --git a/crates/types/src/source_item.rs b/crates/types/src/source_item.rs index dcb3c0c04..689a375b2 100644 --- a/crates/types/src/source_item.rs +++ b/crates/types/src/source_item.rs @@ -6,6 +6,7 @@ use std::borrow::Cow; use std::cmp::Ordering; use std::sync::Arc; +/// Helper trait to convert Arc to the original concrete type. pub trait AsAny { fn as_any(&self) -> &dyn Any; fn as_any_mut(&mut self) -> &mut dyn Any; diff --git a/docs/src/plugins/plugins.md b/docs/src/plugins/plugins.md index d265e68a1..91f7b52af 100644 --- a/docs/src/plugins/plugins.md +++ b/docs/src/plugins/plugins.md @@ -102,6 +102,9 @@ enable = true This plugin aims to implement the language server protocol. It's still pretty experimental and only a handful features are supported at present. +- Goto reference/definition/declaration/typeDefinition/implementation/reference +- Open documentSymbols/workspaceSymbols + ## markdown ```toml