命名

命名/访问器方法名

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

0.50

-

确保访问器方法的命名正确。适用于实例方法和类方法。

仅为具有预期参数数量的方法注册违规。Getter(get_attribute)必须没有参数才能注册,Setter(set_attribute(value))必须恰好有一个参数。

示例

# bad
def set_attribute(value)
end

# good
def attribute=(value)
end

# bad
def get_attribute
end

# good
def attribute
end

# accepted, incorrect arity for getter
def get_value(attr)
end

# accepted, incorrect arity for setter
def set_value
end

命名/ASCII标识符

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

0.50

0.87

检查标识符和常量名称中的非ASCII字符。始终检查标识符,是否检查常量可以通过AsciiConstants配置控制。

示例

# bad
def καλημερα # Greek alphabet (non-ascii)
end

# bad
def こんにちはと言う # Japanese character (non-ascii)
end

# bad
def hello_🍣 # Emoji (non-ascii)
end

# good
def say_hello
end

# bad
신장 = 10 # Hangul character (non-ascii)

# good
height = 10

# bad
params[:عرض_gteq] # Arabic character (non-ascii)

# good
params[:width_gteq]

AsciiConstants: true(默认)

# bad
class Foö
end

FOÖ = "foo"

AsciiConstants: false

# good
class Foö
end

FOÖ = "foo"

可配置属性

名称 默认值 可配置值

AsciiConstants

true

布尔值

命名/二元运算符参数名

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

始终

0.50

1.2

确保某些二元运算符方法的唯一参数名为other

示例

# bad
def +(amount); end

# good
def +(other); end

命名/块转发

必需的 Ruby 版本:3.1
默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

1.24

-

在 Ruby 3.1 中,添加了匿名块转发。

此 cop 识别可以将do_something(&block)替换为do_something(&)的地方。

它还通过可选的explicit选项支持相反的样式。您可以使用BlockForwardingName指定块变量名称以进行自动更正。默认变量名称为block。如果名称已在使用中,则不会自动更正。

示例

EnforcedStyle: anonymous(默认)

# bad
def foo(&block)
  bar(&block)
end

# good
def foo(&)
  bar(&)
end

EnforcedStyle: explicit

# bad
def foo(&)
  bar(&)
end

# good
def foo(&block)
  bar(&block)
end

可配置属性

名称 默认值 可配置值

EnforcedStyle

匿名

匿名, 显式

BlockForwardingName

字符串

命名/块参数名

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

0.53

0.77

检查块参数名描述性。高度可配置。

MinNameLength 配置选项接受整数。它表示名称的最小字符数。默认值为 1。AllowNamesEndingInNumbers 配置选项接受布尔值。设置为 false 时,此 cop 将为以数字结尾的名称注册违规。默认值为 false。AllowedNames 配置选项接受允许的名称数组,这些名称永远不会注册违规。ForbiddenNames 配置选项接受受限名称数组,这些名称将始终注册违规。

示例

# bad
bar do |varOne, varTwo|
  varOne + varTwo
end

# With `AllowNamesEndingInNumbers` set to false
foo { |num1, num2| num1 * num2 }

# With `MinNameLength` set to number greater than 1
baz { |a, b, c| do_stuff(a, b, c) }

# good
bar do |thud, fred|
  thud + fred
end

foo { |speed, distance| speed * distance }

baz { |age, height, gender| do_stuff(age, height, gender) }

可配置属性

名称 默认值 可配置值

MinNameLength

1

整数

AllowNamesEndingInNumbers

true

布尔值

AllowedNames

[]

数组

ForbiddenNames

[]

数组

命名/类和模块驼峰式命名法

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

0.50

0.85

检查类和模块名称中是否有下划线。

AllowedNames 配置接受允许的名称数组。其默认值为 ['module_parent']。这些名称可以是完整的类/模块名称或名称的一部分。例如,将 my_class 添加到 AllowedNames 配置将允许诸如 my_classmy_class::UserApp::my_classApp::my_class::User 等名称。

示例

# bad
class My_Class
end
module My_Module
end

