Files
openproject/.rubocop.yml
T
Yauheni Suhakou 2cd9a7b08f [73319] Create and use two-way OAuth 2 (#22816)
Update the OAuth section for the XWiki provider. Since XWiki provides only public clients, there are no client secrets passed in between OP and XWiki. Thus, the UI is, for now, just a mock with a client ID.
2026-04-28 14:07:37 +02:00

543 lines
10 KiB
YAML

require:
- rubocop-openproject
- ./config/initializers/inflections.rb
plugins:
- rubocop-capybara
- rubocop-factory_bot
- rubocop-performance
- rubocop-rails
- rubocop-rspec
- rubocop-rspec_rails
# A rubocop-local.yml file can be added to customized the styles
inherit_from:
- .rubocop-local*.yml
inherit_mode:
merge:
# adding files to Exclude should merge with inherited instead of replacing
- Exclude
AllCops:
TargetRubyVersion: 3.4
# Enable any new cops in new versions by default
NewCops: enable
Exclude:
- "**/node_modules/**/*"
# Disable it as it is deprecated
# From https://docs.rubocop.org/rubocop-capybara/cops_capybara.html#capybaraclicklinkorbuttonstyle
# "This cop is deprecated. We plan to remove this in the next major version update to 3.0."
Capybara/ClickLinkOrButtonStyle:
Enabled: false
FactoryBot/ConsistentParenthesesStyle:
Enabled: false
FactoryBot/SyntaxMethods:
Enabled: true
Gemspec/RequiredRubyVersion:
Exclude:
- modules/**/*.gemspec
Layout/ConditionPosition:
Enabled: false
Layout/DotPosition:
EnforcedStyle: leading
Layout/LineLength:
Max: 130
Layout/MultilineMethodCallIndentation:
Enabled: false
# Rubymine doesn't support the same indentation style
# and will auto-format against it with our editorconfig
Layout/MultilineOperationIndentation:
Enabled: false
Lint/AmbiguousBlockAssociation:
AllowedMethods:
- change
Lint/AmbiguousOperator:
Enabled: false
Lint/AmbiguousRegexpLiteral:
Enabled: false
Lint/AssignmentInCondition:
Enabled: false
Lint/DeprecatedClassMethods:
Enabled: false
Lint/ElseLayout:
Enabled: false
Lint/FlipFlop:
Enabled: false
Lint/LiteralInInterpolation:
Enabled: false
Lint/Loop:
Enabled: false
Lint/ParenthesesAsGroupedExpression:
Enabled: false
Lint/RequireParentheses:
Enabled: false
Lint/SuppressedException:
Enabled: false
Lint/UnderscorePrefixedVariableName:
Enabled: false
Lint/Void:
Enabled: false
Metrics/AbcSize:
Enabled: true
Exclude:
- "spec/**/*.rb"
- "modules/*/spec/**/*.rb"
Metrics/BlockLength:
Enabled: false
Metrics/BlockNesting:
Enabled: false
Metrics/ClassLength:
Enabled: false
Metrics/CyclomaticComplexity:
Enabled: false
Metrics/MethodLength:
Enabled: false
Metrics/ModuleLength:
Enabled: false
Metrics/ParameterLists:
Enabled: false
Naming/AccessorMethodName:
Enabled: false
Naming/AsciiIdentifiers:
Enabled: false
Naming/ClassAndModuleCamelCase:
AllowedNames:
- V2_1
Naming/FileName:
Enabled: false
Naming/PredicatePrefix:
ForbiddenPrefixes:
- is_
Naming/VariableNumber:
AllowedPatterns:
- "\\w_20\\d\\d" # allow dates like christmas_2022 or date_2034_04_12
- "\\w\\d++(_\\d++)+" # allow hierarchical data like child1_2_5 (second + in regex is possessive qualifier)
- "custom_field_\\d+" # allow custom field method names to be called with send :custom_field_1001
OpenProject/AddPreviewForViewComponent:
Include:
- app/components/op_turbo/**.rb
- app/components/op_primer/**.rb
- app/components/open_project/**.rb
- app/components/concerns/**.rb
Performance/Casecmp:
Enabled: false
# Don't force us to use tag instead of content_tag
# as this breaks angular elements
Rails/ContentTag:
Enabled: false
# dynamic finders cop clashes with capybara ID cop
Rails/DynamicFindBy:
Enabled: true
AllowedMethods:
- find_by_display_id
- find_by_display_id!
- find_by_semantic_identifier
Exclude:
- "spec/features/**/*.rb"
- "spec/support/**/*.rb"
- "modules/*/spec/features/**/*.rb"
Whitelist:
- find_by_login
- find_by_mail
- find_by_plaintext_value
- find_by_rss_key
- find_by_unique
- find_by_unique!
- find_by_api_key
# Allow reorder to prevent find each cop triggering
Rails/FindEach:
AllowedMethods:
- order
- reorder
- limit
- select
- lock
Exclude:
- "spec/**/*"
- "modules/**/spec/**/*"
# The http verbs in Rack::Test do not accept named parameters (params: params)
Rails/HttpPositionalArguments:
Enabled: false
# Disable I18n.locale = in specs, where it is reset
# by us explicitly
Rails/I18nLocaleAssignment:
Enabled: true
Exclude:
- "spec/**/*.rb"
- "modules/*/spec/**/*.rb"
Rails/I18nLocaleTexts:
Enabled: true
Exclude:
- "spec/**/*.rb"
- "modules/*/spec/**/*.rb"
# We have config.active_record.belongs_to_required_by_default = false ,
# which means, we do have to declare presence validators on belongs_to relations.
Rails/RedundantPresenceValidationOnBelongsTo:
Enabled: false
# require_dependency is an obsolete method for Rails applications running in Zeitwerk mode.
Rails/RequireDependency:
Enabled: true
# Require save! to prevent saving without validation when saving outside of a condition.
Rails/SaveBang:
Enabled: true
Exclude:
- "spec/**/*"
- "modules/**/spec/**/*"
# There are valid cases in which to use methods like:
# * update_all
# * touch_all
Rails/SkipsModelValidations:
Enabled: false
# Allow number HTTP status codes in specs
RSpecRails/HttpStatus:
Enabled: false
# The block form of `travel_to` is often the tighter and safer option in our Rails specs.
RSpecRails/TravelAround:
Enabled: false
# expect not_to change is not working as expected
# if you chain it with multiple expected changes
RSpec/ChangeByZero:
Enabled: false
RSpec/ContextWording:
Prefixes:
- and
- as
- even
- for
- given
- having
- if
- in
- "on"
- to
- unless
- via
- when
- with
- within
- without
RSpec/DescribeClass:
Enabled: true
Exclude:
- "spec/features/**/*.rb"
- "modules/*/spec/features/**/*.rb"
# Don't force the second argument of describe
# to be .class_method or #instance_method
RSpec/DescribeMethod:
Enabled: false
# For feature specs, we tend to have longer specs that cover a larger part of the functionality.
# This is done for multiple reasons:
# * performance, as setting up integration tests is costly
# * following a scenario that is closer to how a user interacts
RSpec/ExampleLength:
Max: 25
Enabled: true
Exclude:
- "spec/features/**/*.rb"
- "modules/*/spec/features/**/*.rb"
# Prevent "fit" or similar to be committed
RSpec/Focus:
Enabled: true
# Nothing wrong with `include_examples` when used properly.
RSpec/IncludeExamples:
Enabled: false
# Do not bother if `let` statements use an index in their name
RSpec/IndexedLet:
Enabled: false
RSpec/LeadingSubject:
Enabled: false
# We use let!() to ensure dependencies are created
# instead of let() and referencing them explicitly
RSpec/LetSetup:
Enabled: false
# We have specs that have no expect(..) syntax,
# but only helper classes that expect themselves
RSpec/NoExpectationExample:
Enabled: false
# See RSpec/ExampleLength for why feature specs are excluded
RSpec/MultipleExpectations:
Max: 15
Enabled: true
Exclude:
- "spec/features/**/*.rb"
- "modules/*/spec/features/**/*.rb"
RSpec/MultipleMemoizedHelpers:
Enabled: false
RSpec/NestedGroups:
Enabled: false
# Don't force the second argument of describe
# to match the exact file name
RSpec/SpecFilePathFormat:
CustomTransform:
OpenIDConnect: openid_connect
OAuthClients: oauth_clients
XWiki: xwiki
XWikiProviders: xwiki_providers
EnforcedInflector: active_support
IgnoreMethods: true
RSpec/NamedSubject:
Enabled: false
Style/Alias:
Enabled: false
Style/AndOr:
Enabled: false
Style/ArrayJoin:
Enabled: false
Style/AsciiComments:
Enabled: false
Style/Attr:
Enabled: false
Style/CaseEquality:
Enabled: false
Style/CharacterLiteral:
Enabled: false
Style/ClassAndModuleChildren:
Enabled: false
Style/ClassVars:
Enabled: false
Style/CollectionMethods:
PreferredMethods:
find: detect
reduce: inject
collect: map
find_all: select
Style/ColonMethodCall:
Enabled: false
Style/CommentAnnotation:
Enabled: false
Style/Documentation:
Enabled: false
Style/DoubleNegation:
Enabled: false
Style/EachWithObject:
Enabled: false
Style/EmptyLiteral:
Enabled: false
Style/EndlessMethod:
Enabled: true
Style/EvenOdd:
Enabled: false
Style/FormatString:
Enabled: false
Style/FormatStringToken:
AllowedMethods:
- redirect
Style/FrozenStringLiteralComment:
Enabled: true
EnforcedStyle: always_true
Style/HashEachMethods:
Enabled: true
Style/HashTransformKeys:
Enabled: true
Style/HashTransformValues:
Enabled: true
Style/GlobalVars:
Enabled: false
Style/GuardClause:
Enabled: false
Style/IfUnlessModifier:
Enabled: false
Style/IfWithSemicolon:
Enabled: false
Style/InlineComment:
Enabled: false
Style/Lambda:
Enabled: false
Style/LambdaCall:
Enabled: false
Style/LineEndConcatenation:
Enabled: false
Style/ModuleFunction:
Enabled: false
Style/NegatedIf:
Enabled: false
Style/NegatedWhile:
Enabled: false
Style/Next:
Enabled: false
Style/NilComparison:
Enabled: false
Style/Not:
Enabled: false
Style/NumericLiterals:
Enabled: false
# Avoid enforcing "positive?"
Style/NumericPredicate:
Enabled: false
Style/OneLineConditional:
Enabled: false
Style/PercentLiteralDelimiters:
Enabled: false
Style/PerlBackrefs:
Enabled: false
Style/PreferredHashMethods:
Enabled: false
Style/Proc:
Enabled: false
Style/RaiseArgs:
Enabled: false
Style/RescueModifier:
Exclude:
- "spec/**/*"
- "modules/**/spec/**/*"
Style/RegexpLiteral:
Enabled: false
Style/SelfAssignment:
Enabled: false
Style/SingleLineBlockParams:
Enabled: false
Style/SingleLineMethods:
Enabled: false
Style/SignalException:
Enabled: false
Style/SpecialGlobalVars:
Enabled: false
# Forcing single quotes doesn't give any reasonable advantages. To the contrary:
# it forces you to change the quotes every time you want to add interpolation,
# newlines or other escape sequences (\n), or quotes (') to a string. Rubbish.
# Don't even think about performance. That never was a valid argument to begin with.
#
# For the record: using single quotes does NOT have any performance advantages.
# Even if it did, this would be a silly argument.
#
# Quote away.
Style/StringLiterals:
EnforcedStyle: double_quotes
Style/TrivialAccessors:
Enabled: false
Style/VariableInterpolation:
Enabled: false
Style/WhenThen:
Enabled: false
Style/WhileUntilModifier:
Enabled: false
Style/WordArray:
Enabled: false