Skip to content

Latest commit

 

History

History
788 lines (625 loc) · 57.2 KB

CHANGELOG.md

File metadata and controls

788 lines (625 loc) · 57.2 KB

Change log

master (unreleased)

New features

  • New cop GuardClause checks for conditionals that can be replaced by guard clauses. (@bbatsov)
  • New cop EmptyInterpolation checks for empty interpolation in double-quoted strings. (@bbatsov)
  • #899: Make LineEndConcatenation cop << aware. (@mockdeep)

Bugs fixed

  • #904: Fixed a NPE in LiteralInInterpolation. (@bbatsov)
  • #904: Fixed a NPE in StringConversionInInterpolation. (@bbatsov)
  • #892: Make sure Include and Exclude paths in a .rubocop.yml are interpreted as relative to the directory of that file. (@jonas054)
  • #906: Fixed a false positive in LiteralInInterpolation. (@bbatsov)

0.19.1 (17/03/2014)

Bugs fixed

  • #884: Fix --auto-gen-config for NumericLiterals so MinDigits is correct. (@tmorris-fiksu)
  • #879: Fix --auto-gen-config for RegexpLiteral so we don't generate illegal values for MaxSlashes. (@jonas054)
  • Fix the name of the Include param in the default config of the Rails cops. (@bbatsov)
  • #878: Blacklist Rakefile, Gemfile and Capfile by default in the FileName cop. (@bbatsov)
  • #875: Handle separator style hashes in IndentHash. (@jonas054)
  • Fix a bug where multiple cli options that result in exit can be specified at once (e.g. -vV, -v --show-cops). (@jkogara)
  • #889: Fix a false positive for LiteralInCondition when the condition is non-primitive array. (@bbatsov)

0.19.0 (13/03/2014)

New features

  • New cop FileName makes sure that source files have snake_case names. (@bbatsov)
  • New cop DeprecatedClassMethods checks for deprecated class methods. (@bbatsov)
  • New cop StringConversionInInterpolation checks for redundant Object#to_s in string interpolation. (@bbatsov)
  • New cop LiteralInInterpolation checks for interpolated string literals. (@bbatsov)
  • New cop SelfAssignment checks for places where the self-assignment shorthand should have been used. (@bbatsov)
  • New cop DoubleNegation checks for uses of !!. (@bbatsov)
  • New cop PercentLiteralDelimiters enforces consistent usage of %-literal delimiters. (@hannestyden)
  • New Rails cop ActionFilter enforces the use of _filter or _action action filter methods. (@bbatsov)
  • New Rails cop ScopeArgs makes sure you invoke the scope method properly. (@bbatsov)
  • Add with_fixed_indentation style to AlignParameters cop. (@hannestyden)
  • Add IgnoreLastArgumentHash option to AlignHash cop. (@hannestyden)
  • #743: SingleLineMethods cop does auto-correction. (@jonas054)
  • #743: Semicolon cop does auto-correction. (@jonas054)
  • #743: EmptyLineBetweenDefs cop does auto-correction. (@jonas054)
  • #743: IndentationWidth cop does auto-correction. (@jonas054)
  • #743: IndentationConsistency cop does auto-correction. (@jonas054)
  • #809: New formatter fuubar displays a progress bar and shows details of offenses as soon as they are detected. (@yujinakayama)
  • #797: New cop IndentHash checks the indentation of the first key in multi-line hash literals. (@jonas054)
  • #797: New cop IndentArray checks the indentation of the first element in multi-line array literals. (@jonas054)
  • #806: Now excludes files in vendor/** by default. (@jeremyolliver)
  • #795: IfUnlessModifier and WhileUntilModifier supports MaxLineLength, which is independent of LineLength parameter Max. (@agrimm)
  • #868: New cop ClassAndModuleChildren checks the style of children definitions at classes and modules: nested / compact. (@geniou)

Changes

  • #793: Add printing total count when rubocop --format offences. (@ma2gedev)
  • Remove Ignore param from the Rails Output cop. The standard Exclude/Include should be used instead. (@bbatsov)
  • Renamed FavorSprintf to FormatString and made it configurable. (@bbatsov)
  • Renamed Offence to Offense. (@bbatsov)
  • Use offense in all messages instead of offence. (@bbatsov)
  • For indentation of if/unless/while/until bodies when the result is assigned to a variable, instead of supporting two styles simultaneously, IndentationWidth now supports one style of indentation at a time, specified by EndAlignment/AlignWith. (@jonas054)
  • Renamed Style param of DotPosition cop to EnforcedStyle. (@bbatsov)
  • Add length value to locations of offense in JSON formatter. (@yujinakayama)
  • SpaceAroundBlockBraces cop replaced by SpaceBeforeBlockBraces and SpaceInsideBlockBraces. (@jonas054)
  • SpaceAroundEqualsInParameterDefault cop is now configurable with the EnforcedStyle option. (@jonas054)

