Lsp

Start the Language Server Protocol server for Cooklang editor integration.

Usage

cook lsp [OPTIONS]

The server communicates over stdin/stdout. You typically don't run this directly — your editor starts it automatically.

Features

  • Real-time syntax checking and validation
  • Auto-completion for ingredients, cookware, and timers
  • Semantic syntax highlighting
  • Hover documentation
  • Document symbols and navigation
  • Go to definition for recipe references

Editor Integration

Visual Studio Code

Install the Cooklang extension. It uses cook lsp automatically.

Manual configuration in settings.json:

{
  "cooklang.languageServer.path": "cook",
  "cooklang.languageServer.args": ["lsp"]
}

Neovim

Using nvim-lspconfig:

local lspconfig = require('lspconfig')
local configs = require('lspconfig.configs')

if not configs.cooklang then
  configs.cooklang = {
    default_config = {
      cmd = { 'cook', 'lsp' },
      filetypes = { 'cooklang' },
      root_dir = lspconfig.util.root_pattern('.git', 'config'),
      settings = {},
    },
  }
end

lspconfig.cooklang.setup{}

Vim with CoC

Add to coc-settings.json:

{
  "languageserver": {
    "cooklang": {
      "command": "cook",
      "args": ["lsp"],
      "filetypes": ["cooklang"],
      "rootPatterns": [".git", "config"]
    }
  }
}

Emacs

Using lsp-mode:

(with-eval-after-load 'lsp-mode
  (add-to-list 'lsp-language-id-configuration
    '(cooklang-mode . "cooklang"))

  (lsp-register-client
    (make-lsp-client
      :new-connection (lsp-stdio-connection '("cook" "lsp"))
      :activation-fn (lsp-activate-on "cooklang")
      :server-id 'cooklang-lsp)))

Using eglot:

(add-to-list 'eglot-server-programs
  '(cooklang-mode . ("cook" "lsp")))

Helix

Add to languages.toml:

[[language]]
name = "cooklang"
scope = "source.cooklang"
file-types = ["cook"]
language-servers = ["cooklang-lsp"]

[language-server.cooklang-lsp]
command = "cook"
args = ["lsp"]

Sublime Text

Using LSP package:

{
  "clients": {
    "cooklang": {
      "enabled": true,
      "command": ["cook", "lsp"],
      "selector": "source.cooklang"
    }
  }
}

Zed

Add to settings.json:

{
  "lsp": {
    "cooklang": {
      "binary": {
        "path": "cook",
        "arguments": ["lsp"]
      }
    }
  }
}

Troubleshooting

Verify cook is in your PATH:

which cook
cook --version

Check server logs:

cook lsp 2>/tmp/cooklang-lsp.log

Enable debug logging:

RUST_LOG=debug cook lsp 2>/tmp/cooklang-lsp-debug.log