From fd0674be552b9bb5be5cc32f10d9d11f4b5ea882 Mon Sep 17 00:00:00 2001 From: ikappaki Date: Fri, 29 Dec 2023 12:01:11 +0000 Subject: [PATCH] Do not warn on unused bindings whose names begin with _ --- CHANGELOG.md | 1 + src/basilisp/contrib/bencode.lpy | 6 +++--- src/basilisp/contrib/nrepl_server.lpy | 4 ++-- src/basilisp/io.lpy | 3 +-- src/basilisp/lang/compiler/analyzer.py | 2 ++ tests/basilisp/compiler_test.py | 6 ++++++ 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15c35bdb2..208017945 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed * Basilisp now supports PyTest 7.0+ (#660) + * Do not warn on unused bindings when their name begins with `_` (#756). ### Fixed * Fix issue with `case` evaluating all of its clauses expressions (#699) diff --git a/src/basilisp/contrib/bencode.lpy b/src/basilisp/contrib/bencode.lpy index 998b5fa78..b1f63bae4 100644 --- a/src/basilisp/contrib/bencode.lpy +++ b/src/basilisp/contrib/bencode.lpy @@ -15,7 +15,7 @@ (extend-protocol BEncodeable nil - (to-bencode-encodeable* [this] + (to-bencode-encodeable* [_this] #b "0:") python/bytes (to-bencode-encodeable* [this] @@ -193,7 +193,7 @@ be specified if ``:keywordize-keys`` is also specified :keyword ``:string-fn``: a function which will be called for each byte string which is not a map key; default is :lpy:fn:`basilisp.core/identity`" - [data {:keys [keywordize-keys key-fn string-fn] :as opts}] + [data {:keys [keywordize-keys key-fn] :as opts}] (when (and keywordize-keys key-fn) (throw (ex-info "Can only specify either :keywordize-keys or :key-fn; not both" {:keywordize-keys keywordize-keys @@ -203,7 +203,7 @@ (assoc :key-fn #(keyword (.decode % "utf-8")))))] (try (decode* data opts) - (catch python/Exception e + (catch python/Exception _e [nil data])))) (defn decode-all diff --git a/src/basilisp/contrib/nrepl_server.lpy b/src/basilisp/contrib/nrepl_server.lpy index 88d1035a9..a583cfffb 100644 --- a/src/basilisp/contrib/nrepl_server.lpy +++ b/src/basilisp/contrib/nrepl_server.lpy @@ -83,7 +83,7 @@ (defn- send-value [request send-fn v] (let [{:keys [client*]} request - {:keys [*2 *3 *e]} @client* + {:keys [*1 *2]} @client* [v opts] v ns (:ns opts)] (swap! client* assoc :*1 v :*2 *1 :*3 *2) @@ -337,7 +337,7 @@ (warn "Unhandled operation" op) (send-fn request {"status" ["error" "unknown-op" "done"]})))) -(defn- make-request-handler [opts] +(defn- make-request-handler [_opts] (-> handle-request coerce-request-mw log-request-mw)) diff --git a/src/basilisp/io.lpy b/src/basilisp/io.lpy index d9aa8f354..614b5d77c 100644 --- a/src/basilisp/io.lpy +++ b/src/basilisp/io.lpy @@ -78,8 +78,7 @@ (defn- clean-writer-mode [opts] - (let [append? (:append opts) - mode (:mode opts "") + (let [mode (:mode opts "") clean-mode (cond (:append opts) (str "a" mode) (not (str/includes? mode "w")) (str "w" mode) diff --git a/src/basilisp/lang/compiler/analyzer.py b/src/basilisp/lang/compiler/analyzer.py index 9a581e668..551c9e689 100644 --- a/src/basilisp/lang/compiler/analyzer.py +++ b/src/basilisp/lang/compiler/analyzer.py @@ -251,6 +251,8 @@ def _warn_unused_names(self): ), "Only warn when logger is configured for WARNING level" ns = runtime.get_current_ns() for _, entry in self._table.items(): + if entry.symbol.name.startswith("_"): + continue if entry.symbol in _NO_WARN_UNUSED_SYMS: continue if entry.warn_if_unused and not entry.used: diff --git a/tests/basilisp/compiler_test.py b/tests/basilisp/compiler_test.py index 4e7e8e869..4965de7bb 100644 --- a/tests/basilisp/compiler_test.py +++ b/tests/basilisp/compiler_test.py @@ -2177,6 +2177,12 @@ def test_single_arity_fn_log_if_warning_enabled( f"symbol 'v' defined but not used ({ns}: 1)", ) in caplog.record_tuples + def test_single_arity_fn_underscore_log_if_warning_enabled( + self, lcompile: CompileFn, ns: runtime.Namespace, caplog + ): + lcompile("(fn [_v] (fn [v] v))", opts={compiler.WARN_ON_UNUSED_NAMES: True}) + assert_no_logs(caplog) + def test_multi_arity_fn_log_if_warning_enabled( self, lcompile: CompileFn, ns: runtime.Namespace, caplog ):