Bugs fixed

  • #790: Fix auto-correction interference problem between MethodDefParentheses and other cops. (@jonas054)
  • #794: Fix handling of modifier keywords with required parentheses in ParenthesesAroundCondition. (@bbatsov)
  • #804: Fix a false positive with operator assignments in a loop (including begin..rescue..end with retry) in UselessAssignment. (@yujinakayama)
  • #815: Fix a false positive for heredocs with blank lines in them in EmptyLines. (@bbatsov)
  • Auto-correction is now more robust and less likely to die because of RangeError or "clobbering". (@jonas054)
  • Offenses always reported in order of position in file, also during --auto-correct runs. (@jonas054)
  • Fix problem with [Corrected] tag sometimes missing in output from --auto-correct runs. (@jonas054)
  • Fix message from EndAlignment cop when AlignWith is keyword. (@jonas054)
  • Handle case conditions in LiteralInCondition. (@bbatsov)
  • #822: Fix a false positive in DotPosition when enforced style is set to trailing. (@bbatsov)
  • Handle properly dynamic strings in LineEndConcatenation. (@bbatsov)
  • #832: Fix auto-correction interference problem between BracesAroundHashParameters and SpaceInsideHashLiteralBraces. (@jonas054)
  • Fix bug in auto-correction of alignment so that only space can be removed. (@jonas054)
  • Fix bug in IndentationWidth auto-correction so it doesn't correct things that IndentationConsistency should correct. (@jonas054)
  • #847: Fix bug in RegexpLiteral concerning --auto-gen-config. (@jonas054)
  • #848: Fix bug in --show-cops that made it print the default configuration rather than the current configuration. (@jonas054)
  • #862: Fix a bug where single line rubocop:disable comments with indentations were treated as multiline cop disabling comments. (@yujinakayama)
  • Fix a bug where rubocop:disable comments with a cop name including all (e.g. MethodCallParentheses) were disabling all cops. (@yujinakayama)
  • Fix a bug where string and regexp literals including # rubocop:disable were confused with real comments. (@yujinakayama)
  • #877: Fix bug in PercentLiteralDelimiters concerning auto-correct of regular expressions with interpolation. (@hannestyden)

0.18.1 (02/02/2014)

Bugs fixed

  • Remove double reporting in EmptyLinesAroundBody of empty line inside otherwise empty class/module/method that caused crash in autocorrect. (@jonas054)
  • #779: Fix a false positive in LineEndConcatenation. (@bbatsov)
  • #751: Fix Documentation cop so that a comment followed by an empty line and then a class definition is not considered to be class documentation. (@jonas054)
  • #783: Fix a false positive in ParenthesesAroundCondition when the parentheses are actually required. (@bbatsov)
  • #781: Fix problem with back-and-forth auto-correction in AccessModifierIndentation. (@jonas054)
  • #785: Fix false positive on %w arrays in TrailingComma. (@jonas054)
  • #782: Fix false positive in AlignHash for single line hashes. (@jonas054)

0.18.0 (30/01/2014)

New features

  • #714: New cop RequireParentheses checks for method calls without parentheses together with a boolean operator indicating that a mistake about precedence may have been made. (@jonas054)
  • #743: WordArray cop does auto-correction. (@jonas054)
  • #743: Proc cop does auto-correction. (@bbatsov)
  • #743: AccessModifierIndentation cop does auto-correction. (@jonas054)
  • #768: Rake task now supports requires and options. (@nevir)
  • #759: New cop EndLineConcatenation checks for string literal concatenation with + at line end. (@bbatsov)

Changes

Bugs fixed

0.17.0 (25/01/2014)

New features

  • New cop ConditionPosition checks for misplaced conditions in expressions like if/unless/when/until. (@bbatsov)
  • New cop ElseLayout checks for odd arrangement of code in the else branch of a conditional expression. (@bbatsov)
  • #694: Support Ruby 1.9.2 until June 2014. (@yujinakayama)
  • #702: Improve rubocop-todo.yml with comments about offence count, configuration parameters, and auto-correction support. (@jonas054)
  • Add new command-line flag -D/--display-cop-names to trigger the display of cop names in offence messages. (@bbatsov)
  • #733: NumericLiterals cop does auto-correction. (@dblock)
  • #713: New cop TrailingComma checks for comma after the last item in a hash, array, or method call parameter list. (@jonas054)

Changes

  • #581: Extracted a new cop AmbiguousOperator from Syntax cop. It checks for ambiguous operators in the first argument of a method invocation without parentheses. (@yujinakayama)
  • Extracted a new cop AmbiguousRegexpLiteral from Syntax cop. It checks for ambiguous regexp literals in the first argument of a method invocation without parentheses. (@yujinakayama)
  • Extracted a new cop UselessElseWithoutRescue from Syntax cop. It checks for useless else in begin..end without rescue. (@yujinakayama)
  • Extracted a new cop InvalidCharacterLiteral from Syntax cop. It checks for invalid character literals with a non-escaped whitespace character (e.g. ? ). (@yujinakayama)
  • Removed Syntax cop from the configuration. It no longer can be disabled and it reports only invalid syntax offences. (@yujinakayama)
  • #688: Output from rubocop --show-cops now looks like a YAML configuration file. The --show-cops option takes a comma separated list of cops as optional argument. (@jonas054)
  • New cop IndentationConsistency extracted from IndentationWidth, which has checked two kinds of offences until now. (@jonas054)

