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

False positive: Unused public var 'clojure-sample.component-example/CircuitBreaker'

victorgsp opened this issue · comments

Describe the bug
clojure-lsp/unused-public-var reports a record as unused when it is used.

To Reproduce
Steps to reproduce the behavior:

  1. Clone project: git clone https://github.com/victorgsp/clojure-sample
  2. Run clojure-lsp diagnostics
  3. See error
    ...
    src/clojure_sample/component_example.clj:5:14: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.component-example/CircuitBreaker'
    src/clojure_sample/component_example.clj:5:14: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.component-example/->CircuitBreaker'
    ...

Expected behavior
No such error should be reported.

clojure-lsp output
[ 10%] Finding cache               [INFO] [DB] Reading transit analysis cache from /Users/victor.guedes/dev/personal/clojure-sample/.lsp/.cache/db.transit.json db took 87ms
[INFO] :maintain-dep-graph 20ms
[INFO] [Startup] Using cached classpath #{"/Users/victor.guedes/.m2/repository/org/clojure/clojure/1.10.3/clojure-1.10.3.jar" "/Users/victor.guedes/.m2/repository/org/clojure/google-closure-library-third-party/0.0-20191016-6ae1f72f/google-closure-library-third-party-0.0-20191016-6ae1f72f.jar" "/Users/victor.guedes/.m2/repository/org/msgpack/msgpack/0.6.12/msgpack-0.6.12.jar" "/Users/victor.guedes/.m2/repository/org/clojure/data.priority-map/1.1.0/data.priority-map-1.1.0.jar" "/Users/victor.guedes/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.8.7/jackson-core-2.8.7.jar" "/Users/victor.guedes/.m2/repository/com/google/elemental2/elemental2-core/1.0.0-RC1/elemental2-core-1.0.0-RC1.jar" "/Users/victor.guedes/.m2/repository/com/google/jsinterop/base/1.0.0/base-1.0.0.jar" "/Users/victor.guedes/.m2/repository/org/clojars/brenton/google-diff-match-patch/0.1/google-diff-match-patch-0.1.jar" "/Users/victor.guedes/.m2/repository/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar" "/Users/victor.guedes/.m2/repository/org/clojure/tools.reader/1.3.6/tools.reader-1.3.6.jar" "/Users/victor.guedes/.m2/repository/clj-tuple/clj-tuple/0.2.2/clj-tuple-0.2.2.jar" "/Users/victor.guedes/.m2/repository/com/google/protobuf/protobuf-java/3.11.1/protobuf-java-3.11.1.jar" "/Users/victor.guedes/.m2/repository/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" "/Users/victor.guedes/.m2/repository/environ/environ/1.1.0/environ-1.1.0.jar" "/Users/victor.guedes/.m2/repository/com/google/jsinterop/jsinterop-annotations/1.0.2/jsinterop-annotations-1.0.2.jar" "/Users/victor.guedes/.m2/repository/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" "/Users/victor.guedes/.m2/repository/org/ow2/asm/asm/9.2/asm-9.2.jar" "/Users/victor.guedes/.m2/repository/org/clojure/tools.namespace/0.3.0/tools.namespace-0.3.0.jar" "/Users/victor.guedes/.m2/repository/com/rpl/specter/1.0.5/specter-1.0.5.jar" "/Users/victor.guedes/.m2/repository/org/clojure/data.json/0.2.6/data.json-0.2.6.jar" "/Users/victor.guedes/.m2/repository/com/stuartsierra/component/1.1.0/component-1.1.0.jar" "/Users/victor.guedes/.m2/repository/org/clojure/java.classpath/0.2.3/java.classpath-0.2.3.jar" "/Users/victor.guedes/.m2/repository/org/javassist/javassist/3.18.1-GA/javassist-3.18.1-GA.jar" "/Users/victor.guedes/.m2/repository/com/google/errorprone/error_prone_annotations/2.3.1/error_prone_annotations-2.3.1.jar" "/Users/victor.guedes/.m2/repository/org/clojure/spec.alpha/0.2.194/spec.alpha-0.2.194.jar" "/Users/victor.guedes/.m2/repository/colorize/colorize/0.1.1/colorize-0.1.1.jar" "/Users/victor.guedes/.m2/repository/io/aviso/pretty/0.1.37/pretty-0.1.37.jar" "src" "/Users/victor.guedes/.m2/repository/org/clojure/math.combinatorics/0.1.6/math.combinatorics-0.1.6.jar" "/Users/victor.guedes/.m2/repository/prismatic/schema/1.4.1/schema-1.4.1.jar" "/Users/victor.guedes/.m2/repository/org/clojure/core.rrb-vector/0.0.14/core.rrb-vector-0.0.14.jar" "/Users/victor.guedes/.m2/repository/org/clojure/google-closure-library/0.0-20191016-6ae1f72f/google-closure-library-0.0-20191016-6ae1f72f.jar" "/Users/victor.guedes/.m2/repository/com/cognitect/transit-java/0.8.332/transit-java-0.8.332.jar" "/Users/victor.guedes/.m2/repository/riddley/riddley/0.1.12/riddley-0.1.12.jar" "/Users/victor.guedes/.m2/repository/org/clojure/core.async/1.5.648/core.async-1.5.648.jar" "/Users/victor.guedes/.m2/repository/midje/midje/1.10.4/midje-1.10.4.jar" "/Users/victor.guedes/.m2/repository/nubank/matcher-combinators/3.3.1/matcher-combinators-3.3.1.jar" "/Users/victor.guedes/.m2/repository/com/cognitect/transit-clj/0.8.309/transit-clj-0.8.309.jar" "/Users/victor.guedes/.m2/repository/slingshot/slingshot/0.12.2/slingshot-0.12.2.jar" "/Users/victor.guedes/.m2/repository/com/google/javascript/closure-compiler-externs/v20200315/closure-compiler-externs-v20200315.jar" "/Users/victor.guedes/.m2/repository/joda-time/joda-time/2.10/joda-time-2.10.jar" "/Users/victor.guedes/.m2/repository/org/tcrawley/dynapath/1.0.0/dynapath-1.0.0.jar" "/Users/victor.guedes/.m2/repository/com/google/re2j/re2j/1.3/re2j-1.3.jar" "/Users/victor.guedes/.m2/repository/mvxcvi/puget/1.1.2/puget-1.1.2.jar" "/Users/victor.guedes/.m2/repository/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar" "/Users/victor.guedes/.m2/repository/org/clojure/tools.macro/0.1.5/tools.macro-0.1.5.jar" "/Users/victor.guedes/.m2/repository/org/checkerframework/checker-qual/2.0.0/checker-qual-2.0.0.jar" "/Users/victor.guedes/.m2/repository/fipp/fipp/0.6.17/fipp-0.6.17.jar" "/Users/victor.guedes/.m2/repository/clj-time/clj-time/0.15.1/clj-time-0.15.1.jar" "/Users/victor.guedes/.m2/repository/com/google/guava/guava/25.1-jre/guava-25.1-jre.jar" "/Users/victor.guedes/.m2/repository/org/clojure/clojurescript/1.10.758/clojurescript-1.10.758.jar" "/Users/victor.guedes/.m2/repository/args4j/args4j/2.0.26/args4j-2.0.26.jar" "/Users/victor.guedes/.m2/repository/org/clojure/tools.analyzer.jvm/1.2.2/tools.analyzer.jvm-1.2.2.jar" "/Users/victor.guedes/.m2/repository/org/clojure/test.check/0.10.0-alpha3/test.check-0.10.0-alpha3.jar" "/Users/victor.guedes/.m2/repository/commons-codec/commons-codec/1.11/commons-codec-1.11.jar" "/Users/victor.guedes/.m2/repository/org/clojure/core.specs.alpha/0.2.56/core.specs.alpha-0.2.56.jar" "/Users/victor.guedes/.m2/repository/org/clojure/tools.analyzer/1.1.0/tools.analyzer-1.1.0.jar" "/Users/victor.guedes/.m2/repository/org/clojure/core.unify/0.5.7/core.unify-0.5.7.jar" "/Users/victor.guedes/.m2/repository/mvxcvi/arrangement/1.2.0/arrangement-1.2.0.jar" "/Users/victor.guedes/.m2/repository/com/google/javascript/closure-compiler-unshaded/v20200315/closure-compiler-unshaded-v20200315.jar" "/Users/victor.guedes/.m2/repository/com/google/code/gson/gson/2.7/gson-2.7.jar" "/Users/victor.guedes/.m2/repository/com/stuartsierra/dependency/1.0.0/dependency-1.0.0.jar" "/Users/victor.guedes/.m2/repository/potemkin/potemkin/0.4.4/potemkin-0.4.4.jar" "resources" "/Users/victor.guedes/.m2/repository/org/clojure/core.memoize/1.0.253/core.memoize-1.0.253.jar" "test" "/Users/victor.guedes/.m2/repository/marick/suchwow/6.0.2/suchwow-6.0.2.jar" "/Users/victor.guedes/.m2/repository/flare/flare/0.2.9/flare-0.2.9.jar" "/Users/victor.guedes/.m2/repository/org/clojure/core.cache/1.0.225/core.cache-1.0.225.jar"}
[INFO] [Startup] Using source-paths from classpath: ["/Users/victor.guedes/dev/personal/clojure-sample/src" "/Users/victor.guedes/dev/personal/clojure-sample/resources" "/Users/victor.guedes/dev/personal/clojure-sample/test"]
[ 15%] Copying kondo configs       [INFO] Copying kondo configs from classpath to project if any...
[WARN] Non-fatal error from clj-kondo: Configs copied:
- .clj-kondo/marick/midje
- .clj-kondo/prismatic/schema

