➕ Add the LSP protocol dependency
The autocomplete helper drives tsc --lsp --stdio; vscode-languageserver-protocol supplies the transport (re-exported vscode-jsonrpc/node) and the typed LSP requests, replacing the hand-rolled JSON-RPC client. Record the choice and the rejected alternatives in tooling.md.
This commit is contained in:
1 parent
0b97632a7c
commit
94ccc16963
3 files changed
+66
-2
No files matched your search
@@ -24,6 +24,8 @@ in [package.json](../package.json).
|
|||||||
- **@spences10/pi-lsp** — read-only LSP code intelligence for AI agents
|
- **@spences10/pi-lsp** — read-only LSP code intelligence for AI agents
|
||||||
(project-local `.pi/settings.json`); talks to this repo's TypeScript 7 via
|
(project-local `.pi/settings.json`); talks to this repo's TypeScript 7 via
|
||||||
`tsc --lsp --stdio`.
|
`tsc --lsp --stdio`.
|
||||||
|
- **vscode-languageserver-protocol** — LSP client and protocol types for the
|
||||||
|
autocomplete test helper (`src/util/__tests__/lsp-completion.ts`).
|
||||||
|
|
||||||
When each runs is in
|
When each runs is in
|
||||||
[CONTRIBUTING.md § Feedback tiers](../CONTRIBUTING.md#feedback-tiers).
|
[CONTRIBUTING.md § Feedback tiers](../CONTRIBUTING.md#feedback-tiers).
|
||||||
@@ -247,6 +249,38 @@ project.
|
|||||||
- The same script works by hand (whole project) and staged (scoped), so there is
|
- The same script works by hand (whole project) and staged (scoped), so there is
|
||||||
no second command to maintain.
|
no second command to maintain.
|
||||||
|
|
||||||
|
## Language server tooling
|
||||||
|
|
||||||
|
### `vscode-languageserver-protocol` backs the autocomplete helper
|
||||||
|
|
||||||
|
#### Decision (2026-09)
|
||||||
|
|
||||||
|
The autocomplete helper (`src/util/__tests__/lsp-completion.ts`) drives
|
||||||
|
`tsc --lsp --stdio` through `vscode-languageserver-protocol`'s
|
||||||
|
`createMessageConnection` and its typed request / notification objects, instead
|
||||||
|
of a hand-rolled JSON-RPC client.
|
||||||
|
|
||||||
|
#### Why
|
||||||
|
|
||||||
|
- Framing, `Content-Length` parsing, the pending-request map and server-request
|
||||||
|
dispatch are protocol plumbing the helper only reimplemented; the official
|
||||||
|
client owns them and tolerates the server's `string | number` ids.
|
||||||
|
- `InitializeRequest`, `CompletionRequest`, `DidOpenTextDocumentNotification`,
|
||||||
|
… carry their parameter and result types, so `CompletionList` / `CompletionItem`
|
||||||
|
replace the helper's ad-hoc shape guards.
|
||||||
|
- The `./node` entry re-exports `vscode-jsonrpc/node`, so one devDependency
|
||||||
|
supplies both the transport and the protocol types. It is test-only and never
|
||||||
|
ships (`files` publishes `dist/` only).
|
||||||
|
|
||||||
|
#### Rejected
|
||||||
|
|
||||||
|
- `vscode-languageclient`: the editor-side client with a full feature registry
|
||||||
|
— far more than a test helper needs.
|
||||||
|
- Generic JSON-RPC (`jsonrpc-lite`, `jayson`): still no LSP types, so they
|
||||||
|
replace framing only and leave the typed protocol surface unimplemented.
|
||||||
|
- Keeping the hand-rolled client: the low-level shape is the maintenance cost
|
||||||
|
the helper exists to remove, and it must be re-audited against the server.
|
||||||
|
|
||||||
## Editor and agent tooling
|
## Editor and agent tooling
|
||||||
|
|
||||||
### VSCode integration
|
### VSCode integration
|
||||||
|
|||||||
Generated
+30
-1
@@ -27,7 +27,8 @@
|
|||||||
"oxlint": "^1.83.0",
|
"oxlint": "^1.83.0",
|
||||||
"oxlint-tsgolint": "^7.0.2001",
|
"oxlint-tsgolint": "^7.0.2001",
|
||||||
"publint": "^0.3.24",
|
"publint": "^0.3.24",
|
||||||
"typescript": "^7.0.2"
|
"typescript": "^7.0.2",
|
||||||
|
"vscode-languageserver-protocol": "^3.18.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=26"
|
"node": ">=26"
|
||||||
@@ -4822,6 +4823,27 @@
|
|||||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/vscode-jsonrpc": {
|
||||||
|
"version": "9.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.2.tgz",
|
||||||
|
"integrity": "sha512-SbQSV9yRemARxeXw6LU5sS6Zq0e9/DgCCX5yelH263ZQWukbTk8EF8fjTrr1dziasf4GwlJbvTwFnTrnQFWZXQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/vscode-languageserver-protocol": {
|
||||||
|
"version": "3.18.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.18.3.tgz",
|
||||||
|
"integrity": "sha512-DF49+WeV5py4zO5hhobp60jjsDSK0lAqA0OuKBLBvp423HPWQcCbhZz3JgyfIewsEz2f8U+X75xNIFHdiXZm2w==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"vscode-jsonrpc": "9.0.2",
|
||||||
|
"vscode-languageserver-types": "3.18.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/vscode-languageserver-textdocument": {
|
"node_modules/vscode-languageserver-textdocument": {
|
||||||
"version": "1.0.14",
|
"version": "1.0.14",
|
||||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.14.tgz",
|
"resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.14.tgz",
|
||||||
@@ -4829,6 +4851,13 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/vscode-languageserver-types": {
|
||||||
|
"version": "3.18.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.18.3.tgz",
|
||||||
|
"integrity": "sha512-XIlzJ7Qp/jzSI1ds7/FwPAWrPeTZA7pAtlW4hdJ1J6xXWJL6dR9QYnDhJOdLzdKhUQ5Mm6mvUMw+3DcOQQasPw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/vscode-uri": {
|
"node_modules/vscode-uri": {
|
||||||
"version": "3.2.0",
|
"version": "3.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.2.0.tgz",
|
||||||
|
|||||||
+2
-1
@@ -87,7 +87,8 @@
|
|||||||
"oxlint": "^1.83.0",
|
"oxlint": "^1.83.0",
|
||||||
"oxlint-tsgolint": "^7.0.2001",
|
"oxlint-tsgolint": "^7.0.2001",
|
||||||
"publint": "^0.3.24",
|
"publint": "^0.3.24",
|
||||||
"typescript": "^7.0.2"
|
"typescript": "^7.0.2",
|
||||||
|
"vscode-languageserver-protocol": "^3.18.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=26"
|
"node": ">=26"
|
||||||
|
|||||||
Reference in new issue
Block a user