Credo v1.4.0 Credo.Check.Design.DuplicatedCode View Source
This check has a base priority of higher
and works with any version of Elixir.
Explanation
Code should not be copy-pasted in a codebase when there is room to abstract the copied functionality in a meaningful way.
That said, you should by no means "ABSTRACT ALL THE THINGS!".
Sometimes it can serve a purpose to have code be explicit in two places, even
if it means the snippets are nearly identical. A good example for this are
Database Adapters in a project like Ecto, where you might have nearly
identical functions for things like order_by
or limit
in both the
Postgres and MySQL adapters.
In this case, introducing an AbstractAdapter
just to avoid code duplication
might cause more trouble down the line than having a bit of duplicated code.
Like all Software Design
issues, this is just advice and might not be
applicable to your project/situation.
Configuration parameters
Use the following parameters to configure this check:
mass_threshold
: The minimum mass which a part of code has to have to qualify for this check.Defaults to
40
nodes_threshold
: The number of nodes that need to be found to raise an issue.Defaults to
2
excluded_macros
: List of macros to be excluded for this check.Defaults to
[]
Parameters can be configured via the .credo.exs
config file.
Link to this section Summary
Functions
Calculates hash values for all sub nodes in a given +ast+.
Returns the mass (count of instructions) for an AST.
Takes a map of hashes to nodes and prunes those nodes that are just subnodes of others in the same set.
Returns a hash-value for a given +ast+.
Link to this section Functions
calculate_hashes(ast, existing_hashes \\ %{}, filename \\ "foo.ex", mass_threshold \\ param_defaults()[:mass_threshold])
View SourceCalculates hash values for all sub nodes in a given +ast+.
Returns a map with the hashes as keys and the nodes as values.
Returns the mass (count of instructions) for an AST.
prune_hashes(given_hashes, mass_threshold \\ param_defaults()[:mass_threshold])
View SourceTakes a map of hashes to nodes and prunes those nodes that are just subnodes of others in the same set.
Returns the resulting map.
Returns a hash-value for a given +ast+.