Skip to content

Instantly share code, notes, and snippets.

@dleavitt
Last active October 31, 2023 06:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dleavitt/e6dbb12da833a0e967d1a289e9cc8da2 to your computer and use it in GitHub Desktop.
Save dleavitt/e6dbb12da833a0e967d1a289e9cc8da2 to your computer and use it in GitHub Desktop.
{
"title": "JSON schema for RuboCop configuration files",
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"require": {
"$ref": "#/definitions/stringOrStrings"
},
"inherit_from": {
"$ref": "#/definitions/stringOrStrings"
},
"inherit_gem": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/stringOrStrings"
}
},
"inherit_mode": {
"$ref": "#/definitions/inheritMode"
},
"AllCops": {
"type": "object",
"allOf": [
{
"$ref": "#/definitions/sharedProperties"
},
{
"$ref": "#/definitions/allCopsProperties"
}
]
},
"Migration": {
"$ref": "#/definitions/copProperties"
},
"Bundler": {
"$ref": "#/definitions/copProperties"
},
"Gemspec": {
"$ref": "#/definitions/copProperties"
},
"Layout": {
"$ref": "#/definitions/copProperties"
},
"Lint": {
"$ref": "#/definitions/copProperties"
},
"Metrics": {
"$ref": "#/definitions/copProperties"
},
"Naming": {
"$ref": "#/definitions/copProperties"
},
"Style": {
"$ref": "#/definitions/copProperties"
},
"Security": {
"$ref": "#/definitions/copProperties"
},
"Rails": {
"$ref": "#/definitions/copProperties"
},
"Performance": {
"$ref": "#/definitions/copProperties"
},
"Capybara/RSpec": {
"$ref": "#/definitions/copProperties"
},
"Capybara": {
"$ref": "#/definitions/copProperties"
},
"FactoryBot": {
"$ref": "#/definitions/copProperties"
},
"RSpec/Capybara": {
"$ref": "#/definitions/copProperties"
},
"RSpec/Rails": {
"$ref": "#/definitions/copProperties"
},
"RSpec": {
"$ref": "#/definitions/copProperties"
},
"GraphQL": {
"$ref": "#/definitions/copProperties"
},
"Migration/DepartmentName": {
"title": "Migration/DepartmentName",
"description": "Check that cop names in rubocop:disable (etc) comments are given with department name.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Bundler/DuplicatedGem": {
"title": "Bundler/DuplicatedGem",
"description": "Checks for duplicate gem entries in Gemfile.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Severity": {
"type": "string",
"default": "warning"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemfile",
"**/Gemfile",
"**/gems.rb"
]
}
}
}
]
},
"Bundler/DuplicatedGroup": {
"title": "Bundler/DuplicatedGroup",
"description": "Checks for duplicate group entries in Gemfile.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Severity": {
"type": "string",
"default": "warning"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemfile",
"**/Gemfile",
"**/gems.rb"
]
}
}
}
]
},
"Bundler/GemComment": {
"title": "Bundler/GemComment",
"description": "Add a comment describing each gem.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemfile",
"**/Gemfile",
"**/gems.rb"
]
},
"IgnoredGems": {
"type": "array",
"items": {
},
"default": [
]
},
"OnlyFor": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Bundler/GemFilename": {
"title": "Bundler/GemFilename",
"description": "Enforces the filename for managing gems.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"Gemfile",
"gems.rb"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"Gemfile",
"gems.rb"
]
}
}
],
"default": "Gemfile"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/Gemfile",
"**/gems.rb",
"**/Gemfile.lock",
"**/gems.locked"
]
}
}
}
]
},
"Bundler/GemVersion": {
"title": "Bundler/GemVersion",
"description": "Requires or forbids specifying gem versions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"required",
"forbidden"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"required",
"forbidden"
]
}
}
],
"default": "required"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemfile",
"**/Gemfile",
"**/gems.rb"
]
},
"AllowedGems": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Bundler/InsecureProtocolSource": {
"title": "Bundler/InsecureProtocolSource",
"description": "The source `:gemcutter`, `:rubygems` and `:rubyforge` are deprecated because HTTP requests are insecure. Please change your source to 'https://rubygems.org' if possible, or 'http://rubygems.org' if not.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Severity": {
"type": "string",
"default": "warning"
},
"AllowHttpProtocol": {
"type": "boolean",
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemfile",
"**/Gemfile",
"**/gems.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Bundler/OrderedGems": {
"title": "Bundler/OrderedGems",
"description": "Gems within groups in the Gemfile should be alphabetically sorted.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"TreatCommentsAsGroupSeparators": {
"type": "boolean",
"default": true
},
"ConsiderPunctuation": {
"type": "boolean",
"default": false
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemfile",
"**/Gemfile",
"**/gems.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Gemspec/DependencyVersion": {
"title": "Gemspec/DependencyVersion",
"description": "Requires or forbids specifying gem dependency versions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"required",
"forbidden"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"required",
"forbidden"
]
}
}
],
"default": "required"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemspec"
]
},
"AllowedGems": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Gemspec/DeprecatedAttributeAssignment": {
"title": "Gemspec/DeprecatedAttributeAssignment",
"description": "Checks that deprecated attribute assignments are not set in a gemspec file.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Severity": {
"type": "string",
"default": "warning"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemspec"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Gemspec/DevelopmentDependencies": {
"title": "Gemspec/DevelopmentDependencies",
"description": "Checks that development dependencies are specified in Gemfile rather than gemspec.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"Gemfile",
"gems.rb",
"gemspec"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"Gemfile",
"gems.rb",
"gemspec"
]
}
}
],
"default": "Gemfile"
},
"AllowedGems": {
"type": "array",
"items": {
},
"default": [
]
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemspec",
"**/Gemfile",
"**/gems.rb"
]
}
}
}
]
},
"Gemspec/DuplicatedAssignment": {
"title": "Gemspec/DuplicatedAssignment",
"description": "An attribute assignment method calls should be listed only once in a gemspec.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Severity": {
"type": "string",
"default": "warning"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemspec"
]
}
}
}
]
},
"Gemspec/OrderedDependencies": {
"title": "Gemspec/OrderedDependencies",
"description": "Dependencies in the gemspec should be alphabetically sorted.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"TreatCommentsAsGroupSeparators": {
"type": "boolean",
"default": true
},
"ConsiderPunctuation": {
"type": "boolean",
"default": false
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemspec"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Gemspec/RequireMFA": {
"title": "Gemspec/RequireMFA",
"description": "Checks that the gemspec has metadata to require Multi-Factor Authentication from RubyGems.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Severity": {
"type": "string",
"default": "warning"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemspec"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Gemspec/RequiredRubyVersion": {
"title": "Gemspec/RequiredRubyVersion",
"description": "Checks that `required_ruby_version` of gemspec is specified and equal to `TargetRubyVersion` of .rubocop.yml.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Severity": {
"type": "string",
"default": "warning"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemspec"
]
}
}
}
]
},
"Gemspec/RubyVersionGlobalsUsage": {
"title": "Gemspec/RubyVersionGlobalsUsage",
"description": "Checks usage of RUBY_VERSION in gemspec.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Severity": {
"type": "string",
"default": "warning"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*.gemspec"
]
}
}
}
]
},
"Layout/AccessModifierIndentation": {
"title": "Layout/AccessModifierIndentation",
"description": "Check indentation of private/protected visibility modifiers.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"outdent",
"indent"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"outdent",
"indent"
]
}
}
],
"default": "indent"
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/ArgumentAlignment": {
"title": "Layout/ArgumentAlignment",
"description": "Align the arguments of a method call if they span more than one line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"with_first_argument",
"with_fixed_indentation"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"with_first_argument",
"with_fixed_indentation"
]
}
}
],
"default": "with_first_argument"
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/ArrayAlignment": {
"title": "Layout/ArrayAlignment",
"description": "Align the elements of an array literal if they span more than one line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"with_first_element",
"with_fixed_indentation"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"with_first_element",
"with_fixed_indentation"
]
}
}
],
"default": "with_first_element"
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/AssignmentIndentation": {
"title": "Layout/AssignmentIndentation",
"description": "Checks the indentation of the first line of the right-hand-side of a multi-line assignment.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/BeginEndAlignment": {
"title": "Layout/BeginEndAlignment",
"description": "Align ends corresponding to begins correctly.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyleAlignWith": {
"oneOf": [
{
"type": "string",
"enum": [
"start_of_line",
"begin"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"start_of_line",
"begin"
]
}
}
],
"default": "start_of_line"
},
"Severity": {
"type": "string",
"default": "warning"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/BlockAlignment": {
"title": "Layout/BlockAlignment",
"description": "Align block ends correctly.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyleAlignWith": {
"oneOf": [
{
"type": "string",
"enum": [
"either",
"start_of_block",
"start_of_line"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"either",
"start_of_block",
"start_of_line"
]
}
}
],
"default": "either"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/BlockEndNewline": {
"title": "Layout/BlockEndNewline",
"description": "Put end statement of multiline block on its own line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/CaseIndentation": {
"title": "Layout/CaseIndentation",
"description": "Indentation of when in a case/(when|in)/[else/]end.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"case",
"end"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"case",
"end"
]
}
}
],
"default": "case"
},
"IndentOneStep": {
"type": "boolean",
"default": false
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/ClassStructure": {
"title": "Layout/ClassStructure",
"description": "Enforces a configured order of definitions within a class body.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"Categories": {
"type": "object",
"default": {
"module_inclusion": [
"include",
"prepend",
"extend"
]
}
},
"ExpectedOrder": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"module_inclusion",
"constants",
"public_class_methods",
"initializer",
"public_methods",
"protected_methods",
"private_methods"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/ClosingHeredocIndentation": {
"title": "Layout/ClosingHeredocIndentation",
"description": "Checks the indentation of here document closings.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/ClosingParenthesisIndentation": {
"title": "Layout/ClosingParenthesisIndentation",
"description": "Checks the indentation of hanging closing parentheses.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/CommentIndentation": {
"title": "Layout/CommentIndentation",
"description": "Indentation of comments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowForAlignment": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/ConditionPosition": {
"title": "Layout/ConditionPosition",
"description": "Checks for condition placed in a confusing position relative to the keyword.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/DefEndAlignment": {
"title": "Layout/DefEndAlignment",
"description": "Align ends corresponding to defs correctly.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyleAlignWith": {
"oneOf": [
{
"type": "string",
"enum": [
"start_of_line",
"def"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"start_of_line",
"def"
]
}
}
],
"default": "start_of_line"
},
"Severity": {
"type": "string",
"default": "warning"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/DotPosition": {
"title": "Layout/DotPosition",
"description": "Checks the position of the dot in multi-line method calls.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"leading",
"trailing"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"leading",
"trailing"
]
}
}
],
"default": "leading"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/ElseAlignment": {
"title": "Layout/ElseAlignment",
"description": "Align elses and elsifs correctly.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyComment": {
"title": "Layout/EmptyComment",
"description": "Checks empty comment.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowBorderComment": {
"type": "boolean",
"default": true
},
"AllowMarginComment": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLineAfterGuardClause": {
"title": "Layout/EmptyLineAfterGuardClause",
"description": "Add empty line after guard clause.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLineAfterMagicComment": {
"title": "Layout/EmptyLineAfterMagicComment",
"description": "Add an empty line after magic comments to separate them from code.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLineAfterMultilineCondition": {
"title": "Layout/EmptyLineAfterMultilineCondition",
"description": "Enforces empty line after multiline condition.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLineBetweenDefs": {
"title": "Layout/EmptyLineBetweenDefs",
"description": "Use empty lines between class/module/method defs.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EmptyLineBetweenMethodDefs": {
"type": "boolean",
"default": true
},
"EmptyLineBetweenClassDefs": {
"type": "boolean",
"default": true
},
"EmptyLineBetweenModuleDefs": {
"type": "boolean",
"default": true
},
"DefLikeMacros": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowAdjacentOneLineDefs": {
"type": "boolean",
"default": true
},
"NumberOfEmptyLines": {
"type": "integer",
"default": 1
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLinesAroundAccessModifier": {
"title": "Layout/EmptyLinesAroundAccessModifier",
"description": "Keep blank lines around access modifiers.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"around",
"only_before"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"around",
"only_before"
]
}
}
],
"default": "around"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLinesAroundArguments": {
"title": "Layout/EmptyLinesAroundArguments",
"description": "Keeps track of empty lines around method arguments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLinesAroundAttributeAccessor": {
"title": "Layout/EmptyLinesAroundAttributeAccessor",
"description": "Keep blank lines around attribute accessors.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowAliasSyntax": {
"type": "boolean",
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"alias_method",
"public",
"protected",
"private"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLinesAroundBeginBody": {
"title": "Layout/EmptyLinesAroundBeginBody",
"description": "Keeps track of empty lines around begin-end bodies.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLinesAroundBlockBody": {
"title": "Layout/EmptyLinesAroundBlockBody",
"description": "Keeps track of empty lines around block bodies.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"empty_lines",
"no_empty_lines"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"empty_lines",
"no_empty_lines"
]
}
}
],
"default": "no_empty_lines"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLinesAroundClassBody": {
"title": "Layout/EmptyLinesAroundClassBody",
"description": "Keeps track of empty lines around class bodies.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"empty_lines",
"empty_lines_except_namespace",
"empty_lines_special",
"no_empty_lines",
"beginning_only",
"ending_only"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"empty_lines",
"empty_lines_except_namespace",
"empty_lines_special",
"no_empty_lines",
"beginning_only",
"ending_only"
]
}
}
],
"default": "no_empty_lines"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLinesAroundExceptionHandlingKeywords": {
"title": "Layout/EmptyLinesAroundExceptionHandlingKeywords",
"description": "Keeps track of empty lines around exception handling keywords.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLinesAroundMethodBody": {
"title": "Layout/EmptyLinesAroundMethodBody",
"description": "Keeps track of empty lines around method bodies.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLinesAroundModuleBody": {
"title": "Layout/EmptyLinesAroundModuleBody",
"description": "Keeps track of empty lines around module bodies.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"empty_lines",
"empty_lines_except_namespace",
"empty_lines_special",
"no_empty_lines"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"empty_lines",
"empty_lines_except_namespace",
"empty_lines_special",
"no_empty_lines"
]
}
}
],
"default": "no_empty_lines"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EmptyLines": {
"title": "Layout/EmptyLines",
"description": "Don't use several empty lines in a row.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EndAlignment": {
"title": "Layout/EndAlignment",
"description": "Align ends correctly.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyleAlignWith": {
"oneOf": [
{
"type": "string",
"enum": [
"keyword",
"variable",
"start_of_line"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"keyword",
"variable",
"start_of_line"
]
}
}
],
"default": "keyword"
},
"Severity": {
"type": "string",
"default": "warning"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/EndOfLine": {
"title": "Layout/EndOfLine",
"description": "Use Unix-style line endings.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"native",
"lf",
"crlf"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"native",
"lf",
"crlf"
]
}
}
],
"default": "native"
}
}
}
]
},
"Layout/ExtraSpacing": {
"title": "Layout/ExtraSpacing",
"description": "Do not use unnecessary spacing.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowForAlignment": {
"type": "boolean",
"default": true
},
"AllowBeforeTrailingComments": {
"type": "boolean",
"default": false
},
"ForceEqualSignAlignment": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/FirstArgumentIndentation": {
"title": "Layout/FirstArgumentIndentation",
"description": "Checks the indentation of the first argument in a method call.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"consistent",
"consistent_relative_to_receiver",
"special_for_inner_method_call",
"special_for_inner_method_call_in_parentheses"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"consistent",
"consistent_relative_to_receiver",
"special_for_inner_method_call",
"special_for_inner_method_call_in_parentheses"
]
}
}
],
"default": "special_for_inner_method_call_in_parentheses"
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/FirstArrayElementIndentation": {
"title": "Layout/FirstArrayElementIndentation",
"description": "Checks the indentation of the first element in an array literal.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"special_inside_parentheses",
"consistent",
"align_brackets"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"special_inside_parentheses",
"consistent",
"align_brackets"
]
}
}
],
"default": "special_inside_parentheses"
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/FirstArrayElementLineBreak": {
"title": "Layout/FirstArrayElementLineBreak",
"description": "Checks for a line break before the first element in a multi-line array.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowMultilineFinalElement": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/FirstHashElementIndentation": {
"title": "Layout/FirstHashElementIndentation",
"description": "Checks the indentation of the first key in a hash literal.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"special_inside_parentheses",
"consistent",
"align_braces"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"special_inside_parentheses",
"consistent",
"align_braces"
]
}
}
],
"default": "special_inside_parentheses"
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/FirstHashElementLineBreak": {
"title": "Layout/FirstHashElementLineBreak",
"description": "Checks for a line break before the first element in a multi-line hash.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowMultilineFinalElement": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/FirstMethodArgumentLineBreak": {
"title": "Layout/FirstMethodArgumentLineBreak",
"description": "Checks for a line break before the first argument in a multi-line method call.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowMultilineFinalElement": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/FirstMethodParameterLineBreak": {
"title": "Layout/FirstMethodParameterLineBreak",
"description": "Checks for a line break before the first parameter in a multi-line method parameter definition.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowMultilineFinalElement": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/FirstParameterIndentation": {
"title": "Layout/FirstParameterIndentation",
"description": "Checks the indentation of the first parameter in a method definition.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"consistent",
"align_parentheses"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"consistent",
"align_parentheses"
]
}
}
],
"default": "consistent"
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/HashAlignment": {
"title": "Layout/HashAlignment",
"description": "Align the elements of a hash literal if they span more than one line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowMultipleStyles": {
"type": "boolean",
"default": true
},
"EnforcedHashRocketStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"key",
"separator",
"table"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"key",
"separator",
"table"
]
}
}
],
"default": "key"
},
"EnforcedColonStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"key",
"separator",
"table"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"key",
"separator",
"table"
]
}
}
],
"default": "key"
},
"EnforcedLastArgumentHashStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"always_inspect",
"always_ignore",
"ignore_implicit",
"ignore_explicit"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"always_inspect",
"always_ignore",
"ignore_implicit",
"ignore_explicit"
]
}
}
],
"default": "always_inspect"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/HeredocArgumentClosingParenthesis": {
"title": "Layout/HeredocArgumentClosingParenthesis",
"description": "Checks for the placement of the closing parenthesis in a method call that passes a HEREDOC string as an argument.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/HeredocIndentation": {
"title": "Layout/HeredocIndentation",
"description": "Checks the indentation of the here document bodies.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/IndentationConsistency": {
"title": "Layout/IndentationConsistency",
"description": "Keep indentation straight.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"normal",
"indented_internal_methods"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"normal",
"indented_internal_methods"
]
}
}
],
"default": "normal"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/IndentationStyle": {
"title": "Layout/IndentationStyle",
"description": "Consistent indentation either with tabs only or spaces only.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"IndentationWidth": {
"type": "integer"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"spaces",
"tabs"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"spaces",
"tabs"
]
}
}
],
"default": "spaces"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/IndentationWidth": {
"title": "Layout/IndentationWidth",
"description": "Use 2 spaces for indentation.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Width": {
"type": "integer",
"default": 2
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/InitialIndentation": {
"title": "Layout/InitialIndentation",
"description": "Checks the indentation of the first non-blank non-comment line in a file.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/LeadingCommentSpace": {
"title": "Layout/LeadingCommentSpace",
"description": "Comments should start with a space.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowDoxygenCommentStyle": {
"type": "boolean",
"default": false
},
"AllowGemfileRubyComment": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/LeadingEmptyLines": {
"title": "Layout/LeadingEmptyLines",
"description": "Check for unnecessary blank lines at the beginning of a file.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/LineContinuationLeadingSpace": {
"title": "Layout/LineContinuationLeadingSpace",
"description": "Use trailing spaces instead of leading spaces in strings broken over multiple lines (by a backslash).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"leading",
"trailing"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"leading",
"trailing"
]
}
}
],
"default": "trailing"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/LineContinuationSpacing": {
"title": "Layout/LineContinuationSpacing",
"description": "Checks the spacing in front of backslash in line continuations.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "space"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/LineEndStringConcatenationIndentation": {
"title": "Layout/LineEndStringConcatenationIndentation",
"description": "Checks the indentation of the next line after a line that ends with a string literal and a backslash.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"aligned",
"indented"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"aligned",
"indented"
]
}
}
],
"default": "aligned"
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/LineLength": {
"title": "Layout/LineLength",
"description": "Checks that line length does not exceed the configured limit.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Max": {
"type": "integer",
"default": 120
},
"AllowHeredoc": {
"type": "boolean",
"default": true
},
"AllowURI": {
"type": "boolean",
"default": true
},
"URISchemes": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"http",
"https"
]
},
"IgnoreCopDirectives": {
"type": "boolean",
"default": true
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/MultilineArrayBraceLayout": {
"title": "Layout/MultilineArrayBraceLayout",
"description": "Checks that the closing brace in an array literal is either on the same line as the last array element, or a new line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"symmetrical",
"new_line",
"same_line"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"symmetrical",
"new_line",
"same_line"
]
}
}
],
"default": "symmetrical"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/MultilineArrayLineBreaks": {
"title": "Layout/MultilineArrayLineBreaks",
"description": "Checks that each item in a multi-line array literal starts on a separate line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowMultilineFinalElement": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/MultilineAssignmentLayout": {
"title": "Layout/MultilineAssignmentLayout",
"description": "Check for a newline after the assignment operator in multi-line assignments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"SupportedTypes": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"block",
"case",
"class",
"if",
"kwbegin",
"module"
]
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"same_line",
"new_line"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"same_line",
"new_line"
]
}
}
],
"default": "new_line"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/MultilineBlockLayout": {
"title": "Layout/MultilineBlockLayout",
"description": "Ensures newlines after multiline block do statements.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/MultilineHashBraceLayout": {
"title": "Layout/MultilineHashBraceLayout",
"description": "Checks that the closing brace in a hash literal is either on the same line as the last hash element, or a new line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"symmetrical",
"new_line",
"same_line"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"symmetrical",
"new_line",
"same_line"
]
}
}
],
"default": "symmetrical"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/MultilineHashKeyLineBreaks": {
"title": "Layout/MultilineHashKeyLineBreaks",
"description": "Checks that each item in a multi-line hash literal starts on a separate line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowMultilineFinalElement": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/MultilineMethodArgumentLineBreaks": {
"title": "Layout/MultilineMethodArgumentLineBreaks",
"description": "Checks that each argument in a multi-line method call starts on a separate line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowMultilineFinalElement": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/MultilineMethodCallBraceLayout": {
"title": "Layout/MultilineMethodCallBraceLayout",
"description": "Checks that the closing brace in a method call is either on the same line as the last method argument, or a new line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"symmetrical",
"new_line",
"same_line"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"symmetrical",
"new_line",
"same_line"
]
}
}
],
"default": "symmetrical"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/MultilineMethodCallIndentation": {
"title": "Layout/MultilineMethodCallIndentation",
"description": "Checks indentation of method calls with the dot operator that span more than one line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"aligned",
"indented",
"indented_relative_to_receiver"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"aligned",
"indented",
"indented_relative_to_receiver"
]
}
}
],
"default": "aligned"
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/MultilineMethodDefinitionBraceLayout": {
"title": "Layout/MultilineMethodDefinitionBraceLayout",
"description": "Checks that the closing brace in a method definition is either on the same line as the last method parameter, or a new line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"symmetrical",
"new_line",
"same_line"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"symmetrical",
"new_line",
"same_line"
]
}
}
],
"default": "symmetrical"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/MultilineMethodParameterLineBreaks": {
"title": "Layout/MultilineMethodParameterLineBreaks",
"description": "Checks that each parameter in a multi-line method definition starts on a separate line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowMultilineFinalElement": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/MultilineOperationIndentation": {
"title": "Layout/MultilineOperationIndentation",
"description": "Checks indentation of binary operations that span more than one line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"aligned",
"indented"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"aligned",
"indented"
]
}
}
],
"default": "aligned"
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/ParameterAlignment": {
"title": "Layout/ParameterAlignment",
"description": "Align the parameters of a method definition if they span more than one line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"with_first_parameter",
"with_fixed_indentation"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"with_first_parameter",
"with_fixed_indentation"
]
}
}
],
"default": "with_first_parameter"
},
"IndentationWidth": {
"type": "integer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/RedundantLineBreak": {
"title": "Layout/RedundantLineBreak",
"description": "Do not break up an expression into multiple lines when it fits on a single line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"InspectBlocks": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/RescueEnsureAlignment": {
"title": "Layout/RescueEnsureAlignment",
"description": "Align rescues and ensures correctly.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SingleLineBlockChain": {
"title": "Layout/SingleLineBlockChain",
"description": "Put method call on a separate line if chained to a single line block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceAfterColon": {
"title": "Layout/SpaceAfterColon",
"description": "Use spaces after colons.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceAfterComma": {
"title": "Layout/SpaceAfterComma",
"description": "Use spaces after commas.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceAfterMethodName": {
"title": "Layout/SpaceAfterMethodName",
"description": "Do not put a space between a method name and the opening parenthesis in a method definition.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceAfterNot": {
"title": "Layout/SpaceAfterNot",
"description": "Tracks redundant space after the ! operator.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceAfterSemicolon": {
"title": "Layout/SpaceAfterSemicolon",
"description": "Use spaces after semicolons.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceAroundBlockParameters": {
"title": "Layout/SpaceAroundBlockParameters",
"description": "Checks the spacing inside and after block parameters pipes.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyleInsidePipes": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "no_space"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceAroundEqualsInParameterDefault": {
"title": "Layout/SpaceAroundEqualsInParameterDefault",
"description": "Checks that the equals signs in parameter default assignments have or don't have surrounding space depending on configuration.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "space"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceAroundKeyword": {
"title": "Layout/SpaceAroundKeyword",
"description": "Use a space around keywords if appropriate.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceAroundMethodCallOperator": {
"title": "Layout/SpaceAroundMethodCallOperator",
"description": "Checks method call operators to not have spaces around them.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceAroundOperators": {
"title": "Layout/SpaceAroundOperators",
"description": "Use a single space around operators.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowForAlignment": {
"type": "boolean",
"default": true
},
"EnforcedStyleForExponentOperator": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "no_space"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceBeforeBlockBraces": {
"title": "Layout/SpaceBeforeBlockBraces",
"description": "Checks that the left block brace has or doesn't have space before it.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "space"
},
"EnforcedStyleForEmptyBraces": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "space"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceBeforeBrackets": {
"title": "Layout/SpaceBeforeBrackets",
"description": "Checks for receiver with a space before the opening brackets.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceBeforeComma": {
"title": "Layout/SpaceBeforeComma",
"description": "No spaces before commas.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceBeforeComment": {
"title": "Layout/SpaceBeforeComment",
"description": "Checks for missing space between code and a comment on the same line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceBeforeFirstArg": {
"title": "Layout/SpaceBeforeFirstArg",
"description": "Checks that exactly one space is used between a method name and the first argument for method calls without parentheses.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowForAlignment": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceBeforeSemicolon": {
"title": "Layout/SpaceBeforeSemicolon",
"description": "No spaces before semicolons.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceInLambdaLiteral": {
"title": "Layout/SpaceInLambdaLiteral",
"description": "Checks for spaces in lambda literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"require_no_space",
"require_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"require_no_space",
"require_space"
]
}
}
],
"default": "require_no_space"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceInsideArrayPercentLiteral": {
"title": "Layout/SpaceInsideArrayPercentLiteral",
"description": "No unnecessary additional spaces between elements in %i/%w literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceInsideArrayLiteralBrackets": {
"title": "Layout/SpaceInsideArrayLiteralBrackets",
"description": "Checks the spacing inside array literal brackets.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space",
"compact"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space",
"compact"
]
}
}
],
"default": "no_space"
},
"EnforcedStyleForEmptyBrackets": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "no_space"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceInsideBlockBraces": {
"title": "Layout/SpaceInsideBlockBraces",
"description": "Checks that block braces have or don't have surrounding space. For blocks taking parameters, checks that the left brace has or doesn't have trailing space.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "space"
},
"EnforcedStyleForEmptyBraces": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "no_space"
},
"SpaceBeforeBlockParameters": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceInsideHashLiteralBraces": {
"title": "Layout/SpaceInsideHashLiteralBraces",
"description": "Use spaces inside hash literal braces - or don't.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space",
"compact"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space",
"compact"
]
}
}
],
"default": "space"
},
"EnforcedStyleForEmptyBraces": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "no_space"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceInsideParens": {
"title": "Layout/SpaceInsideParens",
"description": "No spaces after ( or before ).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"compact",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"compact",
"no_space"
]
}
}
],
"default": "no_space"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceInsidePercentLiteralDelimiters": {
"title": "Layout/SpaceInsidePercentLiteralDelimiters",
"description": "No unnecessary spaces inside delimiters of %i/%w/%x literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceInsideRangeLiteral": {
"title": "Layout/SpaceInsideRangeLiteral",
"description": "No spaces inside range literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceInsideReferenceBrackets": {
"title": "Layout/SpaceInsideReferenceBrackets",
"description": "Checks the spacing inside referential brackets.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "no_space"
},
"EnforcedStyleForEmptyBrackets": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "no_space"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/SpaceInsideStringInterpolation": {
"title": "Layout/SpaceInsideStringInterpolation",
"description": "Checks for padding/surrounding spaces inside string interpolation.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"space",
"no_space"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"space",
"no_space"
]
}
}
],
"default": "no_space"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/TrailingEmptyLines": {
"title": "Layout/TrailingEmptyLines",
"description": "Checks trailing blank lines and final newline.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"final_newline",
"final_blank_line"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"final_newline",
"final_blank_line"
]
}
}
],
"default": "final_newline"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Layout/TrailingWhitespace": {
"title": "Layout/TrailingWhitespace",
"description": "Avoid trailing whitespace.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowInHeredoc": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/AmbiguousAssignment": {
"title": "Lint/AmbiguousAssignment",
"description": "Checks for mistyped shorthand assignments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Lint/AmbiguousBlockAssociation": {
"title": "Lint/AmbiguousBlockAssociation",
"description": "Checks for ambiguous block association with method when param passed without parentheses.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/AmbiguousOperator": {
"title": "Lint/AmbiguousOperator",
"description": "Checks for ambiguous operators in the first argument of a method invocation without parentheses.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/AmbiguousOperatorPrecedence": {
"title": "Lint/AmbiguousOperatorPrecedence",
"description": "Checks for expressions containing multiple binary operations with ambiguous precedence.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/AmbiguousRange": {
"title": "Lint/AmbiguousRange",
"description": "Checks for ranges with ambiguous boundaries.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"RequireParenthesesForMethodChains": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/AmbiguousRegexpLiteral": {
"title": "Lint/AmbiguousRegexpLiteral",
"description": "Checks for ambiguous regexp literals in the first argument of a method invocation without parentheses.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/AssignmentInCondition": {
"title": "Lint/AssignmentInCondition",
"description": "Don't use assignment in conditions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowSafeAssignment": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/BigDecimalNew": {
"title": "Lint/BigDecimalNew",
"description": "`BigDecimal.new()` is deprecated. Use `BigDecimal()` instead.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/BinaryOperatorWithIdenticalOperands": {
"title": "Lint/BinaryOperatorWithIdenticalOperands",
"description": "Checks for places where binary operator has identical operands.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/BooleanSymbol": {
"title": "Lint/BooleanSymbol",
"description": "Check for `:true` and `:false` symbols.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/CircularArgumentReference": {
"title": "Lint/CircularArgumentReference",
"description": "Default values in optional keyword arguments and optional ordinal arguments should not refer back to the name of the argument.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/ConstantDefinitionInBlock": {
"title": "Lint/ConstantDefinitionInBlock",
"description": "Do not define constants within a block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"enums"
]
}
}
}
]
},
"Lint/ConstantOverwrittenInRescue": {
"title": "Lint/ConstantOverwrittenInRescue",
"description": "Checks for overwriting an exception with an exception result by use `rescue =>`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/ConstantResolution": {
"title": "Lint/ConstantResolution",
"description": "Check that constants are fully qualified with `::`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"Only": {
"type": "array",
"items": {
},
"default": [
]
},
"Ignore": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Lint/Debugger": {
"title": "Lint/Debugger",
"description": "Check for debugger calls.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"DebuggerMethods": {
"type": "object",
"default": {
"Kernel": [
"binding.irb",
"Kernel.binding.irb"
],
"Byebug": [
"byebug",
"remote_byebug",
"Kernel.byebug",
"Kernel.remote_byebug"
],
"Capybara": [
"save_and_open_page",
"save_and_open_screenshot"
],
"debug.rb": [
"binding.b",
"binding.break",
"Kernel.binding.b",
"Kernel.binding.break"
],
"Pry": [
"binding.pry",
"binding.remote_pry",
"binding.pry_remote",
"Kernel.binding.pry",
"Kernel.binding.remote_pry",
"Kernel.binding.pry_remote",
"Pry.rescue",
"pry"
],
"Rails": [
"debugger",
"Kernel.debugger"
],
"RubyJard": [
"jard"
],
"WebConsole": [
"binding.console"
]
}
}
}
}
]
},
"Lint/DeprecatedClassMethods": {
"title": "Lint/DeprecatedClassMethods",
"description": "Check for deprecated class method calls.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/DeprecatedConstants": {
"title": "Lint/DeprecatedConstants",
"description": "Checks for deprecated constants.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"DeprecatedConstants": {
"type": "object",
"default": {
"NIL": {
"Alternative": "nil",
"DeprecatedVersion": "2.4"
},
"TRUE": {
"Alternative": "true",
"DeprecatedVersion": "2.4"
},
"FALSE": {
"Alternative": "false",
"DeprecatedVersion": "2.4"
},
"Net::HTTPServerException": {
"Alternative": "Net::HTTPClientException",
"DeprecatedVersion": "2.6"
},
"Random::DEFAULT": {
"Alternative": "Random.new",
"DeprecatedVersion": "3.0"
},
"Struct::Group": {
"Alternative": "Etc::Group",
"DeprecatedVersion": "3.0"
},
"Struct::Passwd": {
"Alternative": "Etc::Passwd",
"DeprecatedVersion": "3.0"
}
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/DeprecatedOpenSSLConstant": {
"title": "Lint/DeprecatedOpenSSLConstant",
"description": "Don't use algorithm constants for `OpenSSL::Cipher` and `OpenSSL::Digest`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/DisjunctiveAssignmentInConstructor": {
"title": "Lint/DisjunctiveAssignmentInConstructor",
"description": "In constructor, plain assignment is preferred over disjunctive.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/DuplicateBranch": {
"title": "Lint/DuplicateBranch",
"description": "Checks that there are no repeated bodies within `if/unless`, `case-when` and `rescue` constructs.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"IgnoreLiteralBranches": {
"type": "boolean",
"default": false
},
"IgnoreConstantBranches": {
"type": "boolean",
"default": false
}
}
}
]
},
"Lint/DuplicateCaseCondition": {
"title": "Lint/DuplicateCaseCondition",
"description": "Do not repeat values in case conditionals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/DuplicateElsifCondition": {
"title": "Lint/DuplicateElsifCondition",
"description": "Do not repeat conditions used in if `elsif`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/DuplicateHashKey": {
"title": "Lint/DuplicateHashKey",
"description": "Check for duplicate keys in hash literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/DuplicateMagicComment": {
"title": "Lint/DuplicateMagicComment",
"description": "Check for duplicated magic comments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/DuplicateMatchPattern": {
"title": "Lint/DuplicateMatchPattern",
"description": "Do not repeat patterns in `in` keywords.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Lint/DuplicateMethods": {
"title": "Lint/DuplicateMethods",
"description": "Check for duplicate method definitions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/DuplicateRegexpCharacterClassElement": {
"title": "Lint/DuplicateRegexpCharacterClassElement",
"description": "Checks for duplicate elements in Regexp character classes.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/DuplicateRequire": {
"title": "Lint/DuplicateRequire",
"description": "Check for duplicate `require`s and `require_relative`s.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/DuplicateRescueException": {
"title": "Lint/DuplicateRescueException",
"description": "Checks that there are no repeated exceptions used in `rescue` expressions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/EachWithObjectArgument": {
"title": "Lint/EachWithObjectArgument",
"description": "Check for immutable argument given to each_with_object.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/ElseLayout": {
"title": "Lint/ElseLayout",
"description": "Check for odd code arrangement in an else block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/EmptyBlock": {
"title": "Lint/EmptyBlock",
"description": "Checks for blocks without a body.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowComments": {
"type": "boolean",
"default": true
},
"AllowEmptyLambdas": {
"type": "boolean",
"default": true
}
}
}
]
},
"Lint/EmptyClass": {
"title": "Lint/EmptyClass",
"description": "Checks for classes and metaclasses without a body.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowComments": {
"type": "boolean",
"default": false
}
}
}
]
},
"Lint/EmptyConditionalBody": {
"title": "Lint/EmptyConditionalBody",
"description": "Checks for the presence of `if`, `elsif` and `unless` branches without a body.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowComments": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/EmptyEnsure": {
"title": "Lint/EmptyEnsure",
"description": "Checks for empty ensure block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/EmptyExpression": {
"title": "Lint/EmptyExpression",
"description": "Checks for empty expressions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/EmptyFile": {
"title": "Lint/EmptyFile",
"description": "Enforces that Ruby source files are not empty.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowComments": {
"type": "boolean",
"default": true
}
}
}
]
},
"Lint/EmptyInPattern": {
"title": "Lint/EmptyInPattern",
"description": "Checks for the presence of `in` pattern branches without a body.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowComments": {
"type": "boolean",
"default": true
}
}
}
]
},
"Lint/EmptyInterpolation": {
"title": "Lint/EmptyInterpolation",
"description": "Checks for empty string interpolation.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/EmptyWhen": {
"title": "Lint/EmptyWhen",
"description": "Checks for `when` branches with empty bodies.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowComments": {
"type": "boolean",
"default": true
}
}
}
]
},
"Lint/EnsureReturn": {
"title": "Lint/EnsureReturn",
"description": "Do not use return in an ensure block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/ErbNewArguments": {
"title": "Lint/ErbNewArguments",
"description": "Use `:trim_mode` and `:eoutvar` keyword arguments to `ERB.new`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/FlipFlop": {
"title": "Lint/FlipFlop",
"description": "Checks for flip-flops.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/FloatComparison": {
"title": "Lint/FloatComparison",
"description": "Checks for the presence of precise comparison of floating point numbers.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/FloatOutOfRange": {
"title": "Lint/FloatOutOfRange",
"description": "Catches floating-point literals too large or small for Ruby to represent.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/FormatParameterMismatch": {
"title": "Lint/FormatParameterMismatch",
"description": "The number of parameters to format/sprint must match the fields.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/HashCompareByIdentity": {
"title": "Lint/HashCompareByIdentity",
"description": "Prefer using `Hash#compare_by_identity` than using `object_id` for keys.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/HeredocMethodCallPosition": {
"title": "Lint/HeredocMethodCallPosition",
"description": "Checks for the ordering of a method call where the receiver of the call is a HEREDOC.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/IdentityComparison": {
"title": "Lint/IdentityComparison",
"description": "Prefer `equal?` over `==` when comparing `object_id`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/ImplicitStringConcatenation": {
"title": "Lint/ImplicitStringConcatenation",
"description": "Checks for adjacent string literals on the same line, which could better be represented as a single string literal.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/IncompatibleIoSelectWithFiberScheduler": {
"title": "Lint/IncompatibleIoSelectWithFiberScheduler",
"description": "Checks for `IO.select` that is incompatible with Fiber Scheduler.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/IneffectiveAccessModifier": {
"title": "Lint/IneffectiveAccessModifier",
"description": "Checks for attempts to use `private` or `protected` to set the visibility of a class method, which does not work.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/InheritException": {
"title": "Lint/InheritException",
"description": "Avoid inheriting from the `Exception` class.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"standard_error",
"runtime_error"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"standard_error",
"runtime_error"
]
}
}
],
"default": "standard_error"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/InterpolationCheck": {
"title": "Lint/InterpolationCheck",
"description": "Checks for interpolation in a single quoted string.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/LambdaWithoutLiteralBlock": {
"title": "Lint/LambdaWithoutLiteralBlock",
"description": "Checks uses of lambda without a literal block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/LiteralAsCondition": {
"title": "Lint/LiteralAsCondition",
"description": "Checks of literals used in conditions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/LiteralInInterpolation": {
"title": "Lint/LiteralInInterpolation",
"description": "Checks for literals used in interpolation.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/Loop": {
"title": "Lint/Loop",
"description": "Use Kernel#loop with break rather than begin/end/until or begin/end/while for post-loop tests.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/MissingCopEnableDirective": {
"title": "Lint/MissingCopEnableDirective",
"description": "Checks for a `# rubocop:enable` after `# rubocop:disable`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"MaximumRangeSize": {
"type": "number"
}
}
}
]
},
"Lint/MissingSuper": {
"title": "Lint/MissingSuper",
"description": "Checks for the presence of constructors and lifecycle callbacks without calls to `super`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedParentClasses": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Lint/MixedCaseRange": {
"title": "Lint/MixedCaseRange",
"description": "Checks for mixed-case character ranges since they include likely unintended characters.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/MixedRegexpCaptureTypes": {
"title": "Lint/MixedRegexpCaptureTypes",
"description": "Do not mix named captures and numbered captures in a Regexp literal.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/MultipleComparison": {
"title": "Lint/MultipleComparison",
"description": "Use `&&` operator to compare multiple values.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/NestedMethodDefinition": {
"title": "Lint/NestedMethodDefinition",
"description": "Do not use nested method definitions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
}
}
}
]
},
"Lint/NestedPercentLiteral": {
"title": "Lint/NestedPercentLiteral",
"description": "Checks for nested percent literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/NextWithoutAccumulator": {
"title": "Lint/NextWithoutAccumulator",
"description": "Do not omit the accumulator when calling `next` in a `reduce`/`inject` block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/NoReturnInBeginEndBlocks": {
"title": "Lint/NoReturnInBeginEndBlocks",
"description": "Do not `return` inside `begin..end` blocks in assignment contexts.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Lint/NonAtomicFileOperation": {
"title": "Lint/NonAtomicFileOperation",
"description": "Checks for non-atomic file operations.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/NonDeterministicRequireOrder": {
"title": "Lint/NonDeterministicRequireOrder",
"description": "Always sort arrays returned by Dir.glob when requiring files.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/NonLocalExitFromIterator": {
"title": "Lint/NonLocalExitFromIterator",
"description": "Do not use return in iterator to cause non-local exit.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/NumberConversion": {
"title": "Lint/NumberConversion",
"description": "Checks unsafe usage of number conversion methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"ago",
"from_now",
"second",
"seconds",
"minute",
"minutes",
"hour",
"hours",
"day",
"days",
"week",
"weeks",
"fortnight",
"fortnights",
"in_milliseconds"
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"IgnoredClasses": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"Time",
"DateTime"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/NumberedParameterAssignment": {
"title": "Lint/NumberedParameterAssignment",
"description": "Checks for uses of numbered parameter assignment.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Lint/OrAssignmentToConstant": {
"title": "Lint/OrAssignmentToConstant",
"description": "Checks unintended or-assignment to constant.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/OrderedMagicComments": {
"title": "Lint/OrderedMagicComments",
"description": "Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/OutOfRangeRegexpRef": {
"title": "Lint/OutOfRangeRegexpRef",
"description": "Checks for out of range reference for Regexp because it always returns nil.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/ParenthesesAsGroupedExpression": {
"title": "Lint/ParenthesesAsGroupedExpression",
"description": "Checks for method calls with a space before the opening parenthesis.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/PercentStringArray": {
"title": "Lint/PercentStringArray",
"description": "Checks for unwanted commas and quotes in %w/%W literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/PercentSymbolArray": {
"title": "Lint/PercentSymbolArray",
"description": "Checks for unwanted commas and colons in %i/%I literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RaiseException": {
"title": "Lint/RaiseException",
"description": "Checks for `raise` or `fail` statements which are raising `Exception` class.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedImplicitNamespaces": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"Gem"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RandOne": {
"title": "Lint/RandOne",
"description": "Checks for `rand(1)` calls. Such calls always return `0` and most likely a mistake.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/RedundantCopDisableDirective": {
"title": "Lint/RedundantCopDisableDirective",
"description": "Checks for rubocop:disable comments that can be removed. Note: this cop is not disabled when disabling all cops. It must be explicitly disabled.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RedundantCopEnableDirective": {
"title": "Lint/RedundantCopEnableDirective",
"description": "Checks for rubocop:enable comments that can be removed.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RedundantDirGlobSort": {
"title": "Lint/RedundantDirGlobSort",
"description": "Checks for redundant `sort` method to `Dir.glob` and `Dir[]`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RedundantRegexpQuantifiers": {
"title": "Lint/RedundantRegexpQuantifiers",
"description": "Checks for redundant quantifiers in Regexps.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RedundantRequireStatement": {
"title": "Lint/RedundantRequireStatement",
"description": "Checks for unnecessary `require` statement.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RedundantSafeNavigation": {
"title": "Lint/RedundantSafeNavigation",
"description": "Checks for redundant safe navigation calls.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"instance_of?",
"kind_of?",
"is_a?",
"eql?",
"respond_to?",
"equal?",
"presence",
"present?"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RedundantSplatExpansion": {
"title": "Lint/RedundantSplatExpansion",
"description": "Checks for splat unnecessarily being called on literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowPercentLiteralArrayArgument": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RedundantStringCoercion": {
"title": "Lint/RedundantStringCoercion",
"description": "Checks for Object#to_s usage in string interpolation.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RedundantWithIndex": {
"title": "Lint/RedundantWithIndex",
"description": "Checks for redundant `with_index`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RedundantWithObject": {
"title": "Lint/RedundantWithObject",
"description": "Checks for redundant `with_object`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RefinementImportMethods": {
"title": "Lint/RefinementImportMethods",
"description": "Use `Refinement#import_methods` when using `include` or `prepend` in `refine` block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Lint/RegexpAsCondition": {
"title": "Lint/RegexpAsCondition",
"description": "Do not use regexp literal as a condition. The regexp literal matches `$_` implicitly.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RequireParentheses": {
"title": "Lint/RequireParentheses",
"description": "Use parentheses in the method call to avoid confusion about precedence.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/RequireRangeParentheses": {
"title": "Lint/RequireRangeParentheses",
"description": "Checks that a range literal is enclosed in parentheses when the end of the range is at a line break.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Lint/RequireRelativeSelfPath": {
"title": "Lint/RequireRelativeSelfPath",
"description": "Checks for uses a file requiring itself with `require_relative`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/RescueException": {
"title": "Lint/RescueException",
"description": "Avoid rescuing the Exception class.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/RescueType": {
"title": "Lint/RescueType",
"description": "Avoid rescuing from non constants that could result in a `TypeError`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/ReturnInVoidContext": {
"title": "Lint/ReturnInVoidContext",
"description": "Checks for return in void context.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/SafeNavigationConsistency": {
"title": "Lint/SafeNavigationConsistency",
"description": "Check to make sure that if safe navigation is used for a method call in an `&&` or `||` condition that safe navigation is used for all method calls on that same object.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"present?",
"blank?",
"presence",
"try",
"try!"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/SafeNavigationChain": {
"title": "Lint/SafeNavigationChain",
"description": "Do not chain ordinary method call after safe navigation operator.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"present?",
"blank?",
"presence",
"presence_in",
"try",
"try!",
"in?"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/SafeNavigationWithEmpty": {
"title": "Lint/SafeNavigationWithEmpty",
"description": "Avoid `foo&.empty?` in conditionals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/ScriptPermission": {
"title": "Lint/ScriptPermission",
"description": "Grant script file execute permission.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/SelfAssignment": {
"title": "Lint/SelfAssignment",
"description": "Checks for self-assignments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/SendWithMixinArgument": {
"title": "Lint/SendWithMixinArgument",
"description": "Checks for `send` method when using mixin.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/ShadowedArgument": {
"title": "Lint/ShadowedArgument",
"description": "Avoid reassigning arguments before they were used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"IgnoreImplicitReferences": {
"type": "boolean",
"default": false
}
}
}
]
},
"Lint/ShadowedException": {
"title": "Lint/ShadowedException",
"description": "Avoid rescuing a higher level exception before a lower level exception.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/ShadowingOuterLocalVariable": {
"title": "Lint/ShadowingOuterLocalVariable",
"description": "Do not use the same name as outer local variable for block arguments or block local variables.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/StructNewOverride": {
"title": "Lint/StructNewOverride",
"description": "Disallow overriding the `Struct` built-in methods via `Struct.new`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/SuppressedException": {
"title": "Lint/SuppressedException",
"description": "Don't suppress exceptions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowComments": {
"type": "boolean",
"default": true
},
"AllowNil": {
"type": "boolean",
"default": true
}
}
}
]
},
"Lint/SymbolConversion": {
"title": "Lint/SymbolConversion",
"description": "Checks for unnecessary symbol conversions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"strict",
"consistent"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"strict",
"consistent"
]
}
}
],
"default": "strict"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/Syntax": {
"title": "Lint/Syntax",
"description": "Checks for syntax errors.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/ToEnumArguments": {
"title": "Lint/ToEnumArguments",
"description": "Ensures that `to_enum`/`enum_for`, called for the current method, has correct arguments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Lint/ToJSON": {
"title": "Lint/ToJSON",
"description": "Ensure #to_json includes an optional argument.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/TopLevelReturnWithArgument": {
"title": "Lint/TopLevelReturnWithArgument",
"description": "Detects top level return statements with argument.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/TrailingCommaInAttributeDeclaration": {
"title": "Lint/TrailingCommaInAttributeDeclaration",
"description": "Checks for trailing commas in attribute declarations.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/TripleQuotes": {
"title": "Lint/TripleQuotes",
"description": "Checks for useless triple quote constructs.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/UnderscorePrefixedVariableName": {
"title": "Lint/UnderscorePrefixedVariableName",
"description": "Do not use prefix `_` for a variable that is used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowKeywordBlockArguments": {
"type": "boolean",
"default": false
}
}
}
]
},
"Lint/UnexpectedBlockArity": {
"title": "Lint/UnexpectedBlockArity",
"description": "Looks for blocks that have fewer arguments that the calling method expects.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Methods": {
"type": "object",
"default": {
"chunk_while": 2,
"each_with_index": 2,
"each_with_object": 2,
"inject": 2,
"max": 2,
"min": 2,
"minmax": 2,
"reduce": 2,
"slice_when": 2,
"sort": 2
}
}
}
}
]
},
"Lint/UnifiedInteger": {
"title": "Lint/UnifiedInteger",
"description": "Use Integer instead of Fixnum or Bignum.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/UnmodifiedReduceAccumulator": {
"title": "Lint/UnmodifiedReduceAccumulator",
"description": "Checks for `reduce` or `inject` blocks that do not update the accumulator each iteration.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Lint/UnreachableCode": {
"title": "Lint/UnreachableCode",
"description": "Unreachable code.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/UnreachableLoop": {
"title": "Lint/UnreachableLoop",
"description": "Checks for loops that will have at most one iteration.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedPatterns": {
"type": "array",
"default": [
"(?-mix:(exactly|at_least|at_most)\\(\\d+\\)\\.times)"
]
}
}
}
]
},
"Lint/UnusedBlockArgument": {
"title": "Lint/UnusedBlockArgument",
"description": "Checks for unused block arguments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"IgnoreEmptyBlocks": {
"type": "boolean",
"default": true
},
"AllowUnusedKeywordArguments": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/UnusedMethodArgument": {
"title": "Lint/UnusedMethodArgument",
"description": "Checks for unused method arguments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowUnusedKeywordArguments": {
"type": "boolean",
"default": false
},
"IgnoreEmptyMethods": {
"type": "boolean",
"default": true
},
"IgnoreNotImplementedMethods": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/UriEscapeUnescape": {
"title": "Lint/UriEscapeUnescape",
"description": "`URI.escape` method is obsolete and should not be used. Instead, use `CGI.escape`, `URI.encode_www_form` or `URI.encode_www_form_component` depending on your specific use case. Also `URI.unescape` method is obsolete and should not be used. Instead, use `CGI.unescape`, `URI.decode_www_form` or `URI.decode_www_form_component` depending on your specific use case.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/UriRegexp": {
"title": "Lint/UriRegexp",
"description": "Use `URI::DEFAULT_PARSER.make_regexp` instead of `URI.regexp`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/UselessAccessModifier": {
"title": "Lint/UselessAccessModifier",
"description": "Checks for useless access modifiers.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"ContextCreatingMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"MethodCreatingMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/UselessAssignment": {
"title": "Lint/UselessAssignment",
"description": "Checks for useless assignment to a local variable.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/UselessElseWithoutRescue": {
"title": "Lint/UselessElseWithoutRescue",
"description": "Checks for useless `else` in `begin..end` without `rescue`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Lint/UselessMethodDefinition": {
"title": "Lint/UselessMethodDefinition",
"description": "Checks for useless method definitions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/UselessRescue": {
"title": "Lint/UselessRescue",
"description": "Checks for useless `rescue`s.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Lint/UselessRuby2Keywords": {
"title": "Lint/UselessRuby2Keywords",
"description": "Finds unnecessary uses of `ruby2_keywords`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Lint/UselessSetterCall": {
"title": "Lint/UselessSetterCall",
"description": "Checks for useless setter call to a local variable.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/UselessTimes": {
"title": "Lint/UselessTimes",
"description": "Checks for useless `Integer#times` calls.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Lint/Void": {
"title": "Lint/Void",
"description": "Possible use of operator/literal/variable in void context.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"CheckForMethodsWithNoSideEffects": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Metrics/CyclomaticComplexity": {
"title": "Metrics/CyclomaticComplexity",
"description": "A complexity metric that is strongly correlated to the number of test cases needed to validate a method.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"Max": {
"type": "integer",
"default": 7
}
}
}
]
},
"Metrics/AbcSize": {
"title": "Metrics/AbcSize",
"description": "A calculated magnitude based on number of assignments, branches, and conditions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"CountRepeatedAttributes": {
"type": "boolean",
"default": true
},
"Max": {
"type": "integer",
"default": 17
}
}
}
]
},
"Metrics/BlockLength": {
"title": "Metrics/BlockLength",
"description": "Avoid long blocks with many lines.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"CountComments": {
"type": "boolean",
"default": false
},
"Max": {
"type": "integer",
"default": 25
},
"CountAsOne": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"refine"
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
},
"inherit_mode": {
"type": "object",
"default": {
"merge": [
"Exclude"
]
}
}
}
}
]
},
"Metrics/BlockNesting": {
"title": "Metrics/BlockNesting",
"description": "Avoid excessive block nesting.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"CountBlocks": {
"type": "boolean",
"default": false
},
"Max": {
"type": "integer",
"default": 3
}
}
}
]
},
"Metrics/ClassLength": {
"title": "Metrics/ClassLength",
"description": "Avoid classes longer than 100 lines of code.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"CountComments": {
"type": "boolean",
"default": false
},
"Max": {
"type": "integer",
"default": 100
},
"CountAsOne": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Metrics/CollectionLiteralLength": {
"title": "Metrics/CollectionLiteralLength",
"description": "Checks for `Array` or `Hash` literals with many entries.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"LengthThreshold": {
"type": "integer",
"default": 250
}
}
}
]
},
"Metrics/MethodLength": {
"title": "Metrics/MethodLength",
"description": "Avoid methods longer than 10 lines of code.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"CountComments": {
"type": "boolean",
"default": false
},
"Max": {
"type": "integer",
"default": 10
},
"CountAsOne": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
}
}
}
]
},
"Metrics/ModuleLength": {
"title": "Metrics/ModuleLength",
"description": "Avoid modules longer than 100 lines of code.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"CountComments": {
"type": "boolean",
"default": false
},
"Max": {
"type": "integer",
"default": 100
},
"CountAsOne": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Metrics/ParameterLists": {
"title": "Metrics/ParameterLists",
"description": "Avoid parameter lists longer than three or four parameters.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Max": {
"type": "integer",
"default": 5
},
"CountKeywordArgs": {
"type": "boolean",
"default": true
},
"MaxOptionalParameters": {
"type": "integer",
"default": 3
}
}
}
]
},
"Metrics/PerceivedComplexity": {
"title": "Metrics/PerceivedComplexity",
"description": "A complexity metric geared towards measuring complexity for a human reader.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"Max": {
"type": "integer",
"default": 8
}
}
}
]
},
"Naming/AccessorMethodName": {
"title": "Naming/AccessorMethodName",
"description": "Check the naming of accessor methods for get_/set_.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Naming/AsciiIdentifiers": {
"title": "Naming/AsciiIdentifiers",
"description": "Use only ascii symbols in identifiers and constants.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AsciiConstants": {
"type": "boolean",
"default": true
}
}
}
]
},
"Naming/BlockForwarding": {
"title": "Naming/BlockForwarding",
"description": "Use anonymous block forwarding.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"anonymous",
"explicit"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"anonymous",
"explicit"
]
}
}
],
"default": "anonymous"
},
"BlockForwardingName": {
"type": "string",
"default": "block"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Naming/BlockParameterName": {
"title": "Naming/BlockParameterName",
"description": "Checks for block parameter names that contain capital letters, end in numbers, or do not meet a minimal length.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"MinNameLength": {
"type": "integer",
"default": 1
},
"AllowNamesEndingInNumbers": {
"type": "boolean",
"default": true
},
"AllowedNames": {
"type": "array",
"items": {
},
"default": [
]
},
"ForbiddenNames": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Naming/ClassAndModuleCamelCase": {
"title": "Naming/ClassAndModuleCamelCase",
"description": "Use CamelCase for classes and modules.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedNames": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"module_parent"
]
}
}
}
]
},
"Naming/ConstantName": {
"title": "Naming/ConstantName",
"description": "Constants should use SCREAMING_SNAKE_CASE.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Naming/FileName": {
"title": "Naming/FileName",
"description": "Use snake_case for source file names.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Exclude": {
"type": "array",
"items": {
}
},
"ExpectMatchingDefinition": {
"type": "boolean",
"default": false
},
"CheckDefinitionPathHierarchy": {
"type": "boolean",
"default": true
},
"CheckDefinitionPathHierarchyRoots": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"lib",
"spec",
"test",
"src"
]
},
"Regex": {
},
"IgnoreExecutableScripts": {
"type": "boolean",
"default": true
},
"AllowedAcronyms": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"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"
]
}
}
}
]
},
"Naming/HeredocDelimiterCase": {
"title": "Naming/HeredocDelimiterCase",
"description": "Use configured case for heredoc delimiters.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"lowercase",
"uppercase"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"lowercase",
"uppercase"
]
}
}
],
"default": "uppercase"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Naming/HeredocDelimiterNaming": {
"title": "Naming/HeredocDelimiterNaming",
"description": "Use descriptive heredoc delimiters.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"ForbiddenDelimiters": {
"type": "array",
"items": {
},
"default": [
"(?i-mx:(^|\\s)(EO[A-Z]{1}|END)(\\s|$))"
]
}
}
}
]
},
"Naming/InclusiveLanguage": {
"title": "Naming/InclusiveLanguage",
"description": "Recommend the use of inclusive language instead of problematic terms.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"CheckIdentifiers": {
"type": "boolean",
"default": true
},
"CheckConstants": {
"type": "boolean",
"default": true
},
"CheckVariables": {
"type": "boolean",
"default": true
},
"CheckStrings": {
"type": "boolean",
"default": false
},
"CheckSymbols": {
"type": "boolean",
"default": true
},
"CheckComments": {
"type": "boolean",
"default": true
},
"CheckFilepaths": {
"type": "boolean",
"default": true
},
"FlaggedTerms": {
"type": "object",
"default": {
"whitelist": {
"Regex": "(?-mix:white[-_\\s]?list)",
"Suggestions": [
"allowlist",
"permit"
]
},
"blacklist": {
"Regex": "(?-mix:black[-_\\s]?list)",
"Suggestions": [
"denylist",
"block"
]
},
"slave": {
"WholeWord": true,
"Suggestions": [
"replica",
"secondary",
"follower"
]
}
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Naming/MemoizedInstanceVariableName": {
"title": "Naming/MemoizedInstanceVariableName",
"description": "Memoized method name should match memo instance variable name.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyleForLeadingUnderscores": {
"oneOf": [
{
"type": "string",
"enum": [
"disallowed",
"required",
"optional"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"disallowed",
"required",
"optional"
]
}
}
],
"default": "disallowed"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Naming/MethodName": {
"title": "Naming/MethodName",
"description": "Use the configured style when naming methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"snake_case",
"camelCase"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"snake_case",
"camelCase"
]
}
}
],
"default": "snake_case"
},
"AllowedPatterns": {
"type": "array",
"default": [
]
}
}
}
]
},
"Naming/MethodParameterName": {
"title": "Naming/MethodParameterName",
"description": "Checks for method parameter names that contain capital letters, end in numbers, or do not meet a minimal length.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"MinNameLength": {
"type": "integer",
"default": 3
},
"AllowNamesEndingInNumbers": {
"type": "boolean",
"default": true
},
"AllowedNames": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"as",
"at",
"by",
"cc",
"db",
"id",
"if",
"in",
"io",
"ip",
"of",
"on",
"os",
"pp",
"to"
]
},
"ForbiddenNames": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Naming/BinaryOperatorParameterName": {
"title": "Naming/BinaryOperatorParameterName",
"description": "When defining binary operators, name the argument other.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Naming/PredicateName": {
"title": "Naming/PredicateName",
"description": "Check the names of predicate methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"NamePrefix": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"is_",
"has_",
"have_"
]
},
"ForbiddenPrefixes": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"is_",
"has_",
"have_"
]
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"is_a?"
]
},
"MethodDefinitionMacros": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"define_method",
"define_singleton_method"
]
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
},
"Naming/RescuedExceptionsVariableName": {
"title": "Naming/RescuedExceptionsVariableName",
"description": "Use consistent rescued exceptions variables naming.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"PreferredName": {
"type": "string",
"default": "e"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Naming/VariableName": {
"title": "Naming/VariableName",
"description": "Use the configured style when naming variables.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"snake_case",
"camelCase"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"snake_case",
"camelCase"
]
}
}
],
"default": "snake_case"
},
"AllowedIdentifiers": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
}
}
}
]
},
"Naming/VariableNumber": {
"title": "Naming/VariableNumber",
"description": "Use the configured style when numbering symbols, methods and variables.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"snake_case",
"normalcase",
"non_integer"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"snake_case",
"normalcase",
"non_integer"
]
}
}
],
"default": "normalcase"
},
"CheckMethodNames": {
"type": "boolean",
"default": true
},
"CheckSymbols": {
"type": "boolean",
"default": true
},
"AllowedIdentifiers": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"capture3",
"iso8601",
"rfc1123_date",
"rfc822",
"rfc2822",
"rfc3339",
"x86_64"
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
}
}
}
]
},
"Style/AccessModifierDeclarations": {
"title": "Style/AccessModifierDeclarations",
"description": "Checks style of how access modifiers are used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"inline",
"group"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"inline",
"group"
]
}
}
],
"default": "group"
},
"AllowModifiersOnSymbols": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/AccessorGrouping": {
"title": "Style/AccessorGrouping",
"description": "Checks for grouping of accessors in `class` and `module` bodies.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"separated",
"grouped"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"separated",
"grouped"
]
}
}
],
"default": "grouped"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/Alias": {
"title": "Style/Alias",
"description": "Use alias instead of alias_method.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"prefer_alias",
"prefer_alias_method"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"prefer_alias",
"prefer_alias_method"
]
}
}
],
"default": "prefer_alias"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/AndOr": {
"title": "Style/AndOr",
"description": "Use &&/|| instead of and/or.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"always",
"conditionals"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"always",
"conditionals"
]
}
}
],
"default": "conditionals"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ArgumentsForwarding": {
"title": "Style/ArgumentsForwarding",
"description": "Use arguments forwarding.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowOnlyRestArgument": {
"type": "boolean",
"default": true
},
"UseAnonymousForwarding": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ArrayCoercion": {
"title": "Style/ArrayCoercion",
"description": "Use Array() instead of explicit Array check or [*var], when dealing with a variable you want to treat as an Array, but you're not certain it's an array.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ArrayIntersect": {
"title": "Style/ArrayIntersect",
"description": "Use `array1.intersect?(array2)` instead of `(array1 & array2).any?`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ArrayJoin": {
"title": "Style/ArrayJoin",
"description": "Use Array#join instead of Array#*.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/AsciiComments": {
"title": "Style/AsciiComments",
"description": "Use only ascii symbols in comments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowedChars": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"©"
]
}
}
}
]
},
"Style/Attr": {
"title": "Style/Attr",
"description": "Checks for uses of Module#attr.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/AutoResourceCleanup": {
"title": "Style/AutoResourceCleanup",
"description": "Suggests the usage of an auto resource cleanup version of a method (if available).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Style/BarePercentLiterals": {
"title": "Style/BarePercentLiterals",
"description": "Checks if usage of %() or %Q() matches configuration.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"percent_q",
"bare_percent"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"percent_q",
"bare_percent"
]
}
}
],
"default": "bare_percent"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/BeginBlock": {
"title": "Style/BeginBlock",
"description": "Avoid the use of BEGIN blocks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Style/BisectedAttrAccessor": {
"title": "Style/BisectedAttrAccessor",
"description": "Checks for places where `attr_reader` and `attr_writer` for the same method can be combined into single `attr_accessor`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/BlockComments": {
"title": "Style/BlockComments",
"description": "Do not use block comments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/BlockDelimiters": {
"title": "Style/BlockDelimiters",
"description": "Avoid using {...} for multi-line blocks (multiline chaining is always ugly). Prefer {...} over do...end for single-line blocks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"line_count_based",
"semantic",
"braces_for_chaining",
"always_braces"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"line_count_based",
"semantic",
"braces_for_chaining",
"always_braces"
]
}
}
],
"default": "line_count_based"
},
"ProceduralMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"benchmark",
"bm",
"bmbm",
"create",
"each_with_object",
"measure",
"new",
"realtime",
"tap",
"with_object"
]
},
"FunctionalMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"let",
"let!",
"subject",
"watch"
]
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"lambda",
"proc",
"it"
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"AllowBracesOnProceduralOneLiners": {
"type": "boolean",
"default": false
},
"BracesRequiredMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/CaseEquality": {
"title": "Style/CaseEquality",
"description": "Avoid explicit use of the case equality operator(===).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowOnConstant": {
"type": "boolean",
"default": false
},
"AllowOnSelfClass": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/CaseLikeIf": {
"title": "Style/CaseLikeIf",
"description": "Identifies places where `if-elsif` constructions can be replaced with `case-when`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"MinBranchesCount": {
"type": "integer",
"default": 3
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/CharacterLiteral": {
"title": "Style/CharacterLiteral",
"description": "Checks for uses of character literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ClassAndModuleChildren": {
"title": "Style/ClassAndModuleChildren",
"description": "Checks style of children classes and modules.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"nested",
"compact"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"nested",
"compact"
]
}
}
],
"default": "nested"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ClassCheck": {
"title": "Style/ClassCheck",
"description": "Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"is_a?",
"kind_of?"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"is_a?",
"kind_of?"
]
}
}
],
"default": "is_a?"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ClassEqualityComparison": {
"title": "Style/ClassEqualityComparison",
"description": "Enforces the use of `Object#instance_of?` instead of class comparison for equality.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"==",
"equal?",
"eql?"
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ClassMethods": {
"title": "Style/ClassMethods",
"description": "Use self when defining module/class methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ClassMethodsDefinitions": {
"title": "Style/ClassMethodsDefinitions",
"description": "Enforces using `def self.method_name` or `class << self` to define class methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"def_self",
"self_class"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"def_self",
"self_class"
]
}
}
],
"default": "def_self"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ClassVars": {
"title": "Style/ClassVars",
"description": "Avoid the use of class variables.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Style/CollectionCompact": {
"title": "Style/CollectionCompact",
"description": "Use `{Array,Hash}#{compact,compact!}` instead of custom logic to reject nils.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowedReceivers": {
"type": "array",
"items": {
},
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/CollectionMethods": {
"title": "Style/CollectionMethods",
"description": "Preferred collection methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"PreferredMethods": {
"type": "object",
"default": {
"collect": "map",
"collect!": "map!",
"collect_concat": "flat_map",
"inject": "reduce",
"detect": "find",
"find_all": "select",
"member?": "include?"
}
},
"MethodsAcceptingSymbol": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"inject",
"reduce"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ColonMethodCall": {
"title": "Style/ColonMethodCall",
"description": "Do not use :: for method call.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ColonMethodDefinition": {
"title": "Style/ColonMethodDefinition",
"description": "Do not use :: for defining class methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/CombinableLoops": {
"title": "Style/CombinableLoops",
"description": "Checks for places where multiple consecutive loops over the same data can be combined into a single loop.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/CommandLiteral": {
"title": "Style/CommandLiteral",
"description": "Use `` or %x around command literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"backticks",
"percent_x",
"mixed"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"backticks",
"percent_x",
"mixed"
]
}
}
],
"default": "backticks"
},
"AllowInnerBackticks": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/CommentAnnotation": {
"title": "Style/CommentAnnotation",
"description": "Checks formatting of special comments (TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Keywords": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"TODO",
"FIXME",
"OPTIMIZE",
"HACK",
"REVIEW",
"NOTE"
]
},
"RequireColon": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/CommentedKeyword": {
"title": "Style/CommentedKeyword",
"description": "Do not place comments on the same line as certain keywords.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ComparableClamp": {
"title": "Style/ComparableClamp",
"description": "Enforces the use of `Comparable#clamp` instead of comparison by minimum and maximum.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ConcatArrayLiterals": {
"title": "Style/ConcatArrayLiterals",
"description": "Enforces the use of `Array#push(item)` instead of `Array#concat([item])` to avoid redundant array literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ConditionalAssignment": {
"title": "Style/ConditionalAssignment",
"description": "Use the return value of `if` and `case` statements for assignment to a variable and variable comparison instead of assigning that variable inside of each branch.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"assign_to_condition",
"assign_inside_condition"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"assign_to_condition",
"assign_inside_condition"
]
}
}
],
"default": "assign_to_condition"
},
"SingleLineConditionsOnly": {
"type": "boolean",
"default": true
},
"IncludeTernaryExpressions": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ConstantVisibility": {
"title": "Style/ConstantVisibility",
"description": "Check that class- and module constants have visibility declarations.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"IgnoreModules": {
"type": "boolean",
"default": false
}
}
}
]
},
"Style/Copyright": {
"title": "Style/Copyright",
"description": "Include a copyright notice in each file before any code.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"Notice": {
"type": "string",
"default": "^Copyright (\\(c\\) )?2[0-9]{3} .+"
},
"AutocorrectNotice": {
"type": "string",
"default": ""
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/DataInheritance": {
"title": "Style/DataInheritance",
"description": "Checks for inheritance from Data.define.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/DateTime": {
"title": "Style/DateTime",
"description": "Use Time over DateTime.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowCoercion": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/DefWithParentheses": {
"title": "Style/DefWithParentheses",
"description": "Use def with parentheses when there are arguments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/Dir": {
"title": "Style/Dir",
"description": "Use the `__dir__` method to retrieve the canonicalized absolute path to the current file.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/DirEmpty": {
"title": "Style/DirEmpty",
"description": "Prefer to use `Dir.empty?('path/to/dir')` when checking if a directory is empty.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/DisableCopsWithinSourceCodeDirective": {
"title": "Style/DisableCopsWithinSourceCodeDirective",
"description": "Forbids disabling/enabling cops within source code.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowedCops": {
"type": "array",
"items": {
},
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/DocumentationMethod": {
"title": "Style/DocumentationMethod",
"description": "Checks for missing documentation comment for public methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
},
"RequireForNonPublicMethods": {
"type": "boolean",
"default": false
}
}
}
]
},
"Style/Documentation": {
"title": "Style/Documentation",
"description": "Document classes and non-namespace modules.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedConstants": {
"type": "array",
"items": {
},
"default": [
]
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
},
"Style/DocumentDynamicEvalDefinition": {
"title": "Style/DocumentDynamicEvalDefinition",
"description": "When using `class_eval` (or other `eval`) with string interpolation, add a comment block showing its appearance if interpolated.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Style/DoubleCopDisableDirective": {
"title": "Style/DoubleCopDisableDirective",
"description": "Checks for double rubocop:disable comments on a single line.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/DoubleNegation": {
"title": "Style/DoubleNegation",
"description": "Checks for uses of double negation (!!).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"allowed_in_returns",
"forbidden"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"allowed_in_returns",
"forbidden"
]
}
}
],
"default": "allowed_in_returns"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EachForSimpleLoop": {
"title": "Style/EachForSimpleLoop",
"description": "Use `Integer#times` for a simple loop which iterates a fixed number of times.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EachWithObject": {
"title": "Style/EachWithObject",
"description": "Prefer `each_with_object` over `inject` or `reduce`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EmptyBlockParameter": {
"title": "Style/EmptyBlockParameter",
"description": "Omit pipes for empty block parameters.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EmptyCaseCondition": {
"title": "Style/EmptyCaseCondition",
"description": "Avoid empty condition in case statements.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EmptyElse": {
"title": "Style/EmptyElse",
"description": "Avoid empty else-clauses.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"empty",
"nil",
"both"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"empty",
"nil",
"both"
]
}
}
],
"default": "both"
},
"AllowComments": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EmptyHeredoc": {
"title": "Style/EmptyHeredoc",
"description": "Checks for using empty heredoc to reduce redundancy.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EmptyLambdaParameter": {
"title": "Style/EmptyLambdaParameter",
"description": "Omit parens for empty lambda parameters.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EmptyLiteral": {
"title": "Style/EmptyLiteral",
"description": "Prefer literals to Array.new/Hash.new/String.new.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EmptyMethod": {
"title": "Style/EmptyMethod",
"description": "Checks the formatting of empty method definitions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"compact",
"expanded"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"compact",
"expanded"
]
}
}
],
"default": "compact"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EndlessMethod": {
"title": "Style/EndlessMethod",
"description": "Avoid the use of multi-lined endless method definitions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"allow_single_line",
"allow_always",
"disallow"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"allow_single_line",
"allow_always",
"disallow"
]
}
}
],
"default": "allow_single_line"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/Encoding": {
"title": "Style/Encoding",
"description": "Use UTF-8 as the source file encoding.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EndBlock": {
"title": "Style/EndBlock",
"description": "Avoid the use of END blocks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EnvHome": {
"title": "Style/EnvHome",
"description": "Checks for consistent usage of `ENV['HOME']`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EvalWithLocation": {
"title": "Style/EvalWithLocation",
"description": "Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/EvenOdd": {
"title": "Style/EvenOdd",
"description": "Favor the use of `Integer#even?` && `Integer#odd?`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ExactRegexpMatch": {
"title": "Style/ExactRegexpMatch",
"description": "Checks for exact regexp match inside Regexp literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ExpandPathArguments": {
"title": "Style/ExpandPathArguments",
"description": "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ExplicitBlockArgument": {
"title": "Style/ExplicitBlockArgument",
"description": "Consider using explicit block argument to avoid writing block literal that just passes its arguments to another block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ExponentialNotation": {
"title": "Style/ExponentialNotation",
"description": "When using exponential notation, favor a mantissa between 1 (inclusive) and 10 (exclusive).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"scientific",
"engineering",
"integral"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"scientific",
"engineering",
"integral"
]
}
}
],
"default": "scientific"
}
}
}
]
},
"Style/FetchEnvVar": {
"title": "Style/FetchEnvVar",
"description": "Suggests `ENV.fetch` for the replacement of `ENV[]`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowedVars": {
"type": "array",
"items": {
},
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/FileEmpty": {
"title": "Style/FileEmpty",
"description": "Prefer to use `File.empty?('path/to/file')` when checking if a file is empty.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/FileRead": {
"title": "Style/FileRead",
"description": "Favor `File.(bin)read` convenience methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/FileWrite": {
"title": "Style/FileWrite",
"description": "Favor `File.(bin)write` convenience methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/FloatDivision": {
"title": "Style/FloatDivision",
"description": "For performing float division, coerce one side only.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"left_coerce",
"right_coerce",
"single_coerce",
"fdiv"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"left_coerce",
"right_coerce",
"single_coerce",
"fdiv"
]
}
}
],
"default": "single_coerce"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/For": {
"title": "Style/For",
"description": "Checks use of for or each in multiline loops.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"each",
"for"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"each",
"for"
]
}
}
],
"default": "each"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/FormatString": {
"title": "Style/FormatString",
"description": "Enforce the use of Kernel#sprintf, Kernel#format or String#%.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"format",
"sprintf",
"percent"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"format",
"sprintf",
"percent"
]
}
}
],
"default": "format"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/FormatStringToken": {
"title": "Style/FormatStringToken",
"description": "Use a consistent style for format string tokens.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"annotated",
"template",
"unannotated"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"annotated",
"template",
"unannotated"
]
}
}
],
"default": "annotated"
},
"MaxUnannotatedPlaceholdersAllowed": {
"type": "integer",
"default": 1
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"redirect"
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/FrozenStringLiteralComment": {
"title": "Style/FrozenStringLiteralComment",
"description": "Add the frozen_string_literal comment to the top of files to help transition to frozen string literals by default.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"always",
"always_true",
"never"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"always",
"always_true",
"never"
]
}
}
],
"default": "always"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/GlobalStdStream": {
"title": "Style/GlobalStdStream",
"description": "Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/GlobalVars": {
"title": "Style/GlobalVars",
"description": "Do not introduce global variables.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedVariables": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Style/GuardClause": {
"title": "Style/GuardClause",
"description": "Check for conditionals that can be replaced with guard clauses.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"MinBodyLength": {
"type": "integer",
"default": 1
},
"AllowConsecutiveConditionals": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/HashAsLastArrayItem": {
"title": "Style/HashAsLastArrayItem",
"description": "Checks for presence or absence of braces around hash literal as a last array item depending on configuration.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"braces",
"no_braces"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"braces",
"no_braces"
]
}
}
],
"default": "braces"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/HashConversion": {
"title": "Style/HashConversion",
"description": "Avoid Hash[] in favor of ary.to_h or literal hashes.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowSplatArgument": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/HashEachMethods": {
"title": "Style/HashEachMethods",
"description": "Use Hash#each_key and Hash#each_value.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedReceivers": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"Thread.current"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/HashExcept": {
"title": "Style/HashExcept",
"description": "Checks for usages of `Hash#reject`, `Hash#select`, and `Hash#filter` methods that can be replaced with `Hash#except` method.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/HashLikeCase": {
"title": "Style/HashLikeCase",
"description": "Checks for places where `case-when` represents a simple 1:1 mapping and can be replaced with a hash lookup.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"MinBranchesCount": {
"type": "integer",
"default": 3
}
}
}
]
},
"Style/HashSyntax": {
"title": "Style/HashSyntax",
"description": "Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax { :a => 1, :b => 2 }.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"ruby19",
"hash_rockets",
"no_mixed_keys",
"ruby19_no_mixed_keys"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"ruby19",
"hash_rockets",
"no_mixed_keys",
"ruby19_no_mixed_keys"
]
}
}
],
"default": "ruby19"
},
"EnforcedShorthandSyntax": {
"oneOf": [
{
"type": "string",
"enum": [
"always",
"never",
"either",
"consistent"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"always",
"never",
"either",
"consistent"
]
}
}
],
"default": "always"
},
"UseHashRocketsWithSymbolValues": {
"type": "boolean",
"default": false
},
"PreferHashRocketsForNonAlnumEndingSymbols": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/HashTransformKeys": {
"title": "Style/HashTransformKeys",
"description": "Prefer `transform_keys` over `each_with_object`, `map`, or `to_h`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/HashTransformValues": {
"title": "Style/HashTransformValues",
"description": "Prefer `transform_values` over `each_with_object`, `map`, or `to_h`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/IdenticalConditionalBranches": {
"title": "Style/IdenticalConditionalBranches",
"description": "Checks that conditional statements do not have an identical line at the end of each branch, which can validly be moved out of the conditional.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/IfInsideElse": {
"title": "Style/IfInsideElse",
"description": "Finds if nodes inside else, which can be converted to elsif.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowIfModifier": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/IfUnlessModifier": {
"title": "Style/IfUnlessModifier",
"description": "Favor modifier if/unless usage when you have a single-line body.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/IfUnlessModifierOfIfUnless": {
"title": "Style/IfUnlessModifierOfIfUnless",
"description": "Avoid modifier if/unless usage on conditionals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/IfWithBooleanLiteralBranches": {
"title": "Style/IfWithBooleanLiteralBranches",
"description": "Checks for redundant `if` with boolean literal branches.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"nonzero?"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/IfWithSemicolon": {
"title": "Style/IfWithSemicolon",
"description": "Do not use if x; .... Use the ternary operator instead.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ImplicitRuntimeError": {
"title": "Style/ImplicitRuntimeError",
"description": "Use `raise` or `fail` with an explicit exception class and message, rather than just a message.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Style/InPatternThen": {
"title": "Style/InPatternThen",
"description": "Checks for `in;` uses in `case` expressions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/InfiniteLoop": {
"title": "Style/InfiniteLoop",
"description": "Use Kernel#loop for infinite loops. This cop is unsafe if the body may raise a `StopIteration` exception.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/InverseMethods": {
"title": "Style/InverseMethods",
"description": "Use the inverse method instead of `!.method` if an inverse method is defined.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"InverseMethods": {
"type": "object",
"default": {
"any?": "none?",
"even?": "odd?",
"==": "!=",
"=~": "!~",
"<": ">=",
">": "<="
}
},
"InverseBlocks": {
"type": "object",
"default": {
"select": "reject",
"select!": "reject!"
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/InlineComment": {
"title": "Style/InlineComment",
"description": "Avoid trailing inline comments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Style/InvertibleUnlessCondition": {
"title": "Style/InvertibleUnlessCondition",
"description": "Favor `if` with inverted condition over `unless`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"InverseMethods": {
"type": "object",
"default": {
"!=": "==",
">": "<=",
"<=": ">",
"<": ">=",
">=": "<",
"!~": "=~",
"zero?": "nonzero?",
"nonzero?": "zero?",
"any?": "none?",
"none?": "any?",
"even?": "odd?",
"odd?": "even?",
"present?": "blank?",
"blank?": "present?",
"include?": "exclude?",
"exclude?": "include?"
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/IpAddresses": {
"title": "Style/IpAddresses",
"description": "Don't include literal IP addresses in code.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowedAddresses": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"::"
]
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
},
"Style/KeywordParametersOrder": {
"title": "Style/KeywordParametersOrder",
"description": "Enforces that optional keyword parameters are placed at the end of the parameters list.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/Lambda": {
"title": "Style/Lambda",
"description": "Use the new lambda literal syntax for single-line blocks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"line_count_dependent",
"lambda",
"literal"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"line_count_dependent",
"lambda",
"literal"
]
}
}
],
"default": "line_count_dependent"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/LambdaCall": {
"title": "Style/LambdaCall",
"description": "Use lambda.call(...) instead of lambda.(...).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"call",
"braces"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"call",
"braces"
]
}
}
],
"default": "call"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/LineEndConcatenation": {
"title": "Style/LineEndConcatenation",
"description": "Use \\ instead of + or << to concatenate two string literals at line end.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MagicCommentFormat": {
"title": "Style/MagicCommentFormat",
"description": "Use a consistent style for magic comments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"snake_case",
"kebab_case"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"snake_case",
"kebab_case"
]
}
}
],
"default": "snake_case"
},
"DirectiveCapitalization": {
"type": "string",
"default": "lowercase"
},
"ValueCapitalization": {
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MapToHash": {
"title": "Style/MapToHash",
"description": "Prefer `to_h` with a block over `map.to_h`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MapToSet": {
"title": "Style/MapToSet",
"description": "Prefer `to_set` with a block over `map.to_set`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MethodCallWithoutArgsParentheses": {
"title": "Style/MethodCallWithoutArgsParentheses",
"description": "Do not use parentheses for method calls with no arguments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MethodCallWithArgsParentheses": {
"title": "Style/MethodCallWithArgsParentheses",
"description": "Use parentheses for method calls with arguments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"IgnoreMacros": {
"type": "boolean",
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"IncludedMacros": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowParenthesesInMultilineCall": {
"type": "boolean",
"default": false
},
"AllowParenthesesInChaining": {
"type": "boolean",
"default": false
},
"AllowParenthesesInCamelCaseMethod": {
"type": "boolean",
"default": false
},
"AllowParenthesesInStringInterpolation": {
"type": "boolean",
"default": false
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"require_parentheses",
"omit_parentheses"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"require_parentheses",
"omit_parentheses"
]
}
}
],
"default": "require_parentheses"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MinMaxComparison": {
"title": "Style/MinMaxComparison",
"description": "Enforces the use of `max` or `min` instead of comparison for greater or less.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MultilineInPatternThen": {
"title": "Style/MultilineInPatternThen",
"description": "Do not use `then` for multi-line `in` statement.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NumberedParameters": {
"title": "Style/NumberedParameters",
"description": "Restrict the usage of numbered parameters.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"allow_single_line",
"disallow"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"allow_single_line",
"disallow"
]
}
}
],
"default": "allow_single_line"
}
}
}
]
},
"Style/OpenStructUse": {
"title": "Style/OpenStructUse",
"description": "Avoid using OpenStruct. As of Ruby 3.0, use is officially discouraged due to performance, version compatibility, and potential security issues.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Style/OperatorMethodCall": {
"title": "Style/OperatorMethodCall",
"description": "Checks for redundant dot before operator method call.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantArrayConstructor": {
"title": "Style/RedundantArrayConstructor",
"description": "Checks for the instantiation of array using redundant `Array` constructor.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantAssignment": {
"title": "Style/RedundantAssignment",
"description": "Checks for redundant assignment before returning.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantConstantBase": {
"title": "Style/RedundantConstantBase",
"description": "Avoid redundant `::` prefix on constant.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantCurrentDirectoryInPath": {
"title": "Style/RedundantCurrentDirectoryInPath",
"description": "Checks for uses a redundant current directory in path.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantDoubleSplatHashBraces": {
"title": "Style/RedundantDoubleSplatHashBraces",
"description": "Checks for redundant uses of double splat hash braces.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantEach": {
"title": "Style/RedundantEach",
"description": "Checks for redundant `each`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantFetchBlock": {
"title": "Style/RedundantFetchBlock",
"description": "Use `fetch(key, value)` instead of `fetch(key) { value }` when value has Numeric, Rational, Complex, Symbol or String type, `false`, `true`, `nil` or is a constant.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"SafeForConstants": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantFileExtensionInRequire": {
"title": "Style/RedundantFileExtensionInRequire",
"description": "Checks for the presence of superfluous `.rb` extension in the filename provided to `require` and `require_relative`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantFilterChain": {
"title": "Style/RedundantFilterChain",
"description": "Identifies usages of `any?`, `empty?`, `none?` or `one?` predicate methods chained to `select`/`filter`/`find_all` and change them to use predicate method instead.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantHeredocDelimiterQuotes": {
"title": "Style/RedundantHeredocDelimiterQuotes",
"description": "Checks for redundant heredoc delimiter quotes.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantInitialize": {
"title": "Style/RedundantInitialize",
"description": "Checks for redundant `initialize` methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowComments": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantLineContinuation": {
"title": "Style/RedundantLineContinuation",
"description": "Check for redundant line continuation.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantRegexpArgument": {
"title": "Style/RedundantRegexpArgument",
"description": "Identifies places where argument can be replaced from a deterministic regexp to a string.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantRegexpConstructor": {
"title": "Style/RedundantRegexpConstructor",
"description": "Checks for the instantiation of regexp using redundant `Regexp.new` or `Regexp.compile`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantSelfAssignment": {
"title": "Style/RedundantSelfAssignment",
"description": "Checks for places where redundant assignments are made for in place modification methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantSelfAssignmentBranch": {
"title": "Style/RedundantSelfAssignmentBranch",
"description": "Checks for places where conditional branch makes redundant self-assignment.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RequireOrder": {
"title": "Style/RequireOrder",
"description": "Sort `require` and `require_relative` in alphabetical order.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SingleLineDoEndBlock": {
"title": "Style/SingleLineDoEndBlock",
"description": "Checks for single-line `do`...`end` blocks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SoleNestedConditional": {
"title": "Style/SoleNestedConditional",
"description": "Finds sole nested conditional nodes which can be merged into outer conditional node.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowModifier": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/StaticClass": {
"title": "Style/StaticClass",
"description": "Prefer modules to classes with only class methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MapCompactWithConditionalBlock": {
"title": "Style/MapCompactWithConditionalBlock",
"description": "Prefer `select` or `reject` over `map { ... }.compact`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MethodCalledOnDoEndBlock": {
"title": "Style/MethodCalledOnDoEndBlock",
"description": "Avoid chaining a method call on a do...end block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Style/MethodDefParentheses": {
"title": "Style/MethodDefParentheses",
"description": "Checks if the method definitions have or don't have parentheses.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"require_parentheses",
"require_no_parentheses",
"require_no_parentheses_except_multiline"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"require_parentheses",
"require_no_parentheses",
"require_no_parentheses_except_multiline"
]
}
}
],
"default": "require_parentheses"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MinMax": {
"title": "Style/MinMax",
"description": "Use `Enumerable#minmax` instead of `Enumerable#min` and `Enumerable#max` in conjunction.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MissingElse": {
"title": "Style/MissingElse",
"description": "Require if/case expressions to have an else branches. If enabled, it is recommended that Style/UnlessElse and Style/EmptyElse be enabled. This will conflict with Style/EmptyElse if Style/EmptyElse is configured to style \"both\".",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"if",
"case",
"both"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"if",
"case",
"both"
]
}
}
],
"default": "both"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MissingRespondToMissing": {
"title": "Style/MissingRespondToMissing",
"description": "Checks if `method_missing` is implemented without implementing `respond_to_missing`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Style/MixinGrouping": {
"title": "Style/MixinGrouping",
"description": "Checks for grouping of mixins in `class` and `module` bodies.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"separated",
"grouped"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"separated",
"grouped"
]
}
}
],
"default": "separated"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MixinUsage": {
"title": "Style/MixinUsage",
"description": "Checks that `include`, `extend` and `prepend` exists at the top level.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Style/ModuleFunction": {
"title": "Style/ModuleFunction",
"description": "Checks for usage of `extend self` in modules.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"module_function",
"extend_self",
"forbidden"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"module_function",
"extend_self",
"forbidden"
]
}
}
],
"default": "module_function"
},
"Autocorrect": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MultilineBlockChain": {
"title": "Style/MultilineBlockChain",
"description": "Avoid multi-line chains of blocks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Style/MultilineIfThen": {
"title": "Style/MultilineIfThen",
"description": "Do not use then for multi-line if/unless.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MultilineIfModifier": {
"title": "Style/MultilineIfModifier",
"description": "Only use if/unless modifiers on single line statements.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MultilineMethodSignature": {
"title": "Style/MultilineMethodSignature",
"description": "Avoid multi-line method signatures.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MultilineMemoization": {
"title": "Style/MultilineMemoization",
"description": "Wrap multiline memoizations in a `begin` and `end` block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"keyword",
"braces"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"keyword",
"braces"
]
}
}
],
"default": "keyword"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MultilineTernaryOperator": {
"title": "Style/MultilineTernaryOperator",
"description": "Avoid multi-line ?: (the ternary operator); use if/unless instead.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MultilineWhenThen": {
"title": "Style/MultilineWhenThen",
"description": "Do not use then for multi-line when statement.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MultipleComparison": {
"title": "Style/MultipleComparison",
"description": "Avoid comparing a variable with multiple items in a conditional, use Array#include? instead.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowMethodComparison": {
"type": "boolean",
"default": true
},
"ComparisonsThreshold": {
"type": "integer",
"default": 2
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/MutableConstant": {
"title": "Style/MutableConstant",
"description": "Do not assign mutable objects to constants.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"literals",
"strict"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"literals",
"strict"
]
}
}
],
"default": "literals"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NegatedIf": {
"title": "Style/NegatedIf",
"description": "Favor unless over if for negative conditions (or control flow or).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"both",
"prefix",
"postfix"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"both",
"prefix",
"postfix"
]
}
}
],
"default": "both"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NegatedIfElseCondition": {
"title": "Style/NegatedIfElseCondition",
"description": "Checks for uses of `if-else` and ternary operators with a negated condition which can be simplified by inverting condition and swapping branches.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NegatedUnless": {
"title": "Style/NegatedUnless",
"description": "Favor if over unless for negative conditions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"both",
"prefix",
"postfix"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"both",
"prefix",
"postfix"
]
}
}
],
"default": "both"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NegatedWhile": {
"title": "Style/NegatedWhile",
"description": "Favor until over while for negative conditions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NestedFileDirname": {
"title": "Style/NestedFileDirname",
"description": "Checks for nested `File.dirname`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NestedModifier": {
"title": "Style/NestedModifier",
"description": "Avoid using nested modifiers.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NestedParenthesizedCalls": {
"title": "Style/NestedParenthesizedCalls",
"description": "Parenthesize method calls which are nested inside the argument list of another parenthesized method call.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"be",
"be_a",
"be_an",
"be_between",
"be_falsey",
"be_kind_of",
"be_instance_of",
"be_truthy",
"be_within",
"eq",
"eql",
"end_with",
"include",
"match",
"raise_error",
"respond_to",
"start_with"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NestedTernaryOperator": {
"title": "Style/NestedTernaryOperator",
"description": "Use one expression per branch in a ternary operator.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/Next": {
"title": "Style/Next",
"description": "Use `next` to skip iteration instead of a condition at the end.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"skip_modifier_ifs",
"always"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"skip_modifier_ifs",
"always"
]
}
}
],
"default": "skip_modifier_ifs"
},
"MinBodyLength": {
"type": "integer",
"default": 3
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NilComparison": {
"title": "Style/NilComparison",
"description": "Prefer x.nil? to x == nil.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"predicate",
"comparison"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"predicate",
"comparison"
]
}
}
],
"default": "predicate"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NilLambda": {
"title": "Style/NilLambda",
"description": "Prefer `-> {}` to `-> { nil }`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NonNilCheck": {
"title": "Style/NonNilCheck",
"description": "Checks for redundant nil checks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"IncludeSemanticChanges": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/Not": {
"title": "Style/Not",
"description": "Use ! instead of not.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NumberedParametersLimit": {
"title": "Style/NumberedParametersLimit",
"description": "Avoid excessive numbered params in a single block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Max": {
"type": "integer",
"default": 1
}
}
}
]
},
"Style/NumericLiterals": {
"title": "Style/NumericLiterals",
"description": "Add underscores to large numeric literals to improve their readability.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"MinDigits": {
"type": "integer",
"default": 5
},
"Strict": {
"type": "boolean",
"default": false
},
"AllowedNumbers": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NumericLiteralPrefix": {
"title": "Style/NumericLiteralPrefix",
"description": "Use smallcase prefixes for numeric literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedOctalStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"zero_with_o",
"zero_only"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"zero_with_o",
"zero_only"
]
}
}
],
"default": "zero_with_o"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/NumericPredicate": {
"title": "Style/NumericPredicate",
"description": "Checks for the use of predicate- or comparison methods for numeric comparisons.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"predicate",
"comparison"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"predicate",
"comparison"
]
}
}
],
"default": "predicate"
},
"AllowedMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ObjectThen": {
"title": "Style/ObjectThen",
"description": "Enforces the use of consistent method names `Object#yield_self` or `Object#then`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"then",
"yield_self"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"then",
"yield_self"
]
}
}
],
"default": "then"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/OneLineConditional": {
"title": "Style/OneLineConditional",
"description": "Favor the ternary operator (?:) or multi-line constructs over single-line if/then/else/end constructs.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AlwaysCorrectToMultiline": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/OrAssignment": {
"title": "Style/OrAssignment",
"description": "Recommend usage of double pipe equals (||=) where applicable.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/OptionHash": {
"title": "Style/OptionHash",
"description": "Don't use option hashes when you can use keyword arguments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"SuspiciousParamNames": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"options",
"opts",
"args",
"params",
"parameters"
]
},
"Allowlist": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Style/OptionalArguments": {
"title": "Style/OptionalArguments",
"description": "Checks for optional arguments that do not appear at the end of the argument list.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Style/OptionalBooleanParameter": {
"title": "Style/OptionalBooleanParameter",
"description": "Use keyword arguments when defining method with boolean argument.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"respond_to_missing?"
]
}
}
}
]
},
"Style/ParallelAssignment": {
"title": "Style/ParallelAssignment",
"description": "Check for simple usages of parallel assignment. It will only warn when the number of variables matches on both sides of the assignment.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ParenthesesAroundCondition": {
"title": "Style/ParenthesesAroundCondition",
"description": "Don't use parentheses around the condition of an if/unless/while.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowSafeAssignment": {
"type": "boolean",
"default": true
},
"AllowInMultilineConditions": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/PercentLiteralDelimiters": {
"title": "Style/PercentLiteralDelimiters",
"description": "Use `%`-literal delimiters consistently.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"PreferredDelimiters": {
"type": "object",
"default": {
"default": "()",
"%i": "[]",
"%I": "[]",
"%r": "{}",
"%w": "[]",
"%W": "[]"
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/PercentQLiterals": {
"title": "Style/PercentQLiterals",
"description": "Checks if uses of %Q/%q match the configured preference.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"lower_case_q",
"upper_case_q"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"lower_case_q",
"upper_case_q"
]
}
}
],
"default": "lower_case_q"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/PerlBackrefs": {
"title": "Style/PerlBackrefs",
"description": "Avoid Perl-style regex back references.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/PreferredHashMethods": {
"title": "Style/PreferredHashMethods",
"description": "Checks use of `has_key?` and `has_value?` Hash methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"short",
"verbose"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"short",
"verbose"
]
}
}
],
"default": "short"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/Proc": {
"title": "Style/Proc",
"description": "Use proc instead of Proc.new.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/QuotedSymbols": {
"title": "Style/QuotedSymbols",
"description": "Use a consistent style for quoted symbols.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"same_as_string_literals",
"single_quotes",
"double_quotes"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"same_as_string_literals",
"single_quotes",
"double_quotes"
]
}
}
],
"default": "same_as_string_literals"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RaiseArgs": {
"title": "Style/RaiseArgs",
"description": "Checks the arguments passed to raise/fail.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"compact",
"exploded"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"compact",
"exploded"
]
}
}
],
"default": "exploded"
},
"AllowedCompactTypes": {
"type": "array",
"items": {
},
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RandomWithOffset": {
"title": "Style/RandomWithOffset",
"description": "Prefer to use ranges when generating random numbers instead of integers with offsets.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantArgument": {
"title": "Style/RedundantArgument",
"description": "Check for a redundant argument passed to certain methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Methods": {
"type": "object",
"default": {
"join": "",
"sum": 0,
"exit": true,
"exit!": false,
"split": " ",
"chomp": "\n",
"chomp!": "\n"
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantBegin": {
"title": "Style/RedundantBegin",
"description": "Don't use begin blocks when they are not needed.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantCapitalW": {
"title": "Style/RedundantCapitalW",
"description": "Checks for %W when interpolation is not needed.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantCondition": {
"title": "Style/RedundantCondition",
"description": "Checks for unnecessary conditional expressions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantConditional": {
"title": "Style/RedundantConditional",
"description": "Don't return true/false from a conditional.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantException": {
"title": "Style/RedundantException",
"description": "Checks for an obsolete RuntimeException argument in raise/fail.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantFreeze": {
"title": "Style/RedundantFreeze",
"description": "Checks usages of Object#freeze on immutable objects.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantInterpolation": {
"title": "Style/RedundantInterpolation",
"description": "Checks for strings that are just an interpolated expression.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantParentheses": {
"title": "Style/RedundantParentheses",
"description": "Checks for parentheses that seem not to serve any purpose.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantPercentQ": {
"title": "Style/RedundantPercentQ",
"description": "Checks for %q/%Q when single quotes or double quotes would do.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantRegexpCharacterClass": {
"title": "Style/RedundantRegexpCharacterClass",
"description": "Checks for unnecessary single-element Regexp character classes.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantRegexpEscape": {
"title": "Style/RedundantRegexpEscape",
"description": "Checks for redundant escapes in Regexps.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantReturn": {
"title": "Style/RedundantReturn",
"description": "Don't use return where it's not required.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowMultipleReturnValues": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantSelf": {
"title": "Style/RedundantSelf",
"description": "Don't use self where it's not needed.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantSort": {
"title": "Style/RedundantSort",
"description": "Use `min` instead of `sort.first`, `max_by` instead of `sort_by...last`, etc.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantSortBy": {
"title": "Style/RedundantSortBy",
"description": "Use `sort` instead of `sort_by { |x| x }`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RedundantStringEscape": {
"title": "Style/RedundantStringEscape",
"description": "Checks for redundant escapes in string literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RegexpLiteral": {
"title": "Style/RegexpLiteral",
"description": "Use / or %r around regular expressions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"slashes",
"percent_r",
"mixed"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"slashes",
"percent_r",
"mixed"
]
}
}
],
"default": "slashes"
},
"AllowInnerSlashes": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RescueModifier": {
"title": "Style/RescueModifier",
"description": "Avoid using rescue in its modifier form.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/RescueStandardError": {
"title": "Style/RescueStandardError",
"description": "Avoid rescuing without specifying an error class.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"implicit",
"explicit"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"implicit",
"explicit"
]
}
}
],
"default": "explicit"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ReturnNil": {
"title": "Style/ReturnNil",
"description": "Use return instead of return nil.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"return",
"return_nil"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"return",
"return_nil"
]
}
}
],
"default": "return"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ReturnNilInPredicateMethodDefinition": {
"title": "Style/ReturnNilInPredicateMethodDefinition",
"description": "Checks if uses of `return` or `return nil` in predicate method definition.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowedMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SafeNavigation": {
"title": "Style/SafeNavigation",
"description": "Transforms usages of a method call safeguarded by a check for the existence of the object to safe navigation (`&.`). Autocorrection is unsafe as it assumes the object will be `nil` or truthy, but never `false`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"ConvertCodeThatCanStartToReturnNil": {
"type": "boolean",
"default": false
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"present?",
"blank?",
"presence",
"try",
"try!"
]
},
"MaxChainLength": {
"type": "integer",
"default": 2
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/Sample": {
"title": "Style/Sample",
"description": "Use `sample` instead of `shuffle.first`, `shuffle.last`, and `shuffle[Integer]`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SelectByRegexp": {
"title": "Style/SelectByRegexp",
"description": "Prefer grep/grep_v to select/reject with a regexp match.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SelfAssignment": {
"title": "Style/SelfAssignment",
"description": "Checks for places where self-assignment shorthand should have been used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/Semicolon": {
"title": "Style/Semicolon",
"description": "Don't use semicolons to terminate expressions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowAsExpressionSeparator": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/Send": {
"title": "Style/Send",
"description": "Prefer `Object#__send__` or `Object#public_send` to `send`, as `send` may overlap with existing methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Style/SignalException": {
"title": "Style/SignalException",
"description": "Checks for proper usage of fail and raise.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"only_raise",
"only_fail",
"semantic"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"only_raise",
"only_fail",
"semantic"
]
}
}
],
"default": "only_raise"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SingleArgumentDig": {
"title": "Style/SingleArgumentDig",
"description": "Avoid using single argument dig method.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SingleLineBlockParams": {
"title": "Style/SingleLineBlockParams",
"description": "Enforces the names of some block params.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"Methods": {
"type": "array",
"items": {
"type": "object"
},
"default": [
{
"reduce": [
"acc",
"elem"
]
},
{
"inject": [
"acc",
"elem"
]
}
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SingleLineMethods": {
"title": "Style/SingleLineMethods",
"description": "Avoid single-line methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowIfMethodIsEmpty": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SlicingWithRange": {
"title": "Style/SlicingWithRange",
"description": "Checks array slicing is done with endless ranges when suitable.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SpecialGlobalVars": {
"title": "Style/SpecialGlobalVars",
"description": "Avoid Perl-style global variables.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"RequireEnglish": {
"type": "boolean",
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"use_perl_names",
"use_english_names",
"use_builtin_english_names"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"use_perl_names",
"use_english_names",
"use_builtin_english_names"
]
}
}
],
"default": "use_english_names"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/StabbyLambdaParentheses": {
"title": "Style/StabbyLambdaParentheses",
"description": "Check for the usage of parentheses around stabby lambda arguments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"require_parentheses",
"require_no_parentheses"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"require_parentheses",
"require_no_parentheses"
]
}
}
],
"default": "require_parentheses"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/StderrPuts": {
"title": "Style/StderrPuts",
"description": "Use `warn` instead of `$stderr.puts`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/StringChars": {
"title": "Style/StringChars",
"description": "Checks for uses of `String#split` with empty string or regexp literal argument.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/StringConcatenation": {
"title": "Style/StringConcatenation",
"description": "Checks for places where string concatenation can be replaced with string interpolation.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Mode": {
"type": "string",
"default": "aggressive"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/StringHashKeys": {
"title": "Style/StringHashKeys",
"description": "Prefer symbols instead of strings as hash keys.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/StringLiterals": {
"title": "Style/StringLiterals",
"description": "Checks if uses of quotes match the configured preference.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"single_quotes",
"double_quotes"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"single_quotes",
"double_quotes"
]
}
}
],
"default": "single_quotes"
},
"ConsistentQuotesInMultiline": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/StringLiteralsInInterpolation": {
"title": "Style/StringLiteralsInInterpolation",
"description": "Checks if uses of quotes inside expressions in interpolated strings match the configured preference.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"single_quotes",
"double_quotes"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"single_quotes",
"double_quotes"
]
}
}
],
"default": "single_quotes"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/StringMethods": {
"title": "Style/StringMethods",
"description": "Checks if configured preferred methods are used over non-preferred.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"PreferredMethods": {
"type": "object",
"default": {
"intern": "to_sym"
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/Strip": {
"title": "Style/Strip",
"description": "Use `strip` instead of `lstrip.rstrip`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/StructInheritance": {
"title": "Style/StructInheritance",
"description": "Checks for inheritance from Struct.new.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SwapValues": {
"title": "Style/SwapValues",
"description": "Enforces the use of shorthand-style swapping of 2 variables.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SymbolArray": {
"title": "Style/SymbolArray",
"description": "Use %i or %I for arrays of symbols.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"percent",
"brackets"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"percent",
"brackets"
]
}
}
],
"default": "percent"
},
"MinSize": {
"type": "integer",
"default": 2
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SymbolLiteral": {
"title": "Style/SymbolLiteral",
"description": "Use plain symbols instead of string symbols when possible.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/SymbolProc": {
"title": "Style/SymbolProc",
"description": "Use symbols as procs instead of blocks when possible.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowMethodsWithArguments": {
"type": "boolean",
"default": false
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"define_method",
"mail",
"respond_to"
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"AllowComments": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/TernaryParentheses": {
"title": "Style/TernaryParentheses",
"description": "Checks for use of parentheses around ternary conditions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"require_parentheses",
"require_no_parentheses",
"require_parentheses_when_complex"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"require_parentheses",
"require_no_parentheses",
"require_parentheses_when_complex"
]
}
}
],
"default": "require_no_parentheses"
},
"AllowSafeAssignment": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/TopLevelMethodDefinition": {
"title": "Style/TopLevelMethodDefinition",
"description": "Looks for top-level method definitions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Style/TrailingBodyOnClass": {
"title": "Style/TrailingBodyOnClass",
"description": "Class body goes below class statement.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/TrailingBodyOnMethodDefinition": {
"title": "Style/TrailingBodyOnMethodDefinition",
"description": "Method body goes below definition.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/TrailingBodyOnModule": {
"title": "Style/TrailingBodyOnModule",
"description": "Module body goes below module statement.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/TrailingCommaInArguments": {
"title": "Style/TrailingCommaInArguments",
"description": "Checks for trailing comma in argument lists.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyleForMultiline": {
"oneOf": [
{
"type": "string",
"enum": [
"comma",
"consistent_comma",
"no_comma"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"comma",
"consistent_comma",
"no_comma"
]
}
}
],
"default": "no_comma"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/TrailingCommaInArrayLiteral": {
"title": "Style/TrailingCommaInArrayLiteral",
"description": "Checks for trailing comma in array literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyleForMultiline": {
"oneOf": [
{
"type": "string",
"enum": [
"comma",
"consistent_comma",
"no_comma"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"comma",
"consistent_comma",
"no_comma"
]
}
}
],
"default": "no_comma"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/TrailingCommaInBlockArgs": {
"title": "Style/TrailingCommaInBlockArgs",
"description": "Checks for useless trailing commas in block arguments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/TrailingCommaInHashLiteral": {
"title": "Style/TrailingCommaInHashLiteral",
"description": "Checks for trailing comma in hash literals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyleForMultiline": {
"oneOf": [
{
"type": "string",
"enum": [
"comma",
"consistent_comma",
"no_comma"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"comma",
"consistent_comma",
"no_comma"
]
}
}
],
"default": "no_comma"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/TrailingMethodEndStatement": {
"title": "Style/TrailingMethodEndStatement",
"description": "Checks for trailing end statement on line of method body.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/TrailingUnderscoreVariable": {
"title": "Style/TrailingUnderscoreVariable",
"description": "Checks for the usage of unneeded trailing underscores at the end of parallel variable assignment.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"AllowNamedUnderscoreVariables": {
"type": "boolean",
"default": true
},
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/TrivialAccessors": {
"title": "Style/TrivialAccessors",
"description": "Prefer attr_* methods to trivial readers/writers.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"ExactNameMatch": {
"type": "boolean",
"default": true
},
"AllowPredicates": {
"type": "boolean",
"default": true
},
"AllowDSLWriters": {
"type": "boolean",
"default": true
},
"IgnoreClassMethods": {
"type": "boolean",
"default": false
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"to_ary",
"to_a",
"to_c",
"to_enum",
"to_h",
"to_hash",
"to_i",
"to_int",
"to_io",
"to_open",
"to_path",
"to_proc",
"to_r",
"to_regexp",
"to_str",
"to_s",
"to_sym"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/UnlessElse": {
"title": "Style/UnlessElse",
"description": "Do not use unless with else. Rewrite these with the positive case first.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/UnlessLogicalOperators": {
"title": "Style/UnlessLogicalOperators",
"description": "Checks for use of logical operators in an unless condition.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"forbid_mixed_logical_operators",
"forbid_logical_operators"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"forbid_mixed_logical_operators",
"forbid_logical_operators"
]
}
}
],
"default": "forbid_mixed_logical_operators"
}
}
}
]
},
"Style/UnpackFirst": {
"title": "Style/UnpackFirst",
"description": "Checks for accessing the first element of `String#unpack` instead of using `unpack1`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/VariableInterpolation": {
"title": "Style/VariableInterpolation",
"description": "Don't interpolate global, instance and class variables directly in strings.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/WhenThen": {
"title": "Style/WhenThen",
"description": "Use when x then ... for one-line cases.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/WhileUntilDo": {
"title": "Style/WhileUntilDo",
"description": "Checks for redundant do after while or until.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/WhileUntilModifier": {
"title": "Style/WhileUntilModifier",
"description": "Favor modifier while/until usage when you have a single-line body.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/WordArray": {
"title": "Style/WordArray",
"description": "Use %w or %W for arrays of words.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"percent",
"brackets"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"percent",
"brackets"
]
}
}
],
"default": "percent"
},
"MinSize": {
"type": "integer",
"default": 2
},
"WordRegex": {
"default": "(?-mix:\\A(?:\\p{Word}|\\p{Word}-\\p{Word}|\\n|\\t)+\\z)"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/YAMLFileRead": {
"title": "Style/YAMLFileRead",
"description": "Checks for the use of `YAML.load`, `YAML.safe_load`, and `YAML.parse` with `File.read` argument.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/YodaCondition": {
"title": "Style/YodaCondition",
"description": "Forbid or enforce yoda conditions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"forbid_for_all_comparison_operators",
"forbid_for_equality_operators_only",
"require_for_all_comparison_operators",
"require_for_equality_operators_only"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"forbid_for_all_comparison_operators",
"forbid_for_equality_operators_only",
"require_for_all_comparison_operators",
"require_for_equality_operators_only"
]
}
}
],
"default": "forbid_for_all_comparison_operators"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/YodaExpression": {
"title": "Style/YodaExpression",
"description": "Forbid the use of yoda expressions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Style/ZeroLengthPredicate": {
"title": "Style/ZeroLengthPredicate",
"description": "Use #empty? when testing for objects of length 0.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Security/CompoundHash": {
"title": "Security/CompoundHash",
"description": "When overwriting Object#hash to combine values, prefer delegating to Array#hash over writing a custom implementation.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Security/Eval": {
"title": "Security/Eval",
"description": "The use of eval represents a serious security risk.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Security/IoMethods": {
"title": "Security/IoMethods",
"description": "Checks for the first argument to `IO.read`, `IO.binread`, `IO.write`, `IO.binwrite`, `IO.foreach`, and `IO.readlines`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Security/JSONLoad": {
"title": "Security/JSONLoad",
"description": "Prefer usage of `JSON.parse` over `JSON.load` due to potential security issues. See reference for more information.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Security/MarshalLoad": {
"title": "Security/MarshalLoad",
"description": "Avoid using of `Marshal.load` or `Marshal.restore` due to potential security issues. See reference for more information.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Security/Open": {
"title": "Security/Open",
"description": "The use of `Kernel#open` and `URI.open` represent a serious security risk.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Security/YAMLLoad": {
"title": "Security/YAMLLoad",
"description": "Prefer usage of `YAML.safe_load` over `YAML.load` due to potential security issues. See reference for more information.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ActionControllerFlashBeforeRender": {
"title": "Rails/ActionControllerFlashBeforeRender",
"description": "Use `flash.now` instead of `flash` before `render`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ActionControllerTestCase": {
"title": "Rails/ActionControllerTestCase",
"description": "Use `ActionDispatch::IntegrationTest` instead of `ActionController::TestCase`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/test/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ActionFilter": {
"title": "Rails/ActionFilter",
"description": "Enforces consistent use of action filter methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"action",
"filter"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"action",
"filter"
]
}
}
],
"default": "action"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/controllers/**/*.rb",
"app/mailers/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ActionOrder": {
"title": "Rails/ActionOrder",
"description": "Enforce consistent ordering of controller actions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"ExpectedOrder": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"index",
"show",
"new",
"edit",
"create",
"update",
"destroy"
]
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/controllers/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ActiveRecordAliases": {
"title": "Rails/ActiveRecordAliases",
"description": "Avoid Active Record aliases: Use `update` instead of `update_attributes`. Use `update!` instead of `update_attributes!`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ActiveRecordCallbacksOrder": {
"title": "Rails/ActiveRecordCallbacksOrder",
"description": "Order callback declarations in the order in which they will be executed.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ActiveRecordOverride": {
"title": "Rails/ActiveRecordOverride",
"description": "Check for overriding Active Record methods instead of using callbacks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Severity": {
"type": "string",
"default": "warning"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
}
}
}
]
},
"Rails/ActiveSupportAliases": {
"title": "Rails/ActiveSupportAliases",
"description": "Avoid ActiveSupport aliases of standard ruby methods: `String#starts_with?`, `String#ends_with?`, `Array#append`, `Array#prepend`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ActiveSupportOnLoad": {
"title": "Rails/ActiveSupportOnLoad",
"description": "Use `ActiveSupport.on_load(...)` to patch Rails framework classes.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/AddColumnIndex": {
"title": "Rails/AddColumnIndex",
"description": "Rails migrations don't make use of a given `index` key, but also doesn't given an error when it's used, so it makes it seem like an index might be used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"db/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/AfterCommitOverride": {
"title": "Rails/AfterCommitOverride",
"description": "Enforces that there is only one call to `after_commit` (and its aliases - `after_create_commit`, `after_update_commit`, and `after_destroy_commit`) with the same callback name per model.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Rails/ApplicationController": {
"title": "Rails/ApplicationController",
"description": "Check that controllers subclass ApplicationController.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ApplicationJob": {
"title": "Rails/ApplicationJob",
"description": "Check that jobs subclass ApplicationJob.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ApplicationMailer": {
"title": "Rails/ApplicationMailer",
"description": "Check that mailers subclass ApplicationMailer.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ApplicationRecord": {
"title": "Rails/ApplicationRecord",
"description": "Check that models subclass ApplicationRecord.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ArelStar": {
"title": "Rails/ArelStar",
"description": "Enforces `Arel.star` instead of `\"*\"` for expanded columns.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/AssertNot": {
"title": "Rails/AssertNot",
"description": "Use `assert_not` instead of `assert !`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/test/**/*"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/AttributeDefaultBlockValue": {
"title": "Rails/AttributeDefaultBlockValue",
"description": "Pass method call in block for attribute option `default`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/BelongsTo": {
"title": "Rails/BelongsTo",
"description": "Use `optional: true` instead of `required: false` for `belongs_to` relations.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/Blank": {
"title": "Rails/Blank",
"description": "Enforces use of `blank?`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"NilOrEmpty": {
"type": "boolean",
"default": true
},
"NotPresent": {
"type": "boolean",
"default": true
},
"UnlessPresent": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/BulkChangeTable": {
"title": "Rails/BulkChangeTable",
"description": "Check whether alter queries are combinable.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Database": {
"type": "string",
"enum": [
"mysql",
"postgresql"
]
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"db/**/*.rb"
]
}
}
}
]
},
"Rails/CompactBlank": {
"title": "Rails/CompactBlank",
"description": "Checks if collection can be blank-compacted with `compact_blank`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ContentTag": {
"title": "Rails/ContentTag",
"description": "Use `tag.something` instead of `tag(:something)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/CreateTableWithTimestamps": {
"title": "Rails/CreateTableWithTimestamps",
"description": "Checks the migration for which timestamps are not included when creating a new table.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"db/**/*.rb"
]
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
},
"Rails/DangerousColumnNames": {
"title": "Rails/DangerousColumnNames",
"description": "Avoid dangerous column names.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Severity": {
"type": "string",
"default": "warning"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"db/**/*.rb"
]
}
}
}
]
},
"Rails/Date": {
"title": "Rails/Date",
"description": "Checks the correct usage of date aware methods, such as Date.today, Date.current etc.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"strict",
"flexible"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"strict",
"flexible"
]
}
}
],
"default": "flexible"
},
"AllowToTime": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/DefaultScope": {
"title": "Rails/DefaultScope",
"description": "Avoid use of `default_scope`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Rails/Delegate": {
"title": "Rails/Delegate",
"description": "Prefer delegate method for delegations.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforceForPrefixed": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/DelegateAllowBlank": {
"title": "Rails/DelegateAllowBlank",
"description": "Do not use allow_blank as an option to delegate.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/DeprecatedActiveModelErrorsMethods": {
"title": "Rails/DeprecatedActiveModelErrorsMethods",
"description": "Avoid manipulating ActiveModel errors hash directly.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Severity": {
"type": "string",
"default": "warning"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/DotSeparatedKeys": {
"title": "Rails/DotSeparatedKeys",
"description": "Enforces the use of dot-separated keys instead of `:scope` options in `I18n` translation methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/DuplicateAssociation": {
"title": "Rails/DuplicateAssociation",
"description": "Don't repeat associations in a model.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Severity": {
"type": "string",
"default": "warning"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/DuplicateScope": {
"title": "Rails/DuplicateScope",
"description": "Multiple scopes share this same where clause.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Severity": {
"type": "string",
"default": "warning"
}
}
}
]
},
"Rails/DurationArithmetic": {
"title": "Rails/DurationArithmetic",
"description": "Do not use duration as arithmetic operand with `Time.current`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/DynamicFindBy": {
"title": "Rails/DynamicFindBy",
"description": "Use `find_by` instead of dynamic `find_by_*`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Whitelist": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"find_by_sql",
"find_by_token_for"
]
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"find_by_sql",
"find_by_token_for"
]
},
"AllowedReceivers": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"Gem::Specification",
"page"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/EagerEvaluationLogMessage": {
"title": "Rails/EagerEvaluationLogMessage",
"description": "Checks that blocks are used for interpolated strings passed to `Rails.logger.debug`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/EnumHash": {
"title": "Rails/EnumHash",
"description": "Prefer hash syntax over array syntax when defining enums.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/EnumUniqueness": {
"title": "Rails/EnumUniqueness",
"description": "Avoid duplicate integers in hash-syntax `enum` declaration.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
}
}
}
]
},
"Rails/EnvironmentComparison": {
"title": "Rails/EnvironmentComparison",
"description": "Favor `Rails.env.production?` over `Rails.env == 'production'`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/EnvironmentVariableAccess": {
"title": "Rails/EnvironmentVariableAccess",
"description": "Do not access `ENV` directly after initialization.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/**/*.rb",
"lib/**/*.rb"
]
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
},
"AllowReads": {
"type": "boolean",
"default": false
},
"AllowWrites": {
"type": "boolean",
"default": false
}
}
}
]
},
"Rails/Exit": {
"title": "Rails/Exit",
"description": "Favor `fail`, `break`, `return`, etc. over `exit` in application or library code outside of Rake files to avoid exits during unit testing or running in production.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/**/*.rb",
"config/**/*.rb",
"lib/**/*.rb"
]
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
},
"Rails/ExpandedDateRange": {
"title": "Rails/ExpandedDateRange",
"description": "Checks for expanded date range.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/FilePath": {
"title": "Rails/FilePath",
"description": "Use `Rails.root.join` for file path joining.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"slashes",
"arguments"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"slashes",
"arguments"
]
}
}
],
"default": "slashes"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/FindBy": {
"title": "Rails/FindBy",
"description": "Prefer find_by over where.first.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"IgnoreWhereFirst": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/FindById": {
"title": "Rails/FindById",
"description": "Favor the use of `find` over `where.take!`, `find_by!`, and `find_by_id!` when you need to retrieve a single record by primary key when you expect it to be found.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/FindEach": {
"title": "Rails/FindEach",
"description": "Prefer all.find_each over all.each.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowedMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"order",
"limit",
"select",
"lock"
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/FreezeTime": {
"title": "Rails/FreezeTime",
"description": "Prefer `freeze_time` over `travel_to` with an argument of the current time.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/HasAndBelongsToMany": {
"title": "Rails/HasAndBelongsToMany",
"description": "Prefer has_many :through to has_and_belongs_to_many.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
}
}
}
]
},
"Rails/HasManyOrHasOneDependent": {
"title": "Rails/HasManyOrHasOneDependent",
"description": "Define the dependent option to the has_many and has_one associations.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
}
}
}
]
},
"Rails/HelperInstanceVariable": {
"title": "Rails/HelperInstanceVariable",
"description": "Do not use instance variables in helpers.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/helpers/**/*.rb"
]
}
}
}
]
},
"Rails/HttpPositionalArguments": {
"title": "Rails/HttpPositionalArguments",
"description": "Use keyword arguments instead of positional arguments in http method calls.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"spec/**/*",
"test/**/*"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/HttpStatus": {
"title": "Rails/HttpStatus",
"description": "Enforces use of symbolic or numeric value to define HTTP status.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"numeric",
"symbolic"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"numeric",
"symbolic"
]
}
}
],
"default": "symbolic"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/I18nLazyLookup": {
"title": "Rails/I18nLazyLookup",
"description": "Checks for places where I18n \"lazy\" lookup can be used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"lazy",
"explicit"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"lazy",
"explicit"
]
}
}
],
"default": "lazy"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/controllers/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/I18nLocaleAssignment": {
"title": "Rails/I18nLocaleAssignment",
"description": "Prefer the usage of `I18n.with_locale` instead of manually updating `I18n.locale` value.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"spec/**/*.rb",
"test/**/*.rb"
]
}
}
}
]
},
"Rails/I18nLocaleTexts": {
"title": "Rails/I18nLocaleTexts",
"description": "Enforces use of I18n and locale files instead of locale specific strings.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Rails/IgnoredColumnsAssignment": {
"title": "Rails/IgnoredColumnsAssignment",
"description": "Looks for assignments of `ignored_columns` that override previous assignments.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/IgnoredSkipActionFilterOption": {
"title": "Rails/IgnoredSkipActionFilterOption",
"description": "Checks that `if` and `only` (or `except`) are not used together as options of `skip_*` action filter.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/controllers/**/*.rb",
"app/mailers/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/IndexBy": {
"title": "Rails/IndexBy",
"description": "Prefer `index_by` over `each_with_object`, `to_h`, or `map`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/IndexWith": {
"title": "Rails/IndexWith",
"description": "Prefer `index_with` over `each_with_object`, `to_h`, or `map`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/Inquiry": {
"title": "Rails/Inquiry",
"description": "Prefer Ruby's comparison operators over Active Support's `Array#inquiry` and `String#inquiry`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Rails/InverseOf": {
"title": "Rails/InverseOf",
"description": "Checks for associations where the inverse cannot be determined automatically.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"IgnoreScopes": {
"type": "boolean",
"default": false
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
}
}
}
]
},
"Rails/LexicallyScopedActionFilter": {
"title": "Rails/LexicallyScopedActionFilter",
"description": "Checks that methods specified in the filter's `only` or `except` options are explicitly defined in the class.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/controllers/**/*.rb",
"app/mailers/**/*.rb"
]
}
}
}
]
},
"Rails/LinkToBlank": {
"title": "Rails/LinkToBlank",
"description": "Checks that `link_to` with a `target: \"_blank\"` have a `rel: \"noopener\"` option passed to them.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/MailerName": {
"title": "Rails/MailerName",
"description": "Mailer should end with `Mailer` suffix.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/mailers/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/MatchRoute": {
"title": "Rails/MatchRoute",
"description": "Don't use `match` to define any routes unless there is a need to map multiple request types among [:get, :post, :patch, :put, :delete] to a single action using the `:via` option.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"config/routes.rb",
"config/routes/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/MigrationClassName": {
"title": "Rails/MigrationClassName",
"description": "The class name of the migration should match its file name.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"db/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/NegateInclude": {
"title": "Rails/NegateInclude",
"description": "Prefer `collection.exclude?(obj)` over `!collection.include?(obj)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/NotNullColumn": {
"title": "Rails/NotNullColumn",
"description": "Do not add a NOT NULL column without a default value.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"db/**/*.rb"
]
}
}
}
]
},
"Rails/OrderById": {
"title": "Rails/OrderById",
"description": "Do not use the `id` column for ordering. Use a timestamp column to order chronologically.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Rails/Output": {
"title": "Rails/Output",
"description": "Checks for calls to puts, print, etc.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/**/*.rb",
"config/**/*.rb",
"db/**/*.rb",
"lib/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/OutputSafety": {
"title": "Rails/OutputSafety",
"description": "The use of `html_safe` or `raw` may be a security risk.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Rails/Pick": {
"title": "Rails/Pick",
"description": "Prefer `pick` over `pluck(...).first`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/Pluck": {
"title": "Rails/Pluck",
"description": "Prefer `pluck` over `map { ... }`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/PluckId": {
"title": "Rails/PluckId",
"description": "Use `ids` instead of `pluck(:id)` or `pluck(primary_key)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/PluckInWhere": {
"title": "Rails/PluckInWhere",
"description": "Use `select` instead of `pluck` in `where` query methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"conservative",
"aggressive"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"conservative",
"aggressive"
]
}
}
],
"default": "conservative"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/PluralizationGrammar": {
"title": "Rails/PluralizationGrammar",
"description": "Checks for incorrect grammar when using methods like `3.day.ago`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/Presence": {
"title": "Rails/Presence",
"description": "Checks code that can be written more easily using `Object#presence` defined by Active Support.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/Present": {
"title": "Rails/Present",
"description": "Enforces use of `present?`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"NotNilAndNotEmpty": {
"type": "boolean",
"default": true
},
"NotBlank": {
"type": "boolean",
"default": true
},
"UnlessBlank": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RakeEnvironment": {
"title": "Rails/RakeEnvironment",
"description": "Include `:environment` as a dependency for all Rake tasks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/Rakefile",
"**/*.rake"
]
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ReadWriteAttribute": {
"title": "Rails/ReadWriteAttribute",
"description": "Checks for read_attribute(:attr) and write_attribute(:attr, val).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RedundantActiveRecordAllMethod": {
"title": "Rails/RedundantActiveRecordAllMethod",
"description": "Detect redundant `all` used as a receiver for Active Record query methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowedReceivers": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"ActionMailer::Preview",
"ActiveSupport::TimeZone"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RedundantAllowNil": {
"title": "Rails/RedundantAllowNil",
"description": "Finds redundant use of `allow_nil` when `allow_blank` is set to certain values in model validations.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RedundantForeignKey": {
"title": "Rails/RedundantForeignKey",
"description": "Checks for associations where the `:foreign_key` option is redundant.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RedundantPresenceValidationOnBelongsTo": {
"title": "Rails/RedundantPresenceValidationOnBelongsTo",
"description": "Checks for redundant presence validation on belongs_to association.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RedundantReceiverInWithOptions": {
"title": "Rails/RedundantReceiverInWithOptions",
"description": "Checks for redundant receiver in `with_options`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RedundantTravelBack": {
"title": "Rails/RedundantTravelBack",
"description": "Checks for redundant `travel_back` calls.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"spec/**/*.rb",
"test/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ReflectionClassName": {
"title": "Rails/ReflectionClassName",
"description": "Use a string for `class_name` option value in the definition of a reflection.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RefuteMethods": {
"title": "Rails/RefuteMethods",
"description": "Use `assert_not` methods instead of `refute` methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"assert_not",
"refute"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"assert_not",
"refute"
]
}
}
],
"default": "assert_not"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/test/**/*"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RelativeDateConstant": {
"title": "Rails/RelativeDateConstant",
"description": "Do not assign relative date to constants.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RenderInline": {
"title": "Rails/RenderInline",
"description": "Prefer using a template over inline rendering.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Rails/RenderPlainText": {
"title": "Rails/RenderPlainText",
"description": "Prefer `render plain:` over `render text:`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"ContentTypeCompatibility": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RequestReferer": {
"title": "Rails/RequestReferer",
"description": "Use consistent syntax for request.referer.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"referer",
"referrer"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"referer",
"referrer"
]
}
}
],
"default": "referer"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RequireDependency": {
"title": "Rails/RequireDependency",
"description": "Do not use `require_dependency` when running in Zeitwerk mode. `require_dependency` is for autoloading in classic mode.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Rails/ResponseParsedBody": {
"title": "Rails/ResponseParsedBody",
"description": "Prefer `response.parsed_body` to `JSON.parse(response.body)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"spec/controllers/**/*.rb",
"spec/requests/**/*.rb",
"test/controllers/**/*.rb",
"test/integration/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ReversibleMigration": {
"title": "Rails/ReversibleMigration",
"description": "Checks whether the change method of the migration file is reversible.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"db/**/*.rb"
]
}
}
}
]
},
"Rails/ReversibleMigrationMethodDefinition": {
"title": "Rails/ReversibleMigrationMethodDefinition",
"description": "Checks whether the migration implements either a `change` method or both an `up` and a `down` method.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"db/**/*.rb"
]
}
}
}
]
},
"Rails/RootJoinChain": {
"title": "Rails/RootJoinChain",
"description": "Use a single `#join` instead of chaining on `Rails.root` or `Rails.public_path`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RootPathnameMethods": {
"title": "Rails/RootPathnameMethods",
"description": "Use `Rails.root` IO methods instead of passing it to `File`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/RootPublicPath": {
"title": "Rails/RootPublicPath",
"description": "Favor `Rails.public_path` over `Rails.root` with `'public'`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/SafeNavigation": {
"title": "Rails/SafeNavigation",
"description": "Use Ruby's safe navigation operator (`&.`) instead of `try!`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"ConvertTry": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/SafeNavigationWithBlank": {
"title": "Rails/SafeNavigationWithBlank",
"description": "Avoid `foo&.blank?` in conditionals.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/SaveBang": {
"title": "Rails/SaveBang",
"description": "Identifies possible cases where Active Record save! or related should be used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AllowImplicitReturn": {
"type": "boolean",
"default": true
},
"AllowedReceivers": {
"type": "array",
"items": {
},
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/SchemaComment": {
"title": "Rails/SchemaComment",
"description": "Enforces the use of the `comment` option when adding a new table or column to the database during a migration.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Rails/ScopeArgs": {
"title": "Rails/ScopeArgs",
"description": "Checks the arguments of ActiveRecord scopes.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/SelectMap": {
"title": "Rails/SelectMap",
"description": "Checks for uses of `select(:column_name)` with `map(&:column_name)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ShortI18n": {
"title": "Rails/ShortI18n",
"description": "Use the short form of the I18n methods: `t` instead of `translate` and `l` instead of `localize`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"conservative",
"aggressive"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"conservative",
"aggressive"
]
}
}
],
"default": "conservative"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/SkipsModelValidations": {
"title": "Rails/SkipsModelValidations",
"description": "Use methods that skips model validations with caution. See reference for more information.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"ForbiddenMethods": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"decrement!",
"decrement_counter",
"increment!",
"increment_counter",
"insert",
"insert!",
"insert_all",
"insert_all!",
"toggle!",
"touch",
"touch_all",
"update_all",
"update_attribute",
"update_column",
"update_columns",
"update_counters",
"upsert",
"upsert_all"
]
},
"AllowedMethods": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Rails/SquishedSQLHeredocs": {
"title": "Rails/SquishedSQLHeredocs",
"description": "Checks SQL heredocs to use `.squish`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/StripHeredoc": {
"title": "Rails/StripHeredoc",
"description": "Enforces the use of squiggly heredoc over `strip_heredoc`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/TableNameAssignment": {
"title": "Rails/TableNameAssignment",
"description": "Do not use `self.table_name =`. Use Inflections or `table_name_prefix` instead.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
}
}
}
]
},
"Rails/ThreeStateBooleanColumn": {
"title": "Rails/ThreeStateBooleanColumn",
"description": "Add a default value and a `NOT NULL` constraint to boolean columns.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"db/**/*.rb"
]
}
}
}
]
},
"Rails/TimeZone": {
"title": "Rails/TimeZone",
"description": "Checks the correct usage of time zone aware methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"strict",
"flexible"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"strict",
"flexible"
]
}
}
],
"default": "flexible"
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/TimeZoneAssignment": {
"title": "Rails/TimeZoneAssignment",
"description": "Prefer the usage of `Time.use_zone` instead of manually updating `Time.zone` value.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"spec/**/*.rb",
"test/**/*.rb"
]
}
}
}
]
},
"Rails/ToFormattedS": {
"title": "Rails/ToFormattedS",
"description": "Checks for consistent uses of `to_fs` or `to_formatted_s`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"to_fs",
"to_formatted_s"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"to_fs",
"to_formatted_s"
]
}
}
],
"default": "to_fs"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/ToSWithArgument": {
"title": "Rails/ToSWithArgument",
"description": "Identifies passing any argument to `#to_s`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/TopLevelHashWithIndifferentAccess": {
"title": "Rails/TopLevelHashWithIndifferentAccess",
"description": "Identifies top-level `HashWithIndifferentAccess`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Severity": {
"type": "string",
"default": "warning"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/TransactionExitStatement": {
"title": "Rails/TransactionExitStatement",
"description": "Avoid the usage of `return`, `break` and `throw` in transaction blocks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"TransactionMethods": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"Rails/UniqBeforePluck": {
"title": "Rails/UniqBeforePluck",
"description": "Prefer the use of uniq or distinct before pluck.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"conservative",
"aggressive"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"conservative",
"aggressive"
]
}
}
],
"default": "conservative"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/UniqueValidationWithoutIndex": {
"title": "Rails/UniqueValidationWithoutIndex",
"description": "Uniqueness validation should have a unique index on the database column.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
}
}
}
]
},
"Rails/UnknownEnv": {
"title": "Rails/UnknownEnv",
"description": "Use correct environment name.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Severity": {
"type": "string",
"default": "warning"
},
"Environments": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"development",
"test",
"production"
]
}
}
}
]
},
"Rails/UnusedIgnoredColumns": {
"title": "Rails/UnusedIgnoredColumns",
"description": "Remove a column that does not exist from `ignored_columns`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
}
}
}
]
},
"Rails/UnusedRenderContent": {
"title": "Rails/UnusedRenderContent",
"description": "Do not specify body content for a response with a non-content status code.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Severity": {
"type": "string",
"default": "warning"
}
}
}
]
},
"Rails/Validation": {
"title": "Rails/Validation",
"description": "Use validates :attribute, hash of validations.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"app/models/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/WhereEquals": {
"title": "Rails/WhereEquals",
"description": "Pass conditions to `where` as a hash instead of manually constructing SQL.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/WhereExists": {
"title": "Rails/WhereExists",
"description": "Prefer `exists?(...)` over `where(...).exists?`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"exists",
"where"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"exists",
"where"
]
}
}
],
"default": "exists"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/WhereMissing": {
"title": "Rails/WhereMissing",
"description": "Use `where.missing(...)` to find missing relationship records.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/WhereNot": {
"title": "Rails/WhereNot",
"description": "Use `where.not(...)` instead of manually constructing negated SQL in `where`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Rails/WhereNotWithMultipleConditions": {
"title": "Rails/WhereNotWithMultipleConditions",
"description": "Do not use `where.not(...)` with multiple conditions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Severity": {
"type": "string",
"default": "warning"
}
}
}
]
},
"Performance/AncestorsInclude": {
"title": "Performance/AncestorsInclude",
"description": "Use `A <= B` instead of `A.ancestors.include?(B)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/ArraySemiInfiniteRangeSlice": {
"title": "Performance/ArraySemiInfiniteRangeSlice",
"description": "Identifies places where slicing arrays with semi-infinite ranges can be replaced by `Array#take` and `Array#drop`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/BigDecimalWithNumericArgument": {
"title": "Performance/BigDecimalWithNumericArgument",
"description": "Convert numeric literal to string and pass it to `BigDecimal`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/BindCall": {
"title": "Performance/BindCall",
"description": "Use `bind_call(obj, args, ...)` instead of `bind(obj).call(args, ...)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/BlockGivenWithExplicitBlock": {
"title": "Performance/BlockGivenWithExplicitBlock",
"description": "Check block argument explicitly instead of using `block_given?`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/Caller": {
"title": "Performance/Caller",
"description": "Use `caller(n..n)` instead of `caller`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/CaseWhenSplat": {
"title": "Performance/CaseWhenSplat",
"description": "Reordering `when` conditions with a splat to the end of the `when` branches can improve performance.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/Casecmp": {
"title": "Performance/Casecmp",
"description": "Use `casecmp` rather than `downcase ==`, `upcase ==`, `== downcase`, or `== upcase`..",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/CollectionLiteralInLoop": {
"title": "Performance/CollectionLiteralInLoop",
"description": "Extract Array and Hash literals outside of loops into local variables or constants.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"MinSize": {
"type": "integer",
"default": 1
}
}
}
]
},
"Performance/CompareWithBlock": {
"title": "Performance/CompareWithBlock",
"description": "Use `sort_by(&:foo)` instead of `sort { |a, b| a.foo <=> b.foo }`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/ConcurrentMonotonicTime": {
"title": "Performance/ConcurrentMonotonicTime",
"description": "Use `Process.clock_gettime(Process::CLOCK_MONOTONIC)` instead of `Concurrent.monotonic_time`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/ConstantRegexp": {
"title": "Performance/ConstantRegexp",
"description": "Finds regular expressions with dynamic components that are all constants.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/Count": {
"title": "Performance/Count",
"description": "Use `count` instead of `{select,find_all,filter,reject}...{size,count,length}`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/DeletePrefix": {
"title": "Performance/DeletePrefix",
"description": "Use `delete_prefix` instead of `gsub`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"SafeMultiline": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/DeleteSuffix": {
"title": "Performance/DeleteSuffix",
"description": "Use `delete_suffix` instead of `gsub`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"SafeMultiline": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/Detect": {
"title": "Performance/Detect",
"description": "Use `detect` instead of `select.first`, `find_all.first`, `filter.first`, `select.last`, `find_all.last`, and `filter.last`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/DoubleStartEndWith": {
"title": "Performance/DoubleStartEndWith",
"description": "Use `str.{start,end}_with?(x, ..., y, ...)` instead of `str.{start,end}_with?(x, ...) || str.{start,end}_with?(y, ...)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"IncludeActiveSupportAliases": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/EndWith": {
"title": "Performance/EndWith",
"description": "Use `end_with?` instead of a regex match anchored to the end of a string.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"SafeMultiline": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/FixedSize": {
"title": "Performance/FixedSize",
"description": "Do not compute the size of statically sized objects except in constants.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"Performance/FlatMap": {
"title": "Performance/FlatMap",
"description": "Use `Enumerable#flat_map` instead of `Enumerable#map...Array#flatten(1)` or `Enumerable#collect..Array#flatten(1)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnabledForFlattenWithoutParams": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/InefficientHashSearch": {
"title": "Performance/InefficientHashSearch",
"description": "Use `key?` or `value?` instead of `keys.include?` or `values.include?`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/MapCompact": {
"title": "Performance/MapCompact",
"description": "Use `filter_map` instead of `collection.map(&:do_something).compact`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/MapMethodChain": {
"title": "Performance/MapMethodChain",
"description": "Checks if the `map` method is used in a chain.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Performance/MethodObjectAsBlock": {
"title": "Performance/MethodObjectAsBlock",
"description": "Use block explicitly instead of block-passing a method object.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Performance/OpenStruct": {
"title": "Performance/OpenStruct",
"description": "Use `Struct` instead of `OpenStruct`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Performance/RangeInclude": {
"title": "Performance/RangeInclude",
"description": "Use `Range#cover?` instead of `Range#include?` (or `Range#member?`).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/IoReadlines": {
"title": "Performance/IoReadlines",
"description": "Use `IO.each_line` (`IO#each_line`) instead of `IO.readlines` (`IO#readlines`).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/RedundantBlockCall": {
"title": "Performance/RedundantBlockCall",
"description": "Use `yield` instead of `block.call`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/RedundantEqualityComparisonBlock": {
"title": "Performance/RedundantEqualityComparisonBlock",
"description": "Checks for uses `Enumerable#all?`, `Enumerable#any?`, `Enumerable#one?`, or `Enumerable#none?` are compared with `===` or similar methods in block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowRegexpMatch": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/RedundantMatch": {
"title": "Performance/RedundantMatch",
"description": "Use `=~` instead of `String#match` or `Regexp#match` in a context where the returned `MatchData` is not needed.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/RedundantMerge": {
"title": "Performance/RedundantMerge",
"description": "Use Hash#[]=, rather than Hash#merge! with a single key-value pair.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"MaxKeyValuePairs": {
"type": "integer",
"default": 2
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/RedundantSortBlock": {
"title": "Performance/RedundantSortBlock",
"description": "Use `sort` instead of `sort { |a, b| a <=> b }`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/RedundantSplitRegexpArgument": {
"title": "Performance/RedundantSplitRegexpArgument",
"description": "Identifies places where `split` argument can be replaced from a deterministic regexp to a string.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/RedundantStringChars": {
"title": "Performance/RedundantStringChars",
"description": "Checks for redundant `String#chars`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/RegexpMatch": {
"title": "Performance/RegexpMatch",
"description": "Use `match?` instead of `Regexp#match`, `String#match`, `Symbol#match`, `Regexp#===`, or `=~` when `MatchData` is not used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/ReverseEach": {
"title": "Performance/ReverseEach",
"description": "Use `reverse_each` instead of `reverse.each`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/ReverseFirst": {
"title": "Performance/ReverseFirst",
"description": "Use `last(n).reverse` instead of `reverse.first(n)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/SelectMap": {
"title": "Performance/SelectMap",
"description": "Use `filter_map` instead of `ary.select(&:foo).map(&:bar)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Performance/Size": {
"title": "Performance/Size",
"description": "Use `size` instead of `count` for counting the number of elements in `Array` and `Hash`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/SortReverse": {
"title": "Performance/SortReverse",
"description": "Use `sort.reverse` instead of `sort { |a, b| b <=> a }`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/Squeeze": {
"title": "Performance/Squeeze",
"description": "Use `squeeze('a')` instead of `gsub(/a+/, 'a')`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/StartWith": {
"title": "Performance/StartWith",
"description": "Use `start_with?` instead of a regex match anchored to the beginning of a string.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"SafeMultiline": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/StringIdentifierArgument": {
"title": "Performance/StringIdentifierArgument",
"description": "Use symbol identifier argument instead of string identifier argument.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/StringInclude": {
"title": "Performance/StringInclude",
"description": "Use `String#include?` instead of a regex match with literal-only pattern.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/StringReplacement": {
"title": "Performance/StringReplacement",
"description": "Use `tr` instead of `gsub` when you are replacing the same number of characters. Use `delete` instead of `gsub` when you are deleting characters.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/Sum": {
"title": "Performance/Sum",
"description": "Use `sum` instead of a custom array summation.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"OnlySumOrWithInitialValue": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/TimesMap": {
"title": "Performance/TimesMap",
"description": "Checks for .times.map calls.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/UnfreezeString": {
"title": "Performance/UnfreezeString",
"description": "Use unary plus to get an unfrozen string literal.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/UriDefaultParser": {
"title": "Performance/UriDefaultParser",
"description": "Use `URI::DEFAULT_PARSER` instead of `URI::Parser.new`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Performance/ChainArrayAllocation": {
"title": "Performance/ChainArrayAllocation",
"description": "Instead of chaining array methods that allocate new arrays, mutate an existing array.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"Capybara/RSpec/HaveSelector": {
"title": "Capybara/RSpec/HaveSelector",
"description": "Use `have_css` or `have_xpath` instead of `have_selector`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"DefaultSelector": {
"type": "string",
"default": "css"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Capybara/RSpec/PredicateMatcher": {
"title": "Capybara/RSpec/PredicateMatcher",
"description": "Prefer using predicate matcher over using predicate method directly.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Strict": {
"type": "boolean",
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"inflected",
"explicit"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"inflected",
"explicit"
]
}
}
],
"default": "inflected"
},
"AllowedExplicitMatchers": {
"type": "array",
"items": {
},
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Capybara/ClickLinkOrButtonStyle": {
"title": "Capybara/ClickLinkOrButtonStyle",
"description": "Checks for click button or link style.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"strict",
"link_or_button"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"strict",
"link_or_button"
]
}
}
],
"default": "strict"
}
}
}
]
},
"Capybara/CurrentPathExpectation": {
"title": "Capybara/CurrentPathExpectation",
"description": "Checks that no expectations are set on Capybara's `current_path`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Capybara/MatchStyle": {
"title": "Capybara/MatchStyle",
"description": "Checks for usage of deprecated style methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Capybara/NegationMatcher": {
"title": "Capybara/NegationMatcher",
"description": "Enforces use of `have_no_*` or `not_to` for negated expectations.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"have_no",
"not_to"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"have_no",
"not_to"
]
}
}
],
"default": "not_to"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Capybara/SpecificActions": {
"title": "Capybara/SpecificActions",
"description": "Checks for there is a more specific actions offered by Capybara.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Capybara/SpecificFinders": {
"title": "Capybara/SpecificFinders",
"description": "Checks if there is a more specific finder offered by Capybara.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"Capybara/SpecificMatcher": {
"title": "Capybara/SpecificMatcher",
"description": "Checks for there is a more specific matcher offered by Capybara.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"Capybara/VisibilityMatcher": {
"title": "Capybara/VisibilityMatcher",
"description": "Checks for boolean visibility in Capybara finders.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"FactoryBot/AssociationStyle": {
"title": "FactoryBot/AssociationStyle",
"description": "Use a consistent style to define associations.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"explicit",
"implicit"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"explicit",
"implicit"
]
}
}
],
"default": "implicit"
},
"NonImplicitAssociationMethodNames": {
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"FactoryBot/AttributeDefinedStatically": {
"title": "FactoryBot/AttributeDefinedStatically",
"description": "Always declare attribute values as blocks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"FactoryBot/ConsistentParenthesesStyle": {
"title": "FactoryBot/ConsistentParenthesesStyle",
"description": "Use a consistent style for parentheses in factory_bot calls.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*_spec.rb",
"**/spec/**/*",
"**/test/**/*",
"**/features/support/factories/**/*.rb"
]
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"require_parentheses",
"omit_parentheses"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"require_parentheses",
"omit_parentheses"
]
}
}
],
"default": "require_parentheses"
},
"ExplicitOnly": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"FactoryBot/CreateList": {
"title": "FactoryBot/CreateList",
"description": "Checks for create_list usage.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*_spec.rb",
"**/spec/**/*",
"**/test/**/*",
"**/features/support/factories/**/*.rb"
]
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"create_list",
"n_times"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"create_list",
"n_times"
]
}
}
],
"default": "create_list"
},
"ExplicitOnly": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"FactoryBot/FactoryAssociationWithStrategy": {
"title": "FactoryBot/FactoryAssociationWithStrategy",
"description": "Use definition in factory association instead of hard coding a strategy.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*_spec.rb",
"**/spec/**/*",
"**/test/**/*",
"**/features/support/factories/**/*.rb"
]
}
}
}
]
},
"FactoryBot/FactoryClassName": {
"title": "FactoryBot/FactoryClassName",
"description": "Use string value when setting the class attribute explicitly.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"FactoryBot/FactoryNameStyle": {
"title": "FactoryBot/FactoryNameStyle",
"description": "Checks for name style for argument of FactoryBot::Syntax::Methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*_spec.rb",
"**/spec/**/*",
"**/test/**/*",
"**/features/support/factories/**/*.rb"
]
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"symbol",
"string"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"symbol",
"string"
]
}
}
],
"default": "symbol"
},
"ExplicitOnly": {
"type": "boolean",
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"FactoryBot/IdSequence": {
"title": "FactoryBot/IdSequence",
"description": "Do not create a FactoryBot sequence for an id column.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"FactoryBot/RedundantFactoryOption": {
"title": "FactoryBot/RedundantFactoryOption",
"description": "Checks for redundant `factory` option.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*_spec.rb",
"**/spec/**/*",
"**/test/**/*",
"**/features/support/factories/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"FactoryBot/SyntaxMethods": {
"title": "FactoryBot/SyntaxMethods",
"description": "Use shorthands from `FactoryBot::Syntax::Methods` in your specs.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*_spec.rb",
"**/spec/**/*",
"**/test/**/*",
"**/features/support/factories/**/*.rb"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/Capybara/FeatureMethods": {
"title": "RSpec/Capybara/FeatureMethods",
"description": "Checks for consistent method usage in feature specs.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnabledMethods": {
"type": "array",
"items": {
},
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/Rails/AvoidSetupHook": {
"title": "RSpec/Rails/AvoidSetupHook",
"description": "Checks that tests use RSpec `before` hook over Rails `setup` method.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/Rails/HaveHttpStatus": {
"title": "RSpec/Rails/HaveHttpStatus",
"description": "Checks that tests use `have_http_status` instead of equality matchers.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/Rails/NegationBeValid": {
"title": "RSpec/Rails/NegationBeValid",
"description": "Enforces use of `be_invalid` or `not_to` for negated be_valid.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"not_to",
"be_invalid"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"not_to",
"be_invalid"
]
}
}
],
"default": "not_to"
},
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/Rails/HttpStatus": {
"title": "RSpec/Rails/HttpStatus",
"description": "Enforces use of symbolic or numeric value to describe HTTP status.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"numeric",
"symbolic",
"be_status"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"numeric",
"symbolic",
"be_status"
]
}
}
],
"default": "symbolic"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/Rails/InferredSpecType": {
"title": "RSpec/Rails/InferredSpecType",
"description": "Identifies redundant spec type.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Inferences": {
"type": "object",
"default": {
"channels": "channel",
"controllers": "controller",
"features": "feature",
"generator": "generator",
"helpers": "helper",
"jobs": "job",
"mailboxes": "mailbox",
"mailers": "mailer",
"models": "model",
"requests": "request",
"integration": "request",
"api": "request",
"routing": "routing",
"system": "system",
"views": "view"
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/Rails/MinitestAssertions": {
"title": "RSpec/Rails/MinitestAssertions",
"description": "Check if using Minitest matchers.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/Rails/TravelAround": {
"title": "RSpec/Rails/TravelAround",
"description": "Prefer to travel in `before` rather than `around`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/AlignLeftLetBrace": {
"title": "RSpec/AlignLeftLetBrace",
"description": "Checks that left braces for adjacent single line lets are aligned.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/AlignRightLetBrace": {
"title": "RSpec/AlignRightLetBrace",
"description": "Checks that right braces for adjacent single line lets are aligned.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/AnyInstance": {
"title": "RSpec/AnyInstance",
"description": "Check that instances are not being stubbed globally.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/AroundBlock": {
"title": "RSpec/AroundBlock",
"description": "Checks that around blocks actually run the test.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/Be": {
"title": "RSpec/Be",
"description": "Check for expectations where `be` is used without argument.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/BeEmpty": {
"title": "RSpec/BeEmpty",
"description": "Prefer using `be_empty` when checking for an empty array.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/BeEq": {
"title": "RSpec/BeEq",
"description": "Check for expectations where `be(...)` can replace `eq(...)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/BeEql": {
"title": "RSpec/BeEql",
"description": "Check for expectations where `be(...)` can replace `eql(...)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/BeNil": {
"title": "RSpec/BeNil",
"description": "Ensures a consistent style is used when matching `nil`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"be",
"be_nil"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"be",
"be_nil"
]
}
}
],
"default": "be_nil"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/BeforeAfterAll": {
"title": "RSpec/BeforeAfterAll",
"description": "Check that before/after(:all) isn't being used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
},
"RSpec/ChangeByZero": {
"title": "RSpec/ChangeByZero",
"description": "Prefer negated matchers over `to change.by(0)`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"NegatedMatcher": {
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ClassCheck": {
"title": "RSpec/ClassCheck",
"description": "Enforces consistent use of `be_a` or `be_kind_of`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"be_a",
"be_kind_of"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"be_a",
"be_kind_of"
]
}
}
],
"default": "be_a"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ContainExactly": {
"title": "RSpec/ContainExactly",
"description": "Checks where `contain_exactly` is used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ContextMethod": {
"title": "RSpec/ContextMethod",
"description": "`context` should not be used for specifying methods.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ContextWording": {
"title": "RSpec/ContextWording",
"description": "Checks that `context` docstring starts with an allowed prefix.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Prefixes": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"when",
"with",
"without"
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
}
}
}
]
},
"RSpec/DescribeClass": {
"title": "RSpec/DescribeClass",
"description": "Check that the first argument to the top-level describe is a constant.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
},
"IgnoredMetadata": {
"type": "object",
"default": {
"type": [
"channel",
"controller",
"helper",
"job",
"mailer",
"model",
"request",
"routing",
"view",
"feature",
"system",
"mailbox",
"aruba",
"task"
]
}
}
}
}
]
},
"RSpec/DescribeMethod": {
"title": "RSpec/DescribeMethod",
"description": "Checks that the second argument to `describe` specifies a method.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/DescribeSymbol": {
"title": "RSpec/DescribeSymbol",
"description": "Avoid describing symbols.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/DescribedClass": {
"title": "RSpec/DescribedClass",
"description": "Checks that tests use `described_class`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"SkipBlocks": {
"type": "boolean",
"default": false
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"described_class",
"explicit"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"described_class",
"explicit"
]
}
}
],
"default": "described_class"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/DescribedClassModuleWrapping": {
"title": "RSpec/DescribedClassModuleWrapping",
"description": "Avoid opening modules and defining specs within them.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"RSpec/Dialect": {
"title": "RSpec/Dialect",
"description": "Enforces custom RSpec dialects.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"PreferredMethods": {
"type": "object",
"default": {
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/DuplicatedMetadata": {
"title": "RSpec/DuplicatedMetadata",
"description": "Avoid duplicated metadata.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/EmptyExampleGroup": {
"title": "RSpec/EmptyExampleGroup",
"description": "Checks if an example group does not include any tests.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/EmptyHook": {
"title": "RSpec/EmptyHook",
"description": "Checks for empty before and after hooks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/EmptyLineAfterExample": {
"title": "RSpec/EmptyLineAfterExample",
"description": "Checks if there is an empty line after example blocks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowConsecutiveOneLiners": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/EmptyLineAfterExampleGroup": {
"title": "RSpec/EmptyLineAfterExampleGroup",
"description": "Checks if there is an empty line after example group blocks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/EmptyLineAfterFinalLet": {
"title": "RSpec/EmptyLineAfterFinalLet",
"description": "Checks if there is an empty line after the last let block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/EmptyLineAfterHook": {
"title": "RSpec/EmptyLineAfterHook",
"description": "Checks if there is an empty line after hook blocks.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowConsecutiveOneLiners": {
"type": "boolean",
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/EmptyLineAfterSubject": {
"title": "RSpec/EmptyLineAfterSubject",
"description": "Checks if there is an empty line after subject block.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/EmptyMetadata": {
"title": "RSpec/EmptyMetadata",
"description": "Avoid empty metadata hash.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/Eq": {
"title": "RSpec/Eq",
"description": "Use `eq` instead of `be ==` to compare objects.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ExampleLength": {
"title": "RSpec/ExampleLength",
"description": "Checks for long examples.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Max": {
"type": "integer",
"default": 5
},
"CountAsOne": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"RSpec/ExampleWithoutDescription": {
"title": "RSpec/ExampleWithoutDescription",
"description": "Checks for examples without a description.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"always_allow",
"single_line_only",
"disallow"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"always_allow",
"single_line_only",
"disallow"
]
}
}
],
"default": "always_allow"
}
}
}
]
},
"RSpec/ExampleWording": {
"title": "RSpec/ExampleWording",
"description": "Checks for common mistakes in example descriptions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"CustomTransform": {
"type": "object",
"default": {
"be": "is",
"BE": "IS",
"have": "has",
"HAVE": "HAS"
}
},
"IgnoredWords": {
"type": "array",
"items": {
},
"default": [
]
},
"DisallowedExamples": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"works"
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ExcessiveDocstringSpacing": {
"title": "RSpec/ExcessiveDocstringSpacing",
"description": "Checks for excessive whitespace in example descriptions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ExpectActual": {
"title": "RSpec/ExpectActual",
"description": "Checks for `expect(...)` calls containing literal values.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ExpectChange": {
"title": "RSpec/ExpectChange",
"description": "Checks for consistent style of change matcher.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"method_call",
"block"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"method_call",
"block"
]
}
}
],
"default": "method_call"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ExpectInHook": {
"title": "RSpec/ExpectInHook",
"description": "Do not use `expect` in hooks such as `before`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/ExpectOutput": {
"title": "RSpec/ExpectOutput",
"description": "Checks for opportunities to use `expect { ... }.to output`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/FilePath": {
"title": "RSpec/FilePath",
"description": "Checks that spec file paths are consistent and well-formed.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*_spec*rb*",
"**/spec/**/*"
]
},
"CustomTransform": {
"type": "object",
"default": {
"RuboCop": "rubocop",
"RSpec": "rspec"
}
},
"IgnoreMethods": {
"type": "boolean",
"default": false
},
"SpecSuffixOnly": {
"type": "boolean",
"default": false
}
}
}
]
},
"RSpec/Focus": {
"title": "RSpec/Focus",
"description": "Checks if examples are focused.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/HookArgument": {
"title": "RSpec/HookArgument",
"description": "Checks the arguments passed to `before`, `around`, and `after`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"implicit",
"each",
"example"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"implicit",
"each",
"example"
]
}
}
],
"default": "implicit"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/HooksBeforeExamples": {
"title": "RSpec/HooksBeforeExamples",
"description": "Checks for before/around/after hooks that come after an example.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/IdenticalEqualityAssertion": {
"title": "RSpec/IdenticalEqualityAssertion",
"description": "Checks for equality assertions with identical expressions on both sides.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"RSpec/ImplicitBlockExpectation": {
"title": "RSpec/ImplicitBlockExpectation",
"description": "Check that implicit block expectation syntax is not used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/ImplicitExpect": {
"title": "RSpec/ImplicitExpect",
"description": "Check that a consistent implicit expectation style is used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"is_expected",
"should"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"is_expected",
"should"
]
}
}
],
"default": "is_expected"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ImplicitSubject": {
"title": "RSpec/ImplicitSubject",
"description": "Checks for usage of implicit subject (`is_expected` / `should`).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"single_line_only",
"single_statement_only",
"disallow",
"require_implicit"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"single_line_only",
"single_statement_only",
"disallow",
"require_implicit"
]
}
}
],
"default": "single_line_only"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/IndexedLet": {
"title": "RSpec/IndexedLet",
"description": "Do not set up test data using indexes (e.g., `item_1`, `item_2`).",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Max": {
"type": "integer",
"default": 1
},
"AllowedIdentifiers": {
"type": "array",
"items": {
},
"default": [
]
},
"AllowedPatterns": {
"type": "array",
"default": [
]
}
}
}
]
},
"RSpec/InstanceSpy": {
"title": "RSpec/InstanceSpy",
"description": "Checks for `instance_double` used with `have_received`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/InstanceVariable": {
"title": "RSpec/InstanceVariable",
"description": "Checks for instance variable usage in specs.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AssignmentOnly": {
"type": "boolean",
"default": false
}
}
}
]
},
"RSpec/ItBehavesLike": {
"title": "RSpec/ItBehavesLike",
"description": "Checks that only one `it_behaves_like` style is used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"it_behaves_like",
"it_should_behave_like"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"it_behaves_like",
"it_should_behave_like"
]
}
}
],
"default": "it_behaves_like"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/IteratedExpectation": {
"title": "RSpec/IteratedExpectation",
"description": "Check that `all` matcher is used instead of iterating over an array.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/LeadingSubject": {
"title": "RSpec/LeadingSubject",
"description": "Enforce that subject is the first definition in the test.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/LeakyConstantDeclaration": {
"title": "RSpec/LeakyConstantDeclaration",
"description": "Checks that no class, module, or constant is declared.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/LetBeforeExamples": {
"title": "RSpec/LetBeforeExamples",
"description": "Checks for `let` definitions that come after an example.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/LetSetup": {
"title": "RSpec/LetSetup",
"description": "Checks unreferenced `let!` calls being used for test setup.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/MatchArray": {
"title": "RSpec/MatchArray",
"description": "Checks where `match_array` is used.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/MessageChain": {
"title": "RSpec/MessageChain",
"description": "Check that chains of messages are not being stubbed.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/MessageExpectation": {
"title": "RSpec/MessageExpectation",
"description": "Checks for consistent message expectation style.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"allow",
"expect"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"allow",
"expect"
]
}
}
],
"default": "allow"
}
}
}
]
},
"RSpec/MessageSpies": {
"title": "RSpec/MessageSpies",
"description": "Checks that message expectations are set using spies.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"have_received",
"receive"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"have_received",
"receive"
]
}
}
],
"default": "have_received"
}
}
}
]
},
"RSpec/MetadataStyle": {
"title": "RSpec/MetadataStyle",
"description": "Use consistent metadata style.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"hash",
"symbol"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"hash",
"symbol"
]
}
}
],
"default": "symbol"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/MissingExampleGroupArgument": {
"title": "RSpec/MissingExampleGroupArgument",
"description": "Checks that the first argument to an example group is not empty.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/MultipleDescribes": {
"title": "RSpec/MultipleDescribes",
"description": "Checks for multiple top-level example groups.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/MultipleExpectations": {
"title": "RSpec/MultipleExpectations",
"description": "Checks if examples contain too many `expect` calls.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Max": {
"type": "integer",
"default": 1
}
}
}
]
},
"RSpec/MultipleMemoizedHelpers": {
"title": "RSpec/MultipleMemoizedHelpers",
"description": "Checks if example groups contain too many `let` and `subject` calls.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AllowSubject": {
"type": "boolean",
"default": true
},
"Max": {
"type": "integer",
"default": 5
}
}
}
]
},
"RSpec/MultipleSubjects": {
"title": "RSpec/MultipleSubjects",
"description": "Checks if an example group defines `subject` multiple times.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/NamedSubject": {
"title": "RSpec/NamedSubject",
"description": "Checks for explicitly referenced test subjects.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"always",
"named_only"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"always",
"named_only"
]
}
}
],
"default": "always"
},
"IgnoreSharedExamples": {
"type": "boolean",
"default": true
}
}
}
]
},
"RSpec/NestedGroups": {
"title": "RSpec/NestedGroups",
"description": "Checks for nested example groups.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Max": {
"type": "integer",
"default": 3
},
"AllowedGroups": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"RSpec/NoExpectationExample": {
"title": "RSpec/NoExpectationExample",
"description": "Checks if an example contains any expectation.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AllowedPatterns": {
"type": "array",
"default": [
"^expect_",
"^assert_"
]
}
}
}
]
},
"RSpec/NotToNot": {
"title": "RSpec/NotToNot",
"description": "Checks for consistent method usage for negating expectations.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"not_to",
"to_not"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"not_to",
"to_not"
]
}
}
],
"default": "not_to"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/OverwritingSetup": {
"title": "RSpec/OverwritingSetup",
"description": "Checks if there is a let/subject that overwrites an existing one.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/Pending": {
"title": "RSpec/Pending",
"description": "Checks for any pending or skipped examples.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": false
}
}
}
]
},
"RSpec/PendingWithoutReason": {
"title": "RSpec/PendingWithoutReason",
"description": "Checks for pending or skipped examples without reason.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"RSpec/PredicateMatcher": {
"title": "RSpec/PredicateMatcher",
"description": "Prefer using predicate matcher over using predicate method directly.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Strict": {
"type": "boolean",
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"inflected",
"explicit"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"inflected",
"explicit"
]
}
}
],
"default": "inflected"
},
"AllowedExplicitMatchers": {
"type": "array",
"items": {
},
"default": [
]
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ReceiveCounts": {
"title": "RSpec/ReceiveCounts",
"description": "Check for `once` and `twice` receive counts matchers usage.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ReceiveMessages": {
"title": "RSpec/ReceiveMessages",
"description": "Checks for multiple messages stubbed on the same object.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ReceiveNever": {
"title": "RSpec/ReceiveNever",
"description": "Prefer `not_to receive(...)` over `receive(...).never`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/RedundantAround": {
"title": "RSpec/RedundantAround",
"description": "Remove redundant `around` hook.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/RepeatedDescription": {
"title": "RSpec/RepeatedDescription",
"description": "Check for repeated description strings in example groups.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/RepeatedExample": {
"title": "RSpec/RepeatedExample",
"description": "Check for repeated examples within example groups.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/RepeatedExampleGroupBody": {
"title": "RSpec/RepeatedExampleGroupBody",
"description": "Check for repeated describe and context block body.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/RepeatedExampleGroupDescription": {
"title": "RSpec/RepeatedExampleGroupDescription",
"description": "Check for repeated example group descriptions.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/RepeatedIncludeExample": {
"title": "RSpec/RepeatedIncludeExample",
"description": "Check for repeated include of shared examples.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/ReturnFromStub": {
"title": "RSpec/ReturnFromStub",
"description": "Checks for consistent style of stub's return setting.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"and_return",
"block"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"and_return",
"block"
]
}
}
],
"default": "and_return"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ScatteredLet": {
"title": "RSpec/ScatteredLet",
"description": "Checks for let scattered across the example group.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/ScatteredSetup": {
"title": "RSpec/ScatteredSetup",
"description": "Checks for setup scattered across multiple hooks in an example group.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/SharedContext": {
"title": "RSpec/SharedContext",
"description": "Checks for proper shared_context and shared_examples usage.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/SharedExamples": {
"title": "RSpec/SharedExamples",
"description": "Enforces use of string to titleize shared examples.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/SingleArgumentMessageChain": {
"title": "RSpec/SingleArgumentMessageChain",
"description": "Checks that chains of messages contain more than one element.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/SkipBlockInsideExample": {
"title": "RSpec/SkipBlockInsideExample",
"description": "Checks for passing a block to `skip` within examples.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"RSpec/SortMetadata": {
"title": "RSpec/SortMetadata",
"description": "Sort RSpec metadata alphabetically.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/SpecFilePathFormat": {
"title": "RSpec/SpecFilePathFormat",
"description": "Checks that spec file paths are consistent and well-formed.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*_spec.rb"
]
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
},
"CustomTransform": {
"type": "object",
"default": {
"RuboCop": "rubocop",
"RSpec": "rspec"
}
},
"IgnoreMethods": {
"type": "boolean",
"default": false
},
"IgnoreMetadata": {
"type": "object",
"default": {
"type": "routing"
}
}
}
}
]
},
"RSpec/SpecFilePathSuffix": {
"title": "RSpec/SpecFilePathSuffix",
"description": "Checks that spec file paths suffix are consistent and well-formed.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/*_spec*rb*",
"**/spec/**/*"
]
}
}
}
]
},
"RSpec/StubbedMock": {
"title": "RSpec/StubbedMock",
"description": "Checks that message expectations do not have a configured response.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/SubjectDeclaration": {
"title": "RSpec/SubjectDeclaration",
"description": "Ensure that subject is defined using subject helper.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
}
}
}
]
},
"RSpec/SubjectStub": {
"title": "RSpec/SubjectStub",
"description": "Checks for stubbed test subjects.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/UnspecifiedException": {
"title": "RSpec/UnspecifiedException",
"description": "Checks for a specified error in checking raised errors.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/VariableDefinition": {
"title": "RSpec/VariableDefinition",
"description": "Checks that memoized helpers names are symbols or strings.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"symbols",
"strings"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"symbols",
"strings"
]
}
}
],
"default": "symbols"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/VariableName": {
"title": "RSpec/VariableName",
"description": "Checks that memoized helper names use the configured style.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"snake_case",
"camelCase"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"snake_case",
"camelCase"
]
}
}
],
"default": "snake_case"
},
"AllowedPatterns": {
"type": "array",
"default": [
]
}
}
}
]
},
"RSpec/VerifiedDoubleReference": {
"title": "RSpec/VerifiedDoubleReference",
"description": "Checks for consistent verified double reference style.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": "pending"
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"constant",
"string"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"constant",
"string"
]
}
}
],
"default": "constant"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"RSpec/VerifiedDoubles": {
"title": "RSpec/VerifiedDoubles",
"description": "Prefer using verifying doubles over normal doubles.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"IgnoreNameless": {
"type": "boolean",
"default": true
},
"IgnoreSymbolicNames": {
"type": "boolean",
"default": false
}
}
}
]
},
"RSpec/VoidExpect": {
"title": "RSpec/VoidExpect",
"description": "Checks void `expect()`.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"RSpec/Yield": {
"title": "RSpec/Yield",
"description": "Checks for calling a block within a stub.",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/BaseCop": {
"title": "GraphQL/BaseCop",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/DefaultNullTrue": {
"title": "GraphQL/DefaultNullTrue",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/DefaultRequiredTrue": {
"title": "GraphQL/DefaultRequiredTrue",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/ArgumentDescription": {
"title": "GraphQL/ArgumentDescription",
"description": "Ensures all arguments have a description",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"GraphQL/ArgumentName": {
"title": "GraphQL/ArgumentName",
"description": "This cop checks whether argument names are snake_case",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"GraphQL/ArgumentUniqueness": {
"title": "GraphQL/ArgumentUniqueness",
"description": "This cop enforces arguments to be defined once per block",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"GraphQL/ExtractInputType": {
"title": "GraphQL/ExtractInputType",
"description": "Suggests using input type instead of many arguments",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"MaxArguments": {
"type": "integer",
"default": 2
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/graphql/mutations/**/*.rb"
]
}
}
}
]
},
"GraphQL/ExtractType": {
"title": "GraphQL/ExtractType",
"description": "Suggests extracting fields with common prefixes to the separate type",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"MaxFields": {
"type": "integer",
"default": 2
},
"Prefixes": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"is",
"has",
"with",
"avg",
"min",
"max"
]
}
}
}
]
},
"GraphQL/FieldDefinitions": {
"title": "GraphQL/FieldDefinitions",
"description": "Checks consistency of field definitions",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"group_definitions",
"define_resolver_after_definition"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"group_definitions",
"define_resolver_after_definition"
]
}
}
],
"default": "group_definitions"
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/FieldDescription": {
"title": "GraphQL/FieldDescription",
"description": "Ensures all fields have a description",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"GraphQL/FieldHashKey": {
"title": "GraphQL/FieldHashKey",
"description": "Checks :hash_key option is used for appropriate fields",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/FieldMethod": {
"title": "GraphQL/FieldMethod",
"description": "Checks :method option is used for appropriate fields",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/FieldName": {
"title": "GraphQL/FieldName",
"description": "This cop checks whether field names are snake_case",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/FieldUniqueness": {
"title": "GraphQL/FieldUniqueness",
"description": "This cop enforces fields to be defined once",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"GraphQL/GraphqlName": {
"title": "GraphQL/GraphqlName",
"description": "This cop check proper configuration of graphql_name",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/graphql/types/**/*",
"**/graphql/mutations/**/*"
]
},
"EnforcedStyle": {
"oneOf": [
{
"type": "string",
"enum": [
"required",
"only_override"
]
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"required",
"only_override"
]
}
}
],
"default": "only_override"
}
}
}
]
},
"GraphQL/LegacyDsl": {
"title": "GraphQL/LegacyDsl",
"description": "Checks that types are defined with class-based API",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"GraphQL/MaxComplexitySchema": {
"title": "GraphQL/MaxComplexitySchema",
"description": "Enforces max_complexity configuration in schema",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/graphql/**/*_schema.rb"
]
}
}
}
]
},
"GraphQL/MaxDepthSchema": {
"title": "GraphQL/MaxDepthSchema",
"description": "Enforces max_depth configuration in schema",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/graphql/**/*_schema.rb"
]
}
}
}
]
},
"GraphQL/MultipleFieldDefinitions": {
"title": "GraphQL/MultipleFieldDefinitions",
"description": "Ensures that fields with multiple definitions are grouped together",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/NotAuthorizedNodeType": {
"title": "GraphQL/NotAuthorizedNodeType",
"description": "Detects types that implement Node interface and not have `.authorized?` check",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Include": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"**/graphql/types/**/*"
]
},
"SafeBaseClasses": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"GraphQL/ResolverMethodLength": {
"title": "GraphQL/ResolverMethodLength",
"description": "Checks resolver methods are not too long",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Max": {
"type": "integer",
"default": 10
},
"CountComments": {
"type": "boolean",
"default": false
},
"ExcludedMethods": {
"type": "array",
"items": {
},
"default": [
]
}
}
}
]
},
"GraphQL/ObjectDescription": {
"title": "GraphQL/ObjectDescription",
"description": "Ensures all types have a description",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Exclude": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
},
"GraphQL/OrderedArguments": {
"title": "GraphQL/OrderedArguments",
"description": "Arguments should be alphabetically sorted within groups",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Order": {
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/OrderedFields": {
"title": "GraphQL/OrderedFields",
"description": "Fields should be alphabetically sorted within groups",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"Groups": {
"type": "boolean",
"default": true
},
"Order": {
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/UnusedArgument": {
"title": "GraphQL/UnusedArgument",
"description": "Arguments should either be listed explicitly or **rest should be in the resolve signature",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/UnnecessaryArgumentCamelize": {
"title": "GraphQL/UnnecessaryArgumentCamelize",
"description": "Camelize isn't necessary if the argument name doesn't contain underscores",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
},
"GraphQL/UnnecessaryFieldAlias": {
"title": "GraphQL/UnnecessaryFieldAlias",
"description": "Field aliases should be different than their field names",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
},
"AutoCorrect": {
"type": "boolean"
}
}
}
]
},
"GraphQL/UnnecessaryFieldCamelize": {
"title": "GraphQL/UnnecessaryFieldCamelize",
"description": "Camelize isn't necessary if the field name doesn't contain underscores",
"allOf": [
{
"$ref": "#/definitions/copProperties"
},
{
"properties": {
"Enabled": {
"default": true
}
}
}
]
}
},
"definitions": {
"stringArray": {
"type": "array",
"items": {
"type": "string"
}
},
"nullableArray": {
"oneOf": [
{
"type": "array"
},
{
"type": "null"
}
]
},
"stringOrStrings": {
"oneOf": [
{
"type": "string"
},
{
"$ref": "#/definitions/stringArray"
}
]
},
"severity": {
"type": "string",
"enum": [
"info",
"refactor",
"convention",
"warning",
"error",
"fatal"
]
},
"inheritMode": {
"type": "object",
"minProperties": 1,
"propertyNames": {
"enum": [
"merge",
"override"
]
},
"additionalProperties": {
"type": "array",
"minItems": 1,
"items": {
"type": "string"
}
}
},
"sharedProperties": {
"properties": {
"Include": {
"$ref": "#/definitions/nullableArray"
},
"Exclude": {
"$ref": "#/definitions/nullableArray"
},
"StyleGuideBaseURL": {
"type": "string",
"default": "https://rubystyle.guide"
},
"inherit_mode": {
"$ref": "#/definitions/inheritMode"
}
}
},
"copProperties": {
"type": "object",
"allOf": [
{
"$ref": "#/definitions/sharedProperties"
},
{
"properties": {
"Enabled": {
"oneOf": [
{
"type": "boolean"
},
{
"type": "string",
"enum": [
"pending"
]
}
]
},
"Severity": {
"$ref": "#/definitions/severity"
},
"Details": {
"type": "string"
},
"StyleGuide": {
"type": "string"
}
}
}
]
},
"allCopsProperties": {
"properties": {
"DefaultFormatter": {
"type": "string",
"default": "progress"
},
"DisplayCopNames": {
"type": "boolean",
"default": true
},
"DisplayStyleGuide": {
"type": "boolean",
"default": false
},
"DocumentationBaseURL": {
"type": "string",
"default": "https://docs.rubocop.org/rubocop"
},
"ExtraDetails": {
"type": "boolean",
"default": false
},
"StyleGuideCopsOnly": {
"type": "boolean",
"default": false
},
"EnabledByDefault": {
"type": "boolean",
"default": false
},
"DisabledByDefault": {
"type": "boolean",
"default": false
},
"NewCops": {
"type": "string",
"default": "pending",
"enum": [
"pending",
"enable",
"disable"
]
},
"UseCache": {
"type": "boolean",
"default": true
},
"MaxFilesInCache": {
"type": "integer",
"default": 20000
},
"CacheRootDirectory": {
"type": "string"
},
"AllowSymlinksInCacheRootDirectory": {
"type": "boolean",
"default": false
},
"TargetRubyVersion": {
"oneOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"SuggestExtensions": {
"oneOf": [
{
"type": "boolean"
},
{
"type": "object",
"additionalProperties": {
"oneOf": [
{
"type": "boolean"
},
{
"$ref": "#/definitions/stringArray"
}
]
}
}
]
},
"RubyInterpreters": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment