Skip to content

false positive for define method Naming/MethodName #14468

@nna774

Description

@nna774
define_method '`' do
  puts :hello
end

When I define method with define_method (for overwire system function), I get warning Naming/MethodName: Use snake_case for method names.

Expected behavior

no warning output

Actual behavior

rubocop --only Naming/MethodName --debug
nana@er rubocop % bundle exec rubocop --only Naming/MethodName --debug
For /Users/nana/codes/misk/rubocop: Default configuration from /Users/nana/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rubocop-1.79.2/config/default.yml
Use parallel by default.
The following cops were added to RuboCop, but are not configured. Please set Enabled to either `true` or `false` in your `.rubocop.yml` file.

Please also note that you can opt-in to new cops by default by adding this to your config:
  AllCops:
    NewCops: enable

Gemspec/AddRuntimeDependency: # new in 1.65
  Enabled: true
Gemspec/AttributeAssignment: # new in 1.77
  Enabled: true
Gemspec/DeprecatedAttributeAssignment: # new in 1.30
  Enabled: true
Gemspec/DevelopmentDependencies: # new in 1.44
  Enabled: true
Gemspec/RequireMFA: # new in 1.23
  Enabled: true
Layout/EmptyLinesAfterModuleInclusion: # new in 1.79
  Enabled: true
Layout/LineContinuationLeadingSpace: # new in 1.31
  Enabled: true
Layout/LineContinuationSpacing: # new in 1.31
  Enabled: true
Layout/LineEndStringConcatenationIndentation: # new in 1.18
  Enabled: true
Layout/SpaceBeforeBrackets: # new in 1.7
  Enabled: true
Lint/AmbiguousAssignment: # new in 1.7
  Enabled: true
Lint/AmbiguousOperatorPrecedence: # new in 1.21
  Enabled: true
Lint/AmbiguousRange: # new in 1.19
  Enabled: true
Lint/ArrayLiteralInRegexp: # new in 1.71
  Enabled: true
Lint/ConstantOverwrittenInRescue: # new in 1.31
  Enabled: true
Lint/ConstantReassignment: # new in 1.70
  Enabled: true
Lint/CopDirectiveSyntax: # new in 1.72
  Enabled: true
Lint/DeprecatedConstants: # new in 1.8
  Enabled: true
Lint/DuplicateBranch: # new in 1.3
  Enabled: true
Lint/DuplicateMagicComment: # new in 1.37
  Enabled: true
Lint/DuplicateMatchPattern: # new in 1.50
  Enabled: true
Lint/DuplicateRegexpCharacterClassElement: # new in 1.1
  Enabled: true
Lint/DuplicateSetElement: # new in 1.67
  Enabled: true
Lint/EmptyBlock: # new in 1.1
  Enabled: true
Lint/EmptyClass: # new in 1.3
  Enabled: true
Lint/EmptyInPattern: # new in 1.16
  Enabled: true
Lint/HashNewWithKeywordArgumentsAsDefault: # new in 1.69
  Enabled: true
Lint/IncompatibleIoSelectWithFiberScheduler: # new in 1.21
  Enabled: true
Lint/ItWithoutArgumentsInBlock: # new in 1.59
  Enabled: true
Lint/LambdaWithoutLiteralBlock: # new in 1.8
  Enabled: true
Lint/LiteralAssignmentInCondition: # new in 1.58
  Enabled: true
Lint/MixedCaseRange: # new in 1.53
  Enabled: true
Lint/NoReturnInBeginEndBlocks: # new in 1.2
  Enabled: true
Lint/NonAtomicFileOperation: # new in 1.31
  Enabled: true
Lint/NumberedParameterAssignment: # new in 1.9
  Enabled: true
Lint/NumericOperationWithConstantResult: # new in 1.69
  Enabled: true
Lint/OrAssignmentToConstant: # new in 1.9
  Enabled: true
Lint/RedundantDirGlobSort: # new in 1.8
  Enabled: true
Lint/RedundantRegexpQuantifiers: # new in 1.53
  Enabled: true
Lint/RedundantTypeConversion: # new in 1.72
  Enabled: true
Lint/RefinementImportMethods: # new in 1.27
  Enabled: true
Lint/RequireRangeParentheses: # new in 1.32
  Enabled: true
Lint/RequireRelativeSelfPath: # new in 1.22
  Enabled: true
Lint/SharedMutableDefault: # new in 1.70
  Enabled: true
Lint/SuppressedExceptionInNumberConversion: # new in 1.72
  Enabled: true
Lint/SymbolConversion: # new in 1.9
  Enabled: true