Bugs fixed

  • #698: Support Windows paths on command-line. (@rifraf)
  • #498: Disable terminal ANSI escape sequences when a formatter's output is not a TTY. (@yujinakayama)
  • #703: BracesAroundHashParameters auto-correction broken with trailing comma. (@jonas054)
  • #709: When EndAlignment has configuration AlignWith: variable, it now handles @@a = if ... and a, b = if .... (@jonas054)
  • SpaceAroundOperators now reports an offence for @@a=0. (@jonas054)
  • #707: Fix error on operator assignments in top level scope in UselessAssignment. (@yujinakayama)
  • Fix a bug where some offences were discarded when any cop that has specific target file path (by Include or Exclude under each cop configuration) had run. (@yujinakayama)
  • #724: Accept colons denoting required keyword argument (a new feature in Ruby 2.1) without trailing space in SpaceAfterColon. (@jonas054)
  • The --no-color option works again. (@jonas054)
  • #716: Fixed a regression in the auto-correction logic of MethodDefParentheses. (@bbatsov)
  • Inspected projects that lack a .rubocop.yml file, and therefore get their configuration from RuboCop's config/default.yml, no longer get configuration from RuboCop's .rubocop.yml and rubocop-todo.yml. (@jonas054)
  • #730: EndAlignment now handles for example private def some_method, which is allowed in Ruby 2.1. It requires end to be aligned with private, not def, in such cases. (@jonas054)
  • #744: Any new offences created by --auto-correct are now handled immediately and corrected when possible, so running --auto-correct once is enough. (@jonas054)
  • #748: Auto-correction conflict between EmptyLinesAroundBody and TrailingWhitespace resolved. (@jonas054)
  • ParenthesesAroundCondition no longer crashes on parentheses around the condition in a ternary if. (@jonas054)
  • #738: Fix a false positive in StringLiterals. (@bbatsov)

0.16.0 (25/12/2013)

New features

  • #612: BracesAroundHashParameters cop does auto-correction. (@dblock)
  • #614: ParenthesesAroundCondition cop does auto-correction. (@dblock)
  • #624: EmptyLines cop does auto-correction. (@dblock)
  • New Rails cop DefaultScope ensures default_scope is called properly with a block argument. (@bbatsov)
  • All cops now support the Include param, which specifies the files on which they should operate. (@bbatsov)
  • All cops now support the Exclude param, which specifies the files on which they should not operate. (@bbatsov)
  • #631: IndentationWidth cop now detects inconsistent indentation between lines that should have the same indentation. (@jonas054)
  • #649: EmptyLinesAroundBody cop does auto-correction. (@dblock)
  • #657: Alias cop does auto-correction. (@dblock)
  • Rake task now support setting formatters. (@pmenglund)
  • #653: CaseIndentation cop is now configurable with parameters IndentWhenRelativeTo and IndentOneStep. (@jonas054)
  • #654: For cop is now configurable to enforce either each (default) or for. (@jonas054)
  • #661: EndAlignment cop is now configurable for alignment with keyword (default) or variable. (@jonas054)
  • Allow to overwrite the severity of a cop with the new Severity param. (@codez)
  • New cop FlipFlop checks for flip flops. (@agrimm)
  • #577: Introduced MethodDefParentheses to allow for for requiring either parentheses or no parentheses in method definitions. Replaces DefWithoutParentheses. (@skanev)
  • #693: Generation of parameter values (i.e., not only Enabled: false) in rubocop-todo.yml by the --auto-gen-config option is now supported for some cops. (@jonas054)
  • New cop AccessorMethodName checks accessor method names for non-idiomatic names like get_attribute and set_attribute. (@bbatsov)
  • New cop PredicateName checks the names of predicate methods for non-idiomatic names like is_something, has_something, etc. (@bbatsov)
  • Support Ruby 2.1 with Parser 2.1. (@yujinakayama)

Changes

  • Removed SymbolNames as it was generating way too many false positives. (@bbatsov)
  • Renamed ReduceArguments to SingleLineBlockParams and made it configurable. (@bbatsov)

Bugs fixed

  • Handle properly heredocs in StringLiterals cop. (@bbatsov)
  • Fix SpaceAroundOperators to not report missing space around operator for def self.method *args. (@jonas054)
  • Properly handle ['AllCops']['Includes'] and ['AllCops']['Excludes'] when passing config via -c. (@fancyremarker, @codez)
  • #611: Fix crash when loading an empty config file. (@sinisterchipmunk)
  • Fix DotPosition cop with trailing style for method calls on same line. (@vonTronje)
  • #627: Fix counting of slashes in complicated regexps in RegexpLiteral cop. (@jonas054)
  • #638: Fix bug in auto-correct that changes each{ |x| to each d o |x|. (@jonas054)
  • #418: Stop searching for configuration files above the work directory of the isolated environment when running specs. (@jonas054)
  • Fix error on implicit match conditionals (e.g. if /pattern/; end) in MultilineIfThen. (@agrimm)
  • #651: Handle properly method arguments in RedundantSelf. (@bbatsov)
  • #628: Allow self.Foo in RedundantSelf cop. (@chulkilee)
  • #668: Fix crash in EndOfLine that occurs when default encoding is US_ASCII and an inspected file has non-ascii characters. (@jonas054)
  • #664: Accept oneline while when condition has local variable assignment. (@emou)
  • Fix auto-correct for MethodDefParentheses when parentheses are required. (@skanev)

0.15.0 (06/11/2013)

New features

  • New cop Output checks for calls to print, puts, etc. in Rails. (@daviddavis)
  • New cop EmptyLinesAroundBody checks for empty lines around the bodies of class, method and module definitions. (@bbatsov)
  • LeadingCommentSpace cop does auto-correction. (@jonas054)
  • SpaceAfterControlKeyword cop does auto-correction. (@jonas054)
  • SpaceAfterColon cop does auto-correction. (@jonas054)
  • SpaceAfterComma cop does auto-correction. (@jonas054)
  • SpaceAfterSemicolon cop does auto-correction. (@jonas054)
  • SpaceAfterMethodName cop does auto-correction. (@jonas054)
  • SpaceAroundBlockBraces cop does auto-correction. (@jonas054)
  • SpaceAroundEqualsInParameterDefault cop does auto-correction. (@jonas054)
  • SpaceAroundOperators cop does auto-correction. (@jonas054)
  • SpaceBeforeModifierKeyword cop does auto-correction. (@jonas054)
  • SpaceInsideHashLiteralBraces cop does auto-correction. (@jonas054)
  • SpaceInsideBrackets cop does auto-correction. (@jonas054)
  • SpaceInsideParens cop does auto-correction. (@jonas054)
  • TrailingWhitespace cop does auto-correction. (@jonas054)
  • TrailingBlankLines cop does auto-correction. (@jonas054)
  • FinalNewline cop does auto-correction. (@jonas054)
  • New cop CyclomaticComplexity checks the cyclomatic complexity of methods against a configurable max value. (@jonas054)
  • #594: New parameter EnforcedStyleForEmptyBraces with values space and no_space (default) added to SpaceAroundBlockBraces. (@jonas054)
  • #603: New parameter MinSize added to WordArray to allow small string arrays, retaining the default (0). (@claco)

