antedeguemon_checks

This is a collection of my personal (and highly experimental) Credo checks.

I use them when reviewing pull requests and to automate checking this check list items.

Included checks

1. Consistency.ValidateDescribesArity

Checks if the test suite is using the describe/act spec from betterspecs.

Example:

defmodule ModuleTest do
# ...
describe "perform/1" do
# this is fine
test "is consistent" do
Module.perform(1)
end
# this is going to raise a warning
test "does not call perform/1" do
Module.perform(1, 2, 3)
end
end
end

2. Warning.RedundantDelegateAlias

Checks if a defdelegate has a redundant as option.

Example:

# this is fine
defdelegate perform(id), to: Module
# this is fine
defdelegate perform(id), to: Module, as: :perform_2
# this is going to raise a warning
defdelegate perform(id), to: Module, as: :perform

3. Warning.RejectTags

Checks if a module has a @tag, @moduletag or @describetag, that are common left-over code.

4. Warning.UnspecifiedAsyncnessTestCase

Checks if a test module has a (.*)Case import that does not explicitly defines its asyncness option.

defmodule ModuleTest do
# this is fine
use OtherModule
# this is fine
use ExUnit.Case, async: false
# this is fine
use ExUnit.Case, async: true
# this is going to raise a warning
use ExUnit.Case
# this is going to raise a warning
use MyProject.DataCase
end

Using antedeguemon_checks

As a script

This is useful because you don't need to install those checks (or even Credo) in the project.

mix escript.build
mv antedeguemon_checks ~/bin

As a library

Add antedeguemon_checks to your mix.exs:

{:antedeguemon_checks, "~> 0.1"}

And use the custom checks in your .credo.exs file:

{AntedeguemonChecks.Check.Warning.RejectTags},
{AntedeguemonChecks.Check.Warning.RedundantDelegateAlias},
{AntedeguemonChecks.Check.Warning.UnspecifiedAsyncTestCase, [excluded: ["Credo.Test.Case"]]},
{AntedeguemonChecks.Check.Consistency.ValidateDescribesArity},