Skip to content

Releases: rubocop/rubocop

RuboCop v1.86.1

09 Apr 06:12

Choose a tag to compare

Bug fixes

  • #11051: Fix Style/AccessModifierDeclarations inline autocorrect dropping comments between the access modifier and the following method definition. (@dduugg)
  • #14665: Cache plugin integration in CopHelper to avoid repeated loading. (@55728)
  • #15091: Fix Lint/DuplicateMethods false positives for anonymous classes in constant assignments and method return values. (@eugeneius)
  • #15055: Fix Lint/DuplicateMethods false positives with anonymous classes inside blocks (e.g. RSpec let, describe). (@ShkumbinDelija)
  • #15035: Exclude included_modules from Style/ModuleMemberExistenceCheck. (@koic)
  • #15087: Fix false positive for Style/RedundantLineContinuation when using interpolated string literals. (@koic)
  • #14361: Fix false positive in file_to_include? when a relative Include pattern matches a parent directory name in the absolute file path. (@jonas054)
  • #15090: Fix false positives for Layout/EmptyLineAfterGuardClause when consecutive guard clauses use and return. (@eugeneius)
  • #15070: Fix false positive for Lint/RedundantSafeNavigation when chained safe navigation is used in a conditional expression with InferNonNilReceiver enabled. (@koic)
  • #15074: Fix false positives in Style/RedundantParentheses when using parentheses around an endless range in assignment. (@koic)
  • #15048: Fix issue where the url_for is missing for Cops without instance methods. (@Fryguy)
  • #15051: Fix Style/RedundantParentheses handling of beginless ranges. (@oggy)
  • #14980: Fix Lint/Syntax zero-length diagnostic range for syntax errors at EOF. (@55728)
  • #15084: Handle heredocs with methods calls correctly when fixing guard clauses. (@G-Rath)
  • #11398: Fix incorrect Include path adjustment when local config overrides an inherited Include. (@jonas054)
  • #15092: Fix Layout/EndAlignment cop error on an empty begin. (@viralpraxis)
  • #15059: Fix an error in Layout/LineLength when SplitStrings option is enabled and __FILE__ is used. (@jeromedalbert)
  • #5876: Fix Lint/UnusedMethodArgument false positive when block argument is used via yield. (@dduugg)
  • #15093: Return tool execution errors instead of protocol errors in MCP server. (@koic)

Changes

  • #15005: Make Style/OneClassPerFile exclude spec/**/* and test/**/* by default. (@koic)
  • #15081: Relax parallel dependency to >= 1.10. (@koic)
  • #15063: Disable Style/RedundantStructKeywordInit cop by default. (@koic)

RuboCop v1.86.0

23 Mar 10:39

Choose a tag to compare

New features

  • #15000: Display ZJIT usage when running under LSP. (@koic)
  • #14961: Add AllowedParentClasses option to Style/EmptyClassDefinition. (@hammadkhan)
  • #14977: Support AllowedReceivers for Style/HashLookupMethod. (@koic)

