<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pardes.git/src/lsp, branch main</title>
<subtitle>Pardes</subtitle>
<id>https://git.0x4200.cafe/pardes.git/atom?h=main</id>
<link rel='self' href='https://git.0x4200.cafe/pardes.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/'/>
<updated>2026-10-01T13:36:27Z</updated>
<entry>
<title>A rename preview's rows are one format whichever file they are in: `file:L:C-E`, the range's end too, for the asked-about file as for the others</title>
<updated>2026-10-01T13:36:27Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T13:19:01Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=3f76d4d88245e94a266c24dc23bbba78a00570a3'/>
<id>urn:sha1:3f76d4d88245e94a266c24dc23bbba78a00570a3</id>
<content type='text'>
The asked-about file's rows said `file:L:C` while other files' said
`file:L:C-E`. lsp-rename-files is re-recorded for the one row it shows.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A language server goes with its children when reaped, and every server's process group is killed as pardes exits: no zls or `zig build --build-runner` outlives the editor</title>
<updated>2026-10-01T11:53:11Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T11:49:50Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=de78a167532d1f78611381accd8839fac066fd56'/>
<id>urn:sha1:de78a167532d1f78611381accd8839fac066fd56</id>
<content type='text'>
The server is spawned with setsid, its own group's leader, but reap()
signalled only its pid, and nothing reaped the servers at exit: the
socket closing was left to tell them. zls busy in its build runner at a
cold start did not notice, and lived on with its `zig build` for as long
as no one killed it (found as three orphans 40 minutes after their
sessions had gone). reap() now signals the group, and an atexit hook,
registered at the first spawn, kills every server's group.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A language server that failed a moment ago is said to have failed, with when it is tried again, not `language server for .zig not found`</title>
<updated>2026-10-01T11:53:11Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T11:08:54Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=577108ec6a003db9504b8376f3d88c21ccaf0765'/>
<id>urn:sha1:577108ec6a003db9504b8376f3d88c21ccaf0765</id>
<content type='text'>
During the backoff after a failed spawn or handshake, ensure() answered
NoServer, which the client turned into "not found" for a server that is
installed. It is now Backoff, said `zls failed recently; retry in Ns`.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A Rename the server answers for this file alone, while other open files of its language say the name, is previewed, never applied; Lspwhy shows the files synced first</title>
<updated>2026-10-01T11:53:11Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T11:08:54Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=3ac3923e314954451a38a94918552b60ad3a93b3'/>
<id>urn:sha1:3ac3923e314954451a38a94918552b60ad3a93b3</id>
<content type='text'>
zls renaming at a declaration answers with that file's edits only,
cold or warm, whatever it was told of (checked against zls directly:
from a call site in main.zig it renames both files, from the
declaration in util.zig it never does), so the first Rename applied in
util.zig and left main.zig broken. The client now looks for the old
name in the other open files of the language; when one says it and the
answer left it alone, the edits are a preview with a row naming each
such file, and the message row says the server renamed in this file
only. Lspwhy carries the open files too, so its trace shows `synced X
first` for the query it explains.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Lspinfo before any query says a server is not started yet, its first query starting it, not `off` while it is on PATH</title>
<updated>2026-10-01T10:16:43Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T09:24:55Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=4195c285e860435b1251d010422831ec137d7e60'/>
<id>urn:sha1:4195c285e860435b1251d010422831ec137d7e60</id>
<content type='text'>
A server is spawned on its first query; until then its row said `off`,
which reads as disabled. It now says `not started yet (its first query
starts it)`; a server disabled by its environment still says so.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A Rename, references and the like tell the server of every open file of its language first, so a rename reaches files it had not seen and the preview lists them</title>
<updated>2026-10-01T10:16:43Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T09:22:44Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=85b60dedb6bdb192abd11b2d58ca7c0e8c944b18'/>
<id>urn:sha1:85b60dedb6bdb192abd11b2d58ca7c0e8c944b18</id>
<content type='text'>
zls renames only in the documents in its store, and syncDoc told it of
a file only when a query was asked from it, so renaming in progress.zig
left main.zig unchanged and broken, with no preview. For a query whose
answer can reach other files (rename, references, implementation,
workspace symbols, calls and type hierarchy), the host snapshots every
other open file and the client syncs those its server answers for
first. The mock server answers a rename in each document it was told
of; lsp-rename-files opens main.rs by a look, renames from lib.rs, and
its preview lists both.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Lspwhy explains the last language server query asked, its kind, argument and place, not always a definition at the cursor</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-30T15:10:51Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=e27ec50ecad669a21b33c2c2e7c591828ba97e1b'/>
<id>urn:sha1:e27ec50ecad669a21b33c2c2e7c591828ba97e1b</id>
<content type='text'>
Lspwhy said it explains how the last request was answered, but it always
replayed a definition query at the current cursor. So after a failed Hover
it narrated a gd somewhere else, which told nothing about the failure.
Now the core remembers the last query (kind, argument, pane, offset), and
Lspwhy sends it as `&lt;kind&gt; &lt;arg&gt;`, at the query's offset when asked from
the same pane. The client narrates that kind: lsp.explaining reads it, and
the heading names it ("the hover query at byte N"). With nothing asked yet
it is a definition, as before. The effect's arg grows to 160 bytes so a
128-byte argument fits with its kind.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Zig files go to zls as a child process through the protocol client, as every other language does: the in-process ZLS backend goes</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-30T01:31:27Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=7e8e2655567cab1c28597f44d0aec79e46b0deb8'/>
<id>urn:sha1:7e8e2655567cab1c28597f44d0aec79e46b0deb8</id>
<content type='text'>
lsp_zls.zig (1,522 lines), the zls dependency, build.zig's zls wiring and the import graph it baked into the options only for it, and main.zig's reference go. lsp_client's table gains a zls row (PARDES_LSP_ZIG overrides it); Hover, Rename, Diagnostics, WsSymbols, Lspinfo and gd answer through it (checked with lspprobe and the snapshots against zls 0.16.1-dev). What changes for a user: zls must be on PATH; a completion's rows are zls's candidates at the cursor, where the linked analyser gave each one's declaration; document symbols carry no signature. The Zig snapshots (lsp, lspcomplete, lspcompletemoved, lspdebug, lsprelpath) run the real zls now: lspdebug reads the client's explain and report, lsprelpath spells gr's rows where it spelled a completion's, and their goldens are recorded again (stable over three runs). Lspinfo still opens with its backend line. The ReleaseFast tty binary is 105.35 MB to 96.28 MB, the Debug one 296.5 MB to 245.9 MB. docs/lsp.md, web.md, design.typ and the README say so.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Lspinfo lists pardes's own dependency imports only for a file in pardes's tree</title>
<updated>2026-10-01T03:12:16Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T17:08:53Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=17908d6d60850d9131b12e480b21e446b0b8eb9a'/>
<id>urn:sha1:17908d6d60850d9131b12e480b21e446b0b8eb9a</id>
<content type='text'>
The in-process ZLS's report listed the module map of the build pardes came from (vaxis, ghostty and the rest) for any .zig file, a project that has none of them included. It now lists them only for a file in that tree (project_root, a build option), and says there are none for any other.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A language with no server to start says language server for .py not found, not that it did not answer</title>
<updated>2026-10-01T03:12:16Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T17:06:59Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=f8c325283fe87dd981babd2a132e58eb393924a1'/>
<id>urn:sha1:f8c325283fe87dd981babd2a132e58eb393924a1</id>
<content type='text'>
A question about a file whose language server is not there came back as no answer at all, which the core said as the language server did not answer. The client now answers @none language server for &lt;ext&gt; not found, ENOENT by its words.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
