Add empty-do hint

This commit is contained in:
Rudolf Adamkovič 2025-08-10 02:00:16 +02:00 committed by Phil Hagelberg
parent bd81685887
commit fe3fd3340d
2 changed files with 39 additions and 0 deletions

View File

@ -277,6 +277,33 @@ You can read more about how to add lints in docs/linting.md"
:changes [{:range (message.ast->range server file ast)
:newText (view (. ast 2))}]}}))})
(add-lint :empty-do
{:what-it-does
"Warns about `do` with no body."
:why-care?
"Using `do` with no body has no effect."
:example
"```fnl
(do)
```
Instead, use:
```fnl
;; nothing
```"
:since "0.2.2-dev"
:type :special-call
:impl (fn [server file ast]
(case ast
(where [do* & body]
(sym? do* :do)
(not (next body)))
{: ast
:message "remove do with no body"
:fix #{:title "Remove (do)"
:changes [{:range (message.ast->range server file ast)
:newText ""}]}}))})
(add-lint :redundant-do
{:what-it-does
"Identifies redundant `do` blocks within implicit do forms like `fn`, `let`, etc."

View File

@ -222,6 +222,17 @@
:end {:character 8 :line 0}}}])
nil)
(fn test-empty-do []
;; good do
(assert-ok "(do (print 1) 2)")
;; unnecessary one
(check "(do (do) 1 2)"
[{:code :empty-do
:message "remove do with no body"
:range {:start {:character 4 :line 0}
:end {:character 8 :line 0}}}])
nil)
(fn test-redundant-do []
;; good do
(assert-ok "(case 134 x (do (print :x x) 11))")
@ -403,6 +414,7 @@
: test-unnecessary-method
: test-unnecessary-tset
: test-unnecessary-unary
: test-empty-do
: test-redundant-do
: test-unset-var
: test-match-should-case