Bug fixes

  • #15015: Fix Style/ConcatArrayLiterals autocorrect deleting code for percent literals with interpolation. (@bbatsov)
  • #14897: Detect constant reassignment after class/module definition in Lint/ConstantReassignment. (@ydakuka)
  • #11829: Fix false negatives for Lint/DuplicateMethods when duplicate methods are defined in anonymous classes and modules not assigned to a constant. (@Darhazer)
  • #14988: Fix false negative in Style/RedundantParentheses when redundant parentheses around range literals in block body. (@koic)
  • #14916: Fix false positive for Layout/MultilineMethodCallIndentation when method chain is inside a hash pair value passed to a multiline chained method call. (@ydakuka)
  • #15010: Fix a false positive for Lint/DuplicateMethods when modules blocks are passed as method arguments. (@5hun-s)
  • #15028: Fix a false positive for Lint/DuplicateMethods when the same method is defined in different anonymous module blocks passed to a no-receiver call (e.g. stub_const). (@Darhazer)
  • #15021: Fix false positives in Layout/EmptyLineAfterGuardClause when using a guard clause followed by a multi-line guard clause with raise, fail, return, break, or next. (@koic)
  • #15001: Fix false positives in Layout/RedundantLineBreak when setting InspectBlocks: true and using rescue or ensure in the block. (@koic)
  • #14997: Fix false positives in Style/FileOpen when assigning File.open to an instance variable, class variable, global variable, or constant. (@koic)
  • #15019: Fix false positives in Lint/DuplicateMethods when the same method is defined in anonymous module blocks passed to different receivers. (@koic)
  • #14987: Complete ERB and Haml autocorrection in a single run. (@alpaca-tc)
  • #15039: Fix incorrect autocorrect in Style/IfWithSemicolon when return with value is in the else branch. (@koic)
  • #14930: Fix incorrect autocorrection for Style/IfUnlessModifier when multiple if/unless modifier forms are on the same line inside a collection. (@ydakuka)
  • #14985: Fix incorrect autocorrection in Lint/SafeNavigationChain when chaining a method call after safe navigation in the if branch of a ternary. (@koic)
  • #15009: Fix infinite loop in Layout/EndAlignment when end is followed by || or &&. (@koic)
  • #14981: Fix spurious warning "does not support Safe/SafeAutoCorrect parameter" when those parameters are set for cops that don't have them in their default configuration. (@dduugg)
  • #15043: Fix an error for Lint/UselessDefaultValueArgument when fetch without a receiver is inside a fetch block. (@koic)
  • #15034: Fix incorrect autocorrection in Style/IfWithSemicolon when using single-line unless / ; / end. (@koic)
  • #15015: Fix Style/NonNilCheck autocorrect for receivers containing spaces. (@bbatsov)
  • #15015: Fix Style/RaiseArgs to allow anonymous keyword forwarding (raise Ex.new(**)). (@bbatsov)
  • #14890: Fix a false positive for Lint/RedundantCopDisableDirective when a rubocop:disable comment is used to suppress Lint/EmptyWhen, Lint/EmptyConditionalBody, Lint/EmptyInPattern, or Style/SymbolProc. (@eugeneius)
  • #15015: Fix false negative in Style/RedundantPercentQ for %q strings with interpolation-like syntax. (@bbatsov)
  • #14984: Fix Style/AndOr adding unnecessary parentheses around return without arguments. (@eugeneius)
  • #14945: Support files with multiple modifiers in Lint/UselessConstantScoping. (@h-lame)
  • #15015: Fix Style/TrailingMethodEndStatement to detect singleton methods (def self.foo). (@bbatsov)
  • #10822: Don't store results in cache if there are warnings. (@jonas054)

Changes

  • #14718: Allow setting MaxFilesInCache to false to entirely disable cache pruning. (@byroot)
  • #14989: Make Lint/RedundantSafeNavigation aware of safe navigation in conditional true branch. (@koic)
  • #15041: Remove mcp gem from runtime dependencies. (@koic)

RuboCop v1.85.1

05 Mar 10:22

Choose a tag to compare

Bug fixes

  • #14958: Fix false positives in Style/FileOpen when File.open is passed as an argument or returned from a method. (@sferik)
  • #14973: Fix Style/ReduceToHash false positive when accumulator is read in key/value. (@sferik)
  • #14964: Fix false positives in Style/RedundantParentheses when parenthesizing a range in a block body. (@koic)

Changes

RuboCop v1.85.0

26 Feb 09:50

Choose a tag to compare

New features

Bug fixes

  • #14829: Allow classes without a superclass in Style/EmptyClassDefinition. (@koic)
  • #14873: Fix an error in Style/NegatedWhile when the last expression of an until condition is negated. (@koic)
  • #14827: Improve Style/EmptyClassDefinition message wording. (@bbatsov)
  • #14800: Fix false obsolete configuration error for extracted cops when loaded as plugins. (@bbatsov)
  • #14928: Fix a false positive for Lint/Void when nil is used in case branch. (@5hun-s)
  • #14857: Fix false positives in Style/IfUnlessModifier when modifier forms are used inside string interpolations. (@koic)
  • #8773: Fix false positives in Style/HashTransformKeys and Style/HashTransformValues. (@sferik)
  • #6963: Fix false positives in Lint/Void for each blocks where the return value may be meaningful (e.g., Enumerator#each). (@sferik)
  • #14931: Ignore directive comments inside comments. (@koic)
  • #14834: Fix Layout/IndentationWidth false positive for chained method blocks when EnforcedStyleAlignWith is start_of_line. (@krororo)
  • #14756: Fix Lint/Void to detect void expressions in case/when branches. (@bbatsov)
  • #14874: Fix a Parser::ClobberingError in Lint/UselessAssignment when autocorrecting a useless assignment that wraps a block containing another useless assignment. (@koic)
  • #14880: Fix a false negative in Layout/MultilineAssignmentLayout when using numblock or itblock with SupportedTypes: ['block']. (@bbatsov)
  • #11462: Fix over-indentation when autocorrecting nested hashes with Layout/FirstHashElementIndentation. (@ydakuka)
  • #14880: Recognize block on different line from left side of multi-line assignment in Layout/MultilineAssignmentLayout. (@sanfrecce-osaka)
  • #14641: Fix false positive in Lint/RedundantSafeNavigation when using &.respond_to? with methods defined on Object (e.g., :class). (@bbatsov)
  • #14098: Mark Lint/SafeNavigationConsistency autocorrect as unsafe. (@bbatsov)
  • #14791: Fix autocorrect producing SyntaxError in Lint/InterpolationCheck when single quoted string contains double quotes with invalid interpolation. (@ydakuka)

Changes

  • #14872: Tweak autocorrection in Style/HashAsLastArrayItem when multiline hash elements. (@koic)
  • #14917: Change Style/EndlessMethod cop to consider receivers. (@fatkodima)
  • #14851: Reduce precision in 'Finished in X.X seconds' message to 5 decimal places. (@ZimbiX)
  • #14895: Rename class_definition to class_keyword in EnforcedStyle of Style/EmptyClassDefinition. (@koic)
  • #14956: Add support for String.new with interpolated strings to Style/RedundantInterpolationUnfreeze. (@lovro-bikic)
  • #14955: Register redundant parentheses around block body in Style/RedundantParentheses. (@lovro-bikic)

RuboCop v1.84.2

12 Feb 07:25

Choose a tag to compare

Bug fixes

  • #14854: Fix a clobbering error in Style/BlockDelimiters when autocorrecting nested multi-line blocks with adjacent curly braces. (@koic)
  • #14837: Fix an error for Style/IfUnlessModifier when the first value uses a normal if and the others use modifier if. (@koic)
  • #14858: Fix an infinite loop error in Layout/FirstArgumentIndentation when first arguments are over-indented in nested method calls. (@koic)
  • #14843: Fix an error in Layout/MultilineMethodCallIndentation when a multiline method call follows a hash access. (@koic)
  • #14859: Fix an error in Layout/MultilineMethodCallIndentation when a multiline method call includes a keyword argument whose value is a method call with a block. (@koic)
  • #14839: Fix a false positive for Layout/EmptyLinesAfterModuleInclusion when include is nested inside an array. (@eugeneius)
  • #7436: Fix Style/FormatStringToken to not autocorrect strings outside of format method context in aggressive mode. (@ydakuka)
  • #14841: Fix false negatives in Style/HashAsLastArrayItem when an array contains only a single hash element. (@koic)
  • #14865: Fix false negatives in Style/MethodDefParentheses when using splat or forwarding arguments without parentheses. (@koic)
  • #14833: Fix false positive for Layout/MultilineMethodCallIndentation when a multi-dot method chain is inside a hash pair value. (@ydakuka)
  • #14847: Fix false positive for Layout/MultilineMethodCallIndentation when a method is chained after a single-line block. (@ydakuka)
  • #14867: Fix Offense#highlighted_area for PseudoSourceRange locations. (@rafaelfranca)
  • #14861: Fix an error in Style/IfUnlessModifier when the first value uses a normal if and the others use ternary operator. (@koic)
  • #14816: Use toplevel cache configs for remote configuration files. (@nekketsuuu)

RuboCop v1.84.1

03 Feb 01:55

Choose a tag to compare

Bug fixes

  • #14803: Fix an error for Layout/IndentationWidth cop. (@viralpraxis)
  • #14806: Fix an error in Style/NegativeArrayIndex when using self as array with implicit self receiver. (@koic)
  • #14813: Fix opt-in cop comments taking precedence over configuration file exclude patterns. (@afrase)
  • #14819: Fix incorrect autocorrect for Style/GuardClause when using heredoc as an argument of method call in raise in else branch. (@koic)
  • #14805: Bring back the original indentation from before version 1.84.0. (@Magikdidi24)
  • #12754: Fix an infinite loop for Style/IfUnlessModifier when multiple if/unless statements share the same line in arrays, method arguments, or hash values. (@ydakuka)
  • #14817: Fix an infinite loop between Layout/FirstArgumentIndentation and Layout/LineLength when correcting method chains. (@ydakuka)
  • #11513: Fix Layout/MultilineMethodCallIndentation to properly handle method chains inside hash pair values. (@ydakuka)
  • #14814: Fix push/pop directives to properly handle nested scopes and state restoration. (@Magikdidi24)

Changes

  • #14823: Add the built-in infinite? method to the allowlists for Naming/PredicateMethod, Style/IfWithBooleanLiteralBranches, and Style/RedundantCondition, in addition to the existing nonzero?. (@koic)
  • #14735: Remove deprecated InjectDefaults handling. (@afurm)

RuboCop v1.84.0

27 Jan 09:57

Choose a tag to compare

New features

  • #14516: Add AllowImplicitArrayLiterals to Layout/FirstArrayElementLineBreak. (@koic)
  • #14750: Add new Style/ReverseFind cop. (@koic)
  • #12343: Add new Style/EmptyClassDefinition cop to enforce consistent style for empty class definitions. The cop can enforce either a two-line class definition or Class.new for classes with no body. (@ydakuka)
  • #14769: Add new Style/HashLookupMethod cop to enforce Hash#[] vs Hash#fetch preference. (@sferik)
  • #12051: Add new Style/NegativeArrayIndex cop to enforce using negative array indices instead of calculating array length minus a value. The cop handles both simple index patterns and range patterns, and recognizes preserving methods and their combinations. (@ydakuka)
  • #14633: Make a new system to handle push and pop locally. (@Magikdidi24)
  • #14722: Support TargetRubyVersion 4.1 (experimental). (@koic)

