From dca991eb2fbea583df0c3cd2c764ee9d7da527d2 Mon Sep 17 00:00:00 2001 From: XeroOl Date: Wed, 25 Jun 2025 01:12:00 -0500 Subject: [PATCH] clean up formatter code ? only on optional fields, instead of randomly. also, don't use the variable name `symbol` for things that aren't fennel.sym? remove message.array entirely: dkjson defaults to [] not {} on empty tables. --- src/fennel-ls/formatter.fnl | 31 +++++++++++++++---------------- src/fennel-ls/handlers.fnl | 4 ++-- src/fennel-ls/message.fnl | 10 ++-------- 3 files changed, 19 insertions(+), 26 deletions(-) diff --git a/src/fennel-ls/formatter.fnl b/src/fennel-ls/formatter.fnl index c91b339..8c4e4f3 100644 --- a/src/fennel-ls/formatter.fnl +++ b/src/fennel-ls/formatter.fnl @@ -6,7 +6,6 @@ user code. Fennel-ls doesn't support user-code formatting as of now." (local {: sym? : view : table?} (require :fennel)) -(local message (require :fennel-ls.message)) (λ code-block [str] (.. "```fnl\n" str "\n```")) @@ -38,7 +37,7 @@ user code. Fennel-ls doesn't support user-code formatting as of now." (.. ": " $2 $3))) (tostring arg))) -(fn fn-signature-format [special name args] +(fn fn-signature-format [special ?name args] "Returns the LSP-formatted signature and parameters objects" (fn render-arglist [arglist offset] (var offset offset) @@ -47,7 +46,7 @@ user code. Fennel-ls doesn't support user-code formatting as of now." (set offset (+ 1 (. rendered :label 2))) rendered))) - (let [name (tostring (or name special)) + (let [name (tostring (or ?name special)) args (case (type (?. args 1)) :table (icollect [_ v (ipairs args)] (render-arg v)) @@ -60,9 +59,9 @@ user code. Fennel-ls doesn't support user-code formatting as of now." ")") (render-arglist args args-offset)))) -(fn fn-format [special name args docstring] - (.. (code-block (fn-signature-format special name args)) - (if docstring (.. "\n---\n" docstring) ""))) +(fn fn-format [special ?name args ?docstring] + (.. (code-block (fn-signature-format special ?name args)) + (if ?docstring (.. "\n---\n" ?docstring) ""))) (fn metadata-format [{: binding : metadata}] "formats a special using its builtin metadata magic" @@ -123,11 +122,11 @@ fntype is one of fn or λ or lambda" (= (type arglist) :table)) {: fntype : arglist})) -(λ signature-help-format [symbol] - "Return a signatureHelp lsp object +(λ signature-help-format [doc-or-definition] + "Return a SignatureInformation lsp object symbol can be an actual ast symbol or a binding object from a docset" - (case-try (analyze-fn symbol.definition) + (case-try (analyze-fn doc-or-definition.definition) {:fntype ?fntype :name ?name :arglist ?arglist :docstring ?docstring} (fn-signature-format ?fntype ?name ?arglist) (signature parameters) @@ -135,7 +134,7 @@ fntype is one of fn or λ or lambda" :documentation ?docstring :parameters parameters} ;; if we couldn't get the info from the ast, try the metadata - (catch _ (case-try symbol + (catch _ (case-try doc-or-definition {: binding :metadata {:fnl/arglist arglist :fnl/docstring docstring}} (fn-signature-format "" binding arglist) @@ -143,20 +142,20 @@ fntype is one of fn or λ or lambda" {:label signature :documentation docstring :parameters parameters} - (catch _ {:parameters (message.array) + (catch _ {:parameters [] :label (.. "ERROR: don't know how to format " - (view symbol {:one-line? true :depth 3})) + (view doc-or-definition {:one-line? true :depth 3})) :documentation (code-block - (view symbol {:depth 3}))}))))) + (view doc-or-definition {:depth 3}))}))))) (λ hover-format [result] "Format code that will appear when the user hovers over a symbol" {:kind "markdown" :value (case (analyze-fn result.definition) - {:fntype ?fntype :name ?name :arglist ?arglist :docstring ?docstring} - (fn-format ?fntype ?name ?arglist ?docstring) - _ (if (-?>> result.keys length (< 0)) + {:fntype fntype :name ?name :arglist arglist :docstring ?docstring} + (fn-format fntype ?name arglist ?docstring) + _ (if (-?>> result.keys length (not= 0)) (code-block (.. "ERROR, I don't know how to show this " "(. " diff --git a/src/fennel-ls/handlers.fnl b/src/fennel-ls/handlers.fnl index 61b4158..35513cc 100644 --- a/src/fennel-ls/handlers.fnl +++ b/src/fennel-ls/handlers.fnl @@ -108,7 +108,7 @@ Every time the client sends a message, it gets handled by a function in the corr symbol (analyzer.find-nearest-definition server this-file symbol byte) {: referenced-by :file {:uri this-file.uri &as file} : binding} - (let [result (icollect [_ {:symbol reference} (ipairs referenced-by) &into (message.array)] + (let [result (icollect [_ {:symbol reference} (ipairs referenced-by)] {:range (message.ast->range server file reference) :kind documentHighlightKind.Read})] (table.insert result {:range (message.ast->range server file binding) @@ -207,7 +207,7 @@ Every time the client sends a message, it gets handled by a function in the corr (λ requests.textDocument/codeAction [server _send {: range :textDocument {: uri}}] (let [file (files.get-by-uri server uri)] - (icollect [_ diagnostic (ipairs file.diagnostics) &into (message.array)] + (icollect [_ diagnostic (ipairs file.diagnostics)] (if (overlap? diagnostic.range range) (message.diagnostic->code-action server file diagnostic :quickfix))))) diff --git a/src/fennel-ls/message.fnl b/src/fennel-ls/message.fnl index f0d4223..51eb0ea 100644 --- a/src/fennel-ls/message.fnl +++ b/src/fennel-ls/message.fnl @@ -9,8 +9,6 @@ LSP json objects." (local utils (require :fennel-ls.utils)) (local json (require :dkjson)) -(local json-array-mt {:__jsontype :array}) - (λ nullify [?value] (case ?value nil json.null @@ -75,16 +73,13 @@ LSP json objects." :end (utils.byte->position file.text (+ byteend 1) server.position-encoding)})) -(λ array [?t] - (setmetatable (or ?t []) json-array-mt)) - (λ diagnostic->code-action [_server {: uri} diagnostic ?kind] (case-try diagnostic.fix fix (fix) {: title : changes} {: title :kind ?kind :diagnostics [diagnostic] - :edit {:changes {uri (array changes)}}})) + :edit {:changes {uri changes}}})) (λ call->signature-help [_server _file _call signature active-parameter] (let [params-count (length signature.parameters)] @@ -138,5 +133,4 @@ LSP json objects." : diagnostics : severity : severity->string - : show-message - : array} + : show-message}