[INFO] Copied kondo configs, took 158ms secs.
[ 20%] Analyzing project files [INFO] [Startup] Analyzing source paths for project root /Users/victor.guedes/dev/personal/clojure-sample
[INFO] [Startup] Project only paths analyzed by clj-depend, took 0ms
[ 98%] Analyzing project files No configs copied.
[INFO] :maintain-dep-graph 1ms
[INFO] Linting whole project for unused-public-var took 20ms

[INFO] [Startup] Project only paths analyzed by clj-kondo, took 220ms
[INFO] :maintain-dep-graph 0ms
[ 99%] Project analyzed Finding diagnostics...
src/clojure_sample/lsp/signature_help/foo.clj:4:5: warning: [unused-binding] unused binding a
src/clojure_sample/lsp/signature_help/foo.clj:5:5: warning: [unused-binding] unused binding a
src/clojure_sample/lsp/signature_help/foo.clj:5:9: warning: [unused-binding] unused binding more
src/clojure_sample/lsp/signature_help/foo.clj:11:7: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.lsp.signature-help.foo/some-func'
src/clojure_sample/lsp/signature_help/foo.clj:11:18: warning: [unused-binding] unused binding a
src/clojure_sample/lsp/signature_help/foo.clj:11:20: warning: [unused-binding] unused binding b
src/clojure_sample/lsp/signature_help/foo.clj:12:9: warning: [unused-binding] unused binding c
src/clojure_sample/lsp/signature_help/foo.clj:13:9: warning: [unused-binding] unused binding d
src/clojure_sample/lsp/macros.clj:9:9: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.lsp.macros/foo'
src/clojure_sample/lsp/macros.clj:14:7: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.lsp.macros/bar'
src/clojure_sample/lsp/call_hierarchy/b.clj:5:3: warning: [deprecated-var] #'clojure-sample.lsp.call-hierarchy.cef/c-fun-1 is deprecated
test/clojure_sample/core_test.clj:11:1: warning: [redefined-var] redefined var #'clojure-sample.core-test/a-test
src/clojure_sample/protocols.clj:3:7: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.protocols/start-sample'
src/clojure_sample/protocols.clj:4:7: warning: [unused-value] Unused value: start-sample
src/clojure_sample/protocols.clj:5:5: warning: [unused-binding] unused binding a
src/clojure_sample/protocols.clj:6:4: warning: [redundant-do] redundant do
src/clojure_sample/protocols.clj:9:14: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.protocols/Baz'
src/clojure_sample/protocols.clj:10:4: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.protocols/quux'
src/clojure_sample/protocols.clj:15:32: warning: [unused-binding] unused binding params
src/clojure_sample/protocols.clj:18:35: warning: [unused-binding] unused binding params
src/clojure_sample/lsp/code_actions/a.clj:1:5: error: [namespace-name-mismatch] Namespace name does not match file name: clojure-sample.code-actions.a
src/clojure_sample/component_example.clj:5:14: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.component-example/CircuitBreaker'
src/clojure_sample/component_example.clj:5:14: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.component-example/->CircuitBreaker'
src/clojure_sample/component_example.clj:14:7: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.component-example/new-component-test'
src/clojure_sample/lsp/completion/foo.clj:3:11: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.lsp.completion.foo/abcdefgh'
src/clojure_sample/lsp/completion/foo.clj:6:1: warning: [redefined-var] redefined var #'clojure-sample.lsp.completion.foo/abcdefgh
src/clojure_sample/lsp/completion/foo.clj:6:6: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.lsp.completion.foo/abcdefgh'
src/clojure_sample/lsp/completion/foo.clj:8:19: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.lsp.completion.foo/foob'
src/clojure_sample/lsp/completion/foo.clj:10:7: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.lsp.completion.foo/abcdefg'
src/clojure_sample/lsp/completion/foo.clj:21:7: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.lsp.completion.foo/bla'
src/clojure_sample/lsp/completion/foo.clj:21:14: warning: [unused-binding] unused binding e
src/clojure_sample/lsp/completion/foo.clj:21:16: warning: [unused-binding] unused binding f
src/clojure_sample/lsp/completion/foo.clj:22:13: warning: [unused-binding] unused binding b
src/clojure_sample/lsp/completion/foo.clj:22:17: warning: [unused-binding] unused binding c
src/clojure_sample/async.clj:2:55: warning: [unused-referred-var] #'clojure.core.async/>! is referred but never used
src/clojure_sample/async.clj:2:58: warning: [unused-referred-var] #'clojure.core.async/>!! is referred but never used
src/clojure_sample/async.clj:2:62: warning: [unused-referred-var] #'clojure.core.async/<! is referred but never used
src/clojure_sample/async.clj:2:68: warning: [unused-referred-var] #'clojure.core.async/chan is referred but never used
src/clojure_sample/async.clj:18:21: warning: [unresolved-namespace] Unresolved namespace clojure-sample.component-example. Are you missing a require?
src/clojure_sample/async.clj:22:7: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.async/normal-crawl'
src/clojure_sample/async.clj:28:7: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.async/async-crawl-1'
src/clojure_sample/async.clj:36:7: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.async/async-crawl-2'
src/clojure_sample/lsp/definition/a.clj:14:2: error: [unresolved-symbol] Unresolved symbol: b
src/clojure_sample/lsp/definition/a.clj:15:4: error: [unresolved-symbol] Unresolved symbol: a
src/clojure_sample/lsp/definition/a.clj:16:6: error: [unresolved-symbol] Unresolved symbol: foo
src/clojure_sample/lsp/definition/a.clj:17:6: error: [unresolved-symbol] Unresolved symbol: bar
src/clojure_sample/lsp/call_hierarchy/a.clj:4:7: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.lsp.call-hierarchy.a/a-fun'
src/clojure_sample/lsp/semantic_tokens.clj:8:3: warning: [unused-value] Unused value: foo
src/clojure_sample/lsp/semantic_tokens.clj:11:11: info: [clojure-lsp/unused-public-var] Unused public var 'clojure-sample.lsp.semantic-tokens/some-macro'

User details (please complete the following information):

  • OS: MacOS
  • Version: clojure-lsp 2023.10.30-16.25.41
    clj-kondo 2023.10.21-SNAPSHOT