# good
class MyClass
end
module MyModule
end
class module_parent::MyModule
end

可配置属性

名称 默认值 可配置值

AllowedNames

module_parent

数组

命名/常量名

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

0.50

-

检查常量名是否使用大写下划线命名法。

为了避免误报,它会忽略无法确定分配给常量的值的类型的情况。

示例

# bad
InchInCm = 2.54
INCHinCM = 2.54
Inch_In_Cm = 2.54

# good
INCH_IN_CM = 2.54

命名/文件名

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

0.50

1.23

确保 Ruby 源文件使用蛇形命名法。

此 cop 还忽略 .gemspec 文件,因为 Bundler 建议在嵌套 gem 中使用连字符来分隔命名空间(例如 bundler-console 变成 Bundler::Console)。因此,gemspec 应该命名为 bundler-console.gemspec

ExpectMatchingDefinition(默认:false)为 true 时,该规则要求每个文件都包含一个与文件名匹配的类、模块或 Struct 定义。这可以通过使用 CheckDefinitionPathHierarchy(默认:true)进一步配置,以确定路径是否应与上述定义的命名空间匹配。

IgnoreExecutableScripts(默认:true)为 true 时,以 Shebang 行开头的文件不会被该规则考虑。

当设置 Regex 时,该规则将标记任何不匹配正则表达式的文件名。

示例

# bad
lib/layoutManager.rb

anything/usingCamelCase

# good
lib/layout_manager.rb

anything/using_snake_case.rake

可配置属性

名称 默认值 可配置值

排除

Rakefile.rb

数组

ExpectMatchingDefinition

false

布尔值

CheckDefinitionPathHierarchy

true

布尔值

CheckDefinitionPathHierarchyRoots

lib, spec, test, src

数组

Regex

<none>

IgnoreExecutableScripts

true

布尔值

AllowedAcronyms

CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS

数组

命名/Heredoc分隔符大小写

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

始终

0.50

1.2

检查您的 Heredoc 是否使用配置的大小写。默认情况下,它被配置为强制使用大写 Heredoc。

示例

强制风格:大写(默认)

# bad
<<-sql
  SELECT * FROM foo
sql

# good
<<-SQL
  SELECT * FROM foo
SQL

强制风格:小写

# bad
<<-SQL
  SELECT * FROM foo
SQL

# good
<<-sql
  SELECT * FROM foo
sql

可配置属性

名称 默认值 可配置值

EnforcedStyle

uppercase

lowercase, uppercase

命名/Heredoc分隔符命名

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

0.50

-

检查您的 Heredoc 是否使用有意义的分隔符。默认情况下,它不允许使用 ENDEO*,并且可以通过禁止列表添加其他分隔符来配置。

示例

# good
<<-SQL
  SELECT * FROM foo
SQL

# bad
<<-END
  SELECT * FROM foo
END

# bad
<<-EOS
  SELECT * FROM foo
EOS

可配置属性

名称 默认值 可配置值

ForbiddenDelimiters

(?i-mx:(^|\s)(EO[A-Z]{1}|END)(\s|$))

数组

命名/包容性语言

默认启用 安全 支持自动更正 添加版本 更改版本

已禁用

始终

1.18

1.49

建议使用包容性语言,而不是有问题的术语。该检查器可以检查以下位置以查找违规行为

  • 标识符

  • 常量

  • 变量

  • 字符串

  • 符号

  • 注释

  • 文件路径

每个位置都可以通过配置单独启用/禁用,例如 CheckIdentifiers = true/false。

标记的术语可配置。对于每个标记的术语,可以指定一个可选的正则表达式来识别违规行为。可以配置替换标记术语的建议,并将显示为违规消息的一部分。可以为标记的术语指定一个 AllowedRegex 来免除该术语的允许使用。WholeWord: true 可以设置在标记的术语上,以指示检查器应该只在术语匹配整个单词时匹配(部分匹配将不会是违规行为)。

当只有一个建议时,该检查器支持自动更正。当有多个建议时,无法识别最佳建议,并且不会自动更正。

示例

