AtlatestRepositorysigil-lsp
1
(import (sigil test)2
(sigil fs)3
(sigil string)4
(sigil help lookup)5
(sigil help search)6
(sigil lsp protocol)7
(sigil lsp documents)8
(sigil lsp server))10
(define uri "file:///tmp/h2-help-consumer.sgl")11
(define store (doc-store))12
(doc-store-open! store uri "sigil" 1 "completion-at")13
(define server (lsp-server docs: store initialized: #t))15
(define (params character)16
`((textDocument . ((uri . ,uri)))17
(position . ((line . 0) (character . ,character)))))19
(define (request method character id)20
(handle-message server21
(lsp-request id: id method: method params: (params character))))23
(define fixture-json "build/dev/lib/sigil/lsp/completion.json")24
(define held-json "build/dev/lib/sigil/lsp/completion.json.h2-held")26
;; Warm the production cache, remove its compiler-generated source metadata,27
;; and only then issue real protocol requests. The cached answers must survive.28
(clear-search-cache)29
(handle-message server (make-notification "initialized"))30
(rename-file fixture-json held-json)31
(define hover-response (request "textDocument/hover" 5 1))32
(define completion-response (request "textDocument/completion" 13 2))33
(define definition-response (request "textDocument/definition" 5 3))34
(rename-file held-json fixture-json)36
(test "LSP imports monorepo-owned reviewed sigil-help metadata"37
(let ((details (load-module-details '(sigil help lookup))))38
(assert-true (module-details? details))39
(assert-true (string-find (module-details-file details)40
"packages/sigil-help/src/sigil/help/lookup.sgl"))))42
(test "LSP hover request uses warmed compiler metadata"43
(let* ((response hover-response)44
(result (lsp-response-result response))45
(contents (cdr (assq 'contents result)))46
(value (cdr (assq 'value contents))))47
(assert-true (string-find value "completion-at"))48
(assert-true (string-find value "Return a CompletionList"))49
(assert-true (string-find value "(sigil lsp completion)"))))51
(test "LSP completion request includes warmed compiler metadata"52
(let* ((response completion-response)53
(result (lsp-response-result response))54
(items (cdr (assq 'items result)))55
(item (find (lambda (entry)56
(string=? (cdr (assq 'label entry))57
"completion-at"))58
items)))59
(assert-true item)60
(assert-equal "(sigil lsp completion)" (cdr (assq 'detail item)))))62
(test "LSP definition request uses warmed compiler metadata"63
(let* ((response definition-response)64
(result (lsp-response-result response))65
(location (car result))66
(definition-uri (cdr (assq 'uri location))))67
(assert-true (string-find definition-uri68
"src/sigil/lsp/completion.sgl"))))70
(run-tests)