relnotes/v1.88.2.md
Lint/ToJSON, which did not flag singleton def self.to_json definitions. (@bbatsov)Lint/UnreachableCode, which only flagged the first statement after a flow-of-control statement instead of every unreachable statement that followed it. (@bbatsov)Lint/UselessNumericOperation, which only flagged bare method-call receivers and ignored local variables, instance/class/global variables, and constants (e.g. @x + 0, CONST * 1). (@bbatsov)Lint/Void where safe-navigation calls to nonmutating methods (e.g. x&.sort) were not flagged when CheckForMethodsWithNoSideEffects is enabled. (@bbatsov)Style/ArrayIntersect with the block form using include? (e.g. array1.any? { |e| array2.include?(e) }), which was only detected for member?. (@bbatsov)Style/CollectionCompact, which did not flag grep_v(nil)/grep_v(NilClass) on a safe-navigation call (e.g. array&.grep_v(nil)). (@bbatsov)Style/DefWithParentheses with a single-line definition whose body follows a semicolon (e.g. def foo(); end), where the parentheses can be safely omitted. (@bbatsov)Style/MixinUsage when including multiple modules in one statement. (@bbatsov)Style/ModuleFunction when the module body is a single statement. (@bbatsov)Style/RedundantCurrentDirectoryInPath with double-quoted strings containing interpolation. (@bbatsov)Style/RedundantHeredocDelimiterQuotes with double-quoted delimiters whose body contains interpolation or escapes. (@bbatsov)Gemspec/DuplicatedAssignment with multiple specifications. (@bbatsov)Layout/CommentIndentation with a comment above an inline access modifier (e.g. private def foo) when Layout/AccessModifierIndentation is configured with EnforcedStyle: outdent. (@grk)Style/InvertibleUnlessCondition with a multi-statement begin condition. (@bbatsov)Style/ArgumentsForwarding and Style/MethodDefParentheses when autocorrection conflicts while adding parentheses to method definition arguments. (@koic)Lint/ToJSON that produced invalid Ruby (def to_json(*_args)()) when the method had explicit empty parentheses. (@bbatsov)Style/MethodCallWithoutArgsParentheses when empty parentheses span multiple lines and the method call has a block. (@koic)Style/HashConversion with a splat argument, which previously produced an invalid hash literal. (@bbatsov)Style/HashLookupMethod with safe navigation, where the suggested bracket form would be the unreadable hash&.[](key). (@bbatsov)Style/IdenticalConditionalBranches that hoisted the moved expression to column zero instead of matching the surrounding indentation. (@bbatsov)Style/InvertibleUnlessCondition with mixed &&/|| conditions, which lost the required parentheses when inverting. (@bbatsov)Style/TrivialAccessors when AllowPredicates: false is set and a trivial reader is defined as a predicate class method. (@koic)Layout/LineLength with SplitStrings when an over-long string is indented under a multi-line parent. (@bbatsov)Style/MissingRespondToMissing when method_missing is defined at the top level or alongside sibling classes. (@bbatsov)Layout/ElseAlignment when using else within a block that is part of a larger expression. (@koic)Layout/MultilineMethodCallIndentation when a method chain is nested inside a parenthesized argument list or a grouped expression within a hash pair value. (@koic)Style/StructInheritance autocorrect dropping leading indentation when class is inside a module or namespace. (@amckinnie)Style/DocumentationMethod ignoring AllowedMethods for inline modifier defs. (@bbatsov)Style/LambdaCall when the argument list contains a comment, which the autocorrect would have dropped. (@bbatsov)on_new_investigation, on_investigation_end, and on_other_file only to cops that refine them, and by skipping after_* dispatch when no cop needs it. (@bbatsov)Lint/Debugger performance on code without debugger calls. (@bbatsov)Lint/NumericOperationWithConstantResult autocorrect as unsafe because it drops the operands, discarding their side effects and silencing cases where the result is not actually constant (e.g. x / x raises when x is 0). (@bbatsov)AllowedPatterns, ForbiddenPatterns, and AllowedMethods by compiling the configured patterns only once. (@bbatsov)Style/IfUnlessModifier and other modifier cops on files with many comments or conditionals. (@bbatsov)