elm-review/tests/NoNoOpMsg.elm
2020-08-09 18:56:12 +02:00

87 lines
2.0 KiB
Elm

module NoNoOpMsg exposing (rule)
{-|
@docs rule
-}
import Elm.Syntax.Declaration as Declaration exposing (Declaration)
import Elm.Syntax.Node as Node exposing (Node)
import Review.Rule as Rule exposing (Error, Rule)
{-| Reports NoOp messages
config =
[ NoNoOpMsg.rule
]
## Fail
type Msg
= NoOp
## Success
type Msg
= DomNodeWasFocused
## When (not) to enable this rule
This rule is not useful when you are working on a package, since you don't have an update function.
## Try it out
You can try this rule out by running the following command:
```bash
elm - review --template jfmengels/elm-review-noop/preview --rules NoNoOpMsg
```
-}
rule : Rule
rule =
Rule.newModuleRuleSchema "NoNoOpMsg" ()
|> Rule.withSimpleDeclarationVisitor declarationVisitor
|> Rule.fromModuleRuleSchema
declarationVisitor : Node Declaration -> List (Error {})
declarationVisitor node =
case Node.value node of
Declaration.CustomTypeDeclaration { constructors } ->
constructors
|> List.map
(\constructor ->
constructor
|> Node.value
|> .name
)
|> List.filter
(\constructorName ->
(Node.value constructorName == "NoOp")
|| (Node.value constructorName == "Noop")
)
|> List.map error
_ ->
[]
error : Node String -> Error {}
error node =
Rule.error
{ message = "Don't use NoOp, give it a better name"
, details =
[ "A Msg name should explain what happened. NoOp means tat nothing happened."
, "Even if you don't care about handling the event, give it a name that describes what happened."
, "@noahzgordon's talk on it: https://www.youtube.com/watch?v=w6OVDBqergc"
]
}
(Node.range node)