Skip to content

Commit

Permalink
Fix #1842: Add exclude to :used-underscored-binding (#1843)
Browse files Browse the repository at this point in the history
Co-authored-by: staifa <frantisek.stainer@flexiana.com>
Co-authored-by: Michiel Borkent <michielborkent@gmail.com>
  • Loading branch information
3 people committed Oct 21, 2022
1 parent 0c9c0cc commit 5859a8e
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ For a list of breaking changes, check [here](#breaking-changes).

## Unreleased

- [#1842](https://github.com/clj-kondo/clj-kondo/issues/1842): Add exclude to `:used-underscored-binding` ([@staifa](https://github.com/staifa))
- [#1840](https://github.com/clj-kondo/clj-kondo/issues/1840): Fix warning in `.cljs` and `.cljc` for `:aliased-namespace-symbol` in interop calls. ([@NoahTheDuke](https://github.com/NoahTheDuke))

## 2022.10.14
Expand Down
16 changes: 16 additions & 0 deletions doc/linters.md
Original file line number Diff line number Diff line change
Expand Up @@ -1181,6 +1181,22 @@ These warnings can be enabled by setting the level to `:warning` or
{:linters {:used-underscored-binding {:level :warning}}}
```

To suppress the above warning:

``` clojure
{:linters {:used-underscored-binding {:level :warning
:exclude [_x]}}}
```

A regex is also supported:

``` clojure
{:linters {:used-underscored-binding {:level :warning
:exclude ["^_x.*$"]}}}
```

This will exclude all bindings starting with `_x`.

### Unknown :require option

*Keyword:* `:unknown-require-option`
Expand Down
13 changes: 13 additions & 0 deletions src/clj_kondo/impl/config.clj
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,19 @@
(let [excluded (delayed-cfg config)]
(contains? excluded sym-ns)))))

(def used-underscored-binding-excluded?
(let [delayed-cfg (fn [config]
(let [excluded (get-in config [:linters :used-underscored-binding :exclude])
syms (set (filter symbol? excluded))
regexes (map re-pattern (filter string? excluded))]
{:syms syms :regexes regexes}))
delayed-cfg (memoize delayed-cfg)]
(fn [config binding-sym]
(let [{:keys [:syms :regexes]} (delayed-cfg config)]
(or (contains? syms binding-sym)
(let [binding-str (str binding-sym)]
(boolean (some #(re-find % binding-str) regexes))))))))

(defn ns-group* [config ns-name filename]
(or (some (fn [{:keys [pattern
filename-pattern
Expand Down
4 changes: 3 additions & 1 deletion src/clj_kondo/impl/linters.clj
Original file line number Diff line number Diff line change
Expand Up @@ -577,7 +577,9 @@
(remove :clj-kondo/mark-used)
(remove :clj-kondo.impl/generated)
(filter #(str/starts-with? (str (:name %)) "_")))
(:used-bindings ns))]
(:used-bindings ns))
:when (not (config/used-underscored-binding-excluded? (:config ctx)
(:name binding)))]
(findings/reg-finding!
ctx
{:type :used-underscored-binding
Expand Down
9 changes: 9 additions & 0 deletions test/clj_kondo/bindings_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,15 @@
:message "Used binding is marked as unused: _"})
(lint! "(let [_ 1] _)"
'{:linters {:used-underscored-binding {:level :warning}}}))
(assert-submaps
'({:file "<stdin>",
:row 1,
:col 7,
:level :warning,
:message "Used binding is marked as unused: _x"})
(lint! "(let [_x 0 {:keys [a _bar] :as _c} v] [a _bar _x _c])"
'{:linters {:used-underscored-binding {:level :warning
:exclude [_c "^_b.*$"]}}}))
(is (empty? (lint! "(let [_x 0 {:keys [a b] :as _c} v] [a b _x _c])"
'{:linters {:used-underscored-binding {:level :off}}})))
(is (empty? (lint! "(doto (Object.) (.method))"
Expand Down

0 comments on commit 5859a8e

Please sign in to comment.