FlaggedTerms: { whitelist: { Suggestions: ['allowlist'] } }

# Suggest replacing identifier whitelist with allowlist

# bad
whitelist_users = %w(user1 user1)

# good
allowlist_users = %w(user1 user2)

FlaggedTerms: { master: { Suggestions: ['main', 'primary', 'leader'] } }

# Suggest replacing master in an instance variable name with main, primary, or leader

# bad
@master_node = 'node1.example.com'

# good
@primary_node = 'node1.example.com'

FlaggedTerms: { whitelist: { Regex: !ruby/regexp '/white[-_\s]?list' } }

# Identify problematic terms using a Regexp

# bad
white_list = %w(user1 user2)

# good
allow_list = %w(user1 user2)

FlaggedTerms: { master: { AllowedRegex: 'master\'?s degree' } }

# Specify allowed uses of the flagged term as a string or regexp.

# bad
# They had a masters

# good
# They had a master's degree

FlaggedTerms: { slave: { WholeWord: true } }

# Specify that only terms that are full matches will be flagged.

# bad
Slave

# good (won't be flagged despite containing `slave`)
TeslaVehicle

可配置属性

名称 默认值 可配置值

CheckIdentifiers

true

布尔值

CheckConstants

true

布尔值

CheckVariables

true

布尔值

CheckStrings

false

布尔值

CheckSymbols

true

布尔值

CheckComments

true

布尔值

CheckFilepaths

true

布尔值

FlaggedTerms

{"whitelist"⇒{"Regex"⇒/white[-\s]?list/, "Suggestions"⇒["allowlist", "permit"]}, "blacklist"⇒{"Regex"⇒/black[-\s]?list/, "Suggestions"⇒["denylist", "block"]}, "slave"⇒{"WholeWord"⇒true, "Suggestions"⇒["replica", "secondary", "follower"]}}

命名/记忆实例变量名称

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

始终(不安全)

0.53

1.2

检查记忆方法,其实例变量名称与方法名称不匹配。适用于常规方法(使用def定义)和动态方法(使用define_methoddefine_singleton_method定义)。

此代码可以与 EnforcedStyleForLeadingUnderscores 指令一起配置。它可以配置为允许以下划线开头的已记忆实例变量。以下划线为前缀的 ivar 是一种约定,用于隐式指示 ivar 不应在记忆方法之外设置或引用。

安全

此代码依赖于模式 @instance_var ||= …​,但有时用于除记忆之外的其他目的,因此此代码被认为是不安全的。此外,它的自动更正是不安全的,因为它可能与已使用的实例变量名称冲突。

示例

EnforcedStyleForLeadingUnderscores:不允许(默认)

# bad
# Method foo is memoized using an instance variable that is
# not `@foo`. This can cause confusion and bugs.
def foo
  @something ||= calculate_expensive_thing
end

def foo
  return @something if defined?(@something)
  @something = calculate_expensive_thing
end

# good
def _foo
  @foo ||= calculate_expensive_thing
end

# good
def foo
  @foo ||= calculate_expensive_thing
end

# good
def foo
  @foo ||= begin
    calculate_expensive_thing
  end
end

# good
def foo
  helper_variable = something_we_need_to_calculate_foo
  @foo ||= calculate_expensive_thing(helper_variable)
end

# good
define_method(:foo) do
  @foo ||= calculate_expensive_thing
end

# good
define_method(:foo) do
  return @foo if defined?(@foo)
  @foo = calculate_expensive_thing
end

EnforcedStyleForLeadingUnderscores:必需

# bad
def foo
  @something ||= calculate_expensive_thing
end

# bad
def foo
  @foo ||= calculate_expensive_thing
end

def foo
  return @foo if defined?(@foo)
  @foo = calculate_expensive_thing
end

# good
def foo
  @_foo ||= calculate_expensive_thing
end

# good
def _foo
  @_foo ||= calculate_expensive_thing
end

def foo
  return @_foo if defined?(@_foo)
  @_foo = calculate_expensive_thing
end

# good
define_method(:foo) do
  @_foo ||= calculate_expensive_thing
end

