ludic/tools/editors/zed
Orkuncakilkaya e3e1bc7784 fix(tools): formatter bracket rules, LSP compiler diagnostics, vocabulary sync
- ludic-fmt: `rows[i]`, `new []int`, `s[a..b]`, `emit(`, `~x`, list-literal
  and query-tag braces stay tight; member calls hug their paren
  (`Date.new(`, `Prefab.spawn(`); `<< >> & | ^ ~` are operators and
  `&& ||` are not — mirrored in ludic_syntax.h, LudicLexer.kt and the
  TextMate grammar. 149 of 274 tracked sources failed --check before.
- ludic-lsp: `initializationOptions.compilerDiagnostics` / `compilerPath`
  are honoured — on save the document's compilation unit is compiled and
  `file:line: error: msg` is published as a "ludicc" diagnostic (the
  option had been documented but never implemented); the workspace scan
  file is per process; bracket codes spelled as char literals
- Overlay added to LUDIC_PHASES, LudicTokens.kt, ludic-mode.el and the
  grammar (the game uses it; check-vocabulary flagged the drift)
- editors: VS Code snippets/package.json/extension.js (`${workspaceFolder}`
  and `~` expansion, PATH lookup, Apache-2.0, real repo URL), Neovim root
  markers, Helix/Zed/Sublime bin/ paths, Emacs vocabulary, JetBrains
  comments; tools/editors/README.md no longer describes C tooling
- .forgejo workflows clone `${{ github.server_url }}/${{ github.repository }}`
  so a fork or mirror tests itself; the docs publish pushes the same way

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-05 01:12:26 +03:00
..
README.md fix(tools): formatter bracket rules, LSP compiler diagnostics, vocabulary sync 2026-09-05 01:12:26 +03:00

Ludic for Zed

Zed extensions want a Tree-sitter grammar for highlighting, which this toolchain deliberately does not ship — the vocabulary lives in one shared header and is exposed through the language server's semantic tokens instead, so there is no second grammar to keep honest.

That is enough for Zed: point it at ludic-lsp and highlighting, completion, diagnostics and formatting all arrive over LSP.

Add to ~/.config/zed/settings.json:

{
  "lsp": {
    "ludic-lsp": {
      "binary": { "path": "/path/to/gpp/bin/ludic-lsp", "arguments": ["--stdio"] },
      "initialization_options": {
        "compilerPath": "/path/to/gpp/bin/ludicc",
        "compilerDiagnostics": true,
        "indentSize": 2
      }
    }
  },
  "file_types": { "Ludic": ["ludic"] },
  "languages": {
    "Ludic": {
      "language_servers": ["ludic-lsp"],
      "tab_size": 2,
      "hard_tabs": false,
      "format_on_save": "on"
    }
  }
}

If you would rather have static highlighting too, the TextMate grammar in tools/editors/shared/ludic.tmLanguage.json can be dropped into a Zed extension that declares a grammars entry — but it is not required.