Lint/ToEnumArguments: # new in 1.1
  Enabled: true
Lint/TripleQuotes: # new in 1.9
  Enabled: true
Lint/UnescapedBracketInRegexp: # new in 1.68
  Enabled: true
Lint/UnexpectedBlockArity: # new in 1.5
  Enabled: true
Lint/UnmodifiedReduceAccumulator: # new in 1.1
  Enabled: true
Lint/UselessConstantScoping: # new in 1.72
  Enabled: true
Lint/UselessDefaultValueArgument: # new in 1.76
  Enabled: true
Lint/UselessDefined: # new in 1.69
  Enabled: true
Lint/UselessNumericOperation: # new in 1.66
  Enabled: true
Lint/UselessOr: # new in 1.76
  Enabled: true
Lint/UselessRescue: # new in 1.43
  Enabled: true
Lint/UselessRuby2Keywords: # new in 1.23
  Enabled: true
Metrics/CollectionLiteralLength: # new in 1.47
  Enabled: true
Naming/BlockForwarding: # new in 1.24
  Enabled: true
Naming/PredicateMethod: # new in 1.76
  Enabled: true
Security/CompoundHash: # new in 1.28
  Enabled: true
Security/IoMethods: # new in 1.22
  Enabled: true
Style/AmbiguousEndlessMethodDefinition: # new in 1.68
  Enabled: true
Style/ArgumentsForwarding: # new in 1.1
  Enabled: true
Style/ArrayIntersect: # new in 1.40
  Enabled: true
Style/BitwisePredicate: # new in 1.68
  Enabled: true
Style/CollectionCompact: # new in 1.2
  Enabled: true
Style/CollectionQuerying: # new in 1.77
  Enabled: true
Style/CombinableDefined: # new in 1.68
  Enabled: true
Style/ComparableBetween: # new in 1.74
  Enabled: true
Style/ComparableClamp: # new in 1.44
  Enabled: true
Style/ConcatArrayLiterals: # new in 1.41
  Enabled: true
Style/DataInheritance: # new in 1.49
  Enabled: true
Style/DigChain: # new in 1.69
  Enabled: true
Style/DirEmpty: # new in 1.48
  Enabled: true
Style/DocumentDynamicEvalDefinition: # new in 1.1
  Enabled: true
Style/EmptyHeredoc: # new in 1.32
  Enabled: true
Style/EmptyStringInsideInterpolation: # new in 1.76
  Enabled: true
Style/EndlessMethod: # new in 1.8
  Enabled: true
Style/EnvHome: # new in 1.29
  Enabled: true
Style/ExactRegexpMatch: # new in 1.51
  Enabled: true
Style/FetchEnvVar: # new in 1.28
  Enabled: true
Style/FileEmpty: # new in 1.48
  Enabled: true
Style/FileNull: # new in 1.69
  Enabled: true
Style/FileRead: # new in 1.24
  Enabled: true
Style/FileTouch: # new in 1.69
  Enabled: true
Style/FileWrite: # new in 1.24
  Enabled: true
Style/HashConversion: # new in 1.10
  Enabled: true
Style/HashExcept: # new in 1.7
  Enabled: true
Style/HashFetchChain: # new in 1.75
  Enabled: true
Style/HashSlice: # new in 1.71
  Enabled: true
Style/IfWithBooleanLiteralBranches: # new in 1.9
  Enabled: true
Style/InPatternThen: # new in 1.16
  Enabled: true
Style/ItAssignment: # new in 1.70
  Enabled: true
Style/ItBlockParameter: # new in 1.75
  Enabled: true
Style/KeywordArgumentsMerging: # new in 1.68
  Enabled: true
Style/MagicCommentFormat: # new in 1.35
  Enabled: true
Style/MapCompactWithConditionalBlock: # new in 1.30
  Enabled: true
Style/MapIntoArray: # new in 1.63
  Enabled: true
Style/MapToHash: # new in 1.24
  Enabled: true
Style/MapToSet: # new in 1.42
  Enabled: true
Style/MinMaxComparison: # new in 1.42
  Enabled: true
Style/MultilineInPatternThen: # new in 1.16
  Enabled: true
Style/NegatedIfElseCondition: # new in 1.2
  Enabled: true
Style/NestedFileDirname: # new in 1.26
  Enabled: true
Style/NilLambda: # new in 1.3
  Enabled: true
Style/NumberedParameters: # new in 1.22
  Enabled: true
Style/NumberedParametersLimit: # new in 1.22
  Enabled: true
Style/ObjectThen: # new in 1.28
  Enabled: true