Changes

  • #557: Configuration files for excluded files are no longer loaded. (@jonas054)
  • #571: The default rake task now runs RuboCop over itself! (@nevir)
  • Encoding errors are reported as fatal offences rather than printed with red text. (@jonas054)
  • AccessControl cop is now configurable with the EnforcedStyle option. (@sds)
  • Split AccessControl cop to AccessModifierIndentation and EmptyLinesAroundAccessModifier. (@bbatsov)
  • #594: Add configuration parameter EnforcedStyleForEmptyBraces to SpaceInsideHashLiteralBraces cop, and change EnforcedStyleIsWithSpaces (values true, false) to EnforcedStyle (values space, no_space). (@jonas054)
  • Coverage builds linked from the README page are enabled again. (@jonas054)

Bugs fixed

  • #561: Handle properly negative literals in NumericLiterals cop. (@bbatsov)
  • #567: Register an offence when the last hash parameter has braces in BracesAroundHashParameters cop. (@dblock)
  • StringLiterals cop no longer reports errors for character literals such as ?/. That should be done only by the CharacterLiterals cop. (@jonas054)
  • Made auto-correct much less likely to crash due to conflicting corrections ("clobbering"). (@jonas054)
  • #565: $GLOBAL_VAR from English library should no longer be inserted when autocorrecting short-form global variables like $!. (@nevir)
  • #566: Methods that just assign a splat to an ivar are no longer considered trivial writers. (@nevir)
  • #585: MethodCallParentheses should allow methods starting with uppercase letter. (@bbatsov)
  • #574: Fix error on multiple-assignment with non-array right hand side in UselessSetterCall. (@yujinakayama)
  • #576: Output config validation warning to STDERR so that it won't be mixed up with formatter's output. (@yujinakayama)
  • #599: EndOfLine cop is operational again. (@jonas054)
  • #604: Fix error on implicit match conditionals (e.g. if /pattern/; end) in FavorModifier. (@yujinakayama)
  • #600: Don't require an empty line for access modifiers at the beginning of class/module body. (@bbatsov)
  • #608: RescueException no longer crashes when the namespace of a rescued class is in a local variable. (@jonas054)
  • #173: Allow the use of alias in the body of an instance_exec. (@bbatsov)
  • #554: Handle properly multi-line arrays with comments in them in WordArray. (@bbatsov)

0.14.1 (10/10/2013)

New features

  • #551: New cop BracesAroundHashParameters checks for braces in function calls with hash parameters. (@dblock)
  • New cop SpaceAfterNot tracks redundant space after the ! operator. (@bbatsov)

Bugs fixed

  • Fix bug concerning table and separator alignment of multi-line hash with multiple keys on the same line. (@jonas054)
  • #550: Fix a bug where ClassLength counted lines of inner classes/modules. (@yujinakayama)
  • #550: Fix a false positive for namespace class in Documentation. (@yujinakayama)
  • #556: Fix "Parser::Source::Range spans more than one line" bug in clang formatter. (@yujinakayama)
  • #552: RaiseArgs allows exception constructor calls with more than one 1 argument. (@bbatsov)

0.14.0 (07/10/2013)

New features

  • #491: New cop MethodCalledOnDoEndBlock keeps track of methods called on do...end blocks.
  • #456: New configuration parameter AllCops/RunRailsCops can be set to true for a project, removing the need to give the -R/--rails option with every invocation of rubocop.
  • #501: simple/clang/progress/emacs formatters now print [Corrected] along with offence message when the offence is automatically corrected.
  • #501: simple/clang/progress formatters now print count of auto-corrected offences in the final summary.
  • #501: json formatter now outputs corrected key with boolean value in offence objects whether the offence is automatically corrected.
  • New cop ClassLength checks for overly long class definitions.
  • New cop Debugger checks for forgotten calls to debugger or pry.
  • New cop RedundantException checks for code like raise RuntimeError, message.
  • #526: New cop RaiseArgs checks the args passed to raise/fail.

Changes

  • Cop MethodAndVariableSnakeCase replaced by MethodName and VariableName, both having the configuration parameter EnforcedStyle with values snake_case (default) and camelCase.
  • #519: HashSyntax cop is now configurable and can enforce the use of the classic hash rockets syntax.
  • #520: StringLiterals cop is now configurable and can enforce either single-quoted or double-quoted strings.
  • #528: Added a config option to RedundantReturn to allow a return with multiple values.
  • #524: Added a config option to Semicolon to allow the use of ; as an expression separator.
  • #525: SignalException cop is now configurable and can enforce the semantic rule or an exclusive use of raise or fail.
  • LambdaCall is now configurable and enforce either Proc#call or Proc#().
  • #529: Added config option EnforcedStyle to SpaceAroundBraces.
  • #529: Changed config option NoSpaceBeforeBlockParameters to SpaceBeforeBlockParameters.
  • Support Parser 2.0.0 (non-beta).