# good
define_method(:foo) do
  return @_foo if defined?(@_foo)
  @_foo = calculate_expensive_thing
end

EnforcedStyleForLeadingUnderscores:可选

# bad
def foo
  @something ||= calculate_expensive_thing
end

# good
def foo
  @foo ||= calculate_expensive_thing
end

# good
def foo
  @_foo ||= calculate_expensive_thing
end

# good
def _foo
  @_foo ||= calculate_expensive_thing
end

# good
def foo
  return @_foo if defined?(@_foo)
  @_foo = calculate_expensive_thing
end

# good
define_method(:foo) do
  @foo ||= calculate_expensive_thing
end

# good
define_method(:foo) do
  @_foo ||= calculate_expensive_thing
end

可配置属性

名称 默认值 可配置值

EnforcedStyleForLeadingUnderscores

不允许

disallowedrequiredoptional

命名/方法名称

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

0.50

-

确保所有方法都使用配置的样式(snake_case 或 camelCase)来命名。

此代码具有 AllowedPatterns 配置选项。

Naming/MethodName:
  AllowedPatterns:
    - '\AonSelectionBulkChange\z'
    - '\AonSelectionCleared\z'

与模式匹配的方法名称始终允许。

示例

EnforcedStyle:snake_case(默认)

# bad
def fooBar; end

# good
def foo_bar; end

EnforcedStyle:camelCase

# bad
def foo_bar; end

# good
def fooBar; end

可配置属性

名称 默认值 可配置值

EnforcedStyle

snake_case

snake_casecamelCase

AllowedPatterns

[]

数组

命名/方法参数名称

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

0.53

0.77

检查方法参数名称的描述性。它高度可配置。

MinNameLength 配置选项接受一个整数。它表示名称必须具有的最小字符数。它的默认值为 3。AllowNamesEndingInNumbers 配置选项接受一个布尔值。当设置为 false 时,此代码将为以数字结尾的名称注册违规。它的默认值为 false。AllowedNames 配置选项接受一个允许的名称数组,这些名称永远不会注册违规。ForbiddenNames 配置选项接受一个受限名称数组,这些名称将始终注册违规。

示例

# bad
def bar(varOne, varTwo)
  varOne + varTwo
end

# With `AllowNamesEndingInNumbers` set to false
def foo(num1, num2)
  num1 * num2
end

# With `MinNameLength` set to number greater than 1
def baz(a, b, c)
  do_stuff(a, b, c)
end

# good
def bar(thud, fred)
  thud + fred
end

def foo(speed, distance)
  speed * distance
end

def baz(age_a, height_b, gender_c)
  do_stuff(age_a, height_b, gender_c)
end

可配置属性

名称 默认值 可配置值

MinNameLength

3

整数

AllowNamesEndingInNumbers

true

布尔值

AllowedNames

asatbyccdbidifinioipofonosppto

数组

ForbiddenNames

[]

数组

命名/谓词名称

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

0.50

0.77

检查谓词方法名称是否以问号结尾,并且不以禁止的前缀开头。

如果方法名称以 NamePrefix 配置中定义的前缀之一开头,则该方法被确定为谓词方法。您可以通过更改此选项来更改被视为前缀的内容。cop 要求任何以这些前缀之一开头的名称的结尾必须是 ?。可以通过添加到 AllowedMethods 配置中来允许其他方法。

is_a? 方法默认情况下是允许的。

如果设置了 ForbiddenPrefixes,则以配置的前缀开头的将不被允许,并将被自动更正删除。

换句话说,如果 ForbiddenPrefixes 为空,则名为 is_foo 的方法只会因为缺少问号而注册违规(并将被自动更正为 is_foo?)。如果 ForbiddenPrefixes 包含 is_,则 is_foo 将因为缺少问号和 is_ 前缀而注册违规,并将被更正为 foo?

ForbiddenPrefixes 仅应用于 NamePrefix 中的前缀;前者中存在但后者中不存在的前缀将不被此 cop 考虑。

示例

# bad
def is_even(value)
end

def is_even?(value)
end

# good
def even?(value)
end

