jfmengels / elm-review-debug / NoDebug.TodoOrToString

rule : Review.Rule.Rule

Forbid the use of [Debug.todo] and [Debug.toString].

config =
    [ NoDebug.TodoOrToString.rule
    ]

The reason why there is a is separate rule for handling [Debug.log] and one for handling [Debug.todo] and [Debug.toString], is because these two functions are reasonable and useful to have in tests.

You can for instance create test data without having to handle the error case everywhere. If you do enter the error case in the following example, then tests will fail.

testEmail : Email
testEmail =
    case Email.fromString "some.email@domain.com" of
        Just email ->
            email

        Nothing ->
            Debug.todo "Supplied an invalid email in tests"

If you want to allow these functions in tests but not in production code, you can configure the rule like this.

import Review.Rule as Rule exposing (Rule)

config =
    [ NoDebug.TodoOrToString.rule
        |> Rule.ignoreErrorsForDirectories [ "tests/" ]
    ]

Fail

_ =
    if condition then
        a

    else
        Debug.todo ""

_ =
    Debug.toString data

Success

if condition then
    a

else
    b

Try it out

You can try this rule out by running the following command:

elm-review --template jfmengels/elm-review-debug/example --rules NoDebug.TodoOrToString