Bug fixes

  • #14697: Allow non-method calls in Categories for Layout/ClassStructure. (@fatkodima)
  • #14784: Fix an error for Style/GuardClause when using heredoc as an argument of raise in else branch and if branch is empty. (@koic)
  • #14790: Fix an error for Style/HashLookupMethod cop when there's no receiver. (@viralpraxis)
  • #14779: Fix autocorrect crash with ruby_extractor when using offset: 0 and different source buffers. (@ydakuka)
  • #14762: Fix false negatives for Style/RedundantCondition when the branches contains constant assignment. (@koic)
  • #14751: Fix --force-default-config not preventing project config loading when used with options that access configuration. (@sakuro)
  • #14783: Fix incorrect autocorrect for Style/HashSyntax when shorthand syntax is used in condition of if/unless/while/until. (@ydakuka)
  • #14747: Fix a regression inLayout/IndentationWidth by adding a new EnforcedStyleAlignWith style parameter. (@MikeMcQuaid)
  • #14716: Fix an infinite loop error for Layout/LineLength when SplitStrings option is enabled and strings span multiple lines. (@HariprasanthMSH)
  • #14763: Fix an infinite loop error for Layout/IndentationWidth and Layout/IndentationConsistency when using EnforcedStyle: indented_internal_methods with method chain blocks. (@ydakuka)
  • #9373: Fix an infinite loop error for Layout/IndentationWidth when autocorrecting mixed tabs and spaces in blocks. Fix an infinite loop error for Layout/DefEndAlignment and Layout/IndentationStyle when autocorrecting mixed tabs and spaces. Autocorrection for tabs is disabled in AlignmentCorrector for indentation offenses, but enabled for align_end. (@ydakuka)
  • #12295: Fix Layout/FirstArgumentIndentation to correct entire method calls and chains for nested calls. (@ydakuka)
  • #12527: Fix Offense#highlighted_area to return a valid Parser::Source::Range. (@ydakuka)
  • #14801: Preserve source tabs in Clang and Tap formatters when displaying offense highlight. (@lovro-bikic)
  • #14761: Improved the remote configuration file name on the cache location. (@Jack12816)
  • #14778: Fix a false positive for Security/JSONLoad when create_additions option is passed with other options in a hash. (@wktk)
  • #14796: Handle logical and operator assignment nodes in variable branch handling. (@lovro-bikic)

Changes

  • #14753: Add support for squish and squish! applied to heredoc to Layout/HeredocIndentation. (@lovro-bikic)
  • #14798: Recognize Forwardable methods in Lint/DuplicateMethods. (@lovro-bikic)
  • #14793: Make Lint/RedundantSplatExpansion aware of constant assignment. (@koic)
  • #14770: Make Style/AccessModifierDeclarations aware of self class. (@koic)
  • #14748: Add support for other Module member existence methods to Style/ModuleMemberExistenceCheck. (@lovro-bikic)
  • #14795: Add AllowedMethods configuration to Style/ModuleMemberExistenceCheck. (@lovro-bikic)

RuboCop v1.82.1

24 Dec 08:47

Choose a tag to compare

Bug fixes

  • #14736: Fix an error for Style/TrailingCommaInArguments when EnforcedStyleForMultiline is consistent_comma and keyword arguments use a trailing comma. (@koic)
  • #14737: Fix crash in Layout/RedundantLineBreak when Layout/LineLength is disabled. (@ydakuka)
  • #14719: Fix crash on long lines when Layout/LineLength is disabled. (@floriandejonckheere)
  • #14743: Fix false positives for Layout/MultilineMethodCallIndentation when multiline method chain with block has expected indent width and the method is preceded by splat or double splat. (@koic)
  • #12297: Fix false negative in Layout/IndentationWidth for multiline method chain blocks. (@rscq)
  • #14730: Fix the cache implementation to use consistent cache keys across workers. (@byroot)
  • #14559: Fix false positives for Lint/UselessAssignment when a variable is assigned in loop body and used in loop condition. (@ydakuka)

RuboCop v1.82.0

17 Dec 10:25

Choose a tag to compare

New features

  • #14655: Add AllowRBSInlineAnnotation option to Layout/LineLength. (@koic)
  • #14569: Add IncludedMacroPatterns configuration option to Style/MethodCallWithArgsParentheses for pattern-based macro method enforcement. (@mmenanno)
  • #14670: Add new cop Style/ModuleMemberExistenceCheck. (@lovro-bikic)
  • #14644: Support TargetRubyVersion 4.0 (experimental). (@koic)

Bug fixes

  • #14649: Fix an error for Lint/LiteralAsCondition when there are literals in multiple branches. (@viralpraxis)
  • #14678: Fix an error when running deprecated rake rubocop:auto_correct task. (@koic)
  • #14650: Fix wrong autocorrect for Lint/RedundantSplatExpansion when splatting a single literal. (@earlopain)
  • #14703: Fix false negatives for Layout/RescueEnsureAlignment when using self class definition. (@koic)
  • #14706: Fix false negatives for Lint/NoReturnInBeginEndBlocks when assigning instance variable, class variable, global variable, or constant. (@koic)
  • #14715: Fix false positives for Layout/EmptyLineAfterGuardClause when a guard clause follows a multiline heredoc in a parenthesized method call. (@koic)
  • #14667: Fix false positives for Layout/EndAlignment when a conditional assignment is used on the same line and the end with a safe navigation method call is aligned. (@koic)
  • #14688: Fix false positives for Layout/EndAlignment when a conditional assignment is used on the same line and the end with a numbered block or it block method call is aligned. (@koic)
  • #14699: Fix false positives for Lint/RedundantSafeNavigation when the receiver is used outside the singleton method definition scope. (@koic)
  • #14663: Fix false positives for Style/EndlessMethod when multiline or xstring heredoc is used in method body. (@koic)
  • #10173: Fix false positives for Style/TrailingCommaInArguments when EnforcedStyleForMultiline is set to consistent_comma and a multiline braced hash argument appears after another argument. (@koic)
  • #14680: Handle all OptionParser errors when running rubocop with input that causes an error. (@dvandersluis)
  • #14658: Fix incorrect behavior when Layout/LineLength is disabled. (@koic)
  • #14704: Fix incorrect Position character value in LSP. (@tmtm)
  • #14619: Store remote configuration caches in cache root. (@Jack12816)
  • #14476: Fix Style/ClassAndModuleChildren to skip compact style definitions inside another class or module when EnforcedStyle: nested. (@rscq)
  • #14281: Update Layout/EndAlignment with EnforcedStyleAlignWith: variable to handle conditionals inside begin nodes properly. (@dvandersluis)

Changes

  • #14662: Add autocorrection for Lint/UselessOr. (@r7kamura)
  • #14668: Exclude Severity from configuration parameters. (@r7kamura)
  • #14684: Make Style/CaseEquality allow regexp case equality where the receiver is a regexp literal. (@koic)
  • #14645: Change Lint/CircularArgumentReference to detect offenses within long assignment chains. (@viralpraxis)
  • #14642: Make Gemspec/RubyVersionGlobalsUsage aware of Ruby::VERSION. (@koic)
  • #14695: Make Layout/EmptyLineAfterMagicComment aware of # rbs_inline magic comment. (@koic)
  • #10147: Make Lint/ElseLayout allow a single-line else body in then single-line conditional. (@koic)
  • #14661: Make Lint/RedundantRequireStatement aware of pathname when analyzing Ruby 4.0. (@koic)
  • #14698: Make Lint/UnreachableCode aware of singleton method redefinition. (@koic)
  • #14677: Make Style/RedundantArgument aware of to_i. (@koic)
  • #14660: Rename IgnoreCopDirectives to AllowCopDirectives in Layout/LineLength. (@koic)
  • #14492: Revert #14492, which added support for LSP positionEncoding 'utf-8' and 'utf-32' due to critical performance regression reports. (@koic)

RuboCop v1.81.7

31 Oct 09:01

Choose a tag to compare

Bug fixes

  • #14597: Fix an infinite loop error for Layout/HashAlignment when EnforcedStyle: with_fixed_indentation is specified for Layout/ArgumentAlignment. (@koic)
  • #14621: Fix an error for Naming/PredicateMethod when using an in pattern with empty parentheses body. (@koic)
  • #14631: Fix an error for Style/SoleNestedConditional when using nested single line if. (@koic)
  • #14626: Fix false positives in Style/ConstantVisibility when visibility is declared with multiple constants. (@koic)
  • #14628: Fix false positives for Style/FloatDivision when using Regexp.last_match or nth reference (e.g., $1). (@koic)
  • #14617: Handle non-specific issues with the Gemfile to allow fallback. (@Fryguy)
  • #14622: Fix an error for Naming/MethodName when the first argument to alias contains interpolation. (@earlopain)