Pre-submit Checks
Describe the solution you'd like?
While editing a source file in the Warp code editor, I want a VSCode-grade LSP autocomplete popup as I type:
- After ~150ms of identifier typing, or immediately on a server-defined trigger character (
., ::, <, etc), or on Cmd+./Ctrl+. (manual), a compact
popup anchors near the cursor with language-aware suggestions sourced from the file's LSP server.
- The popup is passive by default — Enter still inserts a newline / fires auto-indent until I explicitly navigate with ↑/↓, at which point Enter accepts
the highlighted item.
- Accepting an item that requires a new import (e.g.
useState from react, HashMap from std::collections, Path from pathlib, an unimported
package symbol in Go) inserts the symbol AND the import line in a single undoable action.
- Snippet items (e.g. methods that ship parameter placeholders) expand to literal text with the first placeholder selected so I can immediately type to
replace it.
- The popup auto-closes on Esc, on cursor movement out of the typed prefix, on focus loss, or when the prefix no longer matches any item.
Coverage in v1: TypeScript / JavaScript, Rust, Python, Go (the four languages that already have LSP servers configured under crates/lsp/src/servers/).
Adding new languages later requires only registering a server — no UI work.
Out of scope for v1 (tracked as v2):
- Keyword templates (
for → full for-loop expansion, if → if-else block) — these aren't part of LSP, they're VSCode-bundled .code-snippets.
- Tab/Shift+Tab navigation between snippet stops; v1 selects only the first stop.
- AI / model-driven completion (separate flow).
- Multi-cursor editing concurrent with completion.
Gated behind a code_intelligence_completion feature flag and a code.editor.lsp_autocomplete_enabled user setting; with the flag off, behavior is
identical to today.
Is your feature request related to a problem? Please describe.
Yes. The Warp code editor (the surface opened via workspace.open_file_with_target) currently has LSP-backed hover, diagnostics, find references, and
goto-definition wired end-to-end, but there's no textDocument/completion integration. While editing source files, users get no language-aware
suggestions while typing — only the symbols they remember by hand.
There's also no auto-import path: typing an unimported symbol leaves the user to add the import line manually. Concrete pain:
- A TypeScript user typing
useState in a .tsx has to switch to another window to remember the import path, then come back and add import { useState } from 'react'; manually.
- A Rust user typing
HashMap doesn't get use std::collections::HashMap; added automatically.
- Python and Go users see the same workflow break for any symbol that isn't already imported.
Without completion the code editor is unusable for anything beyond casual edits — users either copy-paste from another IDE or memorize APIs. The
plumbing (LSP servers, capability negotiation, telemetry) is already shipped; the only missing piece is textDocument/completion (and lazy
completionItem/resolve) on the wire and a popup driver in the code editor view.
Additional context
Draft product.md (testable behavior invariants, edge cases, telemetry boundaries) and tech.md (capability declaration, service / model surface,
popup driver, telemetry, feature-flag rollout) are ready to be moved into specs/GH<this-issue-number>/ once the issue is labelled ready-to-spec.
A working implementation also exists locally covering: LSP service / model wiring (completion + completion_resolve), snippet_support +
resolve_support[additionalTextEdits] capabilities, the CodeIntelligenceCompletion feature flag, code.editor.lsp_autocomplete_enabled setting,
popup view with two-state key routing (visible / interactive), forward debounce + monotonic request sequence, client-side prefix filter, lazy
completionItem/resolve, auto-close on cursor-out-of-prefix, snippet first-stop selection, and privacy-conscious telemetry. Happy to break it into
separate PRs once the spec lands.
Operating system (OS)
macOS
How important is this feature to you?
4
Warp Internal (ignore) - linear-label:39cc6478-1249-4ee7-950b-c428edfeecd1
None
Pre-submit Checks
Describe the solution you'd like?
While editing a source file in the Warp code editor, I want a VSCode-grade LSP autocomplete popup as I type:
.,::,<, etc), or on Cmd+./Ctrl+. (manual), a compactpopup anchors near the cursor with language-aware suggestions sourced from the file's LSP server.
the highlighted item.
useStatefromreact,HashMapfromstd::collections,Pathfrompathlib, an unimportedpackage symbol in Go) inserts the symbol AND the
importline in a single undoable action.replace it.
Coverage in v1: TypeScript / JavaScript, Rust, Python, Go (the four languages that already have LSP servers configured under
crates/lsp/src/servers/).Adding new languages later requires only registering a server — no UI work.
Out of scope for v1 (tracked as v2):
for→ full for-loop expansion,if→ if-else block) — these aren't part of LSP, they're VSCode-bundled.code-snippets.Gated behind a
code_intelligence_completionfeature flag and acode.editor.lsp_autocomplete_enableduser setting; with the flag off, behavior isidentical to today.
Is your feature request related to a problem? Please describe.
Yes. The Warp code editor (the surface opened via
workspace.open_file_with_target) currently has LSP-backed hover, diagnostics, find references, andgoto-definition wired end-to-end, but there's no
textDocument/completionintegration. While editing source files, users get no language-awaresuggestions while typing — only the symbols they remember by hand.
There's also no auto-import path: typing an unimported symbol leaves the user to add the
importline manually. Concrete pain:useStatein a.tsxhas to switch to another window to remember the import path, then come back and addimport { useState } from 'react';manually.HashMapdoesn't getuse std::collections::HashMap;added automatically.Without completion the code editor is unusable for anything beyond casual edits — users either copy-paste from another IDE or memorize APIs. The
plumbing (LSP servers, capability negotiation, telemetry) is already shipped; the only missing piece is
textDocument/completion(and lazycompletionItem/resolve) on the wire and a popup driver in the code editor view.Additional context
Draft
product.md(testable behavior invariants, edge cases, telemetry boundaries) andtech.md(capability declaration, service / model surface,popup driver, telemetry, feature-flag rollout) are ready to be moved into
specs/GH<this-issue-number>/once the issue is labelledready-to-spec.A working implementation also exists locally covering: LSP service / model wiring (
completion+completion_resolve),snippet_support+resolve_support[additionalTextEdits]capabilities, theCodeIntelligenceCompletionfeature flag,code.editor.lsp_autocomplete_enabledsetting,popup view with two-state key routing (visible / interactive), forward debounce + monotonic request sequence, client-side prefix filter, lazy
completionItem/resolve, auto-close on cursor-out-of-prefix, snippet first-stop selection, and privacy-conscious telemetry. Happy to break it intoseparate PRs once the spec lands.
Operating system (OS)
macOS
How important is this feature to you?
4
Warp Internal (ignore) - linear-label:39cc6478-1249-4ee7-950b-c428edfeecd1
None