AtlatestRepositorysigil-lsp

sigil-lsp / tree / testtest-help-integration.sgl

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))
9
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 server
21 (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-uri
68 "src/sigil/lsp/completion.sgl"))))
70(run-tests)