From 31cf417c98e59eb8e506ac2cc16f8475a62b1013 Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Tue, 23 Aug 2022 11:24:32 -0400 Subject: [PATCH] dep: move dev dependencies into Gemfile Pin the dev dependencies so that dependabot will tell us when new versions are out and we'll get CI results automatically. Make rubocop dependencies conditional on Ruby 3 to work around the constraint of rubocop-shopify requiring ruby 2.7 or higher. Bump rubocop versions and regenerate the rubocop TODO file. --- .rubocop.yml | 1 + .rubocop_todo.yml | 25 ++++++++---------- Gemfile | 32 +++++++++++++++++++++++ nokogiri.gemspec | 17 ------------ rakelib/rubocop.rake | 61 ++++++++++++++++++++++++-------------------- 5 files changed, 76 insertions(+), 60 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 33831e1fc1c..dc1a30860c3 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -12,6 +12,7 @@ AllCops: - 'lib/nokogiri/css/parser.rb' # generated by racc - 'lib/nokogiri/css/tokenizer.rb' # generated by rex - 'lib/nokogiri/jruby/nokogiri_jars.rb' # generated by jar-dependencies + TargetRubyVersion: "2.6" Naming/MethodName: Enabled: false Naming/FileName: diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index a02e3df007b..90b3572bda9 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2022-04-27 12:13:42 UTC using RuboCop version 1.28.2. +# on 2022-08-23 16:20:00 UTC using RuboCop version 1.35.1. # 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 @@ -13,10 +13,10 @@ Lint/MissingSuper: - 'lib/nokogiri/html5/document_fragment.rb' - 'lib/nokogiri/xml/document_fragment.rb' -# Offense count: 17 +# Offense count: 4 # Configuration parameters: CountBlocks. Metrics/BlockNesting: - Max: 5 + Max: 4 # Offense count: 2 # Configuration parameters: Max, CountKeywordArgs. @@ -31,16 +31,12 @@ Performance/CollectionLiteralInLoop: - 'test/xml/test_dtd_encoding.rb' - 'test/xml/test_node_reparenting.rb' -# Offense count: 17 -# This cop supports safe auto-correction (--auto-correct). -# Configuration parameters: AllowedVars. -Style/FetchEnvVar: - Exclude: - - 'ext/nokogiri/extconf.rb' - - 'rakelib/debug.rake' - - 'rakelib/extensions.rake' - - 'rakelib/rdoc.rake' - - 'test/helper.rb' +# Offense count: 23 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: def_self, self_class +Style/ClassMethodsDefinitions: + Enabled: false # Offense count: 2 Style/MissingRespondToMissing: @@ -48,9 +44,8 @@ Style/MissingRespondToMissing: - 'lib/nokogiri/xml/builder.rb' # Offense count: 73 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns, IgnoredPatterns. # URISchemes: http, https -# AllowedPatterns: \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z), \A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z) Layout/LineLength: Max: 250 diff --git a/Gemfile b/Gemfile index be173b205f7..4252db7e2ad 100644 --- a/Gemfile +++ b/Gemfile @@ -3,3 +3,35 @@ source "https://rubygems.org" gemspec + +group :development do + # bootstrapping + gem "bundler", "~> 2.3" + gem "rake", "= 13.0.6" + + # building extensions + gem "rake-compiler", "= 1.2.0" + gem "rake-compiler-dock", "= 1.2.2" + + # documentation + gem "hoe-markdown", "= 1.4.0" + gem "rdoc", "= 6.4.0" + + # parser generator + gem "rexical", "= 1.0.7" + + # tests + gem "minitest", "= 5.16.3" + gem "minitest-reporters", "= 1.5.0" + gem "ruby_memcheck", "= 1.0.3" + gem "simplecov", "= 0.21.2" + + # rubocop + if Gem::Requirement.new("~> 3.0").satisfied_by?(Gem::Version.new(RUBY_VERSION)) + gem "rubocop", "= 1.35.1" + gem "rubocop-minitest", "= 0.21.0" + gem "rubocop-performance", "= 1.14.3" + gem "rubocop-rake", "= 0.6.0" + gem "rubocop-shopify", "= 2.9.0" + end +end diff --git a/nokogiri.gemspec b/nokogiri.gemspec index 6ae955e8c6f..77836a5560f 100644 --- a/nokogiri.gemspec +++ b/nokogiri.gemspec @@ -339,22 +339,5 @@ Gem::Specification.new do |spec| end spec.add_runtime_dependency("racc", "~> 1.4") - spec.add_development_dependency("bundler", "~> 2.3") - spec.add_development_dependency("hoe-markdown", "~> 1.4.0") - spec.add_development_dependency("minitest", "~> 5.16.2") - spec.add_development_dependency("minitest-reporters", "~> 1.5.0") - spec.add_development_dependency("rake", "~> 13.0.6") - spec.add_development_dependency("rake-compiler", "= 1.2.0") - spec.add_development_dependency("rake-compiler-dock", "= 1.2.2") - spec.add_development_dependency("rdoc", "~> 6.4.0") - spec.add_development_dependency("rexical", "~> 1.0.7") - spec.add_development_dependency("rubocop", "~> 1.30.1") - spec.add_development_dependency("rubocop-minitest", "~> 0.21.0") - spec.add_development_dependency("rubocop-performance", "~> 1.14.2") - spec.add_development_dependency("rubocop-rake", "~> 0.6.0") - spec.add_development_dependency("rubocop-shopify", "= 2.5.0") # TODO: loosen this after dropping support for Ruby 2.6 - spec.add_development_dependency("ruby_memcheck", "~> 1.0.3") - spec.add_development_dependency("simplecov", "~> 0.21.2") - spec.extensions << "ext/nokogiri/extconf.rb" end diff --git a/rakelib/rubocop.rake b/rakelib/rubocop.rake index d0326f0b95c..538b042f9dd 100644 --- a/rakelib/rubocop.rake +++ b/rakelib/rubocop.rake @@ -1,38 +1,43 @@ # frozen_string_literal: true -require "rubocop/rake_task" +begin + require("rubocop/rake_task") -module RubocopHelper - class << self - def common_options(task) - task.patterns += [ - "Gemfile", "Rakefile", "nokogiri.gemspec", - "bin", "ext", "lib", "oci-images", "rakelib", "scripts", "test", - ] - end + module RubocopHelper + class << self + def common_options(task) + task.patterns += [ + "Gemfile", "Rakefile", "nokogiri.gemspec", + "bin", "ext", "lib", "oci-images", "rakelib", "scripts", "test", + ] + end - def generated_files(task) - task.patterns += ["lib/nokogiri/css/parser.rb", "lib/nokogiri/css/tokenizer.rb"] - task.options << "--only=Style/FrozenStringLiteralComment" + def generated_files(task) + task.patterns += ["lib/nokogiri/css/parser.rb", "lib/nokogiri/css/tokenizer.rb"] + task.options << "--only=Style/FrozenStringLiteralComment" + end end end -end -namespace "rubocop" do - desc "Generate the rubocop todo list" - RuboCop::RakeTask.new("todo") do |task| - RubocopHelper.common_options(task) - task.options << "--auto-gen-config" - end - Rake::Task["rubocop:todo:auto_correct"].clear + namespace("rubocop") do + desc("Generate the rubocop todo list") + RuboCop::RakeTask.new("todo") do |task| + RubocopHelper.common_options(task) + task.options << "--auto-gen-config" + end + Rake::Task["rubocop:todo:autocorrect"].clear + Rake::Task["rubocop:todo:autocorrect_all"].clear - desc "Run all checks on a subset of directories" - RuboCop::RakeTask.new("check") { |task| RubocopHelper.common_options(task) } - RuboCop::RakeTask.new("check") { |task| RubocopHelper.generated_files(task) } + desc("Run all checks on a subset of directories") + RuboCop::RakeTask.new("check") { |task| RubocopHelper.common_options(task) } + RuboCop::RakeTask.new("check") { |task| RubocopHelper.generated_files(task) } - desc "Shortcut for rubocop:check:auto_correct" - task fix: "rubocop:check:auto_correct" -end + desc("Shortcut for rubocop:check:autocorrect") + task(fix: "rubocop:check:autocorrect") + end -desc "Shortcut for rubocop:check" -task rubocop: "rubocop:check" + desc("Shortcut for rubocop:check") + task(rubocop: "rubocop:check") +rescue LoadError => e + warn("WARNING: rubocop is not available in this environment: #{e}") +end