# bad
def has_value
end

def has_value?
end

# good
def value?
end

AllowedMethods: ['is_a?'](默认)

# good
def is_a?(value)
end

可配置属性

名称 默认值 可配置值

NamePrefix

is_, has_, have_

数组

ForbiddenPrefixes

is_, has_, have_

数组

AllowedMethods

is_a?

数组

MethodDefinitionMacros

define_method, define_singleton_method

数组

排除

spec/**/*

数组

命名/已救援异常变量名称

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

始终

0.67

0.68

确保已救援异常变量的命名符合预期。

PreferredName 配置选项接受一个 String。它表示变量的所需名称。它的默认值为 e

此 cop 不考虑嵌套救援,因为它无法保证外部救援中的变量不会在内部救援中使用(在这种情况下,更改内部变量会遮蔽外部变量)。

示例

PreferredName: e(默认)

# bad
begin
  # do something
rescue MyException => exception
  # do something
end

# good
begin
  # do something
rescue MyException => e
  # do something
end

# good
begin
  # do something
rescue MyException => _e
  # do something
end

首选名称:exception

# bad
begin
  # do something
rescue MyException => e
  # do something
end

# good
begin
  # do something
rescue MyException => exception
  # do something
end

# good
begin
  # do something
rescue MyException => _exception
  # do something
end

可配置属性

名称 默认值 可配置值

首选名称

e

字符串

命名/变量名

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

0.50

1.8

确保所有变量使用配置的样式,snake_case 或 camelCase,作为其名称。

示例

强制样式:snake_case(默认)

# bad
fooBar = 1

# good
foo_bar = 1

强制样式:camelCase

# bad
foo_bar = 1

# good
fooBar = 1

允许的标识符:['fooBar']

# good (with EnforcedStyle: snake_case)
fooBar = 1

允许的模式:['_v\d+\z']

# good (with EnforcedStyle: camelCase)
:release_v1

可配置属性

名称 默认值 可配置值

EnforcedStyle

snake_case

snake_casecamelCase

允许的标识符

[]

数组

AllowedPatterns

[]

数组

命名/变量编号

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

0.50

1.4

确保所有编号变量使用配置的样式,snake_case、normalcase 或 non_integer,作为其编号。

此外,CheckMethodNamesCheckSymbols 配置选项可用于指定是否应检查方法名称和符号。两者默认情况下都已启用。

示例

强制样式:normalcase(默认)

# bad
:some_sym_1
variable_1 = 1

def some_method_1; end

def some_method1(arg_1); end

# good
:some_sym1
variable1 = 1

def some_method1; end

def some_method1(arg1); end

强制样式:snake_case

# bad
:some_sym1
variable1 = 1

def some_method1; end

def some_method_1(arg1); end

# good
:some_sym_1
variable_1 = 1

def some_method_1; end

def some_method_1(arg_1); end

强制样式:non_integer

# bad
:some_sym1
:some_sym_1

variable1 = 1
variable_1 = 1

def some_method1; end

def some_method_1; end

def some_methodone(arg1); end
def some_methodone(arg_1); end

# good
:some_symone
:some_sym_one

variableone = 1
variable_one = 1

def some_methodone; end

def some_method_one; end

def some_methodone(argone); end
def some_methodone(arg_one); end

# In the following examples, we assume `EnforcedStyle: normalcase` (default).

CheckMethodNames:true(默认)

# bad
def some_method_1; end

CheckMethodNames:false

# good
def some_method_1; end

CheckSymbols:true(默认)

# bad
:some_sym_1

CheckSymbols:false

# good
:some_sym_1

允许的标识符:[capture3]

# good
expect(Open3).to receive(:capture3)

允许的模式:['_v\d+\z']

# good
:some_sym_v1

可配置属性

名称 默认值 可配置值

EnforcedStyle

normalcase

snake_casenormalcasenon_integer

CheckMethodNames

true

布尔值

CheckSymbols

true

布尔值

允许的标识符

capture3iso8601rfc1123_daterfc822rfc2822rfc3339x86_64

数组

AllowedPatterns

[]

数组