AtlatestRepositorysigil-lsp
1
;;; (sigil lsp commands) - CLI hook for the LSP server.2
;;;3
;;; Registers the `sigil lsp` subcommand used by sigil-cli.5
(define-library (sigil lsp commands)6
(import (sigil lsp)7
(sigil args)8
(sigil io)9
(sigil process)10
(sigil string))11
(export lsp-cmd)12
(begin14
(define (opt-value opts key)15
(let ((p (assq key opts)))16
(and p (cdr p))))18
(define (lsp-serve-handler opts args)19
(let ((log-file (opt-value opts 'log-file))20
(log-level (opt-value opts 'log-level))21
(log-format (opt-value opts 'log-format)))22
(lsp-serve23
log-file: log-file24
log-level: (and log-level (string->symbol log-level))25
log-format: (and log-format (string->symbol log-format)))))27
(define (lsp-handler opts args)28
(if (null? args)29
(begin30
(println "")31
(println "Usage: sigil lsp <command> [options]")32
(println "")33
(println "Commands:")34
(println " serve Start the LSP server (stdio transport)")35
(println "")36
(println "Options for serve:")37
(println " --log-file PATH Append logs to PATH (default: stderr)")38
(println " --log-level LEVEL trace|debug|info|warn|error|fatal")39
(println " --log-format FMT text|json")40
(println "")41
(println "Example:")42
(println " sigil lsp serve --log-file /tmp/sigil-lsp.log --log-level debug")43
(println "")44
(println "The LSP server provides editor and agent tooling:")45
(println " - diagnostics (parse, paren inference, unused imports)")46
(println " - hover, completion, go-to-definition")47
(println " - document and range formatting")48
(println " - quick-fix code actions (import, remove unused import)")49
(println ""))50
(let ((subcmd (car args)))51
(cond52
((string=? subcmd "serve")53
(lsp-serve-handler opts (cdr args)))54
(else55
(eprintln "Error: Unknown lsp command: ~a" subcmd)56
(eprintln "Run 'sigil lsp' for available commands.")57
(exit 1))))))59
(define log-file-opt60
(option61
name: 'log-file62
long: "log-file"63
value: "PATH"64
description: "Append logs to PATH (default: stderr)"))66
(define log-level-opt67
(option68
name: 'log-level69
long: "log-level"70
value: "LEVEL"71
description: "Log level: trace|debug|info|warn|error|fatal"))73
(define log-format-opt74
(option75
name: 'log-format76
long: "log-format"77
value: "FMT"78
description: "Log format: text|json"))80
(define lsp-cmd81
(command82
name: "lsp"83
description: "Start Language Server Protocol server85
The LSP server enables editors (VS Code, Neovim, Emacs) and agents86
to use Sigil's diagnostics, completion, hover, go-to-definition,87
formatting, and quick-fix code actions over standard LSP/JSON-RPC.89
Subcommands:90
serve Start the server (reads LSP messages from stdin)"91
options: (list log-file-opt log-level-opt log-format-opt)92
handler: lsp-handler))))