gems rubocop 1.89.0
RuboCop v1.89.0

4 hours ago

New features

  • #15492: Add AllCops/ProjectIndexIncludesGems for bundle-wide indexing. (@bbatsov)
  • #15498: Add DelegatingMethods option to Lint/DuplicateMethods to register custom delegate-shaped methods. (@bbatsov)
  • #15042: Add DisallowedCops configuration option to Style/DisableCopsWithinSourceCodeDirective. (@hammadxcm)
  • #15441: Add new AllowYARDCommentBlockSeparator option to Layout/LeadingCommentSpace. (@koic)
  • #15466: Add new Lint/DeprecatedReference cop to detect references to methods and constants documented as @deprecated, powered by the project index. (@bbatsov)
  • #15491: Add new Lint/NameTypo cop. (@bbatsov)
  • #15468: Add new Lint/UnusedPrivateMethod cop for project-wide dead-code detection via the project index (disabled by default). (@bbatsov)
  • #14598: Make Style/DisableCopsWithinSourceCodeDirective impossible to disable via directive comments when explicitly enabled with Enabled: true. (@rafaelfranca)
  • #15511: Support textDocument/codeAction requests in the built-in language server, so LSP clients that request code actions (Eglot, Helix, Flycheck, ...) can apply RuboCop's autocorrects, not only clients that read them off the published diagnostic. (@bbatsov)
  • #8565: Support NewCops in department configuration to enable pending cops per department, including cops added up to a specific version (e.g. Style: NewCops: '1.19'). (@koic)
  • #9373: Support autocorrection for tab indentation in Layout/IndentationWidth and Style/ClassAndModuleChildren. (@ioquatix, @koic)

Bug fixes

  • #15257: Fix a false negative for Lint/ToEnumArguments when explicit extra keyword arguments are passed (e.g. def m(x:); to_enum(:m, x: x, y: 1); end), which raises ArgumentError when the enumerator is used. (@RedZapdos123)
  • #15452: Fix a false positive for Layout/HashAlignment when using EnforcedHashRocketStyle: table and a hash key spans multiple lines. (@dduugg)
  • #12269: Fix a false positive for Lint/UselessAssignment with modifier conditions. (@bbatsov)
  • #13786: Fix a false positive for Lint/Void with setter methods. (@bbatsov)
  • #15507: Fix a false positive for Naming/VariableNumber when using an empty symbol hash key. (@koic)
  • #15284: Fix a false positive for Style/MutableConstant with Data.define. (@bbatsov)
  • #15483: Fix a false positive for Style/MissingRespondToMissing when respond_to_missing? is defined in a reopening of the class and UseProjectIndex is enabled. (@bbatsov)
  • #15500: Fix an error for Lint/LiteralAsCondition when a literal condition has an empty branch. (@koic)
  • #15499: Fix an error for Lint/UselessRuby2Keywords when ruby2_keywords is used with a symbol but no method definition is found. (@koic)
  • #15453: Fix an error for Metrics/MethodLength when a method contains a heredoc and __ENCODING__. (@koic)
  • #15442: Fix an error for Style/ArrayIntersect cop when the block-based check calls member?/include? without an explicit receiver. (@dduugg)
  • #15434: Fix an error for Style/NegativeArrayIndex cop. (@viralpraxis)
  • #15469: Fix an error for Style/RedundantFormat when a format string uses a positional argument number beyond the 64-bit range. (@koic)
  • #15454: Fix an error for Style/RedundantFormat when the argument for a positional variable width is missing. (@koic)
  • #15298: Fix an incorrect autocorrect for Lint/LiteralInInterpolation. (@bbatsov)
  • #15515: Fix an incorrect autocorrect for Style/ArrayIntersect when using safe navigation none? with a block. (@koic)
  • #15364: Fix an incorrect autocorrect for Style/MultipleComparison that dropped an allowed method comparison appearing between the compared values. (@bbatsov)
  • #15367: Fix an incorrect autocorrect for Style/RedundantFileExtensionInRequire that produced invalid Ruby when a backslash preceded the .rb extension. (@bbatsov)
  • #12017: Fix Lint/Void to no longer autocorrect a constant used in a void context, since removing it can change behavior through constant autoloading side effects. (@bbatsov)
  • #14797: Avoid cache writes during server checks. (@sjh9714)
  • #15484: Fix false negatives for Lint/InheritException when Exception is inherited indirectly through a project class (UseProjectIndex). (@bbatsov)
  • #15357: Fix a false negative for Lint/AmbiguousAssignment when using attribute or index assignment. (@sngsmz)
  • #9571: Fix false negatives in Layout/ClassStructure when class body elements are wrapped in begin blocks. (@koic)
  • #9570: Fix false negatives in Layout/ClassStructure when using private_class_method or public_class_method def modifiers. (@koic)
  • #15438: Fix false positives in Style/ArrayIntersect when the receiver of include? in a block is not an array literal. (@koic)
  • #15445: Fix false positives in Style/MultilineIfThen when using the Prism parser engine and an elsif without then follows a branch using then with a body on the same line. (@koic)
  • #15058: Fix false positives in Lint/DuplicateMethods for anonymous classes (Class.new) passed as arguments to the same named-receiver method call (e.g. T.cast). Each Class.new block is an independent class, so methods defined in different blocks should not be treated as duplicates. (@rafaelfranca)
  • #15486: Fix false negatives for Style/RedundantConstantBase inside namespaces when the constant provably resolves identically without :: (UseProjectIndex). (@bbatsov)
  • #15505: Fix incompatible autocorrect between Style/Lambda and Style/SymbolProc producing a syntax error like ->(x)(&:method) when both cops run on lambda { |x| x.method }. (@koic)
  • #15481: Fix cross-file offenses depending on which files are inspected: the project index now always covers the whole project (UseProjectIndex). (@bbatsov)
  • #13794: Fix Layout/LineLength autocorrection for endless methods with block bodies. (@hervetatche)
  • #15462: Fix an error for Lint/ConstantReassignment when a built-in constant name is assigned and UseProjectIndex is enabled. (@bbatsov)
  • #15321: Fix Style/ClassAndModuleChildren ignoring EnforcedStyleForClasses and EnforcedStyleForModules, and skip autocorrection when mixed per-type styles make the result ambiguous. (@bbatsov)
  • #15122: Fix false positive in Layout/MultilineMethodCallIndentation when a line has multiple chained calls before a single-line block. (@hammadxcm)
  • #15471: Fix false negatives for Style/RedundantLineContinuation by verifying backslash removal against a reparse of the source instead of hand-written grammar rules. (@bbatsov)
  • #15522: Fix Ruby version detection from mise.toml with single quotes. (@joklek-vinted)
  • #15488: Fix false positives for Naming/PredicatePrefix and Naming/AccessorMethodName when the method overrides an ancestor method defined in the project (UseProjectIndex). (@bbatsov)
  • #15485: Fix a false positive for Style/StaticClass when the class is subclassed elsewhere in the project (UseProjectIndex). (@bbatsov)
  • #15477: Fix false positives for Style/MethodCallWithArgsParentheses omit_parentheses style by verifying each omission by reparsing before registering an offense. (@bbatsov)

