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
end2. 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
endUsing 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 ~/binAs 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},