use ? line numbers when position is unknown in --lint

I only did this for compile errors, not parse errors or lint errors.
This commit is contained in:
XeroOl 2025-07-01 00:00:26 -05:00
parent e2e020e3ba
commit ad136b00ec
3 changed files with 11 additions and 7 deletions

View File

@ -2,17 +2,17 @@
(local dispatch (require :fennel-ls.dispatch))
(local json-rpc (require :fennel-ls.json-rpc))
(local files (require :fennel-ls.files))
(local {: severity->string} (require :fennel-ls.message))
(local {: severity->string &as message} (require :fennel-ls.message))
(fn print-diagnostic [filename message ?range ?severity]
(fn print-diagnostic [filename msg range ?severity]
(print (: "%s:%s:%s: %s: %s" :format
filename
;; LSP line numbers are zero-indexed, but Emacs and Vim both use
;; 1-indexing for this.
(+ (or (?. ?range :start :line) 0) 1)
(or (?. ?range :start :character) "?")
(if (= range message.unknown-range) "?" (+ range.start.line 1))
(if (= range message.unknown-range) "?" range.start.character)
(or (. severity->string ?severity) "?")
message)))
msg)))
(fn initialize [server]
(let [params {:id 1

View File

@ -300,7 +300,7 @@ identifiers are declared / referenced in which places."
(λ on-compile-error [_ msg ast call-me-to-reset-the-compiler]
(let [range (or (message.ast->range server file ast)
(line+byte->range server file 1 1))]
message.unknown-range)]
(table.insert diagnostics
{:range range
:message msg

View File

@ -66,6 +66,9 @@ LSP json objects."
: id
:result (nullify ?result)})
(local unknown-range {:start {:line 0 :character 0}
:end {:line 0 :character 0}})
(λ ast->range [server file ?ast]
(case (fennel.ast-source ?ast)
{: bytestart : byteend} {:start (utils.byte->position file.text bytestart
@ -133,4 +136,5 @@ LSP json objects."
: diagnostics
: severity
: severity->string
: show-message}
: show-message
: unknown-range}