For a list of breaking changes, check here.
- Support
core.async
defblockingop
macro #1244 - Add error message when keywords are passed in
:or
map #1242 - False positive unused default when analyzing locals #1246
:defined-by
contains raw node for sgen fns #1231- Fix wrong order of unresolved symbols #1237
- Remove generated nodes from analysis #1239 (@ericdallo)
- Add
:report-duplicates
linter config for several linters. #1232 (@snoe)
--copy-configs
flag to indicate copy configs from dependencies while linting. This replaces--no-warnings
.--dependencies
flag to indicate skipping already linted jars for performance. This replaces--no-warnings
.
- Support js property access syntax #1189
- Fix linting
user.clj
#1190 - Add linting for
sgen/lazy-prims
#1192 - NullPointerException when ignoring :deprecated-var #1195
- Fix
:lint-as
withcond->
#1205 - Expose config to hook fns #1208 (@not-in-stock)
- Fix crash with :clj-kondo/ignore in combination with :rename #1210
- Fix false positive unresolved symbol in CLJS type hint #1212
- Fix invalid namespace in clojure.data.xml analysis #1202
- Fix analysis of
clojure.core.reducers/defcurried
#1217 - Add
:defined-by
on missing var definitions #1219 (@ericdallo) - Add name positions to local-usage analysis #1220 (@ericdallo)
- False positive
:unused-private-var
warning for deftype^:private
#1222 - Correct escaping for docstrings in analysis #1224 (@lread)
- Redundant expression false positive #1183
- Redundant expression false positive #1185
- Regression in unresolved symbol config #1187
- Lint nested function literal #636
- Redundant expression linter #298
- Add
:exclude
config to :refer linter #1172 - Warn on non-existent var in
:refer
#546 - Support
clojure.data.xml/alias-uri
#1180
- Fix schema.core/defmethod linting for vectors dispatch-values #1175 (@leoiacovini)
- Continue analyzing on invalid symbol #1146
- Standalone require should be emitted to analysis #1177
- Upgrade sci to 0.2.4
Thanks to @snoe and @ericdallo for contributing to this release. Thanks to the sponsors on Github, OpenCollective and Clojurists Together for making this release possible.
- Core.match support #496
- Keyword analysis #1129 (@snoe). See analysis docs.
- BREAKING: Don't use lint-as for hooks #1170
- Fix crash when linting kitchen-async #1148
- Memory optimizations for clojure-lsp commit
- Upgrade to GraalVM 21.0.0 #1163
- Fix analysis of case dispatch vals #1169
- Potemkin improvement with regards to unresolved var #1167
- Exported config fix for git deps #1171
- Add
:aliases
to ns ctx and:alias
to var-usages #1133 (@snoe) - Add
:end-row
and:end-col
to var-definitions bucket on analysis #1147 (@ericdallo) - Fix unresolved var
clojure.spec.gen.alpha/fmap
#1157
Thanks to @SevereOverfl0w, @jysandy, @tomdl89, @snoe, @audriu, and @ericdallo for contributing to this release.
- New linter:
:unresolved-var
. This detects unresolved vars in other namespaces, likeset/onion
. See docs. #635 - Alpine Docker build #1111
- Add locals to analysis #1109 (@snoe)
- Add analysis for arglists #1123 (@snoe)
- Fix finding without location info #1101
- Detect duplicate key in '{[1 2] 3, (1 2) 4} #1056 (@jysandy)
- Add cljs.core cases in
lint-specific-calls!
#1116 (@tomdl89) - [#1099] Add :single-operand-logical linter for
and
andor
#1122 (@tomdl89) - Add
:ns
to:unused-namespace
findings (@ericdallo) - Derive config dir from only file path linted #1135
- Support name in defmethod fn-tail #1115
- Avoid crash when using
:refer-clojure
+:only
#957
- Documentation: a list of all available linters #936
- Lint protocol and interface implementations in
deftype
anddefrecord
#140 - Upgrade to GraalVM 20.3.0 #1085
- Support
cljs.core/simple-benchmark
syntax #1079 - Support
babashka.process/$
macro syntax #1089
- Fix recur arity in doysync #1081
- Alias linter doesn't recognize (quote alias) form #1074
- Fix retries for
refer :all
when linting in parallel #1068 - Improve analyzing syntax of
amap
#1069 - Namespaced map in
deps.edn
causes false positive #1093 - Support ignore hints in
deps.edn
#1094 - Fix unsorted namespaces linter for nested libspecs #1097
- Fix reported ns name in analysis for nested libspecs #1100
Thanks @bennyandresen, @jaihindhreddy, @mharju, @pepijn, @slipset and @nvuillam for contributing to this release. Thanks to Clojurists Together for sponsoring this release.
- Lint deps.edn #945
--filename
option to set filename when linting from stdin. This should be used for editor plugins to enabledeps.edn
linting.- Export and import config via classpath #559, clj-kondo/config#1
--no-warnings
flag to indicate linting is used to populate cache.- Skip already linted jars #705
- Implement
:include
option for shadowed-var linter #1040 - Return
:files
count in summary #1046
- Better resolving of vars referred with
:all
#1010 - Fix false positive with
format
#1044 - Fix index out of bounds exception clj-kondo.lsp#11
- More robust marking of generated nodes to avoid redundant dos and lets despite location metadata #1059
Thanks @zilti, @dharrigan and @sogaiu for contributing to this release. Thanks to Clojurists Together for sponsoring this release.
- Shadowed var linter #646. See docs.
- Config for ignoring unused
:as
binding clj-kondo#1016 (@dharrigan) - Type warning for
contains?
#1021 - Predicate functions for hooks api #1006. See docs.
- Support reader conditionals in ignore hint #1022. See docs.
- Support ignore hint on unused binding #1017
- Support ignore hint in ns form #1031
- Linux packages (@zilti)
- Fix memory leak in long running process #1036
- Claypoole config enhancements clj-kondo/config#7
- Don't warn about redundant
let
anddo
in hook-generated code #1038 - Fix format string false positive #1007
- Parse failure in
(or)
#1023 - Analyze require in top-level do #1018
- Analyze quote in require #1019
- Base Docker image on Ubuntu latest #1026
Thanks to @cldwalker, @bfontaine, @snoe, @andreyorst, @jeroenvandijk, @jaihindhreddy, @sittim and @sogaiu for contributing to this release. Thanks to the people who helped designing the new features in Github issue conversations. Thanks to Clojurists Together for sponsoring this release.
-
Add
--parallel
option to lint sources in parallel. This will speed up linting an entire classpath. #632, #972 -
Detect error when calling a local that's not a function. #948
(let [inc "foo"] (inc 1)) ^--- String cannot be called as a function
-
Support ignore hints #872:
(inc 1 2 3) ^--- clojure.core/inc is called with 3 args but expects 1 #_:clj-kondo/ignore (inc 1 2 3) ^--- arity warning ignored #_{:clj-kondo/ignore[:invalid-arity]} (do (inc 1 2 3)) ^--- only redundant do is reported, but invalid arity is ignored
Also see config.md.
-
Merge config from
$HOME/.config/clj-kondo
, respectingXDG_CONFIG_HOME
. See config.md for details. #992 -
New
:config-paths
option in<project>/.clj-kondo/config.edn
. This allows extra configuration directories to be merged in. See config.md for details. #992 -
Config tool that can spit out library specific configurations that can be added via
:config-paths
. Contributions for libraries are welcome. -
Experimental spec inspection tool that attempts to extract type information for linting. Also uses the new
:config-paths
feature. -
Allow pinned version in installation script #946 (@cldwalker)
- Fix docstring in Rum
defc
hook #960 - Format string checking improvements #942, #949
- False positive with
into
andtransducer
#952 - Alias usage not detected in keywords when in quoted form #981
- Fully qualified class name incorrectly assumed to be var #950
- Backup existing clj-kondo binary when installing #963 (@bfontaine)
- Various documentation fixes and improvements (@jeroenvandijk, @sittim, @sogaiu)
- Update to GraalVM 20.2.0 for
native-image
build @jaihindhreddy
Details about releases prior to v2020.09.09 can be found here.