AtlatestRepositorysigil-lsp

sigil-lsp / tree / src / sigil / lspcommands.sgl

1;;; (sigil lsp commands) - CLI hook for the LSP server.
2;;;
3;;; Registers the `sigil lsp` subcommand used by sigil-cli.
4
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 (begin
14 (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-serve
23 log-file: log-file
24 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 (begin
30 (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 (cond
52 ((string=? subcmd "serve")
53 (lsp-serve-handler opts (cdr args)))
54 (else
55 (eprintln "Error: Unknown lsp command: ~a" subcmd)
56 (eprintln "Run 'sigil lsp' for available commands.")
57 (exit 1))))))
59 (define log-file-opt
60 (option
61 name: 'log-file
62 long: "log-file"
63 value: "PATH"
64 description: "Append logs to PATH (default: stderr)"))
66 (define log-level-opt
67 (option
68 name: 'log-level
69 long: "log-level"
70 value: "LEVEL"
71 description: "Log level: trace|debug|info|warn|error|fatal"))
73 (define log-format-opt
74 (option
75 name: 'log-format
76 long: "log-format"
77 value: "FMT"
78 description: "Log format: text|json"))
80 (define lsp-cmd
81 (command
82 name: "lsp"
83 description: "Start Language Server Protocol server
85The LSP server enables editors (VS Code, Neovim, Emacs) and agents
86to use Sigil's diagnostics, completion, hover, go-to-definition,
87formatting, and quick-fix code actions over standard LSP/JSON-RPC.
89Subcommands:
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))))