Changes

  • #15482: Change Style/Documentation to accept a reopened class or module documented at another definition site when UseProjectIndex is enabled. (@bbatsov)
  • #15355: Add rubocop-i18n to suggested extensions. (@tejasbubane)
  • #15521: Advertise executeCommandProvider and the supported code action kinds in the language server's capabilities, so clients can discover the rubocop.formatAutocorrects and rubocop.formatAutocorrectsAll commands. (@bbatsov)
  • #15521: Improve language server performance by caching the project index across requests instead of rebuilding it on every keystroke when AllCops/UseProjectIndex is enabled. (@bbatsov)
  • #14835: Extend Lint/AmbiguousBlockAssociation to detect do...end blocks likely intended for enumerable methods in arguments. (@hammadxcm)
  • #15458: Improve Layout/LineLength performance on files with large collection literals. (@koic)
  • #15497: Make Style/ConditionalAssignment skip cases it cannot safely rewrite instead of emitting invalid code or erroring on unusual branch shapes. (@bbatsov)
  • #15261: Mention the required parentheses in the Style/IfUnlessModifier offense message when the condition is part of a larger expression. (@rafa-el-souza)
  • #15513: Improve Style/DisableCopsWithinSourceCodeDirective performance on large AllowedCops and DisallowedCops lists by matching directives against memoized sets instead of rebuilding an array lookup per comment. (@corsonknowles)
  • #15501: Improve performance for large literal files. (@koic)
  • #15519: Improve Style/RedundantLineContinuation performance on files with many adjacent string literals joined by line continuations. (@koic)
  • #15462: Change Lint/DuplicateMethods to detect duplicates across files when UseProjectIndex is enabled. (@bbatsov)
  • #14983: Load cops lazily to speed up loading RuboCop; only the cops needed for a run are loaded. (@lovro-bikic, @koic)
  • #15493: Make Style/IfUnlessModifier, Style/WhileUntilModifier, Style/GuardClause, and other modifier cops respect Layout/LineLength exemptions (allowed patterns, cop directives, allowed URIs) when checking whether the modifier form fits on one line. (@bbatsov)
  • #15433: Mark Lint/SafeNavigationChain autocorrection as unsafe. (@koic)
  • #15487: Change Lint/ConstantResolution to report only genuinely ambiguous constants when UseProjectIndex is enabled. (@bbatsov)
  • #14809: Do not autocorrect Style/RedundantAssignment offenses when there are comments between assignment and reference. (@lovro-bikic)
  • #15463: Change Style/ClassAndModuleChildren autocorrection to consult the project index for the namespace kind and definition sites when UseProjectIndex is enabled. (@bbatsov)
  • #15464: Change Lint/MissingSuper to skip the constructor offense when the project index shows no ancestor defines initialize (UseProjectIndex). (@bbatsov)
  • #15490: Change Style/Copyright to validate AutocorrectNotice only when autocorrection is requested (-a/-A), so plain inspection no longer raises a warning. (@koic)
  • #15476: Change Layout/RedundantLineBreak to verify each correction by reparsing before registering an offense. (@bbatsov)
  • #15472: Change Style/RedundantParentheses to verify each correction by reparsing before registering an offense. (@bbatsov)
  • #15478: Change Style/SoleNestedConditional to only register an offense when its correction is verified to parse. (@bbatsov)

Don't miss a new rubocop release

NewReleases is sending notifications on new releases.