feat(lsp): language servers inside plugin-injected ranges (#2235)

* feat(lsp): language servers inside plugin-injected ranges

* chore(plugins): rebuild bundled plugins for the updated injections docs
Цей коміт міститься в:
l0ng-ai authored and GitHub committed 2026-11-09 11:53:07 +08:00
1 джерело b6b09eb968
коміт 54d35d8a67
58 files changed
+1493 -114

No files matched your search

+26 -3
Переглянути файл
@@ -393,7 +393,7 @@ working. New in 1.4:
- [Language features](#additional-language-features-api-14): formatting,
signature help, highlights, links, code lenses, selection ranges, folds,
colors/presentations, symbols, implementation, type definition and gutter
actions; [injections](#embedded-languages-api-14) route plugin providers to
actions; [injections](#embedded-languages-api-14) route providers and language servers to
embedded virtual documents.
- [Snippets](#snippets-api-14) and [menus](#additional-menu-locations-api-14):
numbered placeholders and editor title, main toolbar, Problems and search
@@ -1119,8 +1119,31 @@ At most 1,000 non-overlapping injection ranges and 32 embedded languages
are routed per document. Earlier ranges in document order win overlaps.
Documents over 2 MiB are excluded. Invalid ranges, self-injections and invalid
language ids are ignored. Injections are not applied recursively. The same
server-side plugin host handles remote editing. **Embedded LSP forwarding is
future host-side work**, not part of 1.4, and needs no WIT change.
server-side plugin host handles remote editing.
When the embedded language has configured language servers, the host also
routes completion (including resolve), hover, signature help, definition,
declaration, type definition, implementation, references, document highlights
and code actions to those servers inside the range. Each range gets its own
masked document, even when several ranges share a language. At most 32 LSP
documents are kept per host document; the same 2 MiB document limit applies.
These documents use non-existent sibling paths with the embedded language's
extension, so servers can discover project configuration. They are never
written to disk. Servers start through the usual settings, project trust and
installation flow; a missing server does not prompt again on each edit.
Edits invalidate old ranges immediately. The host refreshes them after the
300 ms debounce, or before a position request, synchronizes retained documents
with `didChange`, and closes documents when their range disappears, the plugin
is disabled or the host document closes. Results into these documents map back
to the host path and are clipped to the range; locations in other files pass
through. Replacement edits crossing a boundary and resource operations on
virtual paths are dropped. Completion and code-action resolve keep their
originating range/server, and stale results cannot resolve after an edit.
Diagnostics are restricted to each range, labelled with the embedded server's
name and merged with that server's other diagnostics for the host file. They
clear when the range disappears. Formatting and rename use the host server.
Remote projects use this same host-side LSP lifecycle and routing.
### Snippets (API 1.4)
+1 -1
Переглянути файл
@@ -1 +1 @@
c4900df449a6a323bab1f4fe5fe76ee42e2839c9197636b7c1cef733dffc683d
34bea4bf36b7a814dafe02aaee02fe3354a667d1c8ca66f238de00322d0a035a
+1 -1
Переглянути файл
@@ -1 +1 @@
0ea139d4a0d47072971c0b37b93085159e412554ffb45d19590bae4dc10f48b5
fdd68915997803652ad6f5c549107b043b9001ad4e176d2473d9b37469fbe1cc
+1 -1
Переглянути файл
@@ -1 +1 @@
4e4bc361395f6364e17211a9d3c32232a370ea1ee72e5197eab5f706ea465dc6
ad3fe934d30b48d53097bf4dee36a091b2410c0325924702c66e717405b58203
+1 -1
Переглянути файл
@@ -1 +1 @@
c39211d416f45dff0265216509070ffdecc4e0f4e738c88176cad5faaca01b65
5710601823307d167805a7ca20e7498fb9c37082b20df7fd1f86e1cd66b438f3
+1 -1
Переглянути файл
@@ -1 +1 @@
2bbb840e0bead664ccb467dbb299b269fc9a03ed4995c8d890ae195efe6e47a6
1a486ceda9986bc253a0098c983f755c8860e6b7a3f2d7f0284b3b928b4e6c9e
+1 -1
Переглянути файл
@@ -1 +1 @@
b1fdf25b8307803b0e5e189bbe041cdb23b1e7b73abb4b76fd7a1b9ee48d87b0
13f27c819384f92e406bf7226a46d3fe5b063e850db3d64916e661e1a63f345a
+1 -1
Переглянути файл
@@ -1 +1 @@
849d83a77d80e8d8a4f2c2801f4728300dd4504da411689834217b9973e582f4
c7b2b471f26201c037522ee4a5b086d1c8ef88fbbb3f11f7279ad1a7185bdbae
+1 -1
Переглянути файл
@@ -1 +1 @@
ff42121519f6796db56a71a504484b149592e9e28ed33c783d2e6141cfe84d6c
82c71af4a1f771dbd16a4c8f71b9bd6a6a53d82bd92958d4862467237b82d228
+1 -1
Переглянути файл
@@ -1 +1 @@
0d5ed3d81ab5496b92e7b012ae6e1e765fb45f4f6b0613a03f2bc79029ed9397
65096a9b6331af9d40049801547e99e2fa1d5ae0f1065f6931af0aee8d2f24a7
+1 -1
Переглянути файл
@@ -1 +1 @@
dd34327c65747b1b57eef0854161837bd4e2843a59efec7730b81d8a2866a411
cf8d21da412fd64f1f42c72b13be762ff1bcd43dd19965fc1fce805c5e1012ae
+1 -1
Переглянути файл
@@ -1 +1 @@
2141b215b141d82cc9a5cffa63c11e2b53e7bebcd31b93fb8d2db0ff5c2acd5b
1ea1d7116e6b943e42580e43cb13199b6e48fc5acdf9784c4864adb7433ebb59
+1 -1
Переглянути файл
@@ -1 +1 @@
604a289139233c13108ff8aab448e4278604e5260d7b2485e3ace3bad9e855db
05ff46a6c1af09b84f9a931d8956d79fbad9507dcff708ba021e074c55c062e2
+1 -1
Переглянути файл
@@ -1 +1 @@
9efa3a6a41c05e81a50893a2cff79da6e8e5f97219ddfd54f7ed201270934bb5
26e57f5294b40bc31d9283843b2fcf6ad09d475fd160d61ddd3d420e54880a24
+1 -1
Переглянути файл
@@ -1 +1 @@
5f05e3696671258af5474b10abafd3cab48385493d5336061a9a8679307b56b4
0d2c1140fe718d06e08af903ee94bfe87cd04de77c1299f6f5c337042c6f6197
+1 -1
Переглянути файл
@@ -1 +1 @@
677ec8005d29d4727afbc4b8fba6afcbc26996f0db461d1e98a6e9e52b5f7fac
f4251a1cad1d5cea54559baca12d84fdf175e65db85ee3f4d29e381e045c40fb