diff --git a/CHANGELOG.md b/CHANGELOG.md index ca4390516..333d5d1ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - Editor - Add refactorings to change param order of `defn`/`defmacro`, also changing call sites. #1131 - Avoid shadowing existing locals when restructuring keys. #1229 + - Let editors control whether the server's log includes traces of the messages they are exchanging. https://github.com/clojure-lsp/lsp4clj/issues/27 ## 2022.10.05-16.39.51 diff --git a/bb.edn b/bb.edn index 2c7e1b1a6..6184483c0 100644 --- a/bb.edn +++ b/bb.edn @@ -4,7 +4,7 @@ :git/sha "ce060c12a25b552b864dc90f8fb344a2eb91ea9d"} medley/medley {:mvn/version "1.4.0"} - com.github.clojure-lsp/lsp4clj {:mvn/version "1.3.1"} + com.github.clojure-lsp/lsp4clj {:mvn/version "1.4.0"} ;; com.github.clojure-lsp/lsp4clj {:local/root "../../lsp4clj"} org.babashka/spec.alpha {:git/url "https://github.com/babashka/spec.alpha" :git/sha "1a841c4cc1d4f6dab7505a98ed2d532dd9d56b78"}} diff --git a/cli/bb.edn b/cli/bb.edn index b069e5bd6..e726eac91 100644 --- a/cli/bb.edn +++ b/cli/bb.edn @@ -1,7 +1,7 @@ {:paths ["integration-test"] :min-bb-version "0.4.0" :deps {medley/medley {:mvn/version "1.4.0"} - com.github.clojure-lsp/lsp4clj {:mvn/version "1.3.1"} + com.github.clojure-lsp/lsp4clj {:mvn/version "1.4.0"} ;; com.github.clojure-lsp/lsp4clj {:local/root "../../lsp4clj"} org.babashka/spec.alpha {:git/url "https://github.com/babashka/spec.alpha" :git/sha "8df0712896f596680da7a32ae44bb000b7e45e68"}} diff --git a/cli/src/clojure_lsp/main.clj b/cli/src/clojure_lsp/main.clj index dbb982344..5444eeac5 100644 --- a/cli/src/clojure_lsp/main.clj +++ b/cli/src/clojure_lsp/main.clj @@ -40,11 +40,16 @@ "See https://clojure-lsp.io/settings/ for detailed documentation."] (string/join \newline))) +(def ^:private trace-levels + #{"off" "messages" "verbose"}) + (defn ^:private cli-options [] [["-h" "--help" "Print the available commands and its options"] [nil "--version" "Print clojure-lsp version"] [nil "--verbose" "Use stdout for clojure-lsp logs instead of default log settings"] - [nil "--trace" "Enable trace logs between client and server, for debugging."] + [nil "--trace LEVEL" "Enable trace logs between client and server, for debugging. Set to 'messages' for basic traces, or 'verbose' for more detailed traces." + :default "off" + :validate [trace-levels (str "Must be in " trace-levels)]] ["-s" "--settings SETTINGS" "Optional settings as edn to use for the specified command. For all available settings, check https://clojure-lsp.io/settings" :id :settings :validate [#(try (edn/read-string %) true (catch Exception _ false)) diff --git a/cli/src/clojure_lsp/server.clj b/cli/src/clojure_lsp/server.clj index b73741703..1f02a87a4 100644 --- a/cli/src/clojure_lsp/server.clj +++ b/cli/src/clojure_lsp/server.clj @@ -464,6 +464,8 @@ (:capabilities params) (client-settings params) (some-> params :work-done-token str)) + (when-let [trace-level (:trace params)] + (lsp.server/set-trace-level server trace-level)) (when-let [parent-process-id (:process-id params)] (lsp.liveness-probe/start! parent-process-id log-wrapper-fn #(exit server))) {:capabilities (capabilities (settings/all @db*))}) @@ -492,6 +494,9 @@ (logger/error e# (format "Error during async task %s" ~task-name)))) (recur)))) +(defmethod lsp.server/receive-notification "$/setTrace" [_ {:keys [server]} {:keys [value]}] + (lsp.server/set-trace-level server value)) + (defn ^:private spawn-async-tasks! [{:keys [producer current-changes-chan diagnostics-chan watched-files-chan edits-chan] :as components}] @@ -539,15 +544,16 @@ ;; db/db*, so it can be inspected in the nREPL. (alter-var-root #'db/db* (constantly db*)))) -(defn run-server! [trace?] +(defn run-server! [trace-level] (lsp.server/discarding-stdout (let [timbre-logger (->TimbreLogger) log-path (logger/setup timbre-logger) db (assoc db/initial-db :log-path log-path) db* (atom db) log-ch (async/chan (async/sliding-buffer 20)) - server (lsp.io-server/stdio-server (cond-> {:log-ch log-ch} - trace? (assoc :trace-ch log-ch))) + server (lsp.io-server/stdio-server {:log-ch log-ch + :trace-ch log-ch + :trace-level trace-level}) producer (ClojureLspProducer. server db*) components {:db* db* :logger timbre-logger diff --git a/lib/deps.edn b/lib/deps.edn index 60f689693..4f657d141 100644 --- a/lib/deps.edn +++ b/lib/deps.edn @@ -17,7 +17,7 @@ org.benf/cfr {:mvn/version "0.152"} babashka/fs {:mvn/version "0.1.11"} - com.github.clojure-lsp/lsp4clj {:mvn/version "1.3.1"} + com.github.clojure-lsp/lsp4clj {:mvn/version "1.4.0"} ;; com.github.clojure-lsp/lsp4clj {:local/root "../../lsp4clj"} } :paths ["src" "resources"]