Style/OpenStructUse: # new in 1.23
  Enabled: true
Style/OperatorMethodCall: # new in 1.37
  Enabled: true
Style/QuotedSymbols: # new in 1.16
  Enabled: true
Style/RedundantArgument: # new in 1.4
  Enabled: true
Style/RedundantArrayConstructor: # new in 1.52
  Enabled: true
Style/RedundantArrayFlatten: # new in 1.76
  Enabled: true
Style/RedundantConstantBase: # new in 1.40
  Enabled: true
Style/RedundantCurrentDirectoryInPath: # new in 1.53
  Enabled: true
Style/RedundantDoubleSplatHashBraces: # new in 1.41
  Enabled: true
Style/RedundantEach: # new in 1.38
  Enabled: true
Style/RedundantFilterChain: # new in 1.52
  Enabled: true
Style/RedundantFormat: # new in 1.72
  Enabled: true
Style/RedundantHeredocDelimiterQuotes: # new in 1.45
  Enabled: true
Style/RedundantInitialize: # new in 1.27
  Enabled: true
Style/RedundantInterpolationUnfreeze: # new in 1.66
  Enabled: true
Style/RedundantLineContinuation: # new in 1.49
  Enabled: true
Style/RedundantRegexpArgument: # new in 1.53
  Enabled: true
Style/RedundantRegexpConstructor: # new in 1.52
  Enabled: true
Style/RedundantSelfAssignmentBranch: # new in 1.19
  Enabled: true
Style/RedundantStringEscape: # new in 1.37
  Enabled: true
Style/ReturnNilInPredicateMethodDefinition: # new in 1.53
  Enabled: true
Style/SafeNavigationChainLength: # new in 1.68
  Enabled: true
Style/SelectByRegexp: # new in 1.22
  Enabled: true
Style/SendWithLiteralMethodName: # new in 1.64
  Enabled: true
Style/SingleLineDoEndBlock: # new in 1.57
  Enabled: true
Style/StringChars: # new in 1.12
  Enabled: true
Style/SuperArguments: # new in 1.64
  Enabled: true
Style/SuperWithArgsParentheses: # new in 1.58
  Enabled: true
Style/SwapValues: # new in 1.1
  Enabled: true
Style/YAMLFileRead: # new in 1.53
  Enabled: true
For more information: https://docs.rubocop.org/rubocop/versioning.html
Running parallel inspection
Loading cache from /Users/nana/.cache/rubocop_cache/565782832b6bc0dd78c89ef508b4c9e2355296fc/b96b2869dd1aa08f3f0fa18e2731e6013bc4b06b/0f9cabe3b2fafceb1b5eb5d9ec24ecc982af8127
Loading cache from /Users/nana/.cache/rubocop_cache/565782832b6bc0dd78c89ef508b4c9e2355296fc/b96b2869dd1aa08f3f0fa18e2731e6013bc4b06b/56f0d63e16901b819bf81d36161f391379aa52b5
Inspecting 2 files
Scanning /Users/nana/codes/misk/rubocop/Gemfile
Loading cache from /Users/nana/.cache/rubocop_cache/565782832b6bc0dd78c89ef508b4c9e2355296fc/b96b2869dd1aa08f3f0fa18e2731e6013bc4b06b/0f9cabe3b2fafceb1b5eb5d9ec24ecc982af8127
.Scanning /Users/nana/codes/misk/rubocop/main.rb
Loading cache from /Users/nana/.cache/rubocop_cache/565782832b6bc0dd78c89ef508b4c9e2355296fc/b96b2869dd1aa08f3f0fa18e2731e6013bc4b06b/56f0d63e16901b819bf81d36161f391379aa52b5
C

Offenses:

main.rb:1:15: C: Naming/MethodName: Use snake_case for method names.
define_method '`' do
              ^^^

2 files inspected, 1 offense detected
Finished in 0.165039000014076 seconds

Describe here what actually happened.
Please use rubocop --debug when pasting rubocop output as it contains additional information.

Steps to reproduce the problem

nana@er rubocop % cat main.rb 
define_method '`' do
  puts :hello
end

RuboCop version

Include the output of rubocop -V or bundle exec rubocop -V if using Bundler.
If you see extension cop versions (e.g. rubocop-performance, rubocop-rspec, and others)
output by rubocop -V, include them as well. Here's an example:

nana@er rubocop % bundle exec rubocop -V                              
1.79.2 (using Parser 3.3.9.0, rubocop-ast 1.46.0, analyzing as Ruby 2.7, running on ruby 3.4.1) [arm64-darwin24]

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions