diff --git a/.github/workflows/ruby-linters.yml b/.github/workflows/ruby-linters.yml new file mode 100644 index 0000000..915c179 --- /dev/null +++ b/.github/workflows/ruby-linters.yml @@ -0,0 +1,41 @@ +# This workflow runs Rubocop and Reek on the Pull Requests to make sure +# no linter warnings slip by. + +name: Ruby Linters + +on: + pull_request: + branches: [ "master" ] + +permissions: + contents: read + +jobs: + lint: + + runs-on: ubuntu-latest + strategy: + matrix: + ruby-version: ['2.7'] + + env: + BUNDLE_GEMFILE: Gemfile.lint + + steps: + - uses: actions/checkout@v4 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby-version }} + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + - name: Run Rubocop + uses: reviewdog/action-rubocop@v2.19.1 + with: + skip_install: true + rubocop_version: gemfile + rubocop_extensions: rubocop-rspec:gemfile + use_bundler: true + - name: Run Reek + uses: reviewdog/action-reek@v1.16.0 + with: + reek_version: gemfile diff --git a/.rubocop.yml b/.rubocop.yml index c59b9e2..1111317 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,5 +1,6 @@ AllCops: Exclude: + - vendor/**/* - spec/spec_helper.rb Metrics/BlockLength: Exclude: diff --git a/Gemfile.lint b/Gemfile.lint new file mode 100644 index 0000000..c60926b --- /dev/null +++ b/Gemfile.lint @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' + +gem 'rubocop', '~> 1' +gem 'rubocop-rspec', '~> 3' +gem 'reek', '~> 6' diff --git a/lib/something.rb b/lib/something.rb new file mode 100644 index 0000000..6eaf239 --- /dev/null +++ b/lib/something.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +# A class to test the linters +class MyClass + # rubocop:disable Metrics/AbcSize + # rubocop:disable Metrics/CyclomaticComplexity + # rubocop:disable Metrics/MethodLength + # rubocop:disable Metrics/PerceivedComplexity + # rubocop:disable Metrics/ParameterLists + def do_something(one, two, three, four, five, six, seven) + if one.present? && two.present? && three.prsent? && four.present? && five.present? && six.present? && seven.present? + do_something_else_with(one, two, three) + doAnotherThing(four, five, six) + + e = mix(one, two) + + if @valid == TRUE + case five + when 'async' + do_another_thing_with('r', six, seven, e) + when 'sync' + do_another_thing_with('m', seven) + when 'nible' + result = four.map(&:name) + end + end + + five.each do |n| + n += 1 + puts "N is now #{n}" + + next unless seven.start_with?('r') + + download(seven) + upload(siv, seven) if six.start_wuth?('w') + end + end + + result + end + # rubocop:enable Metrics/AbcSize + # rubocop:enable Metrics/CyclomaticComplexity + # rubocop:enable Metrics/MethodLength + # rubocop:enable Metrics/PerceivedComplexity + # rubocop:enable Metrics/ParameterLists + + def do_something_else_with(one, two, three) + return unless one == true + + puts 'Print something here:' + puts "#{two} - #{three}" + + @valid = TRUE + end +end