Bugs fixed

  • #514: Fix alignment of the hash containing different key lengths in one line.
  • #496: Fix corner case crash in AlignHash cop: single key/value pair when configuration is table for '=>' and separator for :.
  • #502: Don't check non-decimal literals with NumericLiterals.
  • #448: Fix auto-correction of parameters spanning more than one line in AlignParameters cop.
  • #493: Support disabling Syntax offences with warning severity.
  • Fix bug appearing when there were different values for the AllCops/RunRailsCops configuration parameter in different directories.
  • #512: Fix bug causing crash in AndOr auto-correction.
  • #515: Fix bug causing AlignParameters and AlignArray auto-correction to destroy code.
  • #516: Fix bug causing RedundantReturn auto-correction to produce invalid code.
  • #527: Handle != expressions in EvenOdd cop.
  • SignalException cop now finds raise calls anywhere, not only in begin sections.
  • #538: Fix bug causing Blocks auto-correction to produce invalid code.

0.13.1 (19/09/2013)

New features

  • HashSyntax cop does auto-correction.
  • #484: Allow calls to self to fix name clash with argument.
  • Renamed SpaceAroundBraces to SpaceAroundBlockBraces.
  • SpaceAroundBlockBraces now has a NoSpaceBeforeBlockParameters config option to enforce a style for blocks with parameters like {|foo| puts }.
  • New cop LambdaCall tracks uses of the obscure lambda.(...) syntax.

Bugs fixed

  • Fix crash on empty input file in FinalNewline.
  • #485: Fix crash on multiple-assignment and op-assignment in UselessSetterCall.
  • #497: Fix crash in UselessComparison and NilComparison.

0.13.0 (13/09/2013)

New features

  • New configuration parameter AllowAdjacentOneLineDefs for EmptyLineBetweenDefs.
  • New cop MultilineBlockChain keeps track of chained blocks spanning multiple lines.
  • RedundantSelf cop does auto-correction.
  • AvoidPerlBackrefs cop does auto-correction.
  • AvoidPerlisms cop does auto-correction.
  • RedundantReturn cop does auto-correction.
  • Blocks cop does auto-correction.
  • New cop TrailingBlankLines keeps track of extra blanks lines at the end of source file.
  • New cop AlignHash keeps track of bad alignment in multi-line hash literals.
  • New cop AlignArray keeps track of bad alignment in multi-line array literals.
  • New cop SpaceBeforeModifierKeyword keeps track of missing space before a modifier keyword (if, unless, while, until).
  • New cop FinalNewline keeps tracks of the required final newline in a source file.
  • Highlightling corrected in SpaceInsideHashLiteralBraces and SpaceAroundBraces cops.

Changes

  • #447: BlockAlignment cop now allows end to be aligned with the start of the line containing do.
  • SymbolName now has an AllowDots config option to allow symbols like :'whatever.submit_button'.
  • #469: Extracted useless setter call tracking part of UselessAssignment cop to UselessSetterCall.
  • #469: Merged UnusedLocalVariable cop into UselessAssignment.
  • #458: The merged UselessAssignment cop now has advanced logic that tracks not only assignment at the end of the method but also every assignment in every scope.
  • #466: Allow built-in JRuby global vars in AvoidGlobalVars.
  • Added a config option AllowedVariables to AvoidGlobalVars to allow users to whitelist certain global variables.
  • Renamed AvoidGlobalVars to GlobalVars.
  • Renamed AvoidPerlisms to SpecialGlobalVars.
  • Renamed AvoidFor to For.
  • Renamed AvoidClassVars to ClassVars.
  • Renamed AvoidPerlBackrefs to PerlBackrefs.
  • NumericLiterals now accepts a config param MinDigits - the minimal number of digits in the integer portion of number for the cop to check it.

Bugs fixed

  • #449: Remove whitespaces between condition and do with WhileUntilDo auto-correction.
  • Continue with file inspection after parser warnings. Give up only on syntax errors.
  • Don't trigger the HashSyntax cop on digit-starting keys.
  • Fix crashes while inspecting class definition subclassing another class stored in a local variable in UselessAssignment (formerly of UnusedLocalVariable) and ShadowingOuterLocalVariable (like clazz = Array; class SomeClass < clazz; end).
  • #463: Do not warn if using destructuring in second reduce argument (ReduceArguments).

0.12.0 (23/08/2013)

New features

  • #439: Added formatter 'OffenceCount' which outputs a summary list of cops and their offence count.
  • #395: Added --show-cops option to show available cops.
  • New cop NilComparison keeps track of comparisons like == nil.
  • New cop EvenOdd keeps track of occasions where Fixnum#even? or Fixnum#odd? should have been used (like x % 2 == 0).
  • New cop IndentationWidth checks for files using indentation that is not two spaces.
  • New cop SpaceAfterMethodName keeps track of method definitions with a space between the method name and the opening parenthesis.
  • New cop ParenthesesAsGroupedExpression keeps track of method calls with a space before the opening parenthesis.
  • New cop HashMethods keeps track of uses of deprecated Hash methods.
  • New Rails cop HasAndBelongsToMany checks for uses of has_and_belongs_to_many.
  • New Rails cop ReadAttribute tracks uses of read_attribute.
  • Attr cop does auto-correction.
  • CollectionMethods cop does auto-correction.
  • SignalException cop does auto-correction.
  • EmptyLiteral cop does auto-correction.
  • MethodCallParentheses cop does auto-correction.
  • DefWithParentheses cop does auto-correction.
  • DefWithoutParentheses cop does auto-correction.

Changes

  • Dropped -s/--silent option. Now progress/simple/clang formatters always report summary and emacs/files formatters no longer report.
  • Dropped the LineContinuation cop.

Bugs fixed

  • #432: Fix false positive for constant assignments when rhs is a method call with block in ConstantName.
  • #434: Support classes and modules defined with Class.new/Module.new in AccessControl.
  • Fix which ranges are highlighted in reports from IfUnlessModifier, WhileUntilModifier, and MethodAndVariableSnakeCase cop.
  • #438: Accept setting attribute on method argument in UselessAssignment.

0.11.1 (12/08/2013)

Changes

  • #425: ColonMethodCalls now allows constructor methods (like Nokogiri::HTML() to be called with double colon.

Bugs fixed

  • #427: FavorUnlessOverNegatedIf triggered when using elsifs.
  • #429: Fix LeadingCommentSpace offence reporting.
  • Fixed AsciiComments offence reporting.
  • Fixed BlockComments offence reporting.

0.11.0 (09/08/2013)

New features

  • #421: TrivialAccessors now ignores methods on user-configurable whitelist (such as to_s and to_hash).
  • #369: New option --auto-gen-config outputs RuboCop configuration that disables all cops that detect any offences.
  • The list of annotation keywords recognized by the CommentAnnotation cop is now configurable.
  • Configuration file names are printed as they are loaded in --debug mode.
  • Auto-correct support added in AlignParameters cop.
  • New cop UselessComparison checks for comparisons of the same arguments.
  • New cop UselessAssignment checks for useless assignments to local variables.
  • New cop SignalException checks for proper usage of fail and raise.
  • New cop ModuleFunction checks for usage of extend self in modules.

Bugs fixed

  • #374: Fixed error at post condition loop (begin-end-while, begin-end-until) in UnusedLocalVariable and ShadowingOuterLocalVariable.
  • #373 and #376: Allow braces around multi-line blocks if do-end would change the meaning of the code.
  • RedundantSelf now allows self. followed by any ruby keyword.
  • #391: Fix bug in counting slashes in a regexp.
  • #394: DotPosition cop handles correctly code like l.(1).
  • #390: CommentAnnotation cop allows keywords (e.g. Review, Optimize) if they just begin a sentence.
  • #400: Fix bug concerning nested defs in EmptyLineBetweenDefs cop.
  • #399: Allow assignment inside blocks in AssignmentInCondition cop.
  • Fix bug in favor_modifier.rb regarding missed offences after else etc.
  • #393: Retract support for multiline chaining of blocks (which fixed #346), thus rejecting issue 346.
  • #389: Ignore symbols that are arguments to Module#private_constant in SymbolName cop.
  • #387: Do autocorrect in AndOr cop only if it does not change the meaning of the code.
  • #398: Don't display blank lines in the output of the clang formatter.
  • #283: Refine StringLiterals string content check.

0.10.0 (17/07/2013)

New features

  • New cop RedundantReturn tracks redundant returns in method bodies.
  • New cop RedundantBegin tracks redundant begin blocks in method definitions.
  • New cop RedundantSelf tracks redundant uses of self.
  • New cop EmptyEnsure tracks empty ensure blocks.
  • New cop CommentAnnotation tracks formatting of annotation comments such as TODO.
  • Added custom rake task.
  • New formatter FileListFormatter outputs just a list of files with offences in them (related to #357).

Changes

  • TrivialAccessors now has an ExactNameMatch config option (related to #308).
  • TrivialAccessors now has an ExcludePredicates config option (related to #326).
  • Cops don't inherit from Parser::AST::Rewriter anymore. All 3rd party Cops should remove the call to super in their callbacks. If you implement your own processing you need to define the #investigate method instead of #inspect. Refer to the documentation of Cop::Commissioner and Cop::Cop classes for more information.
  • EndAlignment cop split into EndAlignment and BlockAlignment cops.

Bugs fixed

  • #288: Work with absolute Excludes paths internally (2nd fix for this issue).
  • TrivialAccessors now detects class attributes as well as instance attributes.
  • #338: Fix end alignment of blocks in chained assignments.
  • #345: Add $SAFE to the list of built-in global variables.
  • #340: Override config parameters rather than merging them.
  • #349: Fix false positive for CharacterLiteral (%w(?)).
  • #346: Support method chains for block end alignment checks.
  • #350: Support line breaks between variables on left hand side for block end alignment checks.
  • #356: Allow safe assignment in ParenthesesAroundCondition.

Misc

  • Improved performance on Ruby 1.9 by about 20%.
  • Improved overall performance by about 35%.

0.9.1 (05/07/2013)

New features

  • Added -l/--lint option to allow doing only linting with no style checks (similar to running ruby -wc).

Changes

  • Removed the BlockAlignSchema configuration option from EndAlignment. We now support only the default alignment schema - StartOfAssignment.
  • Made the preferred collection methods in CollectionMethods configurable.
  • Made the DotPosition cop configurable - now both leading and trailing styles are supported.

Bugs fixed

  • #318: Correct some special cases of block end alignment.
  • #317: Fix a false positive in LiteralInCondition.
  • #321: Ignore variables whose name start with _ in ShadowingOuterLocalVariable.
  • #322: Fix exception of UnusedLocalVariable and ShadowingOuterLocalVariable when inspecting keyword splat argument.
  • #316: Correct nested postfix unless in MultilineIfThen.
  • #327: Fix false offences for block expression that span on two lines in EndAlignment.
  • #332: Fix exception of UnusedLocalVariable and ShadowingOuterLocalVariable when inspecting named captures.
  • #333: Fix a case that EnsureReturn throws an exception when ensure has no body.

0.9.0 (01/07/2013)

New features

  • Introduced formatter feature, enables custom formatted output and multiple outputs.
  • Added progress formatter and now it's the default. (--format progress).
  • Added JSON formatter. (--format json).
  • Added clang style formatter showing the offending source. code. (--format clang). The clang formatter marks a whole range rather than just the starting position, to indicate more clearly where the problem is.
  • Added -f/--format option to specify formatter.
  • Added -o/--out option to specify output file for each formatter.
  • Added -r/--require option to inject external Ruby code into RuboCop.
  • Added -V/--verbose-version option that displays Parser version and Ruby version as well.
  • Added -R/--rails option that enables extra Rails-specific cops.
  • Added support for auto-correction of some offences with -a/--auto-correct.
  • New cop CaseEquality checks for explicit use of ===.
  • New cop AssignmentInCondition checks for assignment in conditions.
  • New cop EndAlignment tracks misaligned end keywords.
  • New cop Void tracks uses of literals/variables/operators in possibly void context.
  • New cop Documentation checks for top level class/module doc comments.
  • New cop UnreachableCode tracks unreachable code segments.
  • New cop MethodCallParentheses tracks unwanted braces in method calls.
  • New cop UnusedLocalVariable tracks unused local variables for each scope.
  • New cop ShadowingOuterLocalVariable tracks use of the same name as outer local variables for block arguments or block local variables.
  • New cop WhileUntilDo tracks uses of do with multi-line while/until.
  • New cop CharacterLiteral tracks uses of character literals (?x).
  • New cop EndInMethod tracks uses of END in method definitions.
  • New cop LiteralInCondition tracks uses of literals in the conditions of if/while/until.
  • New cop BeginBlock tracks uses of BEGIN blocks.
  • New cop EndBlock tracks uses of END blocks.
  • New cop DotPosition tracks the dot position in multi-line method calls.
  • New cop Attr tracks uses of Module#attr.
  • Add support for auto-correction of some offences with -a/--auto-correct.

Changes

  • Deprecated -e/--emacs option. (Use --format emacs instead).
  • Made progress formatter the default.
  • Most formatters (progress, simple and clang) now print relative file paths if the paths are under the current working directory.
  • Migrate all cops to new namespaces. Rubocop::Cop::Lint is for cops that emit warnings. Rubocop::Cop::Style is for cops that do not belong in other namespaces.
  • Merge FavorPercentR and PercentR into one cop called RegexpLiteral, and add configuration parameter MaxSlashes.
  • Add CountKeywordArgs configuration option to ParameterLists cop.

Bugs fixed

  • #239: Fixed double quotes false positives.
  • #233: Report syntax cop offences.
  • Fix off-by-one error in favor_modifier.
  • #229: Recognize a line with CR+LF as a blank line in AccessControl cop.
  • #235: Handle multiple constant assignment in ConstantName cop.
  • #246: Correct handling of unicode escapes within double quotes.
  • Fix crashes in Blocks, CaseEquality, CaseIndentation, ClassAndModuleCamelCase, ClassMethods, CollectionMethods, and ColonMethodCall.
  • #263: Do not check for space around operators called with method syntax.
  • #271: Always allow line breaks inside hash literal braces.
  • #270: Fixed a false positive in ParenthesesAroundCondition.
  • #288: Get config parameter AllCops/Excludes from highest config file in path.
  • #276: Let columns start at 1 instead of 0 in all output of column numbers.
  • #292: Don't check non-regular files (like sockets, etc).
  • Fix crashes in WordArray on arrays of character literals such as [?\r, ?\n].
  • Fix crashes in Documentation on empty modules.

0.8.3 (18/06/2013)

Bug fixes

  • Lock Parser dependency to version 2.0.0.beta5.

0.8.2 (06/05/2013)

New features

  • New cop BlockNesting checks for excessive block nesting.

Bug fixes

  • Correct calculation of whether a modifier version of a conditional statement will fit.
  • Fix an error in MultilineIfThen cop that occurred in some special cases.
  • #231: Fix a false positive for modifier if.

0.8.1 (05/30/2013)

New features

  • New cop Proc tracks uses of Proc.new.

Changes

  • Renamed NewLambdaLiteral to Lambda.
  • Aligned the Lambda cop more closely to the style guide - it now allows the use of lambda for multi-line blocks.

Bugs fixed

  • #210: Fix a false positive for double quotes in regexp literals.
  • #211: Fix a false positive for initialize method looking like a trivial writer.
  • #215: Fixed a lot of modifier if/unless/while/until issues.
  • #213: Make sure even disabled cops get their configuration set.
  • #214: Fix SpaceInsideHashLiteralBraces to handle string interpolation right.

0.8.0 (05/28/2013)

Changes

  • Folded ArrayLiteral and HashLiteral into EmptyLiteral cop.
  • The maximum number of params ParameterLists accepts in now configurable.
  • Reworked SymbolSnakeCase into SymbolName, which has an option AllowCamelCase enabled by default.
  • Migrated from Ripper to the portable Parser.

New features

  • New cop ConstantName checks for constant which are not using SCREAMING_SNAKE_CASE.
  • New cop AccessControl checks private/protected indentation and surrounding blank lines.
  • New cop Loop checks for begin/end/while(until) and suggests the use of Kernel#loop.

0.7.2 (05/13/2013)

Bugs fixed

  • #155: 'Do not use semicolons to terminate expressions.' is not implemented correctly.
  • OpMethod now handles definition of unary operators without crashing.
  • SymbolSnakeCase now handles aliasing of operators without crashing.
  • RescueException now handles the splat operator * in a rescue clause without crashing.
  • #159: AvoidFor cop misses many violations.

0.7.1 (05/11/2013)

Bugs fixed

  • Added missing files to the gemspec.

0.7.0 (05/11/2013)

New features

  • Added ability to include or exclude files/directories through .rubocop.yml.
  • Added option --only for running a single cop.
  • Relax semicolon rule for one line methods, classes and modules.
  • Configuration files, such as .rubocop.yml, can now include configuration from other files through the inherit_from directive. All configuration files implicitly inherit from config/default.yml.
  • New cop ClassMethods checks for uses for class/module names in definitions of class/module methods.
  • New cop SingleLineMethods checks for methods implemented on a single line.
  • New cop FavorJoin checks for usages of Array#* with a string argument.
  • New cop BlockComments tracks uses of block comments(=begin/=end comments).
  • New cop EmptyLines tracks consecutive blank lines.
  • New cop WordArray tracks arrays of words.
  • #108: New cop SpaceInsideHashLiteralBraces checks for spaces inside hash literal braces - style is configurable.
  • New cop LineContinuation tracks uses of the line continuation character (\).
  • New cop SymbolArray tracks arrays of symbols.
  • Print warnings for unrecognized names in configuration files.
  • New cop TrivialAccessors tracks method definitions that could be automatically generated with attr_* methods.
  • New cop LeadingCommentSpace checks for missing space after # in comments.
  • New cop ColonMethodCall tracks uses of :: for method calls.
  • New cop AvoidGlobalVars tracks uses of non built-in global variables.
  • New cop SpaceAfterControlKeyword tracks missing spaces after if/elsif/case/when/until/unless/while.
  • New cop Not tracks uses of the not keyword.
  • New cop Eval tracks uses of the eval function.

Bugs fixed

  • #101: SpaceAroundEqualsInParameterDefault doesn't work properly with empty string.
  • Fix BraceAfterPercent for %W, %i and %I and added more tests.
  • Fix a false positive in the Alias cop. :alias is no longer treated as keyword.
  • ArrayLiteral now properly detects Array.new.
  • HashLiteral now properly detects Hash.new.
  • VariableInterpolation now detects regexp back references and doesn't crash.
  • Don't generate pathnames like some/project//some.rb.
  • #151: Don't print the unrecognized cop warning several times for the same .rubocop.yml.

Misc

  • Renamed Indentation cop to CaseIndentation to avoid confusion.
  • Renamed EmptyLines cop to EmptyLineBetweenDefs to avoid confusion.

0.6.1 (04/28/2013)

New features

  • Split AsciiIdentifiersAndComments cop in two separate cops.

Bugs fixed

  • #90: Two cops crash when scanning code using super.
  • #93: Issue with whitespace?': undefined method.
  • #97: Build fails.
  • #100: OpMethod cop doesn't work if method arg is not in braces.
  • SymbolSnakeCase now tracks Ruby 1.9 hash labels as well as regular symbols.

Misc

  • #88: Abort gracefully when interrupted with Ctrl-C.
  • No longer crashes on bugs within cops. Now problematic checks are skipped and a message is displayed.
  • Replaced Term::ANSIColor with Rainbow.
  • Add an option to disable colors in the output.
  • Cop names are now displayed alongside messages when -d/--debug is passed.

0.6.0 (04/23/2013)

New features

  • New cop ReduceArguments tracks argument names in reduce calls.
  • New cop MethodLength tracks number of LOC (lines of code) in methods.
  • New cop RescueModifier tracks uses of rescue in modifier form.
  • New cop PercentLiterals tracks uses of %q, %Q, %s and %x.
  • New cop BraceAfterPercent tracks uses of % literals with delimiters other than ().
  • Support for disabling cops locally in a file with rubocop:disable comments.
  • New cop EnsureReturn tracks usages of return in ensure blocks.
  • New cop HandleExceptions tracks suppressed exceptions.
  • New cop AsciiIdentifiersAndComments tracks uses of non-ascii characters in identifiers and comments.
  • New cop RescueException tracks uses of rescuing the Exception class.
  • New cop ArrayLiteral tracks uses of Array.new.
  • New cop HashLiteral tracks uses of Hash.new.
  • New cop OpMethod tracks the argument name in operator methods.
  • New cop PercentR tracks uses of %r literals with zero or one slash in the regexp.
  • New cop FavorPercentR tracks uses of // literals with more than one slash in the regexp.

Bugs fixed

  • #62: Config files in ancestor directories are ignored if another exists in home directory.
  • #65: Suggests to convert symbols :==, :<=> and the like to snake_case.
  • #66: Does not crash on unreadable or unparseable files.
  • #70: Support alias with bareword arguments.
  • #64: Performance issue with Bundler.
  • #75: Make it clear that some global variables require the use of the English library.
  • #79: Ternary operator missing whitespace detection.

Misc

  • Dropped Jeweler for gem release management since it's no longer actively maintained.
  • Handle pluralization properly in the final summary.

0.5.0 (04/17/2013)

New features

  • New cop FavorSprintf that checks for usages of String#%.
  • New cop Semicolon that checks for usages of ; as expression separator.
  • New cop VariableInterpolation that checks for variable interpolation in double quoted strings.
  • New cop Alias that checks for uses of the keyword alias.
  • Automatically detect extensionless Ruby files with shebangs when search for Ruby source files in a directory.

Bugs fixed

  • #59: Interpolated variables not enclosed in braces are not noticed.
  • #42: Received malformed format string ArgumentError from rubocop.