pronto-bigfiles 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.circleci/config.yml +20 -0
- data/.gitignore +15 -0
- data/.pronto.yml +5 -0
- data/.rspec +3 -0
- data/.rubocop.yml +74 -0
- data/.ruby-version +1 -0
- data/.travis.yml +16 -0
- data/CODE_OF_CONDUCT.md +76 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +234 -0
- data/LICENSE.txt +21 -0
- data/Makefile +16 -0
- data/README.md +78 -0
- data/Rakefile +0 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/coverage/.last_run.json +5 -0
- data/exe/pronto-bigfiles +4 -0
- data/feature/pronto/big_files_cli_spec.rb +88 -0
- data/feature/spec_helper.rb +0 -0
- data/lib/pronto/bigfiles/message_creator.rb +31 -0
- data/lib/pronto/bigfiles/patch_inspector.rb +45 -0
- data/lib/pronto/bigfiles/patch_wrapper.rb +28 -0
- data/lib/pronto/bigfiles/version.rb +7 -0
- data/lib/pronto/bigfiles.rb +35 -0
- data/metrics/bigfiles_high_water_mark +1 -0
- data/metrics/brakeman_high_water_mark +1 -0
- data/metrics/bundle-audit_high_water_mark +1 -0
- data/metrics/cane_high_water_mark +1 -0
- data/metrics/eslint_high_water_mark +1 -0
- data/metrics/flake8_high_water_mark +1 -0
- data/metrics/flay_high_water_mark +1 -0
- data/metrics/flog_high_water_mark +1 -0
- data/metrics/jscs_high_water_mark +1 -0
- data/metrics/mdl_high_water_mark +1 -0
- data/metrics/punchlist_high_water_mark +1 -0
- data/metrics/pycodestyle_high_water_mark +1 -0
- data/metrics/rails_best_practices_high_water_mark +1 -0
- data/metrics/rubocop_high_water_mark +1 -0
- data/metrics/scalastyle_high_water_mark +1 -0
- data/metrics/shellcheck_high_water_mark +1 -0
- data/pronto-bigfiles.gemspec +49 -0
- data/rakelib/ci.rake +4 -0
- data/rakelib/clear_metrics.rake +8 -0
- data/rakelib/default.rake +3 -0
- data/rakelib/feature.rake +9 -0
- data/rakelib/gem_tasks.rake +3 -0
- data/rakelib/localtest.rake +4 -0
- data/rakelib/pronto.rake +15 -0
- data/rakelib/quality.rake +23 -0
- data/rakelib/spec.rake +9 -0
- data/rakelib/update_bundle_audit.rake +6 -0
- metadata +243 -0
| @@ -0,0 +1,88 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'pronto/bigfiles'
         | 
| 4 | 
            +
            require 'tmpdir'
         | 
| 5 | 
            +
            require 'open3'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            describe Pronto::BigFiles do
         | 
| 8 | 
            +
              let(:env) do
         | 
| 9 | 
            +
                {
         | 
| 10 | 
            +
                  # Avoid spurious deprecation warnings in things which are out of
         | 
| 11 | 
            +
                  # our control
         | 
| 12 | 
            +
                  'RUBYOPT' => '-W0',
         | 
| 13 | 
            +
                }
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              describe 'bundle exec pronto list' do
         | 
| 17 | 
            +
                it 'lists this as a runner' do
         | 
| 18 | 
            +
                  out, exit_code = Open3.capture2e(env, 'bundle exec pronto list')
         | 
| 19 | 
            +
                  expect(out).to include("bigfiles\n")
         | 
| 20 | 
            +
                  expect(exit_code).to eq(0)
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              describe 'bundle exec pronto run --staged -r bigfiles -f text' do
         | 
| 25 | 
            +
                let(:pronto_command) do
         | 
| 26 | 
            +
                  'bundle exec pronto run --staged -r bigfiles -f text'
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                let(:results) { Open3.capture2e(env, pronto_command) }
         | 
| 30 | 
            +
                let(:out) { results[0] }
         | 
| 31 | 
            +
                let(:exit_code) { results[1] }
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                around do |example|
         | 
| 34 | 
            +
                  Dir.mktmpdir do |dir|
         | 
| 35 | 
            +
                    Dir.chdir(dir) do
         | 
| 36 | 
            +
                      system('git init')
         | 
| 37 | 
            +
                      system('git config user.email "you@example.com"')
         | 
| 38 | 
            +
                      system('git config user.name "Fake User"')
         | 
| 39 | 
            +
                      example_files_committed.each do |filename, contents|
         | 
| 40 | 
            +
                        File.write(filename, contents)
         | 
| 41 | 
            +
                      end
         | 
| 42 | 
            +
                      system('git add .')
         | 
| 43 | 
            +
                      system('git commit -m "First commit"')
         | 
| 44 | 
            +
                      example_files_staged.each do |filename, contents|
         | 
| 45 | 
            +
                        File.write(filename, contents)
         | 
| 46 | 
            +
                      end
         | 
| 47 | 
            +
                      system('git add .')
         | 
| 48 | 
            +
                      example.run
         | 
| 49 | 
            +
                    end
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                # Policy: We complain iff:
         | 
| 54 | 
            +
                #
         | 
| 55 | 
            +
                # a file is added to
         | 
| 56 | 
            +
                # that is in the three complained about
         | 
| 57 | 
            +
                # and the total ends up above 300
         | 
| 58 | 
            +
                #
         | 
| 59 | 
            +
                # ...and we only complain once per file
         | 
| 60 | 
            +
                context 'when single file net added to ' \
         | 
| 61 | 
            +
                        'that is one of the three complained about, ' \
         | 
| 62 | 
            +
                        'and is above limit' do
         | 
| 63 | 
            +
                  let(:expected_output) do
         | 
| 64 | 
            +
                    "one_line_added_above_limit.rb:302 W: This file, one of the " \
         | 
| 65 | 
            +
                    "3 largest in the project, increased in size to 302 lines.  " \
         | 
| 66 | 
            +
                    "The total size of those files is now 502 lines (target: 300).  " \
         | 
| 67 | 
            +
                    "Is this file complex enough to refactor?\n"
         | 
| 68 | 
            +
                  end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                  let(:example_files_committed) do
         | 
| 71 | 
            +
                    {
         | 
| 72 | 
            +
                      'one_line_added_above_limit.rb' => ("\n" * 301),
         | 
| 73 | 
            +
                      'some_other_file_1.rb' => ("\n" * 100),
         | 
| 74 | 
            +
                      'some_other_file_2.rb' => ("\n" * 100),
         | 
| 75 | 
            +
                    }
         | 
| 76 | 
            +
                  end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                  let(:example_files_staged) do
         | 
| 79 | 
            +
                    { 'one_line_added_above_limit.rb' => ("\n" * 302) }
         | 
| 80 | 
            +
                  end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                  it 'complains on line of first change' do
         | 
| 83 | 
            +
                    expect(out).to eq(expected_output)
         | 
| 84 | 
            +
                    expect(exit_code).to eq(0)
         | 
| 85 | 
            +
                  end
         | 
| 86 | 
            +
                end
         | 
| 87 | 
            +
              end
         | 
| 88 | 
            +
            end
         | 
| 
            File without changes
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'pronto'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Pronto
         | 
| 6 | 
            +
              # Performs incremental quality reporting for the bigfiles gem
         | 
| 7 | 
            +
              class BigFiles < Runner
         | 
| 8 | 
            +
                # Creates Pronto warning message objects
         | 
| 9 | 
            +
                class MessageCreator
         | 
| 10 | 
            +
                  attr_reader :num_files, :total_lines, :target_num_lines
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def initialize(num_files, total_lines, target_num_lines)
         | 
| 13 | 
            +
                    @num_files = num_files
         | 
| 14 | 
            +
                    @total_lines = total_lines
         | 
| 15 | 
            +
                    @target_num_lines = target_num_lines
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def create_message(patch_wrapper, num_lines)
         | 
| 19 | 
            +
                    path = patch_wrapper.path
         | 
| 20 | 
            +
                    line = patch_wrapper.first_added_line
         | 
| 21 | 
            +
                    level = :warning
         | 
| 22 | 
            +
                    msg = "This file, one of the #{num_files} largest in the project, " \
         | 
| 23 | 
            +
                          "increased in size to #{num_lines} lines.  The total size " \
         | 
| 24 | 
            +
                          "of those files is now #{total_lines} lines " \
         | 
| 25 | 
            +
                          "(target: #{target_num_lines}).  Is this file complex " \
         | 
| 26 | 
            +
                          "enough to refactor?"
         | 
| 27 | 
            +
                    Message.new(path, line, level, msg)
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,45 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'pronto'
         | 
| 4 | 
            +
            require_relative 'message_creator'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Pronto
         | 
| 7 | 
            +
              # Performs incremental quality reporting for the bigfiles gem
         | 
| 8 | 
            +
              class BigFiles < Runner
         | 
| 9 | 
            +
                # Inspects patches and returns a Pronto::Message class when appropriate
         | 
| 10 | 
            +
                class PatchInspector
         | 
| 11 | 
            +
                  def initialize(bigfiles_result,
         | 
| 12 | 
            +
                                 message_creator_class: MessageCreator,
         | 
| 13 | 
            +
                                 bigfiles_config:)
         | 
| 14 | 
            +
                    @message_creator_class = message_creator_class
         | 
| 15 | 
            +
                    @bigfiles_result = bigfiles_result
         | 
| 16 | 
            +
                    @bigfiles_config = bigfiles_config
         | 
| 17 | 
            +
                    @message_creator =
         | 
| 18 | 
            +
                      @message_creator_class.new(@bigfiles_config.num_files,
         | 
| 19 | 
            +
                                                 total_lines,
         | 
| 20 | 
            +
                                                 @bigfiles_config.high_water_mark)
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def under_limit?
         | 
| 24 | 
            +
                    @bigfiles_config.under_limit?(total_lines)
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  def total_lines
         | 
| 28 | 
            +
                    @bigfiles_result.map(&:num_lines).reduce(:+)
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  def inspect_patch(patch_wrapper)
         | 
| 32 | 
            +
                    path = patch_wrapper.path
         | 
| 33 | 
            +
                    file_with_line = @bigfiles_result.find { |f| f.filename == path }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    return if file_with_line.nil?
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    return unless patch_wrapper.added_to?
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    return if under_limit?
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    @message_creator.create_message(patch_wrapper, file_with_line.num_lines)
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
            end
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'pronto'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Pronto
         | 
| 6 | 
            +
              class BigFiles < Runner
         | 
| 7 | 
            +
                # Add convenience methods on top of Pronto::Git::Patch
         | 
| 8 | 
            +
                class PatchWrapper
         | 
| 9 | 
            +
                  attr_reader :patch
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def initialize(patch)
         | 
| 12 | 
            +
                    @patch = patch
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def added_to?
         | 
| 16 | 
            +
                    (patch.additions - patch.deletions).positive?
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def path
         | 
| 20 | 
            +
                    patch.delta.new_file[:path]
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def first_added_line
         | 
| 24 | 
            +
                    patch.added_lines.first
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'pronto/bigfiles/version'
         | 
| 4 | 
            +
            require 'pronto/bigfiles/patch_inspector'
         | 
| 5 | 
            +
            require 'pronto/bigfiles/patch_wrapper'
         | 
| 6 | 
            +
            require 'bigfiles/inspector'
         | 
| 7 | 
            +
            require 'bigfiles/config'
         | 
| 8 | 
            +
            require 'pronto'
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            module Pronto
         | 
| 11 | 
            +
              # Performs incremental quality reporting for the bigfiles gem
         | 
| 12 | 
            +
              class BigFiles < Runner
         | 
| 13 | 
            +
                def initialize(patches, commit = nil,
         | 
| 14 | 
            +
                               bigfiles_config: ::BigFiles::Config.new,
         | 
| 15 | 
            +
                               bigfiles_inspector: ::BigFiles::Inspector.new,
         | 
| 16 | 
            +
                               bigfiles_results: bigfiles_inspector.find_and_analyze,
         | 
| 17 | 
            +
                               patch_wrapper_class: PatchWrapper,
         | 
| 18 | 
            +
                               patch_inspector: PatchInspector.new(bigfiles_results,
         | 
| 19 | 
            +
                                                                   bigfiles_config:
         | 
| 20 | 
            +
                                                                     bigfiles_config))
         | 
| 21 | 
            +
                  super(patches, commit)
         | 
| 22 | 
            +
                  @patch_inspector = patch_inspector
         | 
| 23 | 
            +
                  @patch_wrapper_class = patch_wrapper_class
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                class Error < StandardError; end
         | 
| 27 | 
            +
                def run
         | 
| 28 | 
            +
                  @patches.flat_map { |patch| inspect_patch(patch) }
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def inspect_patch(patch)
         | 
| 32 | 
            +
                  @patch_inspector.inspect_patch(@patch_wrapper_class.new(patch))
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            300
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0
         | 
| @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'lib/pronto/bigfiles/version'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Gem::Specification.new do |spec|
         | 
| 6 | 
            +
              spec.name          = 'pronto-bigfiles'
         | 
| 7 | 
            +
              spec.version       = Pronto::BigFilesVersion::VERSION
         | 
| 8 | 
            +
              spec.authors       = ['Vince Broz']
         | 
| 9 | 
            +
              spec.email         = ['vince@broz.cc']
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              spec.summary       = 'Pronto plugin for the bigfiles gem'
         | 
| 12 | 
            +
              spec.description   = <<~DESCRIPTION
         | 
| 13 | 
            +
                Performs incremental quality reporting for the bigfiles gem.
         | 
| 14 | 
            +
                BigFiles is a simple tool to find the largest source files in your
         | 
| 15 | 
            +
                project; this gem plugs in with the 'pronto' gem, which does
         | 
| 16 | 
            +
                incremental reporting using a variety of quality tools.
         | 
| 17 | 
            +
              DESCRIPTION
         | 
| 18 | 
            +
              spec.homepage      = 'https://github.com/apiology/pronto-bigfiles'
         | 
| 19 | 
            +
              spec.license       = 'MIT'
         | 
| 20 | 
            +
              spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              spec.metadata['homepage_uri'] = spec.homepage
         | 
| 23 | 
            +
              spec.metadata['source_code_uri'] =
         | 
| 24 | 
            +
                'https://github.com/apiology/pronto-bigfiles'
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              # Specify which files should be added to the gem when it is
         | 
| 27 | 
            +
              # released.  The `git ls-files -z` loads the files in the RubyGem
         | 
| 28 | 
            +
              # that have been added into git.
         | 
| 29 | 
            +
              spec.files = Dir.chdir(File.expand_path(__dir__)) do
         | 
| 30 | 
            +
                `git ls-files -z`.split("\x0").reject do |f|
         | 
| 31 | 
            +
                  f.match(%r{^(test|spec|features)/})
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
              spec.bindir        = 'exe'
         | 
| 35 | 
            +
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 36 | 
            +
              spec.require_paths = ['lib']
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              spec.add_dependency 'bigfiles', '>=0.2.0'
         | 
| 39 | 
            +
              spec.add_dependency 'pronto'
         | 
| 40 | 
            +
              spec.add_dependency 'quality', '>= 37'
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              spec.add_development_dependency 'bundler', '~> 2.0'
         | 
| 43 | 
            +
              spec.add_development_dependency 'pronto-punchlist'
         | 
| 44 | 
            +
              spec.add_development_dependency 'pronto-rubocop'
         | 
| 45 | 
            +
              spec.add_development_dependency 'quality', '~> 37'
         | 
| 46 | 
            +
              spec.add_development_dependency 'rake'
         | 
| 47 | 
            +
              spec.add_development_dependency 'rspec'
         | 
| 48 | 
            +
              spec.add_development_dependency 'simplecov'
         | 
| 49 | 
            +
            end
         | 
    
        data/rakelib/ci.rake
    ADDED
    
    
    
        data/rakelib/pronto.rake
    ADDED
    
    | @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            desc 'Look for incremental quality issues'
         | 
| 4 | 
            +
            task :pronto do
         | 
| 5 | 
            +
              formatter = '-f github_pr' if ENV.key? 'PRONTO_GITHUB_ACCESS_TOKEN'
         | 
| 6 | 
            +
              if ENV.key? 'TRAVIS_PULL_REQUEST'
         | 
| 7 | 
            +
                ENV['PRONTO_PULL_REQUEST_ID'] = ENV['TRAVIS_PULL_REQUEST']
         | 
| 8 | 
            +
              elsif ENV.key? 'CIRCLE_PULL_REQUEST'
         | 
| 9 | 
            +
                ENV['PRONTO_PULL_REQUEST_ID'] = ENV['CIRCLE_PULL_REQUEST'].split('/').last
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
              sh "pronto run #{formatter} -c origin/master --no-exit-code --unstaged "\
         | 
| 12 | 
            +
                 "|| true"
         | 
| 13 | 
            +
              sh "pronto run #{formatter} -c origin/master --no-exit-code --staged || true"
         | 
| 14 | 
            +
              sh "pronto run #{formatter} -c origin/master --no-exit-code || true"
         | 
| 15 | 
            +
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'quality/rake/task'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Quality::Rake::Task.new do |task|
         | 
| 6 | 
            +
              task.exclude_files = ['Gemfile.lock']
         | 
| 7 | 
            +
              # cane deprecated in favor of rubocop, reek rarely actionable
         | 
| 8 | 
            +
              task.skip_tools = %w[reek cane eslint jscs flake8]
         | 
| 9 | 
            +
              task.output_dir = 'metrics'
         | 
| 10 | 
            +
              task.punchlist_regexp = 'XX' \
         | 
| 11 | 
            +
                                      'X|TOD' \
         | 
| 12 | 
            +
                                      'O|FIXM' \
         | 
| 13 | 
            +
                                      'E|OPTIMIZ' \
         | 
| 14 | 
            +
                                      'E|HAC' \
         | 
| 15 | 
            +
                                      'K|REVIE' \
         | 
| 16 | 
            +
                                      'W|LATE' \
         | 
| 17 | 
            +
                                      'R|FIXI' \
         | 
| 18 | 
            +
                                      'T|xi' \
         | 
| 19 | 
            +
                                      't '
         | 
| 20 | 
            +
            end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            desc 'Static analysis and metrics enforcement'
         | 
| 23 | 
            +
            task quality: %i[pronto update_bundle_audit]
         | 
    
        data/rakelib/spec.rake
    ADDED