Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Huge performance regression between 1.32.0 and 1.34.1 #10919

Closed
mockdeep opened this issue Aug 12, 2022 · 12 comments · Fixed by #10953
Closed

Huge performance regression between 1.32.0 and 1.34.1 #10919

mockdeep opened this issue Aug 12, 2022 · 12 comments · Fixed by #10953

Comments

@mockdeep
Copy link
Contributor

Expected behavior

RuboCop should run in a reasonable amount of time.

Actual behavior

When we upgraded from RuboCop 1.32.0 to 1.34.1 we saw a huge jump in how long it takes to run a build. What would consistently take < 5 minutes can now take upwards of an hour. I tested on 1.35.0 as well and we are seeing the same issue.

Steps to reproduce the problem

I unfortunately don't have this, yet. But I'll continue poking around to see if a particular rule is causing the issue. If anybody has any suggestions on places to look that might help.

RuboCop version

$ bundle exec rubocop -V
1.35.0 (using Parser 3.1.2.1, rubocop-ast 1.21.0, running on ruby 3.0.4 x86_64-linux)
  - rubocop-graphql 0.14.5
  - rubocop-performance 1.14.3
  - rubocop-rails 2.15.2
  - rubocop-rake 0.6.0
  - rubocop-rspec 2.12.1```
@mockdeep
Copy link
Contributor Author

Okay, it appears related to this change. The rule that was causing the issue was Style/MethodCallWithArgsParentheses. We hadn't switched from the deprecated IgnoredMethods, but when I switch that to AllowedMethods performance seems to go back to normal.

@dvandersluis
Copy link
Member

@mockdeep interesting, can you share your config before the switch? Glad you found a workaround though!

@mockdeep
Copy link
Contributor Author

@dvandersluis sure:

.rubocop.yml
inherit_from: .rubocop_todo.yml

inherit_mode:
  merge: [Exclude]

################################################################################
#
# Top level config
#
################################################################################

require:
  - rubocop-graphql
  - rubocop-rails
  - rubocop-rake
  - rubocop-rspec
  - rubocop-performance
  - ./linters/rubocop/cop/ik12

AllCops:
  DefaultFormatter: fuubar
  DisplayCopNames: true
  EnabledByDefault: true
  Exclude:
    - db/schema.rb
    - node_modules/**/*
    - vendor/**/*

################################################################################
#
# Rules that depart from rubocop defaults
#
################################################################################

Bundler/GemVersion: { EnforcedStyle: forbidden }
Ik12/MissingTestForMethod: { Exclude: [db/migrate/**/*.rb, lib/mailer_previews/*.rb] }
Layout/AccessModifierIndentation: { EnforcedStyle: outdent }
Layout/EmptyLineAfterGuardClause: { Exclude: [app/views/**/*] }
Layout/EmptyLinesAroundClassBody: { EnforcedStyle: empty_lines }
Layout/EmptyLinesAroundModuleBody: { EnforcedStyle: empty_lines }
Layout/FirstArrayElementIndentation: { EnforcedStyle: consistent }
Layout/LineLength: { Max: 84, Exclude: [db/migrate/**/*] }
Layout/MultilineMethodCallIndentation: { EnforcedStyle: indented }
Layout/MultilineOperationIndentation: { EnforcedStyle: indented }
Layout/RedundantLineBreak: { InspectBlocks: true, Exclude: ['**/*.haml*']}
Lint/AmbiguousBlockAssociation: { IgnoredMethods: [change, not_change] }
Lint/RescueException: { Exclude: [lib/retryer.rb] }
Metrics/BlockLength: { Exclude: [config/**/*.rb, spec/**/*.rb, db/seeds/**/*.rb] }
Metrics/MethodLength: { Exclude: [db/migrate/**/*.rb] }
Naming/FileName: { Exclude: [spec/**/*_REGEX_spec.rb] }
Naming/MethodParameterName:
  AllowedNames: at, by, db, id, in, io, ip, of, on, os, pp, to, x, y
Naming/PredicateName: { Exclude: [app/serializers/**/*] }
Naming/RescuedExceptionsVariableName: { PreferredName: error }
Naming/VariableNumber: { EnforcedStyle: snake_case, CheckSymbols: false }
Performance/RedundantEqualityComparisonBlock: { Exclude: [lib/retryer.rb] }
Rails/ApplicationJob: { Exclude: [config/initializers/**/*] }
Rails/FilePath: { EnforcedStyle: arguments }
Rails/I18nLocaleTexts: { Exclude: [spec/**/*.rb] }
Rails/Output: { Exclude: [db/seeds.rb, db/seeds/**/*, exe/**/*] }
RSpec/Capybara/FeatureMethods:
  Exclude:
    - 'app/views/**/*'
RSpec/DescribeClass: { Exclude: [spec/routing/**/*, spec/views/**/*, spec/features/**/*] }
RSpec/DescribedClass: { SkipBlocks: true }
RSpec/DescribeMethod:
  Exclude:
    - 'spec/**/*_REGEX_spec.rb'
    - '**/after_commit_spec.rb'
    - '**/after_initialize_spec.rb'
    - '**/after_save_spec.rb'
    - '**/after_soft_delete_spec.rb'
    - '**/after_restore_spec.rb'
    - '**/after_validation_spec.rb'
    - '**/associations_spec.rb'
    - '**/before_destroy_spec.rb'
    - '**/before_update_spec.rb'
    - '**/before_save_spec.rb'
    - '**/callbacks_spec.rb'
    - '**/default_scope_spec.rb'
    - '**/delegations_spec.rb'
    - '**/validations_spec.rb'
RSpec/MessageExpectation: { EnforcedStyle: expect }
Style/CollectionMethods:
  PreferredMethods:
    find: 'detect'
Style/EmptyMethod: { EnforcedStyle: expanded }
Style/FormatStringToken: { IgnoredMethods: [redirect] }
Style/GuardClause: { MinBodyLength: 4 }
Style/MethodCallWithArgsParentheses:
  IgnoredMethods:
    - abort
    - after_save
    - and
    - before_save
    - delegate
    - describe
    - exec
    - exit
    - load
    - not_to
    - p
    - print
    - puts
    - raise
    - require
    - shared_context
    - shared_examples
    - star_puts
    - throw
    - to
    - warn
    - yield
  Exclude:
    - db/**/*.rb
Style/MixinGrouping: { EnforcedStyle: grouped }
Style/ModuleFunction: { EnforcedStyle: extend_self }
Style/RegexpLiteral: { AllowInnerSlashes: true }
Style/SymbolArray: { EnforcedStyle: brackets }
Style/TrailingCommaInArguments: { EnforcedStyleForMultiline: consistent_comma }
Style/TrailingCommaInArrayLiteral: { EnforcedStyleForMultiline: consistent_comma }
Style/TrailingCommaInHashLiteral: { EnforcedStyleForMultiline: consistent_comma }
Style/WordArray: { EnforcedStyle: brackets }

################################################################################
#
# These need to be fixed in the views for `haml_lint`
#
################################################################################

Lint/NumberConversion: { Exclude: [app/views/**/*] }
Rails/EnvironmentVariableAccess: { Exclude: [app/views/layouts/_head_include_tags*] }
Rails/OutputSafety: { Exclude: [app/views/**/*] }
Rails/UnknownEnv: { Exclude: [app/views/**/*] }
Style/SafeNavigation: { Exclude: [app/views/**/*] }

################################################################################
#
# Todo lints not yet ready for transitional linting
#
################################################################################

Layout/MultilineMethodArgumentLineBreaks: { Enabled: false }
RSpec/ExampleLength: { Max: 196 }
RSpec/MessageExpectation: { Enabled: false }
RSpec/MultipleExpectations: { Max: 62 }
Rails/HasManyOrHasOneDependent: { Enabled: false }
Style/MethodCalledOnDoEndBlock: { Enabled: false }
Rails/SkipsModelValidations: { Enabled: false }
Style/StringHashKeys: { Enabled: false }

################################################################################
#
# Rules we don't want to enable
#
################################################################################

Bundler/GemComment: { Enabled: false }
GraphQL/ArgumentDescription: { Enabled: false }
GraphQL/FieldDescription: { Enabled: false }
GraphQL/ObjectDescription: { Enabled: false }
Layout/SingleLineBlockChain: { Enabled: false }
Lint/ConstantResolution: { Enabled: false }
Performance/ChainArrayAllocation: { Enabled: false }
Rails/BulkChangeTable: { Enabled: false }
Rails/OrderById: { Enabled: false }
Rails/RakeEnvironment: { Enabled: false }
Rails/RedundantPresenceValidationOnBelongsTo: { Enabled: false }
Rails/SchemaComment: { Enabled: false }
RSpec/AlignLeftLetBrace: { Enabled: false }
RSpec/AlignRightLetBrace: { Enabled: false }
RSpec/StubbedMock: { Enabled: false }
Style/ConstantVisibility: { Enabled: false }
Style/Copyright: { Enabled: false }
Style/Documentation: { Enabled: false }
Style/DocumentationMethod: { Enabled: false }
Style/InlineComment: { Enabled: false }
Style/MissingElse: { Enabled: false }
.rubocop_todo.yml
# This configuration was generated by
# `rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 400`
# on 2022-07-28 02:56:48 UTC using RuboCop version 1.32.0.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.

# Offense count: 9
# Configuration parameters: EnforcedStyle, Include, AllowedGems.
# SupportedStyles: required, forbidden
# Include: **/*.gemfile, **/Gemfile, **/gems.rb
Bundler/GemVersion:
  Exclude:
    - 'Gemfile'

# Offense count: 5
# Configuration parameters: MaxArguments.
GraphQL/ExtractInputType:
  Exclude:
    - 'app/graphql/resolvers/create_bulk_approval_form_set.rb'
    - 'app/graphql/resolvers/paginated_waiting_form_requests.rb'

# Offense count: 17
GraphQL/LegacyDsl:
  Exclude:
    - 'app/graphql/synchroform_schema.rb'
    - 'app/graphql/types/active_sent_back_event.rb'
    - 'app/graphql/types/awaiting_campaign.rb'
    - 'app/graphql/types/bulk_approval_action.rb'
    - 'app/graphql/types/bulk_approval_action_input.rb'
    - 'app/graphql/types/decorated_campaign.rb'
    - 'app/graphql/types/decorated_form_request.rb'
    - 'app/graphql/types/decorated_group.rb'
    - 'app/graphql/types/form_set_action.rb'
    - 'app/graphql/types/form_subset.rb'
    - 'app/graphql/types/mutation.rb'
    - 'app/graphql/types/organization.rb'
    - 'app/graphql/types/paginated_form_requests.rb'
    - 'app/graphql/types/pagination.rb'
    - 'app/graphql/types/query.rb'
    - 'app/graphql/types/selected_form_set.rb'
    - 'app/graphql/types/user.rb'

# Offense count: 130
Ik12/MissingTestForMethod:
  Exclude:
    - 'app/components/campaigns/search_results_component.rb'
    - 'app/components/common/button_component.rb'
    - 'app/components/common/button_link_component.rb'
    - 'app/components/common/card_component.rb'
    - 'app/components/common/checkbox_dropdown_component.rb'
    - 'app/components/common/heading_component.rb'
    - 'app/components/common/tile_component.rb'
    - 'app/components/form_access_groups/sort_component.rb'
    - 'app/decorators/field_decorator.rb'
    - 'app/decorators/form_request_decorator.rb'
    - 'app/helpers/brand_helper.rb'
    - 'app/helpers/campaigns_helper.rb'
    - 'app/helpers/docs_helper.rb'
    - 'app/mailers/application_mailer.rb'
    - 'app/mailers/form_request_mailer.rb'
    - 'app/models/concerns/orderable.rb'
    - 'app/models/concerns/trashable.rb'
    - 'app/models/concerns/unscopeable.rb'
    - 'app/models/util/database_lock.rb'
    - 'app/null_objects/null_form.rb'
    - 'app/null_objects/null_form_request.rb'
    - 'app/policies/campaign_policy.rb'
    - 'app/policies/form_set_policy.rb'
    - 'app/serializers/student_changes_serializer.rb'
    - 'app/uploaders/attachment_uploader.rb'
    - 'app/uploaders/csv_uploader.rb'
    - 'app/uploaders/file_to_pdf_uploader.rb'
    - 'app/uploaders/large_file_uploader.rb'
    - 'app/value_objects/sorting.rb'
    - 'app/wizards/campaign_wizard.rb'
    - 'app/wizards/group_wizard.rb'
    - 'app/wizards/routing_wizard.rb'
    - 'config/initializers/extensions/active_record_base.rb'
    - 'config/initializers/rack_attack.rb'
    - 'db/functions/to_date_or_null.rb'
    - 'db/functions/utc_string_to_local_date.rb'
    - 'db/seeds/fields.rb'
    - 'exe/baselines/runner.rb'
    - 'exe/disect'
    - 'lib/base64_image.rb'
    - 'lib/campaign_count_comparer.rb'
    - 'lib/change_set.rb'
    - 'lib/change_set/carrier_wave_callbacks.rb'
    - 'lib/change_set/counters.rb'
    - 'lib/change_set/job.rb'
    - 'lib/churnable.rb'
    - 'lib/crawler_constraint.rb'
    - 'lib/doc_pages_count_comparer.rb'
    - 'lib/query_wrapper.rb'
    - 'lib/serializable.rb'
    - 'lib/serializable/collection_serializer.rb'
    - 'lib/serializable/config.rb'
    - 'lib/serializable/locator.rb'
    - 'lib/t_sortable_hash.rb'
    - 'lib/tasks/delete_org_data.rake'
    - 'lib/tasks/deploy.rake'
    - 'linters/haml_lint/use_view_component.rb'

# Offense count: 11
# Configuration parameters: AutoCorrect, EnforcedStyle.
# SupportedStyles: leading, trailing
Layout/LineContinuationLeadingSpace:
  Exclude:
    - 'app/controllers/admin/tracked_links_controller.rb'
    - 'app/controllers/attachments_controller.rb'
    - 'app/controllers/denials_controller.rb'
    - 'app/domains/responses/creator.rb'
    - 'exe/ginger_snaps'
    - 'spec/domains/docs/updater/call_spec.rb'
    - 'spec/domains/organizations/associations_validator/call_spec.rb'
    - 'spec/features/refresh/people_console_spec.rb'
    - 'spec/mailers/campaign_access_mailer/new_user_message_spec.rb'

# Offense count: 8
# This cop supports safe autocorrection (--autocorrect).
Layout/MultilineMethodParameterLineBreaks:
  Exclude:
    - 'app/mailers/form_request_mailer.rb'
    - 'spec/domains/campaigns/counts_refresher/call_spec.rb'

# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: InspectBlocks.
Layout/RedundantLineBreak:
  Exclude:
    - 'spec/factories/emails.rb'

# Offense count: 6
Lint/MissingSuper:
  Exclude:
    - 'app/components/application_component.rb'
    - 'app/null_objects/null_campaign.rb'
    - 'app/null_objects/null_form.rb'
    - 'app/null_objects/null_form_request.rb'
    - 'app/null_objects/null_form_subset.rb'
    - 'app/null_objects/null_user.rb'

# Offense count: 32
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: IgnoredMethods, IgnoredClasses.
# IgnoredMethods: ago, from_now, second, seconds, minute, minutes, hour, hours, day, days, week, weeks, fortnight, fortnights, in_milliseconds
# IgnoredClasses: Time, DateTime
Lint/NumberConversion:
  Exclude:
    - 'app/decorators/campaign_decorator.rb'
    - 'app/domains/fields/formula_fields/field_val_map_generator.rb'
    - 'app/domains/fields/formula_fields/numeric_content_grabber.rb'
    - 'app/domains/form_access_groups/access_invite.rb'
    - 'app/domains/form_access_groups/archived_at_validator.rb'
    - 'app/domains/form_requests/filters/hstore_date.rb'
    - 'app/domains/pages/fields_detector.rb'
    - 'app/domains/recipients/bulk_form_requests_transferer.rb'
    - 'app/models/campaign.rb'
    - 'app/models/fields/formula_field.rb'
    - 'app/models/form_access_groups/all_access_group.rb'
    - 'app/models/form_access_groups/subsets_access_group.rb'
    - 'app/models/form_set_actions/csv_report_action.rb'
    - 'app/models/form_subset.rb'
    - 'app/models/reports/csv_report.rb'
    - 'app/null_objects/null_form_subset.rb'
    - 'config/initializers/puma_worker_killer.rb'
    - 'config/initializers/rack_multipart.rb'
    - 'lib/paginator.rb'
    - 'spec/controllers/campaigns/form_access_invites_controller/edit_spec.rb'

# Offense count: 193
# Configuration parameters: IgnoredMethods, CountRepeatedAttributes, Max.
Metrics/AbcSize:
  Exclude:
    - 'app/domains/recipients/bulk_approver_updater.rb'
    - 'app/components/common/button_component.rb'
    - 'app/controllers/admin/approver_lists/recipients_from_inputs_controller.rb'
    - 'app/controllers/admin/campaigns_controller.rb'
    - 'app/controllers/admin/doc_transfers_controller.rb'
    - 'app/controllers/admin/docs_controller.rb'
    - 'app/controllers/admin/internal_tags_controller.rb'
    - 'app/controllers/admin/organizations/approver_lists_controller.rb'
    - 'app/controllers/admin/organizations/approver_lists_recipients_controller.rb'
    - 'app/controllers/admin/organizations/campaigns_controller.rb'
    - 'app/controllers/admin/organizations/feedbacks_controller.rb'
    - 'app/controllers/admin/organizations_controller.rb'
    - 'app/controllers/admin/steps_controller.rb'
    - 'app/controllers/admin/users/approved_forms_controller.rb'
    - 'app/controllers/admin/users/recipients_steps_controller.rb'
    - 'app/controllers/admin/users_controller.rb'
    - 'app/controllers/api/form_sets_controller.rb'
    - 'app/controllers/api/steps/recipients_controller.rb'
    - 'app/controllers/application_controller.rb'
    - 'app/controllers/archived_campaigns_controller.rb'
    - 'app/controllers/attachments_controller.rb'
    - 'app/controllers/batch/batch_fields_controller.rb'
    - 'app/controllers/campaigns/form_access_groups_controller.rb'
    - 'app/controllers/campaigns/form_access_invites_controller.rb'
    - 'app/controllers/campaigns/test_emails_controller.rb'
    - 'app/controllers/campaigns_controller.rb'
    - 'app/controllers/denials_controller.rb'
    - 'app/controllers/docs/tracker_fields_controller.rb'
    - 'app/controllers/docs_controller.rb'
    - 'app/controllers/draft_campaigns_controller.rb'
    - 'app/controllers/form_request_links_controller.rb'
    - 'app/controllers/form_requests_controller.rb'
    - 'app/controllers/forms_controller.rb'
    - 'app/controllers/google_sessions_controller.rb'
    - 'app/controllers/groups/csv_uploads_controller.rb'
    - 'app/controllers/job_results_controller.rb'
    - 'app/controllers/link_campaigns_controller.rb'
    - 'app/controllers/organizations_controller.rb'
    - 'app/controllers/password_sessions_controller.rb'
    - 'app/controllers/responses_controller.rb'
    - 'app/controllers/shared_campaigns_controller.rb'
    - 'app/controllers/starred_campaigns_controller.rb'
    - 'app/controllers/steps/approver_csv_uploads_controller.rb'
    - 'app/controllers/steps/approver_lists_reviews_controller.rb'
    - 'app/controllers/submissions_controller.rb'
    - 'app/controllers/test_files_controller.rb'
    - 'app/controllers/token_responses_controller.rb'
    - 'app/controllers/tracking_controller.rb'
    - 'app/controllers/wizards/campaign_wizard_controller.rb'
    - 'app/controllers/wizards/group_wizard_controller.rb'
    - 'app/controllers/wizards/routing_wizard_controller.rb'
    - 'app/decorators/field_decorator.rb'
    - 'app/domains/campaigns/churner.rb'
    - 'app/domains/campaigns/group_submissions_creator.rb'
    - 'app/domains/campaigns/invite_copier.rb'
    - 'app/domains/campaigns/question_and_answer_copier.rb'
    - 'app/domains/campaigns/recipient_copier.rb'
    - 'app/domains/campaigns/step_counts_refresher.rb'
    - 'app/domains/campaigns/steps_copier.rb'
    - 'app/domains/campaigns/transferer.rb'
    - 'app/domains/docs/builder.rb'
    - 'app/domains/docs/bulk_form_subsets_creator.rb'
    - 'app/domains/docs/copier.rb'
    - 'app/domains/docs/field_mover.rb'
    - 'app/domains/docs/pages_creator.rb'
    - 'app/domains/docs/transferer.rb'
    - 'app/domains/feedbacks/csv_generator.rb'
    - 'app/domains/fields/formula_fields/dependency_checker.rb'
    - 'app/domains/fields/formula_fields/field_val_map_generator.rb'
    - 'app/domains/form_access_groups/bulk_inviter.rb'
    - 'app/domains/form_requests/filterer.rb'
    - 'app/domains/form_requests/filters/hstore_text.rb'
    - 'app/domains/form_requests/pdf_generator.rb'
    - 'app/domains/form_requests/pdf_with_attachments_generator.rb'
    - 'app/domains/form_requests/rejection_undoer.rb'
    - 'app/domains/form_requests/restored_status_setter.rb'
    - 'app/domains/form_requests/route_change_set.rb'
    - 'app/domains/form_requests/router.rb'
    - 'app/domains/form_requests/routing/skip_to_strategy.rb'
    - 'app/domains/form_requests/submit_change_set.rb'
    - 'app/domains/form_requests/update_change_set.rb'
    - 'app/domains/form_sets/csv_generator.rb'
    - 'app/domains/form_sets/reminder_sender.rb'
    - 'app/domains/form_sets/submitter.rb'
    - 'app/domains/form_sets/zip_generator.rb'
    - 'app/domains/forms/formula_checker.rb'
    - 'app/domains/forms/initiator_updater.rb'
    - 'app/domains/forms/metadata_generator.rb'
    - 'app/domains/forms/recipient_changer.rb'
    - 'app/domains/forms/routing_updater.rb'
    - 'app/domains/forms/update_change_set.rb'
    - 'app/domains/organizations/associations_validator.rb'
    - 'app/domains/organizations/campaigns_finder.rb'
    - 'app/domains/organizations/churner.rb'
    - 'app/domains/organizations/domain_updater.rb'
    - 'app/domains/pages/copier.rb'
    - 'app/domains/pages/fields_copier.rb'
    - 'app/domains/pages/fields_detector.rb'
    - 'app/domains/pages/image_copier.rb'
    - 'app/domains/pages/mover.rb'
    - 'app/domains/recipients/approver_updater.rb'
    - 'app/domains/responses/prettifier.rb'
    - 'app/domains/steps/approver_list_differ.rb'
    - 'app/domains/steps/creator.rb'
    - 'app/domains/steps/deleter.rb'
    - 'app/domains/steps/recipient_changer.rb'
    - 'app/domains/subjects/updater.rb'
    - 'app/domains/submissions/update_change_set.rb'
    - 'app/domains/users/campaign_access_backfiller.rb'
    - 'app/domains/users/groups_and_docs_transferer.rb'
    - 'app/domains/vals/bulk_create_change_set.rb'
    - 'app/graphql/resolvers/campaigns_awaiting_approval.rb'
    - 'app/graphql/resolvers/paginated_waiting_form_requests.rb'
    - 'app/jobs/auto_detect_finish_job.rb'
    - 'app/mailers/form_request_mailer.rb'
    - 'app/policies/campaign_policy.rb'
    - 'app/serializers/step_serializer.rb'
    - 'exe/baselines/runner.rb'
    - 'exe/disect'
    - 'lib/campaign_count_comparer.rb'
    - 'lib/change_set.rb'
    - 'lib/db_transition/user_recipient_search_content_backfiller.rb'
    - 'lib/serializable/root_serializer.rb'
    - 'linters/haml_lint/use_view_component.rb'
    - 'spec/domains/organizations/churner/call_spec.rb'
    - 'spec/features/_flows/campaign_wizard_flow.rb'
    - 'spec/features/_flows/doc_editor_flow.rb'
    - 'spec/features/_flows/form_filler_flow.rb'
    - 'spec/features/_flows/form_management_flow.rb'
    - 'spec/features/_flows/routing_flow.rb'
    - 'spec/features/_flows/user_flow.rb'
    - 'spec/features/_refresh_flows/form_manager_flow.rb'
    - 'spec/support/fake_services/google/service.rb'
    - 'spec/views/campaigns/settings/_index_spec.rb'

# Offense count: 2
# Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, IgnoredMethods, inherit_mode.
# IgnoredMethods: refine
Metrics/BlockLength:
  Exclude:
    - 'Guardfile'
    - 'app/graphql/types/decorated_campaign.rb'

# Offense count: 33
# Configuration parameters: CountComments, Max, CountAsOne.
Metrics/ClassLength:
  Exclude:
    - 'app/domains/recipients/bulk_approver_updater.rb'
    - 'app/controllers/admin/campaigns_controller.rb'
    - 'app/controllers/admin/steps_controller.rb'
    - 'app/controllers/application_controller.rb'
    - 'app/controllers/batch/batch_fields_controller.rb'
    - 'app/controllers/campaigns/form_access_groups_controller.rb'
    - 'app/controllers/docs_controller.rb'
    - 'app/controllers/form_requests_controller.rb'
    - 'app/controllers/responses_controller.rb'
    - 'app/controllers/wizards/campaign_wizard_controller.rb'
    - 'app/controllers/wizards/group_wizard_controller.rb'
    - 'app/controllers/wizards/routing_wizard_controller.rb'
    - 'app/domains/campaigns/churner.rb'
    - 'app/domains/form_requests/filterer.rb'
    - 'app/domains/form_requests/sorter.rb'
    - 'app/domains/form_requests/submit_change_set.rb'
    - 'app/domains/organizations/churner.rb'
    - 'app/domains/pages/copier.rb'
    - 'app/domains/responses/creator.rb'
    - 'app/domains/responses/prettifier.rb'
    - 'app/domains/subjects/updater.rb'
    - 'app/domains/users/seeder.rb'
    - 'app/mailers/form_request_mailer.rb'
    - 'app/models/campaign.rb'
    - 'app/models/doc.rb'
    - 'app/models/event.rb'
    - 'app/models/field.rb'
    - 'app/models/form.rb'
    - 'app/models/form_request.rb'
    - 'app/models/step.rb'
    - 'app/models/user.rb'
    - 'app/policies/campaign_policy.rb'
    - 'exe/baselines/runner.rb'
    - 'spec/support/matchers/change_record.rb'

# Offense count: 8
# Configuration parameters: IgnoredMethods, Max.
Metrics/CyclomaticComplexity:
  Exclude:
    - 'app/controllers/application_controller.rb'
    - 'app/controllers/responses_controller.rb'
    - 'app/domains/campaigns/transferer.rb'
    - 'app/domains/form_sets/submitter.rb'
    - 'app/domains/pages/fields_copier.rb'
    - 'app/serializers/step_serializer.rb'
    - 'lib/serializable/root_serializer.rb'

# Offense count: 379
# Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, IgnoredMethods.
Metrics/MethodLength:
  Exclude:
    - 'app/domains/recipients/bulk_approver_updater.rb'
    - 'app/components/common/button_component.rb'
    - 'app/controllers/admin/approver_lists/recipients_from_inputs_controller.rb'
    - 'app/controllers/admin/campaigns_controller.rb'
    - 'app/controllers/admin/docs_controller.rb'
    - 'app/controllers/admin/form_requests_controller.rb'
    - 'app/controllers/admin/internal_tags_controller.rb'
    - 'app/controllers/admin/organizations/approver_lists_controller.rb'
    - 'app/controllers/admin/organizations/approver_lists_recipients_controller.rb'
    - 'app/controllers/admin/organizations/campaigns_controller.rb'
    - 'app/controllers/admin/organizations/feedbacks_controller.rb'
    - 'app/controllers/admin/organizations_controller.rb'
    - 'app/controllers/admin/pages/field_copies_controller.rb'
    - 'app/controllers/admin/pages/image_copies_controller.rb'
    - 'app/controllers/admin/pages_controller.rb'
    - 'app/controllers/admin/pdfs_controller.rb'
    - 'app/controllers/admin/steps_controller.rb'
    - 'app/controllers/admin/users/approved_forms_controller.rb'
    - 'app/controllers/admin/users/approver_lists_recipients_controller.rb'
    - 'app/controllers/admin/users/emails_controller.rb'
    - 'app/controllers/admin/users/initiated_forms_controller.rb'
    - 'app/controllers/admin/users/owned_campaigns_controller.rb'
    - 'app/controllers/admin/users/recipients_steps_controller.rb'
    - 'app/controllers/admin/users/searches_controller.rb'
    - 'app/controllers/admin/users/shared_campaigns_controller.rb'
    - 'app/controllers/admin/users_controller.rb'
    - 'app/controllers/api/campaigns/feedbacks_controller.rb'
    - 'app/controllers/api/campaigns/steps_controller.rb'
    - 'app/controllers/api/campaigns_controller.rb'
    - 'app/controllers/api/form_deliveries_controller.rb'
    - 'app/controllers/api/form_sets/reminder_actions_controller.rb'
    - 'app/controllers/api/organizations/users_controller.rb'
    - 'app/controllers/api/steps/recipients_controller.rb'
    - 'app/controllers/application_controller.rb'
    - 'app/controllers/archived_campaigns_controller.rb'
    - 'app/controllers/batch/batch_fields_controller.rb'
    - 'app/controllers/campaigns/example_csv_uploads_controller.rb'
    - 'app/controllers/campaigns/form_access_groups_controller.rb'
    - 'app/controllers/campaigns/form_access_invite_csvs_controller.rb'
    - 'app/controllers/campaigns/form_access_invites_controller.rb'
    - 'app/controllers/campaigns/test_emails_controller.rb'
    - 'app/controllers/campaigns_controller.rb'
    - 'app/controllers/denials_controller.rb'
    - 'app/controllers/doc_pdfs_controller.rb'
    - 'app/controllers/docs/recipient_fields_controller.rb'
    - 'app/controllers/docs/tracker_fields_controller.rb'
    - 'app/controllers/docs_controller.rb'
    - 'app/controllers/draft_campaigns_controller.rb'
    - 'app/controllers/errors_controller.rb'
    - 'app/controllers/form_request_links_controller.rb'
    - 'app/controllers/form_requests_controller.rb'
    - 'app/controllers/forms_controller.rb'
    - 'app/controllers/google_sessions_controller.rb'
    - 'app/controllers/graphql_controller.rb'
    - 'app/controllers/groups/csv_uploads_controller.rb'
    - 'app/controllers/groups_controller.rb'
    - 'app/controllers/link_campaigns_controller.rb'
    - 'app/controllers/password_resets_controller.rb'
    - 'app/controllers/password_sessions_controller.rb'
    - 'app/controllers/rejections_controller.rb'
    - 'app/controllers/reminders_controller.rb'
    - 'app/controllers/responses_controller.rb'
    - 'app/controllers/routings_controller.rb'
    - 'app/controllers/searches_controller.rb'
    - 'app/controllers/starred_campaigns_controller.rb'
    - 'app/controllers/steps/approver_csv_uploads_controller.rb'
    - 'app/controllers/steps/example_csv_uploads_controller.rb'
    - 'app/controllers/steps/stray_recipients_controller.rb'
    - 'app/controllers/submissions_controller.rb'
    - 'app/controllers/test_files_controller.rb'
    - 'app/controllers/token_responses_controller.rb'
    - 'app/controllers/tracking_controller.rb'
    - 'app/controllers/users_controller.rb'
    - 'app/controllers/wizards/campaign_wizard_controller.rb'
    - 'app/controllers/wizards/group_wizard_controller.rb'
    - 'app/controllers/wizards/routing_wizard_controller.rb'
    - 'app/domains/approver_lists/approver_remover.rb'
    - 'app/domains/approver_lists/recipients_creator.rb'
    - 'app/domains/attachments/bulk_create_change_set.rb'
    - 'app/domains/campaigns/approved_access_group_remover.rb'
    - 'app/domains/campaigns/churner.rb'
    - 'app/domains/campaigns/copier.rb'
    - 'app/domains/campaigns/emailer.rb'
    - 'app/domains/campaigns/feedback_counts_refresher.rb'
    - 'app/domains/campaigns/group_publisher.rb'
    - 'app/domains/campaigns/group_submissions_creator.rb'
    - 'app/domains/campaigns/initiated_access_group_remover.rb'
    - 'app/domains/campaigns/invite_copier.rb'
    - 'app/domains/campaigns/link_submission_creator.rb'
    - 'app/domains/campaigns/question_and_answer_copier.rb'
    - 'app/domains/campaigns/recipient_copier.rb'
    - 'app/domains/campaigns/shared_copier.rb'
    - 'app/domains/campaigns/shared_user_finder.rb'
    - 'app/domains/campaigns/sharer.rb'
    - 'app/domains/campaigns/step_counts_refresher.rb'
    - 'app/domains/campaigns/steps_copier.rb'
    - 'app/domains/campaigns/transferer.rb'
    - 'app/domains/docs/builder.rb'
    - 'app/domains/docs/bulk_form_subsets_creator.rb'
    - 'app/domains/docs/copier.rb'
    - 'app/domains/docs/field_mover.rb'
    - 'app/domains/docs/pages_creator.rb'
    - 'app/domains/docs/reference_number_resetter.rb'
    - 'app/domains/docs/transferer.rb'
    - 'app/domains/event_logs/campaign_access_group_logger.rb'
    - 'app/domains/feedbacks/csv_generator.rb'
    - 'app/domains/fields/formula_fields/dependency_checker.rb'
    - 'app/domains/fields/formula_fields/field_val_map_generator.rb'
    - 'app/domains/form_access_groups/access_level_validator.rb'
    - 'app/domains/form_access_groups/archived_at_validator.rb'
    - 'app/domains/form_access_groups/bulk_invite_validator.rb'
    - 'app/domains/form_access_groups/bulk_inviter.rb'
    - 'app/domains/form_access_groups/create_change_set.rb'
    - 'app/domains/form_access_groups/creator.rb'
    - 'app/domains/form_access_groups/csv_parser.rb'
    - 'app/domains/form_requests/approver_email_sender.rb'
    - 'app/domains/form_requests/bulk_deleter.rb'
    - 'app/domains/form_requests/bulk_pdf_generator.rb'
    - 'app/domains/form_requests/bulk_router.rb'
    - 'app/domains/form_requests/custom_filename_generator.rb'
    - 'app/domains/form_requests/filterer.rb'
    - 'app/domains/form_requests/filters/hstore_date.rb'
    - 'app/domains/form_requests/filters/hstore_text.rb'
    - 'app/domains/form_requests/group_email_sender.rb'
    - 'app/domains/form_requests/pdf_generator.rb'
    - 'app/domains/form_requests/pdf_signature_generator.rb'
    - 'app/domains/form_requests/pdf_text_generator.rb'
    - 'app/domains/form_requests/pdf_with_attachments_generator.rb'
    - 'app/domains/form_requests/readonly_link_email_sender.rb'
    - 'app/domains/form_requests/rejection_undoer.rb'
    - 'app/domains/form_requests/rejector.rb'
    - 'app/domains/form_requests/restored_status_setter.rb'
    - 'app/domains/form_requests/route_change_set.rb'
    - 'app/domains/form_requests/router.rb'
    - 'app/domains/form_requests/routing/skip_to_strategy.rb'
    - 'app/domains/form_requests/sorter.rb'
    - 'app/domains/form_requests/submit_change_set.rb'
    - 'app/domains/form_requests/test_creator.rb'
    - 'app/domains/form_requests/update_change_set.rb'
    - 'app/domains/form_requests/validator.rb'
    - 'app/domains/form_sets/csv_generator.rb'
    - 'app/domains/form_sets/pdf_generator.rb'
    - 'app/domains/form_sets/reminder_sender.rb'
    - 'app/domains/form_sets/submitter.rb'
    - 'app/domains/form_sets/updater.rb'
    - 'app/domains/form_sets/zip_generator.rb'
    - 'app/domains/form_subsets/bulk_counts_updater.rb'
    - 'app/domains/forms/formula_checker.rb'
    - 'app/domains/forms/initiator_updater.rb'
    - 'app/domains/forms/metadata_generator.rb'
    - 'app/domains/forms/recipient_changer.rb'
    - 'app/domains/forms/routing_updater.rb'
    - 'app/domains/google/service_wrapper.rb'
    - 'app/domains/google/user_deactivator.rb'
    - 'app/domains/groups/csv_parser.rb'
    - 'app/domains/organizations/associations_validator.rb'
    - 'app/domains/organizations/churner.rb'
    - 'app/domains/organizations/domain_updater.rb'
    - 'app/domains/pages/copier.rb'
    - 'app/domains/pages/fields_copier.rb'
    - 'app/domains/pages/fields_detector.rb'
    - 'app/domains/pages/image_copier.rb'
    - 'app/domains/recipients/approver_adder.rb'
    - 'app/domains/recipients/approver_remover.rb'
    - 'app/domains/recipients/approver_updater.rb'
    - 'app/domains/recipients/bulk_form_requests_transferer.rb'
    - 'app/domains/responses/creator.rb'
    - 'app/domains/responses/params_validator.rb'
    - 'app/domains/responses/prettifier.rb'
    - 'app/domains/steps/approver_list_differ.rb'
    - 'app/domains/steps/creator.rb'
    - 'app/domains/steps/deleter.rb'
    - 'app/domains/steps/recipient_changer.rb'
    - 'app/domains/steps/recipient_csv_validator.rb'
    - 'app/domains/steps/submission_options_validator.rb'
    - 'app/domains/steps/updater.rb'
    - 'app/domains/subjects/updater.rb'
    - 'app/domains/submissions/saver.rb'
    - 'app/domains/submissions/update_change_set.rb'
    - 'app/domains/users/bulk_creator.rb'
    - 'app/domains/users/campaign_access_backfiller.rb'
    - 'app/domains/users/groups_and_docs_transferer.rb'
    - 'app/domains/users/seeder.rb'
    - 'app/domains/vals/bulk_create_change_set.rb'
    - 'app/domains/vals/validator.rb'
    - 'app/domains/vals/validator/all_required_vals_present.rb'
    - 'app/domains/vals/validator/no_nil_vals.rb'
    - 'app/domains/vals/validator/valid_time_formats.rb'
    - 'app/graphql/resolvers/campaigns_awaiting_approval.rb'
    - 'app/graphql/resolvers/paginated_waiting_form_requests.rb'
    - 'app/helpers/view_helper.rb'
    - 'app/jobs/auto_detect_finish_job.rb'
    - 'app/jobs/group_upload_job.rb'
    - 'app/mailers/campaign_access_mailer.rb'
    - 'app/mailers/form_request_mailer.rb'
    - 'app/models/attachment.rb'
    - 'app/models/campaign.rb'
    - 'app/models/concerns/searchable.rb'
    - 'app/models/concerns/trashable.rb'
    - 'app/models/concerns/unscopeable.rb'
    - 'app/models/form.rb'
    - 'app/models/group.rb'
    - 'app/models/steps/prior_approver_step.rb'
    - 'app/models/subject.rb'
    - 'app/models/user.rb'
    - 'app/policies/campaign_policy.rb'
    - 'app/serializers/campaign_serializer.rb'
    - 'app/serializers/step_serializer.rb'
    - 'db/functions/to_date_or_null.rb'
    - 'exe/baselines/runner.rb'
    - 'exe/disect'
    - 'lib/campaign_count_comparer.rb'
    - 'lib/change_set.rb'
    - 'lib/change_set/job_set.rb'
    - 'lib/db_transition/form_request_bulk_approval_eligibility_backfiller.rb'
    - 'lib/db_transition/user_recipient_search_content_backfiller.rb'
    - 'lib/doc_pages_count_comparer.rb'
    - 'lib/form_routing_checker.rb'
    - 'lib/ik12_progress_bar.rb'
    - 'lib/mailer_previews/campaign_access_mailer_preview.rb'
    - 'lib/mailer_previews/form_request_mailer_preview.rb'
    - 'lib/pdf_merger.rb'
    - 'lib/retryer.rb'
    - 'lib/serializable/locator.rb'
    - 'lib/serializable/root_serializer.rb'
    - 'lib/thread_pool.rb'
    - 'linters/haml_lint/use_view_component.rb'
    - 'spec/controllers/admin/organizations/approver_lists_approver_removals_controller/new_spec.rb'
    - 'spec/controllers/admin/organizations/approver_lists_recipients_controller/destroy_spec.rb'
    - 'spec/controllers/application_controller/set_back_path_spec.rb'
    - 'spec/controllers/google_sessions_controller/create_spec.rb'
    - 'spec/controllers/routings_controller/update_spec.rb'
    - 'spec/controllers/users/access_transfers_controller/create_spec.rb'
    - 'spec/domains/approver_lists/approver_remover/call_spec.rb'
    - 'spec/domains/campaigns/churner/call_spec.rb'
    - 'spec/domains/campaigns/counts_refresher/call_spec.rb'
    - 'spec/domains/organizations/churner/call_spec.rb'
    - 'spec/domains/pages/image_copier/call_spec.rb'
    - 'spec/domains/recipients/approver_updater/call_spec.rb'
    - 'spec/features/_flows/campaign_wizard_flow.rb'
    - 'spec/features/_flows/doc_editor_flow.rb'
    - 'spec/features/_flows/form_filler_flow.rb'
    - 'spec/features/_flows/global_flow.rb'
    - 'spec/features/_flows/routing_flow.rb'
    - 'spec/features/_flows/user_flow.rb'
    - 'spec/features/_refresh_flows/form_manager_flow.rb'
    - 'spec/features/admin/campaigns/event_logs_spec.rb'
    - 'spec/features/admin/organizations/approver_list_show_page_spec.rb'
    - 'spec/policies/form_policy/at_least_facilitate_predicate_spec.rb'
    - 'spec/support/fake_services/google/service.rb'
    - 'spec/support/helpers.rb'
    - 'spec/views/campaigns/settings/_index_spec.rb'
    - 'spec/views/docs/description_fields/reorder_spec.rb'

# Offense count: 6
# Configuration parameters: CountComments, Max, CountAsOne.
Metrics/ModuleLength:
  Exclude:
    - 'app/helpers/navigation_helper.rb'
    - 'lib/change_set.rb'
    - 'spec/features/_flows/doc_editor_flow.rb'
    - 'spec/features/_flows/form_filler_flow.rb'
    - 'spec/features/_flows/routing_flow.rb'
    - 'spec/features/_refresh_flows/form_manager_flow.rb'

# Offense count: 8
# Configuration parameters: Max, CountKeywordArgs, MaxOptionalParameters.
Metrics/ParameterLists:
  Exclude:
    - 'app/components/form_access_groups/sort_component.rb'
    - 'app/domains/campaigns/sharer.rb'
    - 'app/domains/form_requests/route_change_set.rb'
    - 'app/domains/form_requests/router.rb'
    - 'app/domains/form_requests/submit_change_set.rb'
    - 'app/mailers/form_request_mailer.rb'
    - 'spec/domains/campaigns/counts_refresher/call_spec.rb'
    - 'spec/features/_flows/doc_editor_flow.rb'

# Offense count: 6
# Configuration parameters: IgnoredMethods, Max.
Metrics/PerceivedComplexity:
  Exclude:
    - 'app/controllers/admin/steps_controller.rb'
    - 'app/controllers/application_controller.rb'
    - 'app/controllers/responses_controller.rb'
    - 'app/domains/campaigns/transferer.rb'
    - 'lib/serializable/root_serializer.rb'

# Offense count: 5
# Configuration parameters: CheckIdentifiers, CheckConstants, CheckVariables, CheckStrings, CheckSymbols, CheckComments, CheckFilepaths, FlaggedTerms.
Naming/InclusiveLanguage:
  Exclude:
    - 'app/uploaders/attachment_uploader.rb'
    - 'app/uploaders/csv_uploader.rb'
    - 'app/uploaders/file_to_pdf_uploader.rb'
    - 'app/uploaders/large_file_uploader.rb'

# Offense count: 11
Performance/MethodObjectAsBlock:
  Exclude:
    - 'app/decorators/form_request_decorator.rb'
    - 'app/domains/forms/metadata_generator.rb'
    - 'app/graphql/resolvers/paginated_waiting_form_requests.rb'
    - 'app/models/campaign.rb'
    - 'lib/pdf_merger.rb'
    - 'lib/query_wrapper/collection.rb'
    - 'lib/query_wrapper/record.rb'
    - 'lib/serializable/collection_serializer.rb'
    - 'lib/serializable/hash_serializer.rb'
    - 'spec/lib/change_set/job/perform_spec.rb'

# Offense count: 89
Performance/OpenStruct:
  Exclude:
    - 'app/controllers/wizards/group_wizard_controller.rb'
    - 'app/domains/campaigns/sharer.rb'
    - 'app/domains/campaigns/transferer.rb'
    - 'app/domains/docs/bulk_form_subsets_creator.rb'
    - 'app/domains/docs/updater.rb'
    - 'app/domains/fields/formula_fields/dependency_checker.rb'
    - 'app/domains/fields/formula_fields/field_val_map_generator.rb'
    - 'app/domains/form_access_groups/bulk_invite_validator.rb'
    - 'app/domains/form_requests/filters/hstore_column_validator.rb'
    - 'app/domains/forms/routing_updater.rb'
    - 'app/domains/groups/updater.rb'
    - 'app/domains/responses/creator.rb'
    - 'app/domains/steps/recipient_changer.rb'
    - 'app/domains/users/bulk_creator.rb'
    - 'app/domains/users/email_sanitizer.rb'
    - 'app/domains/vals/validator.rb'
    - 'app/domains/vals/validator/all_required_vals_present.rb'
    - 'app/domains/vals/validator/no_nil_vals.rb'
    - 'app/domains/vals/validator/permitted_vals_only.rb'
    - 'app/domains/vals/validator/valid_time_formats.rb'
    - 'app/graphql/resolvers/campaigns_awaiting_approval.rb'
    - 'app/graphql/resolvers/paginated_waiting_form_requests.rb'
    - 'spec/controllers/admin/docs_controller/update_spec.rb'
    - 'spec/controllers/admin/groups_controller/update_spec.rb'
    - 'spec/controllers/admin/users_controller/create_spec.rb'
    - 'spec/controllers/forms_controller/update_spec.rb'
    - 'spec/controllers/responses_controller/create_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_click_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_hard_bounce_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_open_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_reject_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_send_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_soft_bounce_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_spam_spec.rb'
    - 'spec/domains/campaigns/churner/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_checkbox/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_column_validator/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_text/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_text_exact/call_spec.rb'
    - 'spec/domains/forms/formula_checker/call_spec.rb'
    - 'spec/graphql/resolvers/campaigns_awaiting_approval/call_spec.rb'
    - 'spec/graphql/resolvers/create_bulk_approval_form_set/call_spec.rb'
    - 'spec/graphql/resolvers/paginated_waiting_form_requests/call_spec.rb'
    - 'spec/lib/change_set/job_set/add_spec.rb'
    - 'spec/lib/change_set/job_set/merge_spec.rb'
    - 'spec/lib/change_set/save!_spec.rb'
    - 'spec/lib/change_set/save_spec.rb'
    - 'spec/models/concerns/searchable/class_methods/search_spec.rb'
    - 'spec/models/concerns/searchable/instance_methods/update_search_content_spec.rb'
    - 'spec/models/form_subset/contains_predicate_spec.rb'
    - 'spec/models/job_result/validations_spec.rb'
    - 'spec/views/docs/_attachment_uploader_spec.rb'

# Offense count: 4
Performance/SelectMap:
  Exclude:
    - 'app/controllers/campaigns/form_access_invites_controller.rb'
    - 'app/domains/form_sets/submitter.rb'
    - 'app/domains/forms/formula_fields_finder.rb'
    - 'spec/support/helpers.rb'

# Offense count: 145
RSpec/AnyInstance:
  Exclude:
    - 'spec/controllers/admin/docs_controller/update_spec.rb'
    - 'spec/controllers/admin/groups_controller/update_spec.rb'
    - 'spec/controllers/admin/steps_controller/create_spec.rb'
    - 'spec/controllers/admin/users_controller/update_spec.rb'
    - 'spec/controllers/api/campaigns_controller/update_spec.rb'
    - 'spec/controllers/api/steps/recipients_controller/destroy_spec.rb'
    - 'spec/controllers/application_controller/check_user_profile_spec.rb'
    - 'spec/controllers/application_controller/user_not_authorized_spec.rb'
    - 'spec/controllers/attachments_controller/create_spec.rb'
    - 'spec/controllers/auto_detect_fields_controller/create_spec.rb'
    - 'spec/controllers/denials_controller/create_spec.rb'
    - 'spec/controllers/docs_controller/create_spec.rb'
    - 'spec/controllers/docs_controller/status_spec.rb'
    - 'spec/controllers/docs_controller/update_spec.rb'
    - 'spec/controllers/fields_controller/index_spec.rb'
    - 'spec/controllers/form_requests_controller/create_spec.rb'
    - 'spec/controllers/form_requests_controller/new_spec.rb'
    - 'spec/controllers/form_requests_controller/reopen_spec.rb'
    - 'spec/controllers/form_requests_controller/show_spec.rb'
    - 'spec/controllers/form_requests_controller/update_spec.rb'
    - 'spec/controllers/forms_controller/update_spec.rb'
    - 'spec/controllers/groups_controller/status_spec.rb'
    - 'spec/controllers/password_resets_controller/update_spec.rb'
    - 'spec/controllers/rejections_controller/create_spec.rb'
    - 'spec/controllers/reopen_requests_controller/create_spec.rb'
    - 'spec/controllers/responses_controller/create_spec.rb'
    - 'spec/controllers/tracking_controller/fillable_user_create_spec.rb'
    - 'spec/controllers/users_controller/create_spec.rb'
    - 'spec/controllers/wizards/campaign_wizard_controller/link_preview_spec.rb'
    - 'spec/controllers/wizards/campaign_wizard_controller/show_spec.rb'
    - 'spec/controllers/wizards/campaign_wizard_controller/upload_doc_spec.rb'
    - 'spec/controllers/wizards/group_wizard_controller/email_campaign_spec.rb'
    - 'spec/controllers/wizards/group_wizard_controller/send_emails_or_test_spec.rb'
    - 'spec/controllers/wizards/group_wizard_controller/upload_csv_spec.rb'
    - 'spec/controllers/wizards/group_wizard_controller/upload_manual_spec.rb'
    - 'spec/controllers/wizards/routing_wizard_controller/link_preview_spec.rb'
    - 'spec/domains/docs/pages_creator/call_spec.rb'
    - 'spec/domains/docs/updater/call_spec.rb'
    - 'spec/domains/form_requests/approver_email_sender/call_spec.rb'
    - 'spec/domains/form_requests/filterer/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_checkbox/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_date/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_text/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_text_exact/call_spec.rb'
    - 'spec/domains/form_requests/pdf_signature_generator/call_spec.rb'
    - 'spec/domains/form_requests/pdf_with_attachments_generator/call_spec.rb'
    - 'spec/domains/form_sets/reminder_sender/call_spec.rb'
    - 'spec/domains/google/user_deactivator/call_spec.rb'
    - 'spec/domains/organizations/churner/call_spec.rb'
    - 'spec/domains/pages/fields_detector/call_spec.rb'
    - 'spec/domains/responses/prettifier/call_spec.rb'
    - 'spec/domains/steps/deleter/call_spec.rb'
    - 'spec/domains/subjects/updater/call_spec.rb'
    - 'spec/features/doc_setup/auto_detect_fields_spec.rb'
    - 'spec/features/form_filler/save_signature_spec.rb'
    - 'spec/features/refresh/destroy_recipient_spec.rb'
    - 'spec/features/refresh/route_editor_spec.rb'
    - 'spec/jobs/group_upload_job/perform_spec.rb'
    - 'spec/lib/change_set/initialize_spec.rb'
    - 'spec/lib/change_set/merge_spec.rb'
    - 'spec/lib/database_function_adder/call_spec.rb'
    - 'spec/lib/db_transition/user_recipient_search_content_backfiller/call_spec.rb'
    - 'spec/lib/pdf_merger/call_spec.rb'
    - 'spec/lib/tasks/campaign_count_comparer/call_spec.rb'
    - 'spec/models/field/spaceship_operator_spec.rb'
    - 'spec/models/group/to_csv_spec.rb'
    - 'spec/models/step/validations_spec.rb'
    - 'spec/models/util/database_lock/class_methods/call_spec.rb'
    - 'spec/policies/form_request_policy/reopen_predicate_spec.rb'
    - 'spec/rails_helper.rb'
    - 'spec/serializers/filler_field_serializer/as_json_spec.rb'
    - 'spec/views/admin/users/approved_forms/_list_spec.rb'
    - 'spec/views/admin/users/initiated_forms/_list_spec.rb'
    - 'spec/views/docs/index_spec.rb'
    - 'spec/views/form_requests/_search_results_spec.rb'
    - 'spec/views/layouts/admin_spec.rb'
    - 'spec/views/organizations/_campaign_tile_spec.rb'
    - 'spec/views/responses/toolbars/components/_notes_spec.rb'
    - 'spec/wizards/group_wizard/submit_manual_spec.rb'

# Offense count: 119
RSpec/ExpectInHook:
  Exclude:
    - 'spec/controllers/admin/steps_controller/copy_recipients_spec.rb'
    - 'spec/controllers/admin/tracked_links_controller/create_spec.rb'
    - 'spec/controllers/api/steps/recipients_controller/destroy_spec.rb'
    - 'spec/controllers/attachments_controller/create_spec.rb'
    - 'spec/controllers/docs/recipient_fields_controller/create_spec.rb'
    - 'spec/controllers/docs/tracker_fields_controller/create_spec.rb'
    - 'spec/controllers/docs_controller/create_spec.rb'
    - 'spec/controllers/responses_controller/create_spec.rb'
    - 'spec/controllers/wizards/campaign_wizard_controller/show_spec.rb'
    - 'spec/controllers/wizards/group_wizard_controller/show_spec.rb'
    - 'spec/controllers/wizards/group_wizard_controller/upload_csv_spec.rb'
    - 'spec/controllers/wizards/group_wizard_controller/upload_manual_spec.rb'
    - 'spec/controllers/wizards/routing_wizard_controller/show_spec.rb'
    - 'spec/domains/form_requests/sorter/call_spec.rb'
    - 'spec/features/campaign_setup/campaign_wizard_spec.rb'
    - 'spec/features/campaign_setup/draft_campaign_wizard_spec.rb'
    - 'spec/features/campaign_setup/group_wizard_spec.rb'
    - 'spec/features/campaign_setup/subjects_edit_spec.rb'
    - 'spec/features/complete_routing_spec.rb'
    - 'spec/features/doc_setup/replace_pages_spec.rb'
    - 'spec/features/form_filler/attachments_spec.rb'
    - 'spec/features/form_filler/download_spec.rb'
    - 'spec/features/form_filler/form_filler_spec.rb'
    - 'spec/features/form_filler/validations_spec.rb'
    - 'spec/features/form_management/form_denial_spec.rb'
    - 'spec/features/formula_field_spec.rb'
    - 'spec/features/link_campaign_spec.rb'
    - 'spec/features/refresh/responses_spec.rb'
    - 'spec/features/routing_wizard_spec.rb'
    - 'spec/features/sequential_group_spec.rb'
    - 'spec/helpers/feature_helper/feature_spec.rb'
    - 'spec/policies/form_request_policy/reopen_predicate_spec.rb'
    - 'spec/views/docs/_doc_choose_spec.rb'

# Offense count: 5
# Configuration parameters: AssignmentOnly.
RSpec/InstanceVariable:
  Exclude:
    - 'spec/features/complete_routing_spec.rb'
    - 'spec/features/routing_wizard_spec.rb'

# Offense count: 133
RSpec/LetSetup:
  Exclude:
    - 'spec/controllers/admin/searches_controller/index_spec.rb'
    - 'spec/controllers/api/form_sets/reports_controller/new_spec.rb'
    - 'spec/controllers/api/steps/recipients_controller/update_spec.rb'
    - 'spec/controllers/campaigns_controller/index_spec.rb'
    - 'spec/controllers/docs_controller/preview_spec.rb'
    - 'spec/controllers/organizations_controller/directory_spec.rb'
    - 'spec/controllers/responses_controller/create_spec.rb'
    - 'spec/controllers/responses_controller/index_spec.rb'
    - 'spec/controllers/wizards/routing_wizard_controller/edit_doc_spec.rb'
    - 'spec/decorators/form_decorator/deny_message_spec.rb'
    - 'spec/decorators/form_request_decorator/fields_spec.rb'
    - 'spec/domains/form_requests/bulk_finder/form_responses_spec.rb'
    - 'spec/domains/form_requests/filterer/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_date/call_spec.rb'
    - 'spec/domains/form_requests/pdf_generator/call_spec.rb'
    - 'spec/domains/form_requests/pdf_with_attachments_generator/call_spec.rb'
    - 'spec/domains/form_requests/sorter/call_spec.rb'
    - 'spec/domains/form_sets/csv_generator/call_spec.rb'
    - 'spec/domains/form_sets/pdf_generator/call_spec.rb'
    - 'spec/domains/form_sets/reminder_sender/call_spec.rb'
    - 'spec/domains/forms/formula_checker/call_spec.rb'
    - 'spec/domains/forms/formula_fields_finder/call_spec.rb'
    - 'spec/domains/groups/csv_generator/call_spec.rb'
    - 'spec/domains/users/bulk_creator/call_spec.rb'
    - 'spec/features/form_filler/copy_forms_spec.rb'
    - 'spec/features/form_filler/readonly_spec.rb'
    - 'spec/features/form_filler/save_signature_spec.rb'
    - 'spec/features/form_filler/skippable_steps_spec.rb'
    - 'spec/features/form_filler/special_approver_spec.rb'
    - 'spec/features/form_management/archived_form_spec.rb'
    - 'spec/features/refresh/destroy_recipient_spec.rb'
    - 'spec/features/refresh/global_search_spec.rb'
    - 'spec/features/refresh/inbox_spec.rb'
    - 'spec/features/refresh/people_console_spec.rb'
    - 'spec/features/refresh/responses/filtering_and_search_spec.rb'
    - 'spec/features/refresh/responses_spec.rb'
    - 'spec/features/refresh/route_editor_spec.rb'
    - 'spec/jobs/tracked_link_campaign_response_creator_job/perform_spec.rb'
    - 'spec/lib/unused_field_remover/call_spec.rb'
    - 'spec/models/campaign/class_methods/archived_owned_and_related_spec.rb'
    - 'spec/models/field/class_methods/latest_by_version_in_report_order_spec.rb'
    - 'spec/models/form/initial_request_spec.rb'
    - 'spec/models/form/signatures_spec.rb'
    - 'spec/models/form/vals_spec.rb'
    - 'spec/models/form_access_groups/approved_access_group/current_form_requests_spec.rb'
    - 'spec/models/form_access_groups/initiated_access_group/current_form_requests_spec.rb'
    - 'spec/models/form_request/class_methods/before_seq_spec.rb'
    - 'spec/models/form_request/class_methods/not_completed_spec.rb'
    - 'spec/models/form_request/class_methods/with_recipient_email_spec.rb'
    - 'spec/models/form_request/reopen_bang_spec.rb'
    - 'spec/models/form_sets/filtered_form_set/current_form_requests_spec.rb'
    - 'spec/models/form_sets/filtered_form_set/form_ids_spec.rb'
    - 'spec/models/form_sets/filtered_form_set/forms_spec.rb'
    - 'spec/models/form_sets/full_form_set/current_form_requests_spec.rb'
    - 'spec/models/form_sets/selected_form_set/current_form_requests_spec.rb'
    - 'spec/models/form_sets/selected_form_set/forms_spec.rb'
    - 'spec/policies/form_request_policy/view_predicate_spec.rb'
    - 'spec/serializers/form_response_serializer/as_json_spec.rb'
    - 'spec/views/admin/pages/_list_spec.rb'
    - 'spec/views/admin/users/approved_forms/_list_spec.rb'
    - 'spec/views/admin/users/approved_forms/index_spec.rb'
    - 'spec/views/admin/users/initiated_forms/index_spec.rb'
    - 'spec/views/docs/show_spec.rb'
    - 'spec/views/responses/toolbars/components/_notes_spec.rb'

# Offense count: 237
# Configuration parameters: EnforcedStyle.
# SupportedStyles: have_received, receive
RSpec/MessageSpies:
  Exclude:
    - 'spec/controllers/admin/steps_controller/copy_recipients_spec.rb'
    - 'spec/controllers/admin/steps_controller/update_spec.rb'
    - 'spec/controllers/admin/tracked_links_controller/create_spec.rb'
    - 'spec/controllers/api/campaigns/steps_controller/index_spec.rb'
    - 'spec/controllers/api/campaigns/steps_controller/update_spec.rb'
    - 'spec/controllers/api/form_deliveries_controller/create_spec.rb'
    - 'spec/controllers/api/organizations/users_controller/create_spec.rb'
    - 'spec/controllers/api/organizations/users_controller/send_invited_user_welcome_spec.rb'
    - 'spec/controllers/api/organizations/users_controller/send_password_reset_spec.rb'
    - 'spec/controllers/batch/batch_fields_controller/create_spec.rb'
    - 'spec/controllers/docs/recipient_fields_controller/create_spec.rb'
    - 'spec/controllers/docs/tracker_fields_controller/create_spec.rb'
    - 'spec/controllers/docs_controller/show_spec.rb'
    - 'spec/controllers/docs_controller/update_spec.rb'
    - 'spec/controllers/google_sessions_controller/create_spec.rb'
    - 'spec/controllers/password_sessions_controller/create_spec.rb'
    - 'spec/controllers/responses_controller/create_spec.rb'
    - 'spec/controllers/responses_controller/create_success_spec.rb'
    - 'spec/controllers/responses_controller/index_spec.rb'
    - 'spec/controllers/routings_controller/update_spec.rb'
    - 'spec/controllers/sessions_controller/destroy_spec.rb'
    - 'spec/controllers/test_files_controller/show_spec.rb'
    - 'spec/controllers/users_controller/create_spec.rb'
    - 'spec/controllers/users_controller/verify_email_spec.rb'
    - 'spec/controllers/wizards/campaign_wizard_controller/update_spec.rb'
    - 'spec/controllers/wizards/group_wizard_controller/show_spec.rb'
    - 'spec/controllers/wizards/routing_wizard_controller/show_spec.rb'
    - 'spec/decorators/field_decorator/full_style_spec.rb'
    - 'spec/domains/attachments/create_change_set/trigger_callbacks_spec.rb'
    - 'spec/domains/attachments/update_change_set/pdf_writer_spec.rb'
    - 'spec/domains/campaigns/emailer/send_reminder_emails_spec.rb'
    - 'spec/domains/campaigns/group_submissions_creator/call_spec.rb'
    - 'spec/domains/campaigns/relations_copier/call_spec.rb'
    - 'spec/domains/campaigns/step_counts_refresher/call_spec.rb'
    - 'spec/domains/campaigns/tracked_link_creator/call_spec.rb'
    - 'spec/domains/docs/bulk_form_subsets_creator/call_spec.rb'
    - 'spec/domains/docs/copier/call_spec.rb'
    - 'spec/domains/docs/field_detector/call_spec.rb'
    - 'spec/domains/docs/updater/call_spec.rb'
    - 'spec/domains/form_requests/approver_email_sender/call_spec.rb'
    - 'spec/domains/form_requests/custom_filename_generator/call_spec.rb'
    - 'spec/domains/form_requests/pdf_generator/call_spec.rb'
    - 'spec/domains/form_requests/pdf_generator/class_methods/call_spec.rb'
    - 'spec/domains/form_requests/pdf_with_attachments_generator/call_spec.rb'
    - 'spec/domains/form_requests/response_notifier/call_spec.rb'
    - 'spec/domains/form_requests/restored_status_setter/call_spec.rb'
    - 'spec/domains/form_requests/router/call_spec.rb'
    - 'spec/domains/form_requests/sorter/call_spec.rb'
    - 'spec/domains/form_requests/update_change_set/status_writer_spec.rb'
    - 'spec/domains/form_sets/pdf_generator/call_spec.rb'
    - 'spec/domains/form_sets/reminder_sender/call_spec.rb'
    - 'spec/domains/forms/bulk_cached_data_generator/initialize_spec.rb'
    - 'spec/domains/forms/bulk_field_val_map_generator/initialize_spec.rb'
    - 'spec/domains/forms/bulk_formula_checker/call_spec.rb'
    - 'spec/domains/forms/bulk_formula_checker/class_methods/save_spec.rb'
    - 'spec/domains/forms/bulk_metadata_generator/initialize_spec.rb'
    - 'spec/domains/forms/initiator_updater/call_spec.rb'
    - 'spec/domains/forms/recipient_changer/call_spec.rb'
    - 'spec/domains/forms/update_change_set/field_val_map_writer_spec.rb'
    - 'spec/domains/forms/update_change_set/status_writer_spec.rb'
    - 'spec/domains/google/auth_wrapper/authorize_bang_spec.rb'
    - 'spec/domains/groups/builder/call_spec.rb'
    - 'spec/domains/pages/fields_detector/call_spec.rb'
    - 'spec/domains/recipients/form_requests_transferer/call_spec.rb'
    - 'spec/domains/responses/prettifier/call_spec.rb'
    - 'spec/domains/steps/creator/call_spec.rb'
    - 'spec/domains/steps/deleter/call_spec.rb'
    - 'spec/domains/steps/updater/call_spec.rb'
    - 'spec/domains/users/groups_and_docs_transferer/call_spec.rb'
    - 'spec/domains/users/password_reset/submit_spec.rb'
    - 'spec/domains/vals/validator/call_spec.rb'
    - 'spec/helpers/campaigns_helper/starred_predicate_spec.rb'
    - 'spec/helpers/feature_helper/feature_spec.rb'
    - 'spec/jobs/form_request_pdf_job/perform_spec.rb'
    - 'spec/jobs/group_upload_job/perform_spec.rb'
    - 'spec/lib/change_set/save_spec.rb'
    - 'spec/models/campaign/disable_generation_predicate_spec.rb'
    - 'spec/models/campaign/type_spec.rb'
    - 'spec/models/field/spaceship_operator_spec.rb'
    - 'spec/models/form/completion_state_spec.rb'
    - 'spec/models/form_subset/disable_generation_predicate_spec.rb'
    - 'spec/models/group/to_csv_spec.rb'
    - 'spec/models/step/bulk_approval_eligible_predicate_spec.rb'
    - 'spec/policies/form_policy/permitted_attributes_spec.rb'
    - 'spec/views/campaigns/_legacy_header_spec.rb'
    - 'spec/views/campaigns/form_access_groups/table_spec.rb'
    - 'spec/views/docs/_doc_choose_spec.rb'
    - 'spec/views/docs/_doc_hidden_fields_spec.rb'
    - 'spec/views/form_filler/_basic_submit_button_spec.rb'
    - 'spec/views/form_filler/_dropdown_submit_button_spec.rb'
    - 'spec/views/form_filler/_submit_button_spec.rb'
    - 'spec/views/responses/_download_spec.rb'
    - 'spec/views/responses/toolbars/_campaign_inactive_spec.rb'
    - 'spec/views/responses/toolbars/_initiated_spec.rb'
    - 'spec/views/responses/toolbars/_readonly_spec.rb'
    - 'spec/wizards/group_wizard/submit_manual_spec.rb'

# Offense count: 579
# Configuration parameters: AllowSubject, Max.
RSpec/MultipleMemoizedHelpers:
  Exclude:
    - 'spec/_shared_examples/freshest_for.rb'
    - 'spec/controllers/admin/searches_controller/index_spec.rb'
    - 'spec/controllers/admin/users/approved_forms_controller/index_spec.rb'
    - 'spec/controllers/admin/users/recipients_steps_controller/index_spec.rb'
    - 'spec/controllers/api/campaigns/steps_controller/index_spec.rb'
    - 'spec/controllers/api/form_deliveries_controller/create_spec.rb'
    - 'spec/controllers/api/form_sets/reports_controller/create_spec.rb'
    - 'spec/controllers/api/form_sets/reports_controller/new_spec.rb'
    - 'spec/controllers/api/form_sets_controller/update_spec.rb'
    - 'spec/controllers/api/organizations/campaigns_controller/index_spec.rb'
    - 'spec/controllers/api/steps/recipients_controller/destroy_spec.rb'
    - 'spec/controllers/api/steps/recipients_controller/update_spec.rb'
    - 'spec/controllers/archived_campaigns_controller/index_spec.rb'
    - 'spec/controllers/batch/batch_fields_controller/create_spec.rb'
    - 'spec/controllers/batch/batch_fields_controller/update_spec.rb'
    - 'spec/controllers/campaigns_controller/index_spec.rb'
    - 'spec/controllers/campaigns_controller/show_spec.rb'
    - 'spec/controllers/denials_controller/create_spec.rb'
    - 'spec/controllers/docs_controller/show_spec.rb'
    - 'spec/controllers/fields_controller/index_spec.rb'
    - 'spec/controllers/form_request_links_controller/create_spec.rb'
    - 'spec/controllers/form_requests_controller/create_spec.rb'
    - 'spec/controllers/form_requests_controller/new_spec.rb'
    - 'spec/controllers/form_requests_controller/reopen_spec.rb'
    - 'spec/controllers/form_requests_controller/show_spec.rb'
    - 'spec/controllers/form_requests_controller/update_spec.rb'
    - 'spec/controllers/link_campaigns_controller/show_spec.rb'
    - 'spec/controllers/organizations_controller/directory_spec.rb'
    - 'spec/controllers/rejections_controller/create_spec.rb'
    - 'spec/controllers/reminders_controller/create_spec.rb'
    - 'spec/controllers/responses_controller/create_spec.rb'
    - 'spec/controllers/responses_controller/edit_spec.rb'
    - 'spec/controllers/responses_controller/index_spec.rb'
    - 'spec/controllers/responses_controller/show_spec.rb'
    - 'spec/controllers/routings_controller/update_spec.rb'
    - 'spec/controllers/searches_controller/index_spec.rb'
    - 'spec/controllers/subjects_controller/create_spec.rb'
    - 'spec/controllers/subjects_controller/update_spec.rb'
    - 'spec/controllers/token_responses_controller/show_spec.rb'
    - 'spec/controllers/tracking_controller/fillable_user_create_spec.rb'
    - 'spec/controllers/wizards/group_wizard_controller/email_campaign_spec.rb'
    - 'spec/controllers/wizards/group_wizard_controller/send_emails_or_test_spec.rb'
    - 'spec/controllers/wizards/routing_wizard_controller/update_recipients_spec.rb'
    - 'spec/decorators/form_decorator/last_status_changer_spec.rb'
    - 'spec/decorators/form_request_decorator/all_completed_fields_spec.rb'
    - 'spec/decorators/form_request_decorator/fields_spec.rb'
    - 'spec/domains/attachments/bulk_create_change_set/save_spec.rb'
    - 'spec/domains/campaigns/builder/call_spec.rb'
    - 'spec/domains/campaigns/emailer/send_reminder_emails_spec.rb'
    - 'spec/domains/campaigns/group_submissions_creator/call_spec.rb'
    - 'spec/domains/campaigns/invite_copier/call_spec.rb'
    - 'spec/domains/campaigns/step_counts_refresher/call_spec.rb'
    - 'spec/domains/campaigns/steps_copier/call_spec.rb'
    - 'spec/domains/docs/copier/call_spec.rb'
    - 'spec/domains/docs/field_mover/move_bulk_spec.rb'
    - 'spec/domains/docs/field_mover/move_single_spec.rb'
    - 'spec/domains/docs/field_mover/swap_fields_spec.rb'
    - 'spec/domains/features/domain_enabler/call_spec.rb'
    - 'spec/domains/fields/formula_fields/dependency_checker/call_spec.rb'
    - 'spec/domains/form_requests/approver_email_sender/call_spec.rb'
    - 'spec/domains/form_requests/bulk_deleter/call_spec.rb'
    - 'spec/domains/form_requests/bulk_finder/form_responses_spec.rb'
    - 'spec/domains/form_requests/bulk_router/call_spec.rb'
    - 'spec/domains/form_requests/filterer/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_checkbox/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_date/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_text/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_text_exact/call_spec.rb'
    - 'spec/domains/form_requests/pdf_generator/call_spec.rb'
    - 'spec/domains/form_requests/readonly_link_email_sender/call_spec.rb'
    - 'spec/domains/form_requests/rejection_undoer/call_spec.rb'
    - 'spec/domains/form_requests/rejector/call_spec.rb'
    - 'spec/domains/form_requests/route_change_set/after_save_spec.rb'
    - 'spec/domains/form_requests/route_change_set/initialize_spec.rb'
    - 'spec/domains/form_requests/route_change_set/save_spec.rb'
    - 'spec/domains/form_requests/router/call_spec.rb'
    - 'spec/domains/form_requests/sorter/call_spec.rb'
    - 'spec/domains/form_requests/test_creator/call_spec.rb'
    - 'spec/domains/form_requests/update_change_set/before_save_spec.rb'
    - 'spec/domains/form_sets/csv_generator/call_spec.rb'
    - 'spec/domains/form_sets/pdf_generator/call_spec.rb'
    - 'spec/domains/form_sets/reminder_sender/call_spec.rb'
    - 'spec/domains/form_sets/submitter/call_spec.rb'
    - 'spec/domains/form_sets/updater/call_spec.rb'
    - 'spec/domains/form_sets/zip_generator/call_spec.rb'
    - 'spec/domains/forms/field_val_map_generator/call_spec.rb'
    - 'spec/domains/forms/formula_checker/call_spec.rb'
    - 'spec/domains/forms/formula_fields_finder/call_spec.rb'
    - 'spec/domains/forms/initiator_updater/call_spec.rb'
    - 'spec/domains/forms/metadata_generator/call_spec.rb'
    - 'spec/domains/forms/recipient_changer/call_spec.rb'
    - 'spec/domains/groups/transferer/call_spec.rb'
    - 'spec/domains/organizations/campaigns_finder/call_spec.rb'
    - 'spec/domains/recipients/form_requests_transferer/call_spec.rb'
    - 'spec/domains/responses/prettifier/call_spec.rb'
    - 'spec/domains/steps/creator/call_spec.rb'
    - 'spec/domains/steps/deleter/call_spec.rb'
    - 'spec/domains/subjects/updater/call_spec.rb'
    - 'spec/domains/submissions/saver/call_spec.rb'
    - 'spec/domains/users/bulk_creator/call_spec.rb'
    - 'spec/domains/vals/reference_number_create_change_set/initialize_spec.rb'
    - 'spec/domains/vals/validator/call_spec.rb'
    - 'spec/features/access/campaign_access_table_spec.rb'
    - 'spec/features/campaign_setup/campaign_wizard_spec.rb'
    - 'spec/features/form_filler/blindfold_initiator_spec.rb'
    - 'spec/features/form_filler/copy_forms_spec.rb'
    - 'spec/features/form_filler/save_signature_spec.rb'
    - 'spec/features/form_filler/skippable_steps_spec.rb'
    - 'spec/features/form_filler/special_approver_spec.rb'
    - 'spec/features/form_management/archived_form_spec.rb'
    - 'spec/features/form_management/form_manager_spec.rb'
    - 'spec/features/refresh/campaigns_spec.rb'
    - 'spec/features/refresh/destroy_recipient_spec.rb'
    - 'spec/features/refresh/global_search_spec.rb'
    - 'spec/features/refresh/inbox_spec.rb'
    - 'spec/features/refresh/people_console_spec.rb'
    - 'spec/features/refresh/responses/change_recipients_spec.rb'
    - 'spec/features/refresh/responses/filtering_and_search_spec.rb'
    - 'spec/features/refresh/responses_spec.rb'
    - 'spec/features/refresh/route_editor_spec.rb'
    - 'spec/features/routing_wizard_spec.rb'
    - 'spec/graphql/resolvers/campaigns_awaiting_approval/call_spec.rb'
    - 'spec/graphql/resolvers/correction_requested_form_requests/call_spec.rb'
    - 'spec/graphql/resolvers/paginated_waiting_form_requests/call_spec.rb'
    - 'spec/jobs/auto_detect_finish_job/perform_spec.rb'
    - 'spec/jobs/form_request_pdf_job/perform_spec.rb'
    - 'spec/jobs/form_set_file_job/perform_spec.rb'
    - 'spec/jobs/group_upload_job/perform_spec.rb'
    - 'spec/jobs/tracked_link_campaign_response_creator_job/perform_spec.rb'
    - 'spec/lib/pdf_merger/call_spec.rb'
    - 'spec/mailers/form_request_mailer/form_approver_message_spec.rb'
    - 'spec/mailers/form_request_mailer/form_ready_message_spec.rb'
    - 'spec/mailers/form_request_mailer/step_completed_message_spec.rb'
    - 'spec/models/campaign/class_methods/archived_owned_and_related_spec.rb'
    - 'spec/models/campaign/current_form_requests_spec.rb'
    - 'spec/models/campaign/form_request_for_spec.rb'
    - 'spec/models/concerns/orderable/class_methods/order_by_list_spec.rb'
    - 'spec/models/event/class_methods/active_for_seq_spec.rb'
    - 'spec/models/field/class_methods/latest_by_version_in_report_order_spec.rb'
    - 'spec/models/field/tab_order_spec.rb'
    - 'spec/models/form/signatures_spec.rb'
    - 'spec/models/form/subset_field_value_spec.rb'
    - 'spec/models/form/vals_spec.rb'
    - 'spec/models/form_access_groups/approved_access_group/contains_predicate_spec.rb'
    - 'spec/models/form_access_groups/approved_access_group/current_form_requests_spec.rb'
    - 'spec/models/form_access_groups/initiated_access_group/contains_predicate_spec.rb'
    - 'spec/models/form_access_groups/initiated_access_group/current_form_requests_spec.rb'
    - 'spec/models/form_request/active_sent_back_event_spec.rb'
    - 'spec/models/form_request/fields_for_step_spec.rb'
    - 'spec/models/form_request/reopen_bang_spec.rb'
    - 'spec/models/form_set/attachments_spec.rb'
    - 'spec/models/form_sets/filtered_form_set/current_form_requests_spec.rb'
    - 'spec/models/form_sets/filtered_form_set/form_ids_spec.rb'
    - 'spec/models/form_sets/filtered_form_set/forms_spec.rb'
    - 'spec/models/form_sets/full_form_set/current_form_requests_spec.rb'
    - 'spec/models/form_sets/selected_form_set/current_form_requests_spec.rb'
    - 'spec/models/form_subset/current_form_requests_spec.rb'
    - 'spec/models/recipient/followup_recipients_spec.rb'
    - 'spec/models/subject/create_recipients_bang_spec.rb'
    - 'spec/null_objects/copied_form_request/freshest_vals_spec.rb'
    - 'spec/policies/form_request_policy/reopen_predicate_spec.rb'
    - 'spec/policies/form_request_policy/view_predicate_spec.rb'
    - 'spec/serializers/campaign_lite_serializer/as_json_spec.rb'
    - 'spec/serializers/campaign_serializer/as_json_spec.rb'
    - 'spec/serializers/form_response_serializer/as_json_spec.rb'
    - 'spec/views/admin/users/approved_forms/_list_spec.rb'
    - 'spec/views/admin/users/initiated_forms/_list_spec.rb'
    - 'spec/views/admin/users/initiated_forms/index_spec.rb'
    - 'spec/views/admin/users/recipients_steps/_list_spec.rb'
    - 'spec/views/campaigns/_campaign_folder_spec.rb'
    - 'spec/views/campaigns/settings/_legacy_manage_options_spec.rb'
    - 'spec/views/docs/_doc_hidden_fields_spec.rb'
    - 'spec/views/docs/_doc_spec.rb'
    - 'spec/views/docs/_fillable_spec.rb'
    - 'spec/views/docs/_locked_spec.rb'
    - 'spec/views/events/index_spec.rb'
    - 'spec/views/form_filler/_routing_dialog_spec.rb'
    - 'spec/views/form_requests/_search_results_spec.rb'
    - 'spec/views/layouts/header/_default_links_spec.rb'
    - 'spec/views/responses/_download_spec.rb'
    - 'spec/views/responses/_show_spec.rb'
    - 'spec/views/responses/toolbars/_archived_spec.rb'
    - 'spec/views/responses/toolbars/_blindfolded_spec.rb'
    - 'spec/views/responses/toolbars/_campaign_inactive_spec.rb'
    - 'spec/views/responses/toolbars/_completed_spec.rb'
    - 'spec/views/responses/toolbars/_denied_spec.rb'
    - 'spec/views/responses/toolbars/_initiated_spec.rb'
    - 'spec/views/responses/toolbars/_readonly_spec.rb'
    - 'spec/views/responses/toolbars/_rejected_spec.rb'
    - 'spec/views/responses/toolbars/components/_notes_spec.rb'

# Offense count: 282
# Configuration parameters: IgnoreSharedExamples.
RSpec/NamedSubject:
  Exclude:
    - 'spec/controllers/docs_controller/show_spec.rb'
    - 'spec/controllers/form_requests_controller/new_spec.rb'
    - 'spec/controllers/form_requests_controller/update_spec.rb'
    - 'spec/controllers/groups_controller/update_spec.rb'
    - 'spec/controllers/subject_changes_controller/index_spec.rb'
    - 'spec/controllers/subjects_controller/destroy_spec.rb'
    - 'spec/controllers/subjects_controller/edit_spec.rb'
    - 'spec/controllers/subjects_controller/update_spec.rb'
    - 'spec/controllers/token_responses_controller/show_spec.rb'
    - 'spec/controllers/wizards/group_wizard_controller/send_emails_or_test_spec.rb'
    - 'spec/decorators/group_decorator/subject_changes_count_spec.rb'
    - 'spec/domains/campaigns/emailer/send_reminder_emails_spec.rb'
    - 'spec/domains/campaigns/link_submission_creator/call_spec.rb'
    - 'spec/domains/form_requests/pdf_generator/call_spec.rb'
    - 'spec/domains/form_requests/route_change_set/after_save_spec.rb'
    - 'spec/domains/form_requests/route_change_set/initialize_spec.rb'
    - 'spec/domains/form_requests/routing/delegation_strategy/validations_spec.rb'
    - 'spec/domains/form_requests/routing/delegator_strategy/validations_spec.rb'
    - 'spec/domains/form_requests/routing/next_seq_strategy/validations_spec.rb'
    - 'spec/domains/form_requests/routing/question_strategy/validations_spec.rb'
    - 'spec/domains/form_requests/test_creator/call_spec.rb'
    - 'spec/domains/groups/transferer/call_spec.rb'
    - 'spec/domains/subjects/updater/call_spec.rb'
    - 'spec/features/campaign_setup/campaign_wizard_spec.rb'
    - 'spec/jobs/tracked_link_campaign_response_creator_job/perform_spec.rb'
    - 'spec/models/answer/validations_spec.rb'
    - 'spec/models/approver_list/delegations_spec.rb'
    - 'spec/models/approver_list/validations_spec.rb'
    - 'spec/models/approver_lists_recipient/delegations_spec.rb'
    - 'spec/models/campaign/associations_spec.rb'
    - 'spec/models/campaign/form_request_for_spec.rb'
    - 'spec/models/campaign/validations_spec.rb'
    - 'spec/models/campaigns_internal_tag/validations_spec.rb'
    - 'spec/models/campaigns_test_recipient/validations_spec.rb'
    - 'spec/models/email/validations_spec.rb'
    - 'spec/models/email_event/validations_spec.rb'
    - 'spec/models/event/validations_spec.rb'
    - 'spec/models/feature/validations_spec.rb'
    - 'spec/models/features_organization/validations_spec.rb'
    - 'spec/models/features_user/validations_spec.rb'
    - 'spec/models/field/validations_spec.rb'
    - 'spec/models/fields/date_field/validations_spec.rb'
    - 'spec/models/fields/formula_field/validations_spec.rb'
    - 'spec/models/form/delegations_spec.rb'
    - 'spec/models/form/step_count_spec.rb'
    - 'spec/models/form_request/associations_spec.rb'
    - 'spec/models/form_request/before_save_spec.rb'
    - 'spec/models/form_request/delegations_spec.rb'
    - 'spec/models/form_request_status/associations_spec.rb'
    - 'spec/models/form_set/validations_spec.rb'
    - 'spec/models/form_sets/filtered_form_set/validations_spec.rb'
    - 'spec/models/group/associations_spec.rb'
    - 'spec/models/group/data_for_spec.rb'
    - 'spec/models/group/subject_data_spec.rb'
    - 'spec/models/group/unconfirmed_changes_predicate_spec.rb'
    - 'spec/models/group/unconfirmed_changes_writer_spec.rb'
    - 'spec/models/group/validations_spec.rb'
    - 'spec/models/internal_tag/validations_spec.rb'
    - 'spec/models/job_result/validations_spec.rb'
    - 'spec/models/organization/validations_spec.rb'
    - 'spec/models/question/validations_spec.rb'
    - 'spec/models/recipient/associations_spec.rb'
    - 'spec/models/recipient/name_writer_spec.rb'
    - 'spec/models/recipient/validations_spec.rb'
    - 'spec/models/roles_user/validations_spec.rb'
    - 'spec/models/stars/validations_spec.rb'
    - 'spec/models/step/associations_spec.rb'
    - 'spec/models/step/validations_spec.rb'
    - 'spec/models/steps/prior_approver_step/find_or_create_recipient_spec.rb'
    - 'spec/models/steps/prompt_step/find_or_create_recipient_spec.rb'
    - 'spec/models/steps/recipient_step/delegations_spec.rb'
    - 'spec/models/steps/recipient_step/find_or_create_recipient_spec.rb'
    - 'spec/models/subject/after_save_spec.rb'
    - 'spec/models/subject/class_methods/with_changes_spec.rb'
    - 'spec/models/subject/confirmed_data_spec.rb'
    - 'spec/models/subject/create_recipients_bang_spec.rb'
    - 'spec/models/subject/data_spec.rb'
    - 'spec/models/subject/make_data_changes_bang_spec.rb'
    - 'spec/models/subject/name_spec.rb'
    - 'spec/models/subject/name_writer_spec.rb'
    - 'spec/models/subject/previous_data_diff_spec.rb'
    - 'spec/models/subject/unconfirmed_data_spec.rb'
    - 'spec/models/user/validations_spec.rb'
    - 'spec/serializers/student_changes_serializer/as_json_spec.rb'
    - 'spec/views/campaigns/_campaign_folder_spec.rb'
    - 'spec/views/docs/_fillable_spec.rb'
    - 'spec/views/responses/toolbars/_cancelled_spec.rb'

# Offense count: 20
# Configuration parameters: Max.
RSpec/NestedGroups:
  Exclude:
    - 'spec/controllers/docs_controller/show_spec.rb'
    - 'spec/controllers/form_requests_controller/show_spec.rb'
    - 'spec/controllers/responses_controller/edit_spec.rb'
    - 'spec/controllers/responses_controller/index_spec.rb'
    - 'spec/controllers/tracking_controller/fillable_user_create_spec.rb'
    - 'spec/domains/feedbacks/updater/call_spec.rb'
    - 'spec/domains/form_requests/router/call_spec.rb'
    - 'spec/domains/form_sets/csv_generator/call_spec.rb'
    - 'spec/domains/form_sets/zip_generator/call_spec.rb'
    - 'spec/domains/groups/builder/call_spec.rb'

# Offense count: 1
RSpec/Pending:
  Exclude:
    - 'spec/controllers/sessions_controller/destroy_spec.rb'

# Offense count: 51
RSpec/SubjectDeclaration:
  Exclude:
    - 'spec/controllers/docs_controller/show_spec.rb'
    - 'spec/controllers/form_requests_controller/create_spec.rb'
    - 'spec/controllers/form_requests_controller/new_spec.rb'
    - 'spec/controllers/form_requests_controller/update_spec.rb'
    - 'spec/controllers/groups_controller/update_spec.rb'
    - 'spec/controllers/responses_controller/edit_spec.rb'
    - 'spec/controllers/responses_controller/show_spec.rb'
    - 'spec/controllers/subject_changes_controller/index_spec.rb'
    - 'spec/controllers/subjects_controller/destroy_spec.rb'
    - 'spec/controllers/subjects_controller/edit_spec.rb'
    - 'spec/controllers/subjects_controller/update_spec.rb'
    - 'spec/controllers/token_responses_controller/show_spec.rb'
    - 'spec/controllers/wizards/group_wizard_controller/send_emails_or_test_spec.rb'
    - 'spec/decorators/group_decorator/subject_changes_count_spec.rb'
    - 'spec/domains/campaigns/emailer/send_reminder_emails_spec.rb'
    - 'spec/domains/campaigns/link_submission_creator/call_spec.rb'
    - 'spec/domains/form_requests/pdf_generator/call_spec.rb'
    - 'spec/domains/form_requests/rejector/call_spec.rb'
    - 'spec/domains/form_requests/route_change_set/after_save_spec.rb'
    - 'spec/domains/form_requests/route_change_set/initialize_spec.rb'
    - 'spec/domains/form_requests/test_creator/call_spec.rb'
    - 'spec/domains/groups/transferer/call_spec.rb'
    - 'spec/domains/subjects/updater/call_spec.rb'
    - 'spec/features/campaign_setup/campaign_wizard_spec.rb'
    - 'spec/jobs/tracked_link_campaign_response_creator_job/perform_spec.rb'
    - 'spec/models/campaign/form_request_for_spec.rb'
    - 'spec/models/form/step_count_spec.rb'
    - 'spec/models/form_request/before_save_spec.rb'
    - 'spec/models/form_request/reopen_bang_spec.rb'
    - 'spec/models/group/data_for_spec.rb'
    - 'spec/models/group/subject_data_spec.rb'
    - 'spec/models/group/unconfirmed_changes_predicate_spec.rb'
    - 'spec/models/group/unconfirmed_changes_writer_spec.rb'
    - 'spec/models/steps/prior_approver_step/find_or_create_recipient_spec.rb'
    - 'spec/models/steps/prompt_step/find_or_create_recipient_spec.rb'
    - 'spec/models/steps/recipient_step/find_or_create_recipient_spec.rb'
    - 'spec/models/steps/sequential_group_step/find_or_create_recipient_spec.rb'
    - 'spec/models/subject/after_save_spec.rb'
    - 'spec/models/subject/class_methods/with_changes_spec.rb'
    - 'spec/models/subject/confirmed_data_spec.rb'
    - 'spec/models/subject/create_recipients_bang_spec.rb'
    - 'spec/models/subject/data_spec.rb'
    - 'spec/models/subject/make_data_changes_bang_spec.rb'
    - 'spec/models/subject/name_spec.rb'
    - 'spec/models/subject/name_writer_spec.rb'
    - 'spec/models/subject/previous_data_diff_spec.rb'
    - 'spec/models/subject/unconfirmed_data_spec.rb'
    - 'spec/serializers/form_response_serializer/as_json_spec.rb'
    - 'spec/serializers/group_serializer/as_json_spec.rb'
    - 'spec/serializers/student_changes_serializer/as_json_spec.rb'
    - 'spec/views/docs/_fillable_spec.rb'

# Offense count: 119
# Configuration parameters: IgnoreNameless, IgnoreSymbolicNames.
RSpec/VerifiedDoubles:
  Exclude:
    - 'spec/controllers/admin/doc_transfers_controller/create_spec.rb'
    - 'spec/controllers/admin/organizations_controller/enable_google_spec.rb'
    - 'spec/controllers/admin/tracked_links_controller/create_spec.rb'
    - 'spec/controllers/api/form_deliveries_controller/create_spec.rb'
    - 'spec/controllers/api/organizations/users_controller/send_invited_user_welcome_spec.rb'
    - 'spec/controllers/auto_detect_fields_controller/create_spec.rb'
    - 'spec/controllers/docs_controller/show_spec.rb'
    - 'spec/controllers/fields_controller/index_spec.rb'
    - 'spec/controllers/password_resets_controller/create_spec.rb'
    - 'spec/controllers/responses_controller/create_spec.rb'
    - 'spec/controllers/test_files_controller/show_spec.rb'
    - 'spec/decorators/field_decorator/width_for_field_spec.rb'
    - 'spec/domains/campaigns/emailer/send_reminder_emails_spec.rb'
    - 'spec/domains/form_requests/pdf_text_generator/call_spec.rb'
    - 'spec/domains/form_requests/response_notifier/call_spec.rb'
    - 'spec/domains/form_requests/submit_change_set/after_save_spec.rb'
    - 'spec/domains/form_requests/submit_change_set/save_spec.rb'
    - 'spec/domains/forms/initiator_updater/call_spec.rb'
    - 'spec/domains/pages/fields_detector/call_spec.rb'
    - 'spec/domains/submissions/saver/call_spec.rb'
    - 'spec/helpers/campaigns_helper/archive_campaign_path_spec.rb'
    - 'spec/helpers/campaigns_helper/restore_campaign_path_spec.rb'
    - 'spec/jobs/form_request_pdf_job/perform_spec.rb'
    - 'spec/jobs/group_upload_job/perform_spec.rb'
    - 'spec/lib/active_storage_constraint/matches_predicate_spec.rb'
    - 'spec/lib/admin_constraint/matches_predicate_spec.rb'
    - 'spec/lib/change_set/clear_spec.rb'
    - 'spec/lib/change_set/initialize_spec.rb'
    - 'spec/lib/change_set/job_set/add_spec.rb'
    - 'spec/lib/change_set/job_set/merge_spec.rb'
    - 'spec/lib/change_set/merged_change_set/initialize_spec.rb'
    - 'spec/lib/change_set/module_methods/merge_spec.rb'
    - 'spec/lib/html_constraint/matches_predicate_spec.rb'
    - 'spec/lib/id_constraint/matches_predicate_spec.rb'
    - 'spec/lib/pdf_merger/call_spec.rb'
    - 'spec/lib/token_constraint/matches_predicate_spec.rb'
    - 'spec/mailers/form_request_mailer/initiator_success_message_spec.rb'
    - 'spec/mailers/form_request_mailer/initiator_updated_message_spec.rb'
    - 'spec/mailers/form_request_mailer/save_progress_message_spec.rb'
    - 'spec/mailers/form_request_mailer/step_cc_message_spec.rb'
    - 'spec/models/doc/thumb_spec.rb'
    - 'spec/models/doc/thumb_url_spec.rb'
    - 'spec/models/doc/width_spec.rb'
    - 'spec/models/field/spaceship_operator_spec.rb'
    - 'spec/models/steps/first_come_group_step/label_spec.rb'
    - 'spec/models/steps/tracked_link_step/label_spec.rb'
    - 'spec/uploaders/image_uploader/store_dir_spec.rb'
    - 'spec/views/docs/_doc_hidden_fields_spec.rb'
    - 'spec/views/docs/description_fields/reorder_spec.rb'
    - 'spec/views/form_filler/_basic_submit_button_spec.rb'
    - 'spec/views/form_filler/_dropdown_submit_button_spec.rb'
    - 'spec/views/form_filler/_routing_dialog_spec.rb'
    - 'spec/views/form_filler/_submit_button_spec.rb'
    - 'spec/views/layouts/admin/sidenav_spec.rb'
    - 'spec/views/responses/toolbars/_archived_spec.rb'
    - 'spec/views/responses/toolbars/_blindfolded_spec.rb'
    - 'spec/views/responses/toolbars/_campaign_inactive_spec.rb'
    - 'spec/views/responses/toolbars/_denied_spec.rb'
    - 'spec/views/responses/toolbars/_initiated_spec.rb'
    - 'spec/views/responses/toolbars/_readonly_spec.rb'
    - 'spec/views/responses/toolbars/_rejected_spec.rb'

# Offense count: 3
Rails/DefaultScope:
  Exclude:
    - 'app/models/event.rb'
    - 'app/models/group.rb'
    - 'app/models/page.rb'

# Offense count: 14
# Configuration parameters: Include, AllowReads, AllowWrites.
# Include: app/**/*.rb, lib/**/*.rb
Rails/EnvironmentVariableAccess:
  Exclude:
    - 'app/controllers/application_controller.rb'
    - 'app/controllers/webhooks/mandrill_controller.rb'
    - 'app/domains/form_requests/filters/hstore_date.rb'
    - 'app/domains/vals/date_field_create_change_set.rb'
    - 'app/jobs/form_set_file_job.rb'
    - 'app/models/campaign.rb'
    - 'lib/url_param_encryptor.rb'

# Offense count: 26
Rails/I18nLocaleTexts:
  Exclude:
    - 'app/controllers/admin/approver_lists/recipients_from_steps_controller.rb'
    - 'app/controllers/admin/campaigns_controller.rb'
    - 'app/controllers/admin/docs_controller.rb'
    - 'app/controllers/admin/organizations_controller.rb'
    - 'app/controllers/admin/steps_controller.rb'
    - 'app/controllers/admin/users/password_resets_controller.rb'
    - 'app/controllers/form_requests_controller.rb'
    - 'app/controllers/google_user_invites_controller.rb'
    - 'app/controllers/password_resets_controller.rb'
    - 'app/controllers/submissions_controller.rb'
    - 'app/controllers/user_invites_controller.rb'
    - 'app/controllers/users/advanced_options_controller.rb'
    - 'app/controllers/users/email_preferences_controller.rb'
    - 'app/controllers/users/password_controller.rb'
    - 'app/controllers/users/profile_controller.rb'
    - 'app/controllers/wizards/routing_wizard_controller.rb'
    - 'app/mailers/csm_team_mailer.rb'

# Offense count: 12
# Configuration parameters: IgnoreScopes, Include.
# Include: app/models/**/*.rb
Rails/InverseOf:
  Exclude:
    - 'app/models/campaign.rb'
    - 'app/models/doc.rb'
    - 'app/models/field.rb'
    - 'app/models/form.rb'
    - 'app/models/form_request.rb'
    - 'app/models/group.rb'
    - 'app/models/page.rb'
    - 'app/models/recipient.rb'

# Offense count: 6
Rails/OutputSafety:
  Exclude:
    - 'app/controllers/google_sessions_controller.rb'
    - 'app/controllers/job_results_controller.rb'
    - 'app/controllers/password_sessions_controller.rb'
    - 'app/helpers/docs_helper.rb'
    - 'app/helpers/view_helper.rb'

# Offense count: 4
# Configuration parameters: Include.
# Include: db/**/*.rb
Rails/ReversibleMigration:
  Exclude:
    - 'db/migrate/20180207220751_add_null_false_to_shared_by_user_on_campaigns_user.rb'
    - 'db/migrate/20180510002219_remove_null_false_from_campaigns_user_shared_by_user_id.rb'
    - 'db/migrate/20180618200947_change_request_id_column_type_on_event.rb'
    - 'db/migrate/20181221235615_add_default_to_form_request_fields_bulk_approval_eligible.rb'

# Offense count: 1
# Configuration parameters: Include.
# Include: db/**/*.rb
Rails/ReversibleMigrationMethodDefinition:
  Exclude:
    - 'db/migrate/20201229233114_add_foreign_key_constraint_to_active_storage_attachments_for_blob_id.active_storage.rb'

# Offense count: 118
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowImplicitReturn, AllowedReceivers.
Rails/SaveBang:
  Exclude:
    - 'app/controllers/admin/features_organizations_controller.rb'
    - 'app/controllers/admin/features_users_controller.rb'
    - 'app/controllers/admin/organizations_controller.rb'
    - 'app/controllers/admin/users/password_resets_controller.rb'
    - 'app/controllers/api/organizations/users_controller.rb'
    - 'app/controllers/campaigns/stars_controller.rb'
    - 'app/controllers/password_resets_controller.rb'
    - 'app/controllers/users/password_resets_controller.rb'
    - 'app/controllers/users_controller.rb'
    - 'app/domains/approver_lists/updater.rb'
    - 'app/domains/attachments/bulk_pdf_generator.rb'
    - 'app/domains/campaigns/emailer.rb'
    - 'app/domains/campaigns/group_submissions_creator.rb'
    - 'app/domains/campaigns/invite_copier.rb'
    - 'app/domains/campaigns/link_submission_creator.rb'
    - 'app/domains/campaigns/sharer.rb'
    - 'app/domains/campaigns/soft_destroyer.rb'
    - 'app/domains/docs/updater.rb'
    - 'app/domains/form_access_groups/creator.rb'
    - 'app/domains/form_request_statuses/inserter.rb'
    - 'app/domains/form_requests/bulk_pdf_generator.rb'
    - 'app/domains/form_requests/bulk_router.rb'
    - 'app/domains/form_requests/rejection_undoer.rb'
    - 'app/domains/form_requests/route_change_set.rb'
    - 'app/domains/form_requests/router.rb'
    - 'app/domains/form_requests/test_creator.rb'
    - 'app/domains/form_sets/csv_generator.rb'
    - 'app/domains/form_sets/submitter.rb'
    - 'app/domains/forms/initiator_updater.rb'
    - 'app/domains/groups/updater.rb'
    - 'app/domains/responses/creator.rb'
    - 'app/domains/subjects/updater.rb'
    - 'app/domains/users/account_merger.rb'
    - 'app/domains/users/activator.rb'
    - 'app/domains/users/campaign_access_backfiller.rb'
    - 'app/domains/users/email_updater.rb'
    - 'db/seeds/forms.rb'
    - 'lib/ik12_progress_bar.rb'
    - 'lib/mailer_previews/form_request_mailer_preview.rb'
    - 'spec/controllers/admin/form_requests_controller/show_spec.rb'
    - 'spec/controllers/application_controller/check_user_profile_spec.rb'
    - 'spec/controllers/docs_controller/show_spec.rb'
    - 'spec/controllers/form_requests_controller/update_spec.rb'
    - 'spec/controllers/responses_controller/create_spec.rb'
    - 'spec/controllers/tracking_controller/fillable_user_create_spec.rb'
    - 'spec/decorators/form_request_decorator/description_spec.rb'
    - 'spec/domains/attachments/bulk_pdf_generator/initialize_spec.rb'
    - 'spec/domains/attachments/create_change_set/file_writer_spec.rb'
    - 'spec/domains/attachments/create_change_set/trigger_callbacks_spec.rb'
    - 'spec/domains/campaigns/churner/call_spec.rb'
    - 'spec/domains/campaigns/emailer/send_reminder_emails_spec.rb'
    - 'spec/domains/campaigns/group_publisher/call_spec.rb'
    - 'spec/domains/campaigns/group_submissions_creator/call_spec.rb'
    - 'spec/domains/campaigns/publisher/call_spec.rb'
    - 'spec/domains/campaigns/resetter/call_spec.rb'
    - 'spec/domains/conditions/delegator_has_no_question/step_validator/validate_spec.rb'
    - 'spec/domains/conditions/no_question_before_delegated/step_validator/validate_spec.rb'
    - 'spec/domains/docs/search_content_updater/call_spec.rb'
    - 'spec/domains/form_requests/create_change_set/after_save_spec.rb'
    - 'spec/domains/form_requests/route_change_set/initialize_spec.rb'
    - 'spec/domains/form_requests/sorter/call_spec.rb'
    - 'spec/domains/form_sets/submitter/call_spec.rb'
    - 'spec/domains/form_sets/zip_generator/call_spec.rb'
    - 'spec/domains/forms/field_val_map_generator/call_spec.rb'
    - 'spec/domains/forms/routing_updater/call_spec.rb'
    - 'spec/domains/steps/creator/call_spec.rb'
    - 'spec/domains/steps/deleter/call_spec.rb'
    - 'spec/domains/users/invite/submit_spec.rb'
    - 'spec/domains/users/password_reset/class_methods/create_spec.rb'
    - 'spec/features/form_filler/special_approver_spec.rb'
    - 'spec/features/user/unverified_login_spec.rb'
    - 'spec/graphql/resolvers/campaigns_awaiting_approval/call_spec.rb'
    - 'spec/graphql/resolvers/paginated_waiting_form_requests/call_spec.rb'
    - 'spec/lib/bulk_job/deserialize_arguments_spec.rb'
    - 'spec/lib/bulk_job/record_deserializer/call_spec.rb'
    - 'spec/lib/db_transition/non_requireable_field_backfiller/call_spec.rb'
    - 'spec/matchers/delete_record_matcher/failure_message_spec.rb'
    - 'spec/matchers/delete_record_matcher/failure_message_when_negated_spec.rb'
    - 'spec/models/application_record/class_methods/validate_on_change_spec.rb'
    - 'spec/models/form_request/tracker_field_search_values_spec.rb'
    - 'spec/models/form_set_actions/csv_report_action/after_initialize_spec.rb'
    - 'spec/models/form_subset/current_form_requests_spec.rb'
    - 'spec/models/reports/csv_report/after_initialize_spec.rb'
    - 'spec/policies/form_policy/at_least_facilitate_predicate_spec.rb'
    - 'spec/policies/form_policy/at_least_manage_predicate_spec.rb'
    - 'spec/policies/form_policy/at_least_track_predicate_spec.rb'
    - 'spec/views/responses/_show_spec.rb'

# Offense count: 1
Rails/TransactionExitStatement:
  Exclude:
    - 'app/domains/pages/fields_detector.rb'

# Offense count: 3
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/UniqueValidationWithoutIndex:
  Exclude:
    - 'app/models/doc.rb'
    - 'app/models/group.rb'
    - 'app/models/organization.rb'

# Offense count: 3
Rake/MethodDefinitionInTask:
  Exclude:
    - 'lib/tasks/deploy.rake'

# Offense count: 9
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowedCops.
Style/DisableCopsWithinSourceCodeDirective:
  Exclude:
    - 'app/controllers/wizards/campaign_wizard_controller.rb'
    - 'app/controllers/wizards/routing_wizard_controller.rb'
    - 'lib/change_set/job.rb'
    - 'spec/domains/campaigns/churner/call_spec.rb'

# Offense count: 8
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowedVars.
Style/FetchEnvVar:
  Exclude:
    - 'config/environments/development.rb'
    - 'config/environments/test.rb'
    - 'config/initializers/omniauth.rb'
    - 'spec/controllers/api/form_deliveries_controller/create_spec.rb'
    - 'spec/controllers/responses_controller/create_spec.rb'
    - 'spec/factories/event_context.rb'
    - 'spec/rails_helper.rb'

# Offense count: 18
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/GlobalStdStream:
  Exclude:
    - 'app/domains/campaigns/churner.rb'
    - 'app/domains/organizations/churner.rb'
    - 'config/environments/production.rb'
    - 'config/environments/staging.rb'
    - 'lib/ik12_progress_bar.rb'
    - 'lib/tasks/delete_org_data.rake'

# Offense count: 67
Style/ImplicitRuntimeError:
  Exclude:
    - 'app/controllers/admin/forms_controller.rb'
    - 'app/controllers/api/steps/recipients_controller.rb'
    - 'app/controllers/form_requests_controller.rb'
    - 'app/controllers/responses_controller.rb'
    - 'app/controllers/users_controller.rb'
    - 'app/domains/campaigns/recipient_copier.rb'
    - 'app/domains/campaigns/steps_copier.rb'
    - 'app/domains/campaigns/tracked_link_creator.rb'
    - 'app/domains/docs/field_mover.rb'
    - 'app/domains/docs/reference_number_resetter.rb'
    - 'app/domains/form_requests/custom_filename_generator.rb'
    - 'app/domains/form_requests/filterer.rb'
    - 'app/domains/form_requests/filters/hstore_checkbox.rb'
    - 'app/domains/form_requests/filters/hstore_column_validator.rb'
    - 'app/domains/form_requests/filters/hstore_date.rb'
    - 'app/domains/form_requests/filters/hstore_text.rb'
    - 'app/domains/form_requests/rejection_undoer.rb'
    - 'app/domains/form_requests/status_setter.rb'
    - 'app/domains/form_requests/update_change_set.rb'
    - 'app/domains/form_sets/pdf_generator.rb'
    - 'app/domains/form_sets/reminder_sender.rb'
    - 'app/domains/form_sets/submitter.rb'
    - 'app/domains/form_sets/zip_generator.rb'
    - 'app/domains/groups/transferer.rb'
    - 'app/domains/organizations/campaigns_finder.rb'
    - 'app/domains/organizations/churner.rb'
    - 'app/domains/organizations/users_finder.rb'
    - 'app/domains/responses/creator.rb'
    - 'app/domains/subjects/updater.rb'
    - 'app/domains/users/update_change_set.rb'
    - 'app/models/application_record.rb'
    - 'app/models/campaign.rb'
    - 'app/models/form_request_status.rb'
    - 'app/models/step.rb'
    - 'exe/disect'
    - 'lib/action_result.rb'
    - 'lib/database_function_adder.rb'
    - 'lib/group_send_status.rb'
    - 'lib/ik12_progress_bar.rb'
    - 'lib/serializable/root_serializer.rb'
    - 'spec/factories/campaigns.rb'
    - 'spec/lib/queue_cleaner/call_spec.rb'
    - 'spec/models/util/database_lock/class_methods/call_spec.rb'
    - 'spec/support/helpers.rb'
    - 'spec/support/matchers/invoke_matcher.rb'
    - 'spec/support/matchers/validate_on_change_matcher.rb'

# Offense count: 90
Style/OpenStructUse:
  Exclude:
    - 'app/controllers/wizards/group_wizard_controller.rb'
    - 'app/domains/campaigns/sharer.rb'
    - 'app/domains/campaigns/transferer.rb'
    - 'app/domains/docs/bulk_form_subsets_creator.rb'
    - 'app/domains/docs/updater.rb'
    - 'app/domains/fields/formula_fields/dependency_checker.rb'
    - 'app/domains/fields/formula_fields/field_val_map_generator.rb'
    - 'app/domains/form_access_groups/bulk_invite_validator.rb'
    - 'app/domains/form_requests/filters/hstore_column_validator.rb'
    - 'app/domains/forms/routing_updater.rb'
    - 'app/domains/groups/updater.rb'
    - 'app/domains/responses/creator.rb'
    - 'app/domains/steps/recipient_changer.rb'
    - 'app/domains/users/bulk_creator.rb'
    - 'app/domains/users/email_sanitizer.rb'
    - 'app/domains/vals/validator.rb'
    - 'app/domains/vals/validator/all_required_vals_present.rb'
    - 'app/domains/vals/validator/no_nil_vals.rb'
    - 'app/domains/vals/validator/permitted_vals_only.rb'
    - 'app/domains/vals/validator/valid_time_formats.rb'
    - 'app/graphql/resolvers/campaigns_awaiting_approval.rb'
    - 'app/graphql/resolvers/paginated_waiting_form_requests.rb'
    - 'exe/disect'
    - 'spec/controllers/admin/docs_controller/update_spec.rb'
    - 'spec/controllers/admin/groups_controller/update_spec.rb'
    - 'spec/controllers/admin/users_controller/create_spec.rb'
    - 'spec/controllers/forms_controller/update_spec.rb'
    - 'spec/controllers/responses_controller/create_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_click_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_hard_bounce_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_open_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_reject_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_send_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_soft_bounce_spec.rb'
    - 'spec/controllers/webhooks/mandrill_controller/handle_spam_spec.rb'
    - 'spec/domains/campaigns/churner/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_checkbox/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_column_validator/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_text/call_spec.rb'
    - 'spec/domains/form_requests/filters/hstore_text_exact/call_spec.rb'
    - 'spec/domains/forms/formula_checker/call_spec.rb'
    - 'spec/graphql/resolvers/campaigns_awaiting_approval/call_spec.rb'
    - 'spec/graphql/resolvers/create_bulk_approval_form_set/call_spec.rb'
    - 'spec/graphql/resolvers/paginated_waiting_form_requests/call_spec.rb'
    - 'spec/lib/change_set/job_set/add_spec.rb'
    - 'spec/lib/change_set/job_set/merge_spec.rb'
    - 'spec/lib/change_set/save!_spec.rb'
    - 'spec/lib/change_set/save_spec.rb'
    - 'spec/models/concerns/searchable/class_methods/search_spec.rb'
    - 'spec/models/concerns/searchable/instance_methods/update_search_content_spec.rb'
    - 'spec/models/form_subset/contains_predicate_spec.rb'
    - 'spec/models/job_result/validations_spec.rb'
    - 'spec/views/docs/_attachment_uploader_spec.rb'

# Offense count: 33
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength.
# AllowedMethods: present?, blank?, presence, try, try!
Style/SafeNavigation:
  Exclude:
    - 'app/controllers/application_controller.rb'
    - 'app/controllers/link_campaigns_controller.rb'
    - 'app/controllers/password_resets_controller.rb'
    - 'app/controllers/password_sessions_controller.rb'
    - 'app/controllers/responses_controller.rb'
    - 'app/controllers/token_responses_controller.rb'
    - 'app/controllers/tracking_controller.rb'
    - 'app/controllers/webhooks/mandrill_controller.rb'
    - 'app/domains/conditions/no_question_before_delegated/step_validator.rb'
    - 'app/domains/docs/reference_number_resetter.rb'
    - 'app/domains/form_access_groups/create_change_set.rb'
    - 'app/domains/forms/routing_plan.rb'
    - 'app/domains/users/invite.rb'
    - 'app/domains/users/password_reset.rb'
    - 'app/graphql/resolvers/form_requests/sent_date.rb'
    - 'app/jobs/form_set_file_job.rb'
    - 'app/mailers/form_request_mailer.rb'
    - 'app/models/campaign.rb'
    - 'app/models/event.rb'
    - 'app/models/form.rb'
    - 'app/models/job_result.rb'
    - 'app/models/recipient.rb'
    - 'app/models/user.rb'
    - 'app/serializers/campaign_serializer.rb'
    - 'spec/domains/campaigns/steps_copier/call_spec.rb'
    - 'spec/factories/fields.rb'
    - 'spec/factories/form_requests.rb'

# Offense count: 1
Style/StaticClass:
  Exclude:
    - 'app/models/concerns/trashable.rb'

# Offense count: 25
Style/TopLevelMethodDefinition:
  Exclude:
    - 'db/seeds/fields.rb'
    - 'lib/tasks/delete_org_data.rake'
    - 'spec/rails_helper.rb'
    - 'spec/support/feature_helpers.rb'
    - 'spec/support/helpers.rb'
    - 'spec/support/matchers.rb'
    - 'spec/support/matchers/delete_record_matcher.rb'
    - 'spec/support/search_triggers.rb'

@bbatsov
Copy link
Collaborator

bbatsov commented Aug 19, 2022

@ydah Please, look into this when you can.

@ydah
Copy link
Member

ydah commented Aug 21, 2022

First, looked at simple execution times.

The test files are as follows:

# bad
array.delete e

# good
array.delete(e)

# good
# Operators don't need parens
foo == bar

# good
# Setter methods don't need parens
foo.bar = baz

# okay with `puts` listed in `AllowedMethods`
puts 'test'

# okay with `^assert` listed in `AllowedPatterns`
assert_equal 'test', x

.rubocop.yml

AllCops:
  NewCops: enable

Style/MethodCallWithArgsParentheses:
  IgnoredMethods:
    - abort
    - after_save
    - and
    - before_save
    - delegate
    - describe
    - exec
    - exit
    - load
    - not_to
    - p
    - print
    - puts
    - raise
    - require
    - shared_context
    - shared_examples
    - star_puts
    - throw
    - to
    - warn
    - yield

1.35.0 (using Parser 3.1.2.1, rubocop-ast 1.21.0, running on ruby 3.1.2 x86_64-darwin21)
bundle exec rubocop --cache false test.rb --only 0.99s user 0.26s system 89% cpu 1.385 total

1.32.0 (using Parser 3.1.2.1, rubocop-ast 1.21.0, running on ruby 3.1.2 x86_64-darwin21)
bundle exec rubocop --cache false test.rb --only 0.96s user 0.24s system 94% cpu 1.268 total

@ydah
Copy link
Member

ydah commented Aug 21, 2022

Next, compare the .rubocop.yml and .rubocop_todo.yml that you were taught in #10919 (comment)

  • 1.35.0 (using Parser 3.1.2.1, rubocop-ast 1.21.0, running on ruby 3.1.2 x86_64-darwin21)
    • rubocop-graphql 0.14.5
    • rubocop-performance 1.14.3
    • rubocop-rails 2.15.2
    • rubocop-rake 0.6.0
    • rubocop-rspec 2.12.1

bundle exec rubocop --cache false test.rb --only 1.43s user 0.33s system 91% cpu 1.920 total


  • 1.32.0 (using Parser 3.1.2.1, rubocop-ast 1.21.0, running on ruby 3.1.2 x86_64-darwin21)
    • rubocop-graphql 0.14.5
    • rubocop-performance 1.14.3
    • rubocop-rails 2.15.2
    • rubocop-rake 0.6.0
    • rubocop-rspec 2.12.1

bundle exec rubocop --cache false test.rb --only 1.41s user 0.33s system 92% cpu 1.873 total

@ydah
Copy link
Member

ydah commented Aug 21, 2022

Then we will use real-world-rails to compare. I use the .rubocop.yml that you taught us.
Refs: https://github.com/eliotsykes/real-world-rails

  • 1.32.0 (using Parser 3.1.2.1, rubocop-ast 1.21.0, running on ruby 2.7.2 x86_64-darwin21)
    • rubocop-graphql 0.14.5
    • rubocop-performance 1.14.3
    • rubocop-rails 2.15.2
    • rubocop-rake 0.6.0
    • rubocop-rspec 2.12.1

bundle exec rubocop --cache false 1.83s user 0.34s system 95% cpu 2.284 total


  • 1.35.0 (using Parser 3.1.2.1, rubocop-ast 1.21.0, running on ruby 2.7.2 x86_64-darwin21)
    • rubocop-graphql 0.14.5
    • rubocop-performance 1.14.3
    • rubocop-rails 2.15.2
    • rubocop-rake 0.6.0
    • rubocop-rspec 2.12.1

bundle exec rubocop --cache false 1.89s user 0.39s system 88% cpu 2.567 total

@ydah
Copy link
Member

ydah commented Aug 21, 2022

I am trying to reproduce it, but have not yet been able to do so in my environment. Please point out if there is something I am missing.

@mockdeep
Copy link
Contributor Author

One thing to note is that it seemed relatively fast at first and seemed to slow down over time as it ran on a larger codebase. So the first few files were pretty fast, but then as it went along each subsequent file took longer. Do you have a larger app to run it on?

@ydah
Copy link
Member

ydah commented Aug 23, 2022

Thank you very much. I ran it on a large code base and was able to reproduce the problem.

  • 1.32.0 (using Parser 3.1.2.1, rubocop-ast 1.21.0, running on ruby 2.7.2 x86_64-darwin21)

bundle exec rubocop --cache false --only 16.83s user 1.30s system 93% cpu 19.320 total


  • 1.35.0 (using Parser 3.1.2.1, rubocop-ast 1.21.0, running on ruby 2.7.2 x86_64-darwin21)

bundle exec rubocop --cache false --only 1255.21s user 5.32s system 71% cpu 29:17.76 total

@ydah
Copy link
Member

ydah commented Aug 24, 2022

I was able to improve the speed to the same level and will open a PR after this.
@mockdeep Thank you for your report!

bundle exec rubocop --cache false --only 16.64s user 1.25s system 94% cpu 19.002 total

ydah added a commit to ydah/rubocop that referenced this issue Aug 25, 2022
…and 1.33.0

Fix: rubocop#10919

Before:
- 1.32.0 (using Parser 3.1.2.1, rubocop-ast 1.21.0, running on ruby 2.7.2 x86_64-darwin21)

`bundle exec rubocop --cache false --only   16.83s user 1.30s system 93% cpu 19.320 total`

- 1.35.0 (using Parser 3.1.2.1, rubocop-ast 1.21.0, running on ruby 2.7.2 x86_64-darwin21)

`bundle exec rubocop --cache false --only   1255.21s user 5.32s system 71% cpu 29:17.76 total`

After:

`bundle exec rubocop --cache false --only 16.64s user 1.25s system 94% cpu 19.002 total`
koic added a commit that referenced this issue Aug 26, 2022
[Fix #10919] Fix a huge performance regression between 1.32.0 and 1.33.0
@mockdeep
Copy link
Contributor Author

Great work, thanks @ydah!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants