- Fixed "unnecessary atom quotes" compiler warning during analysis
- Switch
poisonforjason - Add command-line switch to load a custom configuration file (
--config-file) - Add a debug report in HTML format when running Credo using
--debug - Add
node_modules/to default file excludes - Add
:ignore_urlsparam for MaxLineLength - Report violation for
notas well as!in Refactor.NegatedConditionWithElse - Fix false positive on LargeNumbers
- Fix NegatedConditionWithElse for
not/2as well - Disable PreferUnquotedAtoms for Elixir >= 1.7.0
- Credo.Check.Refactor.MapInto
- Fix bug in Scope
- Fix false positive in MatchInConditionTest
- Fix false positive in UnusedEnumOperation
- Fix custom tasks by resolving config before validating it
- Add text support to
--min-priorityCLI switch (you can now set it to low/normal/high)
- Credo.Check.Readability.AliasOrder
- Add
:ignore_commentsparam to LongQuoteBlocks - Fix false positive in UnusedPathOperation
- Fix false positive in SpaceAroundOperators
- Fix false positive in UnusedEnumOperation
- Add JSON support
- Ensure compatibility with Elixir 1.6
- Format codebase using Elixir 1.6 Formatter
- Rework internals in preparation of 1.0 release
- Credo now requires Elixir 1.4
- Include
testdirectory in default config - Add
excluded_argument_typesto PipeChainStart - Emit warnings for non-existing checks, which are referenced in config
- Improve VariableNames
- ModuleDoc now raises an issue for empty strings in @moduledoc tags
- Fix bug on ModuleNames
- Fix false positive in VariableRebinding
- Fix false positive in SpaceAroundOperators
- Fix false positive on BoolOperationOnSameValues
- Fix false positive on SpaceAfterCommas
- Fix false positive on MaxLineLength
- Fix false positive in ParenthesesInCondition
- Remove
NameRedeclarationBy*checks - Remove support for @lint attributes
- Maintenance release
- Fix false positive in ParenthesesInCondition
- Fix Code.to_tokens/1 for Elixir 1.6
- Fix documentation for several checks
- Credo.Check.Warning.ExpensiveEmptyEnumCheck
- Fix false positive for
LargeNumbers - Fix
SpaceAroundOperatorsfor @type module attributes - Ignore def arguments and specs for
OperationOnSameValues - Fix crash in
ParenthesesOnZeroArityDefsfor variables nameddefp - Fix false positives for
TagHelper
- Fix false positive in
ModuleAttributeNames - Fix false positives in unused return checks
- Fix underlining in "list" action
- Fix CLI argument parsing for
mix credo.gen.check - Fix loading of custom checks
- Prevent error when run against empty umbrella projects
- Prevent output for tests
- Fix false positive in SpaceAfterCommas
- Fix false positive in SpaceAroundOperators
- Fix bug with extracting explain command args
- Allow anonymous functions to be piped as raw values
- Speed up scope counting in CLI summary
- Remove
CheckForUpdatesfor good - Fix
RaiseInsideRescuefor implicit try
- Do not run
CheckForUpdateson CI systems and in editor integrations
- Refactor all consistency checks, providing a nice speed improvement (thx @little-bobby-tables)
- Improve Elixir 1.5 compatibility
- Fix misleading issue message for
LongQuoteBlocks
- Load source files in parallel
- Improve high memory consumption
- Fix comment handling of Charlists, Sigils and Strings
LazyLoggingnow only checks fordebugcalls by default- Add
--mute-exit-statusCLI switch, which mutes Credo's exit status (this will be used for integration tests as it means that any non-zero exit status results from a runtime error of Credo) - Add default param values to
mix explainoutput TagTODOandTagFIXMEnow also report tags from doc-related module attributes (@doc,@moduledoc,@shortdoc)- Fix false positives for
TrailingWhiteSpace - Fix compiler warnings for
Sigils
These changes concern people writing their own checks for Credo.
Credo.SourceFilestruct was refactored:source,linesandastare now stored in ETS tables.Credo.Configstruct was replaced byCredo.Execution.run/3callbacks forCredo.Checkare nowrun/4callbacks as they have to receive the execution'sCredo.Executionstruct.
@lint attributes are deprecated and will be removed in Credo 0.9.0 because
they are causing a compiler warning in Elixir >= 1.4.
Users of Credo can now disable individual lines or files for all or just specific checks.
For now, config comments let you exclude individual files completely
# credo:disable-for-this-file
defmodule SomeApp.ThirdPartyCode do
end
or deactivate specific lines:
def my_fun do
# credo:disable-for-next-line
IO.inspect :this_is_actually_okay
end
or add the check module to exclude just that one check:
def my_fun do
# credo:disable-for-next-line Credo.Check.Warning.IoInspect
IO.inspect :this_is_actually_okay
end
or use a Regex to be more flexible which checks to exclude:
def my_fun do
# credo:disable-for-next-line /IoInspect/
IO.inspect :this_is_actually_okay
end
Here's a list with the syntax options:
# credo:disable-for-this-file- to disable for the entire file# credo:disable-for-next-line- to disable for the next line# credo:disable-for-previous-line- to disable for the previous line# credo:disable-for-lines:<count>- to disable for the given number of lines (negative for previous lines)
- Credo.Check.Refactor.LongQuoteBlocks
- Fix false positives in SpacesAroundOperators
- Fix
--allCLI switch - Always enforce
strictmode for<filename>:<line_no> - Improve docs on checks
- Disable
MultiAliasImportRequireUseby default
- Credo.Check.Consistency.MultiAliasImportRequireUse
- Fix filename annotation when using
--read-from-stdin - Fix filename handling on Windows
- Fix consistency checks triggered by contents of sigils
- Fix consistency checks triggered by contents of charlists
- Credo.Check.Warning.LazyLogging
- Fix
@lintattribute deprecation hint - Fix filename handling bug for Windows
- Fix flycheck formatting
- Add param to ignore strings/heredocs in
TrailingWhiteSpace
- Credo.Check.Readability.SpaceAfterCommas
- Fix
--config_nameCLI switch - Fix
UI.wrap_at/2for Unicode strings - Fix false positive for
ModuleNames
- Added deprecation hint about
@lintattributes - Fixed file inclusion/exclusion bug
- Fixed false positives in
SpaceAroundOperators - Deprecated
NameRedeclarationBy*checks - Fixed false positives in
PipeChainStart - Changed
AppendSingleItem's priority and make it opt-in - Renamed
NoParenthesesWhenZeroAritytoParenthesesOnZeroArityDefs - Fixed a bug in
ParenthesesOnZeroArityDefs
- Credo.Check.Warning.MapGetUnsafePass
- Credo.Check.Refactor.AppendSingleItem
- Credo.Check.Readability.Semicolons
Switched some checks to opt-in by default
- Credo.Check.Readability.Specs
- Credo.Check.Refactor.ABCSize
- Credo.Check.Refactor.VariableRebinding
- Credo.Check.Warning.MapGetUnsafePass
- Credo.Check.Warning.NameRedeclarationByAssignment
- Credo.Check.Warning.NameRedeclarationByCase
- Credo.Check.Warning.NameRedeclarationByDef
- Credo.Check.Warning.NameRedeclarationByFn
- Fixed false positives for
StringSigilsin heredocs - Fixed a bug in
SourceFile.column
- Do not warn about ParenthesesInCondition in one-line
ifcall - Add
--no-strictCLI switch - Fixed exit status for
mix credo list - Fixed exclusion of checks set to
lowpriority
- consistency/multi_alias_import_require_use
- readability/no_parentheses_when_zero_arity
- readability/redundant_blank_lines
- readability/single_pipe
- readability/specs
- readability/string_sigils
- refactor/double_boolean_negation
- refactor/variable_rebinding
- Fix crash in CheckForUpdates
- Add ability to specify
strictin.credo.exsconfig file - Add
no_case?to variable name checks - Add
Module.nameutility method - Fix bug in NameRedeclarationByDef
- Fix bug in LargeNumbers
- Use Hex.pm API to retrieve update information for Credo
- See below
- Fix compiler error due to usage of undocumented Hex APIs (sorry)
- Prevent crashing when parsing non-UTF-8 source files
- Fix yet another issue with finding sources
- Fix false positives for PipeChainStart
- Fix false positives for AbcSize
- Remove dead code
- Update deps
- Prevent ModuleDoc from checking nested modules for ignored modules
- Fix issue with ParenthesesInCondition
- Fix issue with PipChainStart
- Fix issue with reading from stdin
- Log errors to stderr
- Fix compatibility issues with Elixir < 1.2
- Fix yet another issue with finding sources
- Fix another issue with finding sources
- Fix issues with finding sources
- Don't enforce @moduledoc requirement for Mixfile or Test modules
- Add
exclude_functionsoption toPipeChainStart - No longer report issues in case of ambiguous aliases in
AliasUsage - Fix false positives for
LargeNumbersin Elixir>= 1.3.2(again) - Lots of refactorings
- Ignore module attributes like
@specinAliasUsage - Improve source file loading
- Add
ignore_specsoption toMaxLineLength - Fix false positives for
LargeNumbersin Elixir>= 1.3.2 - Fix compiler warnings in preparation for Elixir v1.4
- Warnings about redeclaring names of Kernel or local functions now only consider function of arity zero.
- Warnings for operations with constant result now ignore division by 1
- Better explanation how to configure checks in
explainoutput
- New check: readability/parentheses_in_condition
- Fix compatibility issues in
Credo.CLI.Command.GenCheckfor Elixir < 1.2
- Fix outdated comments regarding .credo.exs in README
- Fix name generator including "Lib." prefix for custom checks
- Maintenance release because I apparently don't understand how merging works 😓
-
Adds support for custom checks in your projects.
Using two new mix commands
mix credo.gen.configandmix credo.gen.checkyou can generate the boilerplate to include custom checks in your projects.
- Prior to
v0.4.0,.credo.exscontained the full list of checks specific to your project - Starting with
v0.4.0the check list incredo.exswill be merged with the standard check list, with your definitions overwriting the defaults - PRO: you can customize individual tasks to your liking and still benefit from additional standard checks with each new release
- CON: this means checks have to be disabled explicitly in
.credo.exs
- readability/large_numbers
- warning/bool_operation_on_same_values
- warning/unused_file_operation
- warning/unused_path_operation
- warning/unused_regex_operation
- Ready for Elixir 1.3
- Checks for new Credo versions automatically, like Hex does (can be disabled)
- Umbrella apps work out of the box now
- DuplicatedCode can now ignore macro calls
- ModuleDoc now ignores modules declaring exceptions
- ModuleDoc now allows modules to be ignored based on their name
- MatchInCondition now allows "simple" wildcard assignments in conditionals
- Checks analysing all files in the codebase sequentially (consistency checks) are now run in parallel
- If
--onlyis given, all issues are shown (mix credo --only MaxLineLengthpreviously yielded no results, since all issues needed--strictto actually be displayed)
- Fix false positives for
NameRedeclarationByDef. - Fix false positives for
UnusedEnumOperation.
- Fix false positives for
SpaceInParentheses. - Fix false positive for
SpaceAroundOperators.
- Fix a bug with checks on function names when declaring a variable with the name
def,defpordefmacro.
- Fix a bug resulting in
UnicodeConversionErrorfor code containing UTF-8 comments.
- Fix a bug in
AliasUsage.
- Fix false positives for
AliasUsage.
- Fix false positive for
SpaceAroundOperators.
- Fix false positives for
SpaceAroundOperatorsandPipeChainStart. - Add option to read from STDIN for better editor integration
- Remove superfluous call to
IO.inspect. - Update deps requirements to make HexFaktor happy.
- Fix false positives for
SpaceAroundOperatorsin binary pattern matches. - Fix a bug when supplying a single file via the CLI.
- Fix false positives for
SpaceAroundOperatorsandSpaceInParentheses.
mix do credo, <something-else>was broken and never ran<something-else>, even ifcredosucceeded (exited with exit status 0). Now it runs<something-else>as long ascredosucceeds.
- Fix compiler warnings
- Improve copywriting for consistency checks (thx @vdaniuk)
-
Adds support for
@lintattributes used to configure linting for specific functions.For now, this lets you exclude functions completely
@lint false def my_fun do endor deactivate specific checks with the same syntax used in the config file:
@lint {Credo.Check.Design.TagTODO, false} def my_fun do endor use a Regex instead of the check module to exclude multiple checks at once:
@lint {~r/Refactor/, false} def my_fun do endFinally, you can supply multiple tuples as a list and combine the above:
@lint [{Credo.Check.Design.TagTODO, false}, {~r/Refactor/, false}] def my_fun do end
- consistency/space_around_operators
- consistency/space_in_parentheses
- Add
--formatCLI switch - Include experimental Flycheck support via
--format=flycheck - Deprecate
--one-lineCLI switch, use--format=onelineinstead - Add convenience alias
--ignorefor--ignore-checks - Fix colors for terminals with light backgrounds (thx @lucasmazza)
- Fix false positives for UnusedEnumOperation checks (thx @kbaird)
- Fix error occuring when a project has exactly one
defexceptionmodule - Change the tag for Refactoring Opportunities from "[R]" to "[F]" (thx @rranelli)
- Remove unused alias to avoid warning during compilation
- Improves docs and UI wording (thx @crack and @jessejanderson)
- Adds a missing word to the output of the
categoriescommand (thx @bakkdoor)
- Fixes a problem with CaseTrivialMatches crashing
Credo now fails with an exit status != 0 if it shows any issues. This will enable usage of Credo inside CI systems/build chains.
The exit status of each check is customizable and exit statuses of all encountered checks are collected, uniqued and summed:
issues
|> Enum.map(&(&1.exit_status))
|> Enum.uniq
|> Enum.reduce(0, &(&1+&2))
This way you can reason about the encountered issues right from the exit status.
Default values for the checks are based on their category:
consistency: 1
design: 2
readability: 4
refactor: 8
warning: 16
So an exit status of 12 tells you that you have only Readability Issues and Refactoring Opportunities, but e.g. no Warnings.
- readability/module_doc
- refactor/case_trivial_matches
- refactor/cond_statements
- refactor/function_arity
- refactor/match_in_condition
- refactor/pipe_chain_start
- warning/operation_with_constant_result
- warning/unused_enum_operation
- warning/unused_keyword_operation
- warning/unused_list_operation
- warning/unused_tuple_operation
- There are two new aliases for command line switches:
- you can use
--onlyas alias for--checks - you can use
--strictas alias for--all-priorities
- you can use
mix credo --only <checkname>will always display a full list of results (you no longer need to specify--allseparately)mix credo explain <file:line_number>now also explains the available configuration parameters for the issue/check- The ExceptionNames check no longer fails if only a single exception module is found (#22).
- Apply many fixes in anticipation of Elixir v1.2 (thx @c-rack)
- Improve docs
- Wrap long issue descriptions in
suggestcommand
- Add missing
-Aalias for--all-priorities - Improve wording in the CLI a bit
- Add
apps/to default directories
- Bugfix to
NameRedeclarationBy\*checks Sources.excludehad a bug when excluding directories
- Rename CLI switch
--pedanticto--all-priorities(alias is-A) - Fix a bug in SourceFile.column (#7)
- Improve README section about basic usage, commands and issues
Multiple Hex releases due to the fact that I apparently don't understand how deps compilation works 😓
Initial release