From a35ba2885432bd222b32075feea3d23f76dd0f8e Mon Sep 17 00:00:00 2001 From: "Keith T. Garner" Date: Thu, 2 Jan 2020 12:10:12 -0600 Subject: [PATCH] add rubocop and bump capybara-webkit This add rubocop and a ruleset that mostly matches canvas's to rollcall as well as bumping capybara-webkit so it'll compile on modern macs test plan: - specs pass Change-Id: I29bf968a9f3daa58b51ad05976ccbff668c29e8e Reviewed-on: https://gerrit.instructure.com/c/rollcall-attendance/+/221883 Reviewed-by: Spencer Olson Reviewed-by: Gary Mei Tested-by: Service Cloud Jenkins QA-Review: Keith Garner Product-Review: Keith Garner --- .rubocop.yml | 272 +++++++++++++++++++++++++++++++++++++++++++++++++++ Gemfile | 4 +- Gemfile.lock | 25 ++++- 3 files changed, 297 insertions(+), 4 deletions(-) create mode 100644 .rubocop.yml diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..8274e71 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,272 @@ +require: + - rubocop-rspec + +AllCops: + TargetRubyVersion: 2.3 + +# our style changes: disabling style rules we aren't interested in +Layout/AlignParameters: + Enabled: false +Layout/ElseAlignment: + Enabled: false +Layout/EmptyLines: + Enabled: false +Layout/EmptyLinesAroundAccessModifier: + Enabled: false +Layout/EmptyLinesAroundArguments: + Enabled: false +Layout/EmptyLinesAroundBlockBody: + Enabled: false +Layout/EmptyLinesAroundClassBody: + Enabled: false +Layout/EmptyLinesAroundMethodBody: + Enabled: false +Layout/EmptyLinesAroundModuleBody: + Enabled: false +Layout/IndentHash: + Enabled: false +Layout/IndentationConsistency: + Enabled: false +Layout/IndentationWidth: + Enabled: false +Layout/MultilineOperationIndentation: + Enabled: false +Layout/SpaceAfterColon: + Enabled: false +Layout/SpaceAfterComma: + Enabled: false +Layout/SpaceAroundEqualsInParameterDefault: + Enabled: false +Layout/SpaceAroundOperators: + Enabled: false +Layout/SpaceBeforeBlockBraces: + Enabled: false +Layout/SpaceBeforeFirstArg: + Enabled: false +Layout/SpaceInLambdaLiteral: + Enabled: false +Layout/SpaceInsideArrayLiteralBrackets: + Enabled: false +Layout/SpaceInsideBlockBraces: + Enabled: false +Layout/SpaceInsideHashLiteralBraces: + Enabled: false +Layout/SpaceInsideReferenceBrackets: + Enabled: false +Layout/TrailingBlankLines: + Enabled: false +Layout/TrailingWhitespace: + Enabled: false + +Style/FormatStringToken: + Enabled: false +Style/StringLiterals: + Enabled: false +Style/SignalException: + Enabled: false +Style/NumericLiterals: + Enabled: false +Style/BracesAroundHashParameters: + Enabled: false +Style/PercentLiteralDelimiters: + Enabled: false +Style/Documentation: + Enabled: false +Style/ClassAndModuleChildren: + Enabled: false +Style/RegexpLiteral: + Enabled: false +Style/GuardClause: + Enabled: false +Style/RedundantSelf: + Enabled: false +Style/IfUnlessModifier: + Enabled: false +Style/WordArray: + Enabled: false +Style/PercentQLiterals: + Enabled: false +Style/DoubleNegation: + Enabled: false +Style/TrailingCommaInArguments: + Enabled: false +Style/TrailingCommaInLiteral: + Enabled: false +Style/MethodCallWithoutArgsParentheses: + Enabled: false +Style/MethodCallWithArgsParentheses: + Enabled: false +Layout/DotPosition: + Enabled: true + EnforcedStyle: trailing +Layout/AlignHash: + Enabled: false +Layout/AlignParameters: + Enabled: false +Style/Lambda: + Enabled: false +Style/WhileUntilModifier: + Enabled: false +Style/ParallelAssignment: + Enabled: false +Style/ZeroLengthPredicate: + Enabled: false +Style/NumericPredicate: + Enabled: false +Naming/VariableNumber: + Enabled: false +Style/Dir: + Enabled: false +Style/ReturnNil: + Enabled: false +Style/StderrPuts: + Enabled: false +Style/DateTime: + Enabled: false +Style/SymbolArray: + Enabled: false +# We may want to enable this when we start working toward Ruby 3 +Style/FrozenStringLiteralComment: + Enabled: false +Style/AsciiComments: + Enabled: false +Style/BlockDelimiters: + Enabled: true + Exclude: + - spec/**/*_spec.rb + - spec/shared_examples/**/*.rb + +# RSpec cops we don't care about +RSpec/MessageSpies: + Enabled: false +RSpec/HookArgument: + Enabled: false +RSpec/VerifiedDoubles: + Enabled: false +RSpec/NamedSubject: + Enabled: false +RSpec/NotToNot: + Enabled: false +# RSpec cops we care extra about +RSpec/EmptyExampleGroup: + Severity: error +RSpec/RepeatedDescription: + Severity: error +RSpec/ExpectChange: + Enabled: false + +# this isn't good for us because of how we pin dependencies +Bundler/OrderedGems: + Enabled: false +Gemspec/OrderedDependencies: + Enabled: false +Gemspec/RequiredRubyVersion: + Enabled: false + +# Rails style changes +Rails: + Enabled: true +Rails/TimeZone: + Enabled: false +# accessors are often defined in terms of read_attribute +Rails/ReadWriteAttribute: + Enabled: false +# we never bothered creating an ApplicationRecord +Rails/ApplicationRecord: + Enabled: false +Rails/HasManyOrHasOneDependent: + Enabled: false +# It whines about update_all too much, which we use a lot specifically to +# bypass validations and any other AR-ness +Rails/SkipsModelValidations: + Enabled: false + +# Lint changes +Lint/AmbiguousRegexpLiteral: + Severity: convention +Lint/AmbiguousBlockAssociation: + Exclude: + - spec/**/* +Lint/UselessAssignment: + Severity: convention +Lint/Debugger: + Severity: error +Lint/EndAlignment: + EnforcedStyleAlignWith: variable + Severity: convention + +# Performance changes +Performance/Detect: + Severity: warning +Performance/TimesMap: + Exclude: + - spec/**/* + +# these need better configuration than the default: +Style/AndOr: + EnforcedStyle: conditionals +Style/RescueModifier: + Severity: warning +Layout/MultilineMethodCallIndentation: + EnforcedStyle: indented +Layout/IndentArray: + EnforcedStyle: consistent + +# these don't make sense pre-Rails 4 +Rails/FindBy: + Enabled: false +Rails/ActionFilter: + Enabled: false + +# these are invalid pre-Rails 5 +Rails/HttpPositionalArguments: + Enabled: false + +# these are invalid pre-Ruby 2.4 +Performance/RegexpMatch: + Enabled: false + +# Things we may want to tighten down later +Metrics/AbcSize: + Enabled: false +Metrics/LineLength: + Max: 160 +Metrics/MethodLength: + Max: 100 +Metrics/ClassLength: + Enabled: false +Metrics/ModuleLength: + Enabled: false +Metrics/BlockLength: + Max: 50 + Exclude: + - gems/*/spec/**/*.rb + - gems/plugins/*/spec_canvas/**/*.rb + - spec/**/*.rb + - pact/spec/**/*_spec.rb +Metrics/CyclomaticComplexity: + Max: 28 +Metrics/PerceivedComplexity: + Max: 28 +RSpec/InstanceVariable: + Enabled: false +RSpec/ExampleWording: + Enabled: false +RSpec/ContextWording: + Enabled: false +RSpec/ExampleLength: + Max: 48 +RSpec/NestedGroups: + Max: 5 +RSpec/DescribedClass: + Enabled: false +RSpec/DescribeClass: + Enabled: false +Style/HashSyntax: + Enabled: false +RSpec/MultipleExpectations: + Enabled: false +RSpec/ScatteredSetup: + Enabled: false +Style/RescueStandardError: + Enabled: false diff --git a/Gemfile b/Gemfile index 4c9ce1c..ff3b95a 100644 --- a/Gemfile +++ b/Gemfile @@ -73,6 +73,8 @@ group :development, :test do gem 'phantomjs', '1.9.7.1' gem 'guard-jasmine', '~> 2.0' gem 'brakeman', require: false + gem 'rubocop', '0.52.1', require: false + gem 'rubocop-rspec', '1.22.2', require: false end group :test do @@ -84,7 +86,7 @@ group :test do # will need to upgrade capybara-webkit as it's own commit and step up background # dependencies (like QT & xvfb) on all platforms that run cucumber tests as part of a single # upgrade - gem 'capybara-webkit', '1.3.1' + gem 'capybara-webkit', '1.15.1' gem 'capybara-screenshot' gem 'factory_bot_rails' gem 'guard-rspec' diff --git a/Gemfile.lock b/Gemfile.lock index 5e4b5fa..8e6c278 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -47,6 +47,7 @@ GEM arel (9.0.0) aroi (0.0.6) rails (>= 3.2, < 5.3) + ast (2.4.0) aws-eventstream (1.0.1) aws-partitions (1.114.0) aws-sdk-core (3.38.0) @@ -85,8 +86,8 @@ GEM capybara-screenshot (1.0.22) capybara (>= 1.0, < 4) launchy - capybara-webkit (1.3.1) - capybara (>= 2.0.2, < 2.5.0) + capybara-webkit (1.15.1) + capybara (>= 2.3, < 4.0) json childprocess (0.9.0) ffi (~> 1.0, >= 1.0.11) @@ -253,11 +254,15 @@ GEM nenv (~> 0.1) shellany (~> 0.0) oauth (0.5.4) + parallel (1.18.0) + parser (2.6.5.0) + ast (~> 2.4.0) paul_bunyan (1.5.3) request_store pg (1.1.3) phantomjs (1.9.7.1) power_assert (1.1.3) + powerpack (0.1.2) pry (0.12.2) coderay (~> 1.1.0) method_source (~> 0.9.0) @@ -299,6 +304,7 @@ GEM method_source rake (>= 0.8.7) thor (>= 0.19.0, < 2.0) + rainbow (3.0.0) rake (12.3.2) rb-fsevent (0.10.3) rb-inotify (0.9.10) @@ -362,6 +368,16 @@ GEM rspec-mocks (~> 3.8.0) rspec-support (~> 3.8.0) rspec-support (3.8.0) + rubocop (0.52.1) + parallel (~> 1.10) + parser (>= 2.4.0.2, < 3.0) + powerpack (~> 0.1) + rainbow (>= 2.2.2, < 4.0) + ruby-progressbar (~> 1.7) + unicode-display_width (~> 1.0, >= 1.0.1) + rubocop-rspec (1.22.2) + rubocop (>= 0.52.1) + ruby-progressbar (1.10.1) ruby_dep (1.5.0) rufus-scheduler (3.4.2) et-orbi (~> 1.0) @@ -420,6 +436,7 @@ GEM thread_safe (~> 0.1) uglifier (4.1.20) execjs (>= 0.3.0, < 3) + unicode-display_width (1.6.0) vegas (0.1.11) rack (>= 1.0.0) webmock (3.4.2) @@ -444,7 +461,7 @@ DEPENDENCIES byebug canvas_oauth_engine (~> 2.1.2) capybara-screenshot - capybara-webkit (= 1.3.1) + capybara-webkit (= 1.15.1) chronic (~> 0.10) coffee-rails (~> 5.0.0) coffee-script (= 2.2.0) @@ -485,6 +502,8 @@ DEPENDENCIES rspec-collection_matchers rspec-its rspec-rails + rubocop (= 0.52.1) + rubocop-rspec (= 1.22.2) rufus-scheduler (= 3.4.2) sass-rails (~> 5.0.0) sentry-raven (~> 2.0)