clojure-lsp / clojure-lsp

Clojure & ClojureScript Language Server (LSP) implementation

Home Page:https://clojure-lsp.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CLI format is different than run as an alias

NoahTheDuke opened this issue · comments

commented

Describe the bug
Given:

noah@Noahs-MacBook-Pro ~/personal/splint
$ cat .cljfmt.edn
{:indents ^:replace {#re ".*" [[:inner 0]]}}
noah@Noahs-MacBook-Pro ~/personal/splint
$ cat .lsp/config.edn
{:cljfmt-config-path ".cljfmt.edn"}

Running clojure-lsp format produces (1 space indentation):

(defonce
 ^{:doc "All registered rules, grouped by :init-type and full-name"}
 global-rules
  (atom {:rules {} :genres #{}}))

Running clojure -M:cljfmt fix produces (2 space indentation):

(defonce
  ^{:doc "All registered rules, grouped by :init-type and full-name"}
  global-rules
  (atom {:rules {} :genres #{}}))

There are other differences, but this is the smallest one I could point to.

To Reproduce
Steps to reproduce the behavior:

  1. Clone Splint, checkout commit 34dfc12324d5c167cf38360c99d7a487975f0a3e.
  2. Run clojure-lsp format
  3. No changes

Expected behavior
The code formatting shouldn't change.

clojure-lsp output
$ clojure-lsp format --verbose
[ 10%] Finding cache               [INFO] [DB] Reading transit analysis cache from /Users/noah/personal/splint/.lsp/.cache/db.transit.json db took 202ms
[INFO] :maintain-dep-graph 8ms
[INFO] [Startup] Using cached classpath #{"/Users/noah/.m2/repository/org/bitbucket/mstrobel/procyon-core/0.6.0/procyon-core-0.6.0.jar" "/Users/noah/.m2/repository/org/babashka/http-client/0.1.8/http-client-0.1.8.jar" "/Users/noah/.m2/repository/babashka/fs/0.2.15/fs-0.2.15.jar" "/Users/noah/.m2/repository/org/clojure/clojure/1.11.1/clojure-1.11.1.jar" "/Users/noah/.m2/repository/org/clojure/tools.analyzer.jvm/1.2.2/tools.analyzer.jvm-1.2.2.jar" "/Users/noah/.m2/repository/org/clojure/tools.cli/1.0.214/tools.cli-1.0.214.jar" "/Users/noah/.m2/repository/nrepl/bencode/1.1.0/bencode-1.1.0.jar" "/Users/noah/.m2/repository/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar" "/Users/noah/.m2/repository/org/babashka/sci.impl.types/0.0.2/sci.impl.types-0.0.2.jar" "/Users/noah/.m2/repository/io/methvin/directory-watcher/0.17.3/directory-watcher-0.17.3.jar" "/Users/noah/.m2/repository/borkdude/edamame/1.4.25/edamame-1.4.25.jar" "/Users/noah/.m2/repository/org/clojure/core.memoize/1.0.253/core.memoize-1.0.253.jar" "/Users/noah/.m2/repository/org/slf4j/slf4j-simple/2.0.7/slf4j-simple-2.0.7.jar" "/Users/noah/.m2/repository/tigris/tigris/0.1.2/tigris-0.1.2.jar" "/Users/noah/.m2/repository/javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar" "/Users/noah/.m2/repository/com/nextjournal/beholder/1.0.2/beholder-1.0.2.jar" "/Users/noah/.m2/repository/net/java/dev/jna/jna/5.12.1/jna-5.12.1.jar" "/Users/noah/.m2/repository/babashka/process/0.4.16/process-0.4.16.jar" "/Users/noah/.m2/repository/clj-tuple/clj-tuple/0.2.2/clj-tuple-0.2.2.jar" "/Users/noah/personal/splint/src" "/Users/noah/.m2/repository/nubank/matcher-combinators/3.8.5/matcher-combinators-3.8.5.jar" "/Users/noah/.m2/repository/org/clojure/tools.cli/1.0.219/tools.cli-1.0.219.jar" "/Users/noah/.m2/repository/com/clojure-goes-fast/clj-java-decompiler/0.3.4/clj-java-decompiler-0.3.4.jar" "/Users/noah/.m2/repository/org/flatland/ordered/1.5.9/ordered-1.5.9.jar" "/Users/noah/.m2/repository/org/clojure/core.cache/1.0.225/core.cache-1.0.225.jar" "/Users/noah/.m2/repository/org/clojure/java.classpath/1.0.0/java.classpath-1.0.0.jar" "/Users/noah/.m2/repository/com/cognitect/transit-java/1.0.362/transit-java-1.0.362.jar" "/Users/noah/.m2/repository/org/clojure/tools.reader/1.3.6/tools.reader-1.3.6.jar" "/Users/noah/.m2/repository/com/taoensso/tufte/2.4.5/tufte-2.4.5.jar" "/Users/noah/.m2/repository/criterium/criterium/0.4.6/criterium-0.4.6.jar" "/Users/noah/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar" "src" "/Users/noah/.m2/repository/org/clojure/tools.gitlibs/2.5.190/tools.gitlibs-2.5.190.jar" "/Users/noah/.m2/repository/riddley/riddley/0.1.12/riddley-0.1.12.jar" "/Users/noah/.m2/repository/org/clojure/data.json/2.4.0/data.json-2.4.0.jar" "/Users/noah/.m2/repository/camel-snake-kebab/camel-snake-kebab/0.4.3/camel-snake-kebab-0.4.3.jar" "/Users/noah/personal/splint/resources" "/Users/noah/.gitlibs/libs/babashka/babashka.core/52a6037bd4b632bffffb04394fb4efd0cdab6b1e/src" "/Users/noah/.m2/repository/potemkin/potemkin/0.4.6/potemkin-0.4.6.jar" "/Users/noah/.m2/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-cbor/2.13.3/jackson-dataformat-cbor-2.13.3.jar" "/Users/noah/.m2/repository/org/msgpack/msgpack/0.6.12/msgpack-0.6.12.jar" "/Users/noah/.m2/repository/com/cognitect/transit-clj/1.0.329/transit-clj-1.0.329.jar" "/Users/noah/.m2/repository/org/clojure/tools.analyzer/1.1.0/tools.analyzer-1.1.0.jar" "/Users/noah/.m2/repository/org/clojure/tools.logging/1.1.0/tools.logging-1.1.0.jar" "/Users/noah/.m2/repository/http-kit/http-kit/2.6.0-RC1/http-kit-2.6.0-RC1.jar" "dev" "/Users/noah/.m2/repository/org/clojure/spec.alpha/0.3.218/spec.alpha-0.3.218.jar" "/Users/noah/.m2/repository/org/clojure/core.rrb-vector/0.1.2/core.rrb-vector-0.1.2.jar" "/Users/noah/.m2/repository/com/github/clj-easy/graal-build-time/0.1.4/graal-build-time-0.1.4.jar" "/Users/noah/.m2/repository/com/taoensso/encore/3.31.0/encore-3.31.0.jar" "/Users/noah/.m2/repository/com/taoensso/truss/1.6.0/truss-1.6.0.jar" "/Users/noah/.m2/repository/org/ow2/asm/asm/9.2/asm-9.2.jar" "/Users/noah/.m2/repository/io/aviso/pretty/1.3/pretty-1.3.jar" "/Users/noah/.m2/repository/org/clojure/math.combinatorics/0.2.0/math.combinatorics-0.2.0.jar" "/Users/noah/.m2/repository/com/taoensso/timbre/6.0.1/timbre-6.0.1.jar" "/Users/noah/.m2/repository/org/babashka/cli/0.6.50/cli-0.6.50.jar" "/Users/noah/.m2/repository/org/slf4j/slf4j-api/2.0.7/slf4j-api-2.0.7.jar" "/Users/noah/.m2/repository/com/github/seancorfield/expectations/2.0.165/expectations-2.0.165.jar" "/Users/noah/.m2/repository/org/clojure/core.match/1.0.0/core.match-1.0.0.jar" "/Users/noah/.m2/repository/selmer/selmer/1.12.50/selmer-1.12.50.jar" "/Users/noah/.m2/repository/org/clojure/data.xml/0.2.0-alpha8/data.xml-0.2.0-alpha8.jar" "/Users/noah/.m2/repository/hiccup/hiccup/2.0.0-alpha2/hiccup-2.0.0-alpha2.jar" "/Users/noah/.m2/repository/cheshire/cheshire/5.11.0/cheshire-5.11.0.jar" "/Users/noah/.m2/repository/org/clojure/core.async/1.6.673/core.async-1.6.673.jar" "/Users/noah/.m2/repository/insn/insn/0.5.2/insn-0.5.2.jar" "/Users/noah/.m2/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-smile/2.13.3/jackson-dataformat-smile-2.13.3.jar" "/Users/noah/.m2/repository/org/clojure/data.csv/1.0.0/data.csv-1.0.0.jar" "/Users/noah/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.13.3/jackson-core-2.13.3.jar" "/Users/noah/.m2/repository/org/babashka/babashka.impl.java/0.1.8/babashka.impl.java-0.1.8.jar" "/Users/noah/.m2/repository/babashka/babashka.curl/0.1.2/babashka.curl-0.1.2.jar" "/Users/noah/.m2/repository/org/clojure/data.priority-map/1.1.0/data.priority-map-1.1.0.jar" "/Users/noah/.m2/repository/org/clojure/core.specs.alpha/0.2.62/core.specs.alpha-0.2.62.jar" "/Users/noah/.m2/repository/org/javassist/javassist/3.18.1-GA/javassist-3.18.1-GA.jar" "/Users/noah/.gitlibs/libs/io.github.cognitect-labs/test-runner/dfb30dd6605cb6c0efc275e1df1736f6e90d4d73/src" "/Users/noah/.m2/repository/clj-commons/clj-yaml/0.7.169/clj-yaml-0.7.169.jar" "/Users/noah/.m2/repository/org/clojure/tools.namespace/1.4.4/tools.namespace-1.4.4.jar" "/Users/noah/.m2/repository/rewrite-clj/rewrite-clj/1.1.46/rewrite-clj-1.1.46.jar" "/Users/noah/.m2/repository/org/bitbucket/mstrobel/procyon-compilertools/0.6.0/procyon-compilertools-0.6.0.jar" "resources" "test" "/Users/noah/.m2/repository/org/clojure/test.check/1.1.1/test.check-1.1.1.jar"}
[INFO] [Startup] Using source-paths from classpath: ["/Users/noah/personal/splint/src" "/Users/noah/personal/splint/resources" "/Users/noah/personal/splint/dev" "/Users/noah/personal/splint/test"]
[ 20%] Analyzing project files     [INFO] [Startup] Analyzing source paths for project root /Users/noah/personal/splint
[INFO] :maintain-dep-graph 2ms
[ 99%] Project analyzed            Formatting namespaces...
[INFO] :formatting 10ms
[INFO] :formatting 9ms
[INFO] :formatting 10ms
[INFO][INFO]  :formatting 10ms
:formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 63ms
[INFO] :formatting 63ms
[INFO] :formatting 64ms
[INFO] :formatting 66ms
[INFO] :formatting 67ms
[INFO] :formatting 99ms
[INFO] :formatting 75ms
[INFO] :formatting 111ms
[INFO] :formatting 96ms
[INFO][INFO]  :formatting 9ms
:formatting 25ms
[INFO] :formatting 37ms
[INFO] :formatting 10ms
[INFO] :formatting 34ms
[INFO] :formatting 12ms
[INFO] :formatting 13ms
[INFO] :formatting 14ms
[INFO] :formatting 13ms
[INFO] :formatting 42ms
[INFO] :formatting 30ms
[INFO] :formatting 14ms
[INFO] :formatting 15ms
[INFO] :formatting 32ms
[INFO] :formatting 5ms
[INFO] :formatting 3ms
[INFO] :formatting 6ms
[INFO] :formatting 8ms
[INFO] :formatting 9ms
[INFO] :formatting 11ms
[INFO] :formatting 11ms
[INFO] :formatting 21ms
[INFO] :formatting 45ms
[INFO][INFO]  :formatting 5ms
:formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 6ms
[INFO] :formatting 6ms
[INFO] :formatting 9ms
[INFO] :formatting 14ms
[INFO] :formatting 12ms
[INFO] :formatting 18ms
[INFO] :formatting 17ms
[INFO] :formatting 16ms
[INFO] :formatting 25ms
[INFO] :formatting 33ms
[INFO] :formatting 38ms
[INFO] :formatting 9ms
[INFO] :formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 9ms
[INFO] :formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 12ms
[INFO] :formatting 19ms
[INFO] :formatting 18ms
[INFO] :formatting 20ms
[INFO] :formatting 22ms
[INFO] :formatting 27ms
[INFO] :formatting 66ms
[INFO] :formatting 35ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 6ms
[INFO] :formatting 7ms
[INFO] :formatting 9ms
[INFO] :formatting 11ms
[INFO] :formatting 11ms
[INFO] :formatting 14ms
[INFO] :formatting 7ms
[INFO] :formatting 19ms
[INFO] :formatting 32ms
[INFO] :formatting 49ms
[INFO] :formatting 4ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 6ms
[INFO] :formatting 8ms
[INFO] :formatting 12ms
[INFO] :formatting 62ms
[INFO] :formatting 13ms
[INFO] :formatting 7ms
[INFO] :formatting 8ms
[INFO] :formatting 8ms
[INFO] :formatting 5ms
[INFO] :formatting 12ms
[INFO] :formatting 12ms
[INFO] :formatting 12ms
[INFO] :formatting 12ms
[INFO] :formatting 14ms
[INFO] :formatting 13ms
[INFO] :formatting 16ms
[INFO] :formatting 16ms
[INFO] :formatting 17ms
[INFO] :formatting 22ms
[INFO] :formatting 3ms
[INFO] :formatting 3ms
[INFO] :formatting 4ms
[INFO] :formatting 4ms
[INFO] :formatting 6ms
[INFO] :formatting 6ms
[INFO] :formatting 29ms
[INFO] :formatting 13ms
[INFO] :formatting 6ms
[INFO] :formatting 6ms
[INFO] :formatting 6ms
[INFO] :formatting 7ms
[INFO] :formatting 8ms
[INFO] :formatting 7ms
[INFO] :formatting 8ms
[INFO] :formatting 9ms
[INFO] :formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 12ms
[INFO] :formatting 5ms
[INFO] [INFO]:formatting 6ms
[INFO] :formatting 4ms
[INFO] :formatting 13ms
[INFO] :formatting 5ms
[INFO] :formatting 8ms
 :formatting 6ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 6ms
[INFO] :formatting 6ms
[INFO] :formatting 6ms
[INFO] :formatting 6ms
[INFO] :formatting 7ms
[INFO] :formatting 26ms
[INFO] :formatting 14ms
[INFO] :formatting 51ms
[INFO] :formatting 4ms
[INFO] :formatting 5ms
[INFO] :formatting 6ms
[INFO] :formatting 6ms
[INFO] :formatting 7ms
[INFO] :formatting 8ms
[INFO] :formatting 9ms
[INFO] :formatting 9ms
[INFO] :formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 14ms
[INFO] :formatting 5ms
[INFO] :formatting 6ms
[INFO] :formatting 14ms
[INFO] :formatting 26ms
[INFO] :formatting 43ms
[INFO] :formatting 85ms
[INFO] :formatting 8ms
[INFO] :formatting 8ms
[INFO] :formatting 8ms
[INFO] :formatting 9ms
[INFO] :formatting 9ms
[INFO] :formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 11ms
[INFO] :formatting 12ms
[INFO] :formatting 13ms
[INFO] :formatting 13ms
[INFO] :formatting 14ms
[INFO] :formatting 15ms
[INFO] :formatting 16ms
[INFO][INFO]  :formatting 7ms
:formatting 8ms
[INFO] :formatting 5ms
[INFO] :formatting 21ms
[INFO] :formatting 6ms
[INFO] :formatting 10ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 6ms
[INFO] :formatting 6ms
[INFO] :formatting 6ms
[INFO] :formatting 7ms
[INFO] :formatting 7ms
[INFO] :formatting 9ms
[INFO] :formatting 9ms
[INFO] :formatting 4ms
[INFO] :formatting 8ms
[INFO] :formatting 10ms
[INFO] :formatting 82ms
[INFO] :formatting 5ms
[INFO] :formatting 6ms
[INFO] :formatting 7ms
[INFO] :formatting 7ms
[INFO] :formatting 8ms
[INFO] :formatting 9ms
[INFO] :formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 9ms
[INFO] :formatting 11ms
[INFO] :formatting 12ms
[INFO] :formatting 14ms
[INFO] :formatting 6ms
[INFO] :formatting 4ms
[INFO] :formatting 17ms
[INFO] :formatting 7ms
[INFO] :formatting 6ms
[INFO] :formatting 17ms
[INFO] :formatting 8ms
[INFO] :formatting 10ms
[INFO] :formatting 8ms
[INFO] :formatting 9ms
[INFO] :formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 10ms
[INFO] :formatting 11ms
[INFO] :formatting 12ms
[INFO] :formatting 13ms
[INFO] :formatting 14ms
[INFO] :formatting 13ms
[INFO] :formatting 16ms
[INFO] :formatting 16ms
[INFO] :formatting 18ms
[INFO] :formatting 29ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 5ms
[INFO] :formatting 6ms
[INFO] :formatting 8ms
[INFO] :formatting 10ms
[INFO] :formatting 11ms
[INFO] :formatting 15ms
[INFO] :formatting 38ms
Formatted noahtheduke.splint.rules
Formatted 1 namespaces

User details:

  • OS: MacOS 12.6.6
  • Version: 2024.02.01-11.01.59

Additional context
N/A

commented

Huh, I can't get it to happen with defonce in your repo. I wonder what I did to make that happen last week.

I can get other issues to happen tho. To borrow your example repo: https://github.com/NoahTheDuke/clojure-sample/tree/nb/clojure-lsp-issue-1178

noah ~/personal/clojure-sample [nb/clojure-lsp-issue-1178 ≡ +2 ~0 -0 !]
$ git status
On branch nb/clojure-lsp-issue-1178
Your branch is up to date with 'origin/nb/clojure-lsp-issue-1178'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.clj-kondo/.cache/
	.lsp/.cache/

nothing added to commit but untracked files present (use "git add" to track)
noah ~/personal/clojure-sample [nb/clojure-lsp-issue-1178 ≡ +2 ~0 -0 !]
$ clojure-lsp format
[ 99%] Project analyzed            Formatting namespaces...
Formatted clojure-sample.foo
Formatted 1 namespaces
noah ~/personal/clojure-sample [nb/clojure-lsp-issue-1178 ≡ +2 ~1 -0 !]
$ git diff
diff --git a/src/clojure_sample/foo.clj b/src/clojure_sample/foo.clj
index 3189666..1ab3e2a 100644
--- a/src/clojure_sample/foo.clj
+++ b/src/clojure_sample/foo.clj
@@ -9,18 +9,18 @@
   "A modification from clojure.tools.namespace.parse/deps-from-libspec."
   [prefix form]
   (cond (prefix-spec? form)
-    (mapcat (fn [f] (deps-from-libspec
-                      (symbol (str (when prefix (str prefix "."))
-                                (first form)))
-                      f))
-      (next form))
+        (mapcat (fn [f] (deps-from-libspec
+                          (symbol (str (when prefix (str prefix "."))
+                                    (first form)))
+                          f))
+          (next form))

-    (option-spec? form)
-    (let [opts (apply hash-map (next form))]
-      [{:ns (symbol (str (when prefix (str prefix ".")) (first form)))
-        :alias (or (:as opts) (:as-alias opts))}])
+        (option-spec? form)
+        (let [opts (apply hash-map (next form))]
+          [{:ns (symbol (str (when prefix (str prefix ".")) (first form)))
+            :alias (or (:as opts) (:as-alias opts))}])

-    (js-dep-spec? form)
-    (let [opts (apply hash-map (next form))]
-      [{:ns (str (when prefix (str prefix ".")) (first form))
-        :alias (or (:as opts) (:as-alias opts))}])))
+        (js-dep-spec? form)
+        (let [opts (apply hash-map (next form))]
+          [{:ns (str (when prefix (str prefix ".")) (first form))
+            :alias (or (:as opts) (:as-alias opts))}])))