Merge pull request #15263 from Homebrew/dependabot/bundler/Library/Homebrew/rubocop-rspec-2.20.0
build(deps): bump rubocop-rspec from 2.19.0 to 2.20.0 in /Library/Homebrew
This commit is contained in:
commit
935649abaf
@ -151,7 +151,7 @@ GEM
|
||||
activesupport (>= 4.2.0)
|
||||
rack (>= 1.1)
|
||||
rubocop (>= 1.33.0, < 2.0)
|
||||
rubocop-rspec (2.19.0)
|
||||
rubocop-rspec (2.20.0)
|
||||
rubocop (~> 1.33)
|
||||
rubocop-capybara (~> 2.17)
|
||||
rubocop-sorbet (0.7.0)
|
||||
|
||||
@ -85,6 +85,16 @@ end
|
||||
RuboCop::Cop::RSpec::Be::MSG = T.let(T.unsafe(nil), String)
|
||||
RuboCop::Cop::RSpec::Be::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
|
||||
|
||||
class RuboCop::Cop::RSpec::BeEmpty < ::RuboCop::Cop::RSpec::Base
|
||||
extend ::RuboCop::Cop::AutoCorrector
|
||||
|
||||
def expect_array_matcher?(param0 = T.unsafe(nil)); end
|
||||
def on_send(node); end
|
||||
end
|
||||
|
||||
RuboCop::Cop::RSpec::BeEmpty::MSG = T.let(T.unsafe(nil), String)
|
||||
RuboCop::Cop::RSpec::BeEmpty::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
|
||||
|
||||
class RuboCop::Cop::RSpec::BeEq < ::RuboCop::Cop::RSpec::Base
|
||||
extend ::RuboCop::Cop::AutoCorrector
|
||||
|
||||
@ -219,7 +229,8 @@ class RuboCop::Cop::RSpec::ContainExactly < ::RuboCop::Cop::RSpec::Base
|
||||
|
||||
private
|
||||
|
||||
def autocorrect(node, corrector); end
|
||||
def autocorrect_for_populated_array(node, corrector); end
|
||||
def check_populated_collection(node); end
|
||||
end
|
||||
|
||||
RuboCop::Cop::RSpec::ContainExactly::MSG = T.let(T.unsafe(nil), String)
|
||||
@ -325,7 +336,7 @@ RuboCop::Cop::RSpec::DescribedClass::DESCRIBED_CLASS = T.let(T.unsafe(nil), Stri
|
||||
RuboCop::Cop::RSpec::DescribedClass::MSG = T.let(T.unsafe(nil), String)
|
||||
|
||||
class RuboCop::Cop::RSpec::DescribedClassModuleWrapping < ::RuboCop::Cop::RSpec::Base
|
||||
def find_rspec_blocks(param0); end
|
||||
def include_rspec_blocks?(param0); end
|
||||
def on_module(node); end
|
||||
end
|
||||
|
||||
@ -662,6 +673,7 @@ class RuboCop::Cop::RSpec::FactoryBot::ConsistentParenthesesStyle < ::RuboCop::C
|
||||
end
|
||||
end
|
||||
|
||||
RuboCop::Cop::RSpec::FactoryBot::ConsistentParenthesesStyle::AMBIGUOUS_TYPES = T.let(T.unsafe(nil), Array)
|
||||
RuboCop::Cop::RSpec::FactoryBot::ConsistentParenthesesStyle::FACTORY_CALLS = T.let(T.unsafe(nil), Set)
|
||||
RuboCop::Cop::RSpec::FactoryBot::ConsistentParenthesesStyle::MSG_OMIT_PARENS = T.let(T.unsafe(nil), String)
|
||||
RuboCop::Cop::RSpec::FactoryBot::ConsistentParenthesesStyle::MSG_REQUIRE_PARENS = T.let(T.unsafe(nil), String)
|
||||
@ -938,6 +950,19 @@ RuboCop::Cop::RSpec::ImplicitSubject::MSG_REQUIRE_EXPLICIT = T.let(T.unsafe(nil)
|
||||
RuboCop::Cop::RSpec::ImplicitSubject::MSG_REQUIRE_IMPLICIT = T.let(T.unsafe(nil), String)
|
||||
RuboCop::Cop::RSpec::ImplicitSubject::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
|
||||
|
||||
class RuboCop::Cop::RSpec::IndexedLet < ::RuboCop::Cop::RSpec::Base
|
||||
def let_name(param0 = T.unsafe(nil)); end
|
||||
def on_block(node); end
|
||||
|
||||
private
|
||||
|
||||
def filter_indexed_lets(candidates); end
|
||||
def indexed_let?(node); end
|
||||
end
|
||||
|
||||
RuboCop::Cop::RSpec::IndexedLet::INDEX_REGEX = T.let(T.unsafe(nil), Regexp)
|
||||
RuboCop::Cop::RSpec::IndexedLet::MSG = T.let(T.unsafe(nil), String)
|
||||
|
||||
module RuboCop::Cop::RSpec::InflectedHelper
|
||||
include ::RuboCop::RSpec::Language
|
||||
extend ::RuboCop::AST::NodePattern::Macros
|
||||
@ -1107,7 +1132,12 @@ end
|
||||
class RuboCop::Cop::RSpec::MatchArray < ::RuboCop::Cop::RSpec::Base
|
||||
extend ::RuboCop::Cop::AutoCorrector
|
||||
|
||||
def match_array_with_empty_array?(param0 = T.unsafe(nil)); end
|
||||
def on_send(node); end
|
||||
|
||||
private
|
||||
|
||||
def check_populated_array(node); end
|
||||
end
|
||||
|
||||
RuboCop::Cop::RSpec::MatchArray::MSG = T.let(T.unsafe(nil), String)
|
||||
@ -1346,6 +1376,7 @@ class RuboCop::Cop::RSpec::PendingWithoutReason < ::RuboCop::Cop::RSpec::Base
|
||||
def pending_step_without_reason?(param0 = T.unsafe(nil)); end
|
||||
def skipped_by_example_group_method?(param0 = T.unsafe(nil)); end
|
||||
def skipped_by_example_method?(param0 = T.unsafe(nil)); end
|
||||
def skipped_by_example_method_with_block?(param0 = T.unsafe(nil)); end
|
||||
def skipped_in_example?(param0 = T.unsafe(nil)); end
|
||||
|
||||
private
|
||||
@ -1354,7 +1385,7 @@ class RuboCop::Cop::RSpec::PendingWithoutReason < ::RuboCop::Cop::RSpec::Base
|
||||
def on_pending_by_metadata(node); end
|
||||
def on_skipped_by_example_group_method(node); end
|
||||
def on_skipped_by_example_method(node); end
|
||||
def on_skipped_by_in_example_method(node, _direct_parent); end
|
||||
def on_skipped_by_in_example_method(node); end
|
||||
def parent_node(node); end
|
||||
end
|
||||
|
||||
@ -1405,42 +1436,55 @@ class RuboCop::Cop::RSpec::Rails::HttpStatus < ::RuboCop::Cop::RSpec::Base
|
||||
def checker_class; end
|
||||
end
|
||||
|
||||
class RuboCop::Cop::RSpec::Rails::HttpStatus::NumericStyleChecker
|
||||
def initialize(node); end
|
||||
|
||||
def message; end
|
||||
def node; end
|
||||
class RuboCop::Cop::RSpec::Rails::HttpStatus::BeStatusStyleChecker < ::RuboCop::Cop::RSpec::Rails::HttpStatus::StyleCheckerBase
|
||||
def current; end
|
||||
def offense_range; end
|
||||
def offensive?; end
|
||||
def preferred_style; end
|
||||
def prefer; end
|
||||
|
||||
private
|
||||
|
||||
def number; end
|
||||
def symbol; end
|
||||
end
|
||||
|
||||
class RuboCop::Cop::RSpec::Rails::HttpStatus::NumericStyleChecker < ::RuboCop::Cop::RSpec::Rails::HttpStatus::StyleCheckerBase
|
||||
def current; end
|
||||
def offensive?; end
|
||||
def prefer; end
|
||||
|
||||
private
|
||||
|
||||
def allowed_symbol?; end
|
||||
def number; end
|
||||
def symbol; end
|
||||
end
|
||||
|
||||
RuboCop::Cop::RSpec::Rails::HttpStatus::NumericStyleChecker::ALLOWED_STATUSES = T.let(T.unsafe(nil), Array)
|
||||
RuboCop::Cop::RSpec::Rails::HttpStatus::NumericStyleChecker::MSG = T.let(T.unsafe(nil), String)
|
||||
RuboCop::Cop::RSpec::Rails::HttpStatus::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
|
||||
|
||||
class RuboCop::Cop::RSpec::Rails::HttpStatus::SymbolicStyleChecker
|
||||
class RuboCop::Cop::RSpec::Rails::HttpStatus::StyleCheckerBase
|
||||
def initialize(node); end
|
||||
|
||||
def allowed_symbol?; end
|
||||
def custom_http_status_code?; end
|
||||
def message; end
|
||||
def node; end
|
||||
def offense_range; end
|
||||
end
|
||||
|
||||
RuboCop::Cop::RSpec::Rails::HttpStatus::StyleCheckerBase::ALLOWED_STATUSES = T.let(T.unsafe(nil), Array)
|
||||
RuboCop::Cop::RSpec::Rails::HttpStatus::StyleCheckerBase::MSG = T.let(T.unsafe(nil), String)
|
||||
|
||||
class RuboCop::Cop::RSpec::Rails::HttpStatus::SymbolicStyleChecker < ::RuboCop::Cop::RSpec::Rails::HttpStatus::StyleCheckerBase
|
||||
def current; end
|
||||
def offensive?; end
|
||||
def preferred_style; end
|
||||
def prefer; end
|
||||
|
||||
private
|
||||
|
||||
def custom_http_status_code?; end
|
||||
def number; end
|
||||
def symbol; end
|
||||
end
|
||||
|
||||
RuboCop::Cop::RSpec::Rails::HttpStatus::SymbolicStyleChecker::MSG = T.let(T.unsafe(nil), String)
|
||||
|
||||
class RuboCop::Cop::RSpec::Rails::InferredSpecType < ::RuboCop::Cop::RSpec::Base
|
||||
extend ::RuboCop::Cop::AutoCorrector
|
||||
|
||||
@ -1683,11 +1727,16 @@ end
|
||||
RuboCop::Cop::RSpec::ScatteredLet::MSG = T.let(T.unsafe(nil), String)
|
||||
|
||||
class RuboCop::Cop::RSpec::ScatteredSetup < ::RuboCop::Cop::RSpec::Base
|
||||
include ::RuboCop::Cop::RangeHelp
|
||||
extend ::RuboCop::Cop::AutoCorrector
|
||||
|
||||
def on_block(node); end
|
||||
|
||||
private
|
||||
|
||||
def autocorrect(corrector, first_occurrence, occurrence); end
|
||||
def lines_msg(numbers); end
|
||||
def message(occurrences, occurrence); end
|
||||
def repeated_hooks(node); end
|
||||
end
|
||||
|
||||
@ -6520,6 +6520,7 @@ module RuboCop::AST::NodePattern::Sets
|
||||
SET_MAC_LINUX = ::T.let(nil, ::T.untyped)
|
||||
SET_ON_INTEL_ON_ARM = ::T.let(nil, ::T.untyped)
|
||||
SET_OR_NEWER_OR_OLDER = ::T.let(nil, ::T.untyped)
|
||||
SET_STATUS_CODE = ::T.let(nil, ::T.untyped)
|
||||
SET_SYSTEM_SHELL_OUTPUT_PIPE_OUTPUT = ::T.let(nil, ::T.untyped)
|
||||
SET_T_TRANSLATE_L_LOCALIZE = ::T.let(nil, ::T.untyped)
|
||||
SET_WITH_WITHOUT = ::T.let(nil, ::T.untyped)
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
require "cask/upgrade"
|
||||
|
||||
describe Cask::Upgrade, :cask do
|
||||
let(:version_latest_path_2) { version_latest.config.appdir.join("Caffeine Pro.app") }
|
||||
let(:version_latest_path_1) { version_latest.config.appdir.join("Caffeine Mini.app") }
|
||||
let(:version_latest_path_second) { version_latest.config.appdir.join("Caffeine Pro.app") }
|
||||
let(:version_latest_path_first) { version_latest.config.appdir.join("Caffeine Mini.app") }
|
||||
let(:version_latest) { Cask::CaskLoader.load("version-latest") }
|
||||
let(:auto_updates_path) { auto_updates.config.appdir.join("MyFancyApp.app") }
|
||||
let(:auto_updates) { Cask::CaskLoader.load("auto-updates") }
|
||||
@ -107,7 +107,7 @@ describe Cask::Upgrade, :cask do
|
||||
expect(local_transmission.versions).to include("2.60")
|
||||
|
||||
expect(version_latest).to be_installed
|
||||
expect(version_latest_path_1).to be_a_directory
|
||||
expect(version_latest_path_first).to be_a_directory
|
||||
expect(version_latest.versions).to include("latest")
|
||||
# Change download sha so that :latest cask decides to update itself
|
||||
version_latest.download_sha_path.write("fake download sha")
|
||||
@ -128,7 +128,7 @@ describe Cask::Upgrade, :cask do
|
||||
expect(local_transmission.versions).to include("2.61")
|
||||
|
||||
expect(version_latest).to be_installed
|
||||
expect(version_latest_path_2).to be_a_directory
|
||||
expect(version_latest_path_second).to be_a_directory
|
||||
expect(version_latest.versions).to include("latest")
|
||||
expect(version_latest.outdated_download_sha?).to be(false)
|
||||
end
|
||||
@ -153,8 +153,8 @@ describe Cask::Upgrade, :cask do
|
||||
|
||||
it 'does not include the Casks with "version latest" when the version did not change' do
|
||||
expect(version_latest).to be_installed
|
||||
expect(version_latest_path_1).to be_a_directory
|
||||
expect(version_latest_path_2).to be_a_directory
|
||||
expect(version_latest_path_first).to be_a_directory
|
||||
expect(version_latest_path_second).to be_a_directory
|
||||
expect(version_latest.versions).to include("latest")
|
||||
# Change download sha so that :latest cask decides to update itself
|
||||
version_latest.download_sha_path.write("fake download sha")
|
||||
@ -163,16 +163,16 @@ describe Cask::Upgrade, :cask do
|
||||
described_class.upgrade_casks(version_latest, greedy: true, args: args)
|
||||
|
||||
expect(version_latest).to be_installed
|
||||
expect(version_latest_path_1).to be_a_directory
|
||||
expect(version_latest_path_2).to be_a_directory
|
||||
expect(version_latest_path_first).to be_a_directory
|
||||
expect(version_latest_path_second).to be_a_directory
|
||||
expect(version_latest.versions).to include("latest")
|
||||
expect(version_latest.outdated_download_sha?).to be(false)
|
||||
|
||||
described_class.upgrade_casks(version_latest, greedy: true, args: args)
|
||||
|
||||
expect(version_latest).to be_installed
|
||||
expect(version_latest_path_1).to be_a_directory
|
||||
expect(version_latest_path_2).to be_a_directory
|
||||
expect(version_latest_path_first).to be_a_directory
|
||||
expect(version_latest_path_second).to be_a_directory
|
||||
expect(version_latest.versions).to include("latest")
|
||||
expect(version_latest.outdated_download_sha?).to be(false)
|
||||
end
|
||||
@ -330,8 +330,8 @@ describe Cask::Upgrade, :cask do
|
||||
expect(described_class).not_to receive(:upgrade_cask)
|
||||
|
||||
expect(version_latest).to be_installed
|
||||
expect(version_latest_path_1).to be_a_directory
|
||||
expect(version_latest_path_2).to be_a_directory
|
||||
expect(version_latest_path_first).to be_a_directory
|
||||
expect(version_latest_path_second).to be_a_directory
|
||||
expect(version_latest.versions).to include("latest")
|
||||
# Change download sha so that :latest cask decides to update itself
|
||||
version_latest.download_sha_path.write("fake download sha")
|
||||
@ -340,8 +340,8 @@ describe Cask::Upgrade, :cask do
|
||||
described_class.upgrade_casks(version_latest, dry_run: true, greedy: true, args: args)
|
||||
|
||||
expect(version_latest).to be_installed
|
||||
expect(version_latest_path_1).to be_a_directory
|
||||
expect(version_latest_path_2).to be_a_directory
|
||||
expect(version_latest_path_first).to be_a_directory
|
||||
expect(version_latest_path_second).to be_a_directory
|
||||
expect(version_latest.versions).to include("latest")
|
||||
expect(version_latest.outdated_download_sha?).to be(true)
|
||||
end
|
||||
|
||||
@ -66,11 +66,11 @@ describe Homebrew::Cleanup do
|
||||
end
|
||||
|
||||
context "when it can't remove a keg" do
|
||||
let(:f1) { Class.new(Testball) { version "0.1" }.new }
|
||||
let(:f2) { Class.new(Testball) { version "0.2" }.new }
|
||||
let(:formula_zero_dot_one) { Class.new(Testball) { version "0.1" }.new }
|
||||
let(:formula_zero_dot_two) { Class.new(Testball) { version "0.2" }.new }
|
||||
|
||||
before do
|
||||
[f1, f2].each do |f|
|
||||
[formula_zero_dot_one, formula_zero_dot_two].each do |f|
|
||||
f.brew do
|
||||
f.install
|
||||
end
|
||||
@ -84,13 +84,13 @@ describe Homebrew::Cleanup do
|
||||
end
|
||||
|
||||
it "doesn't remove any kegs" do
|
||||
cleanup.cleanup_formula f2
|
||||
expect(f1.installed_kegs.size).to eq(2)
|
||||
cleanup.cleanup_formula formula_zero_dot_one
|
||||
expect(formula_zero_dot_one.installed_kegs.size).to eq(2)
|
||||
end
|
||||
|
||||
it "lists the unremovable kegs" do
|
||||
cleanup.cleanup_formula f2
|
||||
expect(cleanup.unremovable_kegs).to contain_exactly(f1.installed_kegs[0])
|
||||
cleanup.cleanup_formula formula_zero_dot_two
|
||||
expect(cleanup.unremovable_kegs).to contain_exactly(formula_zero_dot_one.installed_kegs[0])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -202,10 +202,10 @@ describe "Exception" do
|
||||
end
|
||||
|
||||
describe ChecksumMismatchError do
|
||||
subject { described_class.new("/file.tar.gz", hash1, hash2) }
|
||||
subject { described_class.new("/file.tar.gz", expected_checksum, actual_checksum) }
|
||||
|
||||
let(:hash1) { instance_double(Checksum, to_s: "deadbeef") }
|
||||
let(:hash2) { instance_double(Checksum, to_s: "deadcafe") }
|
||||
let(:expected_checksum) { instance_double(Checksum, to_s: "deadbeef") }
|
||||
let(:actual_checksum) { instance_double(Checksum, to_s: "deadcafe") }
|
||||
|
||||
its(:to_s) { is_expected.to match(/SHA256 mismatch/) }
|
||||
end
|
||||
|
||||
@ -145,16 +145,16 @@ describe "globally-scoped helper methods" do
|
||||
end
|
||||
|
||||
describe "#which_all" do
|
||||
let(:cmd1) { dir/"foo" }
|
||||
let(:cmd2) { dir/"bar/foo" }
|
||||
let(:cmd3) { dir/"bar/baz/foo" }
|
||||
let(:cmd_foo) { dir/"foo" }
|
||||
let(:cmd_foo_bar) { dir/"bar/foo" }
|
||||
let(:cmd_bar_baz_foo) { dir/"bar/baz/foo" }
|
||||
|
||||
before do
|
||||
(dir/"bar/baz").mkpath
|
||||
|
||||
FileUtils.touch cmd2
|
||||
FileUtils.touch cmd_foo_bar
|
||||
|
||||
[cmd1, cmd3].each do |cmd|
|
||||
[cmd_foo, cmd_bar_baz_foo].each do |cmd|
|
||||
FileUtils.touch cmd
|
||||
cmd.chmod 0744
|
||||
end
|
||||
@ -166,7 +166,7 @@ describe "globally-scoped helper methods" do
|
||||
"#{dir}/baz:#{dir}",
|
||||
"~baduserpath",
|
||||
].join(File::PATH_SEPARATOR)
|
||||
expect(which_all("foo", path)).to eq([cmd3, cmd1])
|
||||
expect(which_all("foo", path)).to eq([cmd_bar_baz_foo, cmd_foo])
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -76,15 +76,14 @@ describe PkgVersion do
|
||||
end
|
||||
|
||||
describe "#hash" do
|
||||
let(:p1) { described_class.new(Version.create("1.0"), 1) }
|
||||
let(:p2) { described_class.new(Version.create("1.0"), 1) }
|
||||
let(:p3) { described_class.new(Version.create("1.1"), 1) }
|
||||
let(:p4) { described_class.new(Version.create("1.0"), 0) }
|
||||
let(:version_one_revision_one) { described_class.new(Version.create("1.0"), 1) }
|
||||
let(:version_one_dot_one_revision_one) { described_class.new(Version.create("1.1"), 1) }
|
||||
let(:version_one_revision_zero) { described_class.new(Version.create("1.0"), 0) }
|
||||
|
||||
it "returns a hash based on the version and revision" do
|
||||
expect(p1.hash).to eq(p2.hash)
|
||||
expect(p1.hash).not_to eq(p3.hash)
|
||||
expect(p1.hash).not_to eq(p4.hash)
|
||||
expect(version_one_revision_one.hash).to eq(described_class.new(Version.create("1.0"), 1).hash)
|
||||
expect(version_one_revision_one.hash).not_to eq(version_one_dot_one_revision_one.hash)
|
||||
expect(version_one_revision_one.hash).not_to eq(version_one_revision_zero.hash)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -12,13 +12,13 @@ describe Utils::Autoremove do
|
||||
end
|
||||
end
|
||||
|
||||
let(:formula_is_dep1) do
|
||||
let(:first_formula_dep) do
|
||||
formula "one" do
|
||||
url "one-1.1"
|
||||
end
|
||||
end
|
||||
|
||||
let(:formula_is_dep2) do
|
||||
let(:second_formula_dep) do
|
||||
formula "two" do
|
||||
url "two-1.1"
|
||||
end
|
||||
@ -33,8 +33,8 @@ describe Utils::Autoremove do
|
||||
let(:formulae) do
|
||||
[
|
||||
formula_with_deps,
|
||||
formula_is_dep1,
|
||||
formula_is_dep2,
|
||||
first_formula_dep,
|
||||
second_formula_dep,
|
||||
formula_is_build_dep,
|
||||
]
|
||||
end
|
||||
@ -42,9 +42,9 @@ describe Utils::Autoremove do
|
||||
let(:tab_from_keg) { double }
|
||||
|
||||
before do
|
||||
allow(formula_with_deps).to receive(:runtime_formula_dependencies).and_return([formula_is_dep1,
|
||||
formula_is_dep2])
|
||||
allow(formula_is_dep1).to receive(:runtime_formula_dependencies).and_return([formula_is_dep2])
|
||||
allow(formula_with_deps).to receive(:runtime_formula_dependencies).and_return([first_formula_dep,
|
||||
second_formula_dep])
|
||||
allow(first_formula_dep).to receive(:runtime_formula_dependencies).and_return([second_formula_dep])
|
||||
|
||||
allow(Tab).to receive(:for_keg).and_return(tab_from_keg)
|
||||
end
|
||||
@ -115,28 +115,28 @@ describe Utils::Autoremove do
|
||||
RUBY
|
||||
end
|
||||
|
||||
let(:cask_no_deps1) do
|
||||
let(:first_cask_no_deps) do
|
||||
Cask::CaskLoader.load(+<<-RUBY)
|
||||
cask "green" do
|
||||
end
|
||||
RUBY
|
||||
end
|
||||
|
||||
let(:cask_no_deps2) do
|
||||
let(:second_cask_no_deps) do
|
||||
Cask::CaskLoader.load(+<<-RUBY)
|
||||
cask "purple" do
|
||||
end
|
||||
RUBY
|
||||
end
|
||||
|
||||
let(:casks_no_deps) { [cask_no_deps1, cask_no_deps2] }
|
||||
let(:casks_one_dep) { [cask_no_deps1, cask_no_deps2, cask_one_dep] }
|
||||
let(:casks_multiple_deps) { [cask_no_deps1, cask_no_deps2, cask_multiple_deps] }
|
||||
let(:casks_no_deps) { [first_cask_no_deps, second_cask_no_deps] }
|
||||
let(:casks_one_dep) { [first_cask_no_deps, second_cask_no_deps, cask_one_dep] }
|
||||
let(:casks_multiple_deps) { [first_cask_no_deps, second_cask_no_deps, cask_multiple_deps] }
|
||||
|
||||
before do
|
||||
allow(Formula).to receive("[]").with("zero").and_return(formula_with_deps)
|
||||
allow(Formula).to receive("[]").with("one").and_return(formula_is_dep1)
|
||||
allow(Formula).to receive("[]").with("two").and_return(formula_is_dep2)
|
||||
allow(Formula).to receive("[]").with("one").and_return(first_formula_dep)
|
||||
allow(Formula).to receive("[]").with("two").and_return(second_formula_dep)
|
||||
end
|
||||
end
|
||||
|
||||
@ -150,12 +150,12 @@ describe Utils::Autoremove do
|
||||
|
||||
specify "one dependent" do
|
||||
expect(described_class.send(:formulae_with_cask_dependents, casks_one_dep))
|
||||
.to eq([formula_is_dep2])
|
||||
.to eq([second_formula_dep])
|
||||
end
|
||||
|
||||
specify "multiple dependents" do
|
||||
expect(described_class.send(:formulae_with_cask_dependents, casks_multiple_deps))
|
||||
.to contain_exactly(formula_with_deps, formula_is_dep1, formula_is_dep2)
|
||||
.to contain_exactly(formula_with_deps, first_formula_dep, second_formula_dep)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -46,11 +46,11 @@ describe Utils::Git do
|
||||
let(:file) { "README.md" }
|
||||
# Allow instance variables here for a simpler `before do` block.
|
||||
# rubocop:disable RSpec/InstanceVariable
|
||||
let(:file_hash1) { @h1[0..6] }
|
||||
let(:file_hash2) { @h2[0..6] }
|
||||
let(:file_hash_one) { @h1[0..6] }
|
||||
let(:file_hash_two) { @h2[0..6] }
|
||||
let(:files) { ["README.md", "LICENSE.txt"] }
|
||||
let(:files_hash1) { [@h3[0..6], ["LICENSE.txt"]] }
|
||||
let(:files_hash2) { [@h2[0..6], ["README.md"]] }
|
||||
let(:files_hash_one) { [@h3[0..6], ["LICENSE.txt"]] }
|
||||
let(:files_hash_two) { [@h2[0..6], ["README.md"]] }
|
||||
let(:cherry_pick_commit) { @cherry_pick_commit[0..6] }
|
||||
# rubocop:enable RSpec/InstanceVariable
|
||||
|
||||
@ -62,7 +62,7 @@ describe Utils::Git do
|
||||
it "aborts when cherry picking an existing hash" do
|
||||
ENV["GIT_MERGE_VERBOSITY"] = "5" # Consistent output across git versions
|
||||
expect do
|
||||
described_class.cherry_pick!(HOMEBREW_CACHE, file_hash1)
|
||||
described_class.cherry_pick!(HOMEBREW_CACHE, file_hash_one)
|
||||
end.to raise_error(ErrorDuringExecution, /Merge conflict in README.md/)
|
||||
end
|
||||
end
|
||||
@ -71,26 +71,26 @@ describe Utils::Git do
|
||||
it "gives last revision commit when before_commit is nil" do
|
||||
expect(
|
||||
described_class.last_revision_commit_of_file(HOMEBREW_CACHE, file),
|
||||
).to eq(file_hash1)
|
||||
).to eq(file_hash_one)
|
||||
end
|
||||
|
||||
it "gives revision commit based on before_commit when it is not nil" do
|
||||
expect(
|
||||
described_class.last_revision_commit_of_file(HOMEBREW_CACHE,
|
||||
file,
|
||||
before_commit: file_hash2),
|
||||
).to eq(file_hash2)
|
||||
before_commit: file_hash_two),
|
||||
).to eq(file_hash_two)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#file_at_commit" do
|
||||
it "returns file contents when file exists" do
|
||||
expect(described_class.file_at_commit(HOMEBREW_CACHE, file, file_hash1)).to eq("README")
|
||||
expect(described_class.file_at_commit(HOMEBREW_CACHE, file, file_hash_one)).to eq("README")
|
||||
end
|
||||
|
||||
it "returns empty when file doesn't exist" do
|
||||
expect(described_class.file_at_commit(HOMEBREW_CACHE, "foo.txt", file_hash1)).to eq("")
|
||||
expect(described_class.file_at_commit(HOMEBREW_CACHE, "LICENSE.txt", file_hash1)).to eq("")
|
||||
expect(described_class.file_at_commit(HOMEBREW_CACHE, "foo.txt", file_hash_one)).to eq("")
|
||||
expect(described_class.file_at_commit(HOMEBREW_CACHE, "LICENSE.txt", file_hash_one)).to eq("")
|
||||
end
|
||||
end
|
||||
|
||||
@ -99,7 +99,7 @@ describe Utils::Git do
|
||||
it "gives last revision commit" do
|
||||
expect(
|
||||
described_class.last_revision_commit_of_files(HOMEBREW_CACHE, files),
|
||||
).to eq(files_hash1)
|
||||
).to eq(files_hash_one)
|
||||
end
|
||||
end
|
||||
|
||||
@ -108,8 +108,8 @@ describe Utils::Git do
|
||||
expect(
|
||||
described_class.last_revision_commit_of_files(HOMEBREW_CACHE,
|
||||
files,
|
||||
before_commit: file_hash2),
|
||||
).to eq(files_hash2)
|
||||
before_commit: file_hash_two),
|
||||
).to eq(files_hash_two)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -107,7 +107,7 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version
|
||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-capybara-2.18.0/lib")
|
||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-performance-1.17.1/lib")
|
||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-rails-2.19.1/lib")
|
||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-rspec-2.19.0/lib")
|
||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-rspec-2.20.0/lib")
|
||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-sorbet-0.7.0/lib")
|
||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/ruby-macho-3.0.0/lib")
|
||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/universal-darwin-21/#{Gem.extension_api_version}/ruby-prof-1.4.3")
|
||||
|
||||
@ -144,6 +144,12 @@ RSpec/Be:
|
||||
StyleGuide: https://rspec.rubystyle.guide/#be-matcher
|
||||
Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/Be
|
||||
|
||||
RSpec/BeEmpty:
|
||||
Description: Prefer using `be_empty` when checking for an empty array.
|
||||
Enabled: pending
|
||||
VersionAdded: '2.20'
|
||||
Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/BeEmpty
|
||||
|
||||
RSpec/BeEq:
|
||||
Description: Check for expectations where `be(...)` can replace `eq(...)`.
|
||||
Enabled: pending
|
||||
@ -202,8 +208,8 @@ RSpec/ClassCheck:
|
||||
Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/ClassCheck
|
||||
|
||||
RSpec/ContainExactly:
|
||||
Description: Prefer `match_array` when matching array values.
|
||||
Enabled: true
|
||||
Description: Checks where `contain_exactly` is used.
|
||||
Enabled: pending
|
||||
VersionAdded: '2.19'
|
||||
Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/ContainExactly
|
||||
|
||||
@ -503,6 +509,13 @@ RSpec/ImplicitSubject:
|
||||
VersionChanged: '2.13'
|
||||
Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/ImplicitSubject
|
||||
|
||||
RSpec/IndexedLet:
|
||||
Description: Do not set up test data using indexes (e.g., `item_1`, `item_2`).
|
||||
Enabled: pending
|
||||
VersionAdded: '2.20'
|
||||
Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/IndexedLet
|
||||
Max: 1
|
||||
|
||||
RSpec/InstanceSpy:
|
||||
Description: Checks for `instance_double` used with `have_received`.
|
||||
Enabled: true
|
||||
@ -563,8 +576,8 @@ RSpec/LetSetup:
|
||||
Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/LetSetup
|
||||
|
||||
RSpec/MatchArray:
|
||||
Description: Prefer `contain_exactly` when matching an array literal.
|
||||
Enabled: true
|
||||
Description: Checks where `match_array` is used.
|
||||
Enabled: pending
|
||||
VersionAdded: '2.19'
|
||||
Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/MatchArray
|
||||
|
||||
@ -1048,8 +1061,9 @@ RSpec/Rails/HttpStatus:
|
||||
SupportedStyles:
|
||||
- numeric
|
||||
- symbolic
|
||||
- be_status
|
||||
VersionAdded: '1.23'
|
||||
VersionChanged: '2.0'
|
||||
VersionChanged: '2.20'
|
||||
Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/Rails/HttpStatus
|
||||
|
||||
RSpec/Rails/InferredSpecType:
|
||||
@ -0,0 +1,44 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module RuboCop
|
||||
module Cop
|
||||
module RSpec
|
||||
# Prefer using `be_empty` when checking for an empty array.
|
||||
#
|
||||
# @example
|
||||
# # bad
|
||||
# expect(array).to contain_exactly
|
||||
# expect(array).to match_array([])
|
||||
#
|
||||
# # good
|
||||
# expect(array).to be_empty
|
||||
#
|
||||
class BeEmpty < Base
|
||||
extend AutoCorrector
|
||||
|
||||
MSG = 'Use `be_empty` matchers for checking an empty array.'
|
||||
RESTRICT_ON_SEND = %i[contain_exactly match_array].freeze
|
||||
|
||||
# @!method expect_array_matcher?(node)
|
||||
def_node_matcher :expect_array_matcher?, <<~PATTERN
|
||||
(send
|
||||
(send nil? :expect _)
|
||||
#Runners.all
|
||||
${
|
||||
(send nil? :match_array (array))
|
||||
(send nil? :contain_exactly)
|
||||
}
|
||||
)
|
||||
PATTERN
|
||||
|
||||
def on_send(node)
|
||||
expect_array_matcher?(node.parent) do |expect|
|
||||
add_offense(expect) do |corrector|
|
||||
corrector.replace(expect, 'be_empty')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -57,7 +57,7 @@ module RuboCop
|
||||
return unless be_nil_matcher?(node)
|
||||
|
||||
add_offense(node, message: BE_MSG) do |corrector|
|
||||
corrector.replace(node.source_range, 'be(nil)')
|
||||
corrector.replace(node, 'be(nil)')
|
||||
end
|
||||
end
|
||||
|
||||
@ -65,7 +65,7 @@ module RuboCop
|
||||
return unless nil_value_expectation?(node)
|
||||
|
||||
add_offense(node, message: BE_NIL_MSG) do |corrector|
|
||||
corrector.replace(node.source_range, 'be_nil')
|
||||
corrector.replace(node, 'be_nil')
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -3,7 +3,11 @@
|
||||
module RuboCop
|
||||
module Cop
|
||||
module RSpec
|
||||
# Prefer `match_array` when matching array values.
|
||||
# Checks where `contain_exactly` is used.
|
||||
#
|
||||
# This cop checks for the following:
|
||||
# - Prefer `match_array` when matching array values.
|
||||
# - Prefer `be_empty` when using `contain_exactly` with no arguments.
|
||||
#
|
||||
# @example
|
||||
# # bad
|
||||
@ -14,6 +18,7 @@ module RuboCop
|
||||
#
|
||||
# # good
|
||||
# it { is_expected.to contain_exactly(content, *array) }
|
||||
#
|
||||
class ContainExactly < Base
|
||||
extend AutoCorrector
|
||||
|
||||
@ -21,21 +26,27 @@ module RuboCop
|
||||
RESTRICT_ON_SEND = %i[contain_exactly].freeze
|
||||
|
||||
def on_send(node)
|
||||
return unless node.each_child_node.all?(&:splat_type?)
|
||||
return if node.arguments.empty?
|
||||
|
||||
add_offense(node) do |corrector|
|
||||
autocorrect(node, corrector)
|
||||
end
|
||||
check_populated_collection(node)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def autocorrect(node, corrector)
|
||||
def check_populated_collection(node)
|
||||
return unless node.each_child_node.all?(&:splat_type?)
|
||||
|
||||
add_offense(node) do |corrector|
|
||||
autocorrect_for_populated_array(node, corrector)
|
||||
end
|
||||
end
|
||||
|
||||
def autocorrect_for_populated_array(node, corrector)
|
||||
arrays = node.arguments.map do |splat_node|
|
||||
splat_node.children.first
|
||||
end
|
||||
corrector.replace(
|
||||
node.source_range,
|
||||
node,
|
||||
"match_array(#{arrays.map(&:source).join(' + ')})"
|
||||
)
|
||||
end
|
||||
@ -22,15 +22,15 @@ module RuboCop
|
||||
class DescribedClassModuleWrapping < Base
|
||||
MSG = 'Avoid opening modules and defining specs within them.'
|
||||
|
||||
# @!method find_rspec_blocks(node)
|
||||
def_node_search :find_rspec_blocks, <<~PATTERN
|
||||
(block (send #explicit_rspec? #ExampleGroups.all ...) ...)
|
||||
# @!method include_rspec_blocks?(node)
|
||||
def_node_search :include_rspec_blocks?, <<~PATTERN
|
||||
({block numblock} (send #explicit_rspec? #ExampleGroups.all ...) ...)
|
||||
PATTERN
|
||||
|
||||
def on_module(node)
|
||||
find_rspec_blocks(node) do
|
||||
add_offense(node)
|
||||
end
|
||||
return unless include_rspec_blocks?(node)
|
||||
|
||||
add_offense(node)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -30,7 +30,7 @@ module RuboCop
|
||||
MSG = 'Add an empty line after `%<example_group>s`.'
|
||||
|
||||
def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler
|
||||
return unless example_group?(node)
|
||||
return unless spec_group?(node)
|
||||
|
||||
missing_separating_line_offense(node) do |method|
|
||||
format(MSG, example_group: method)
|
||||
@ -93,8 +93,8 @@ module RuboCop
|
||||
end
|
||||
|
||||
def swap(corrector, actual, expected)
|
||||
corrector.replace(actual.source_range, expected.source)
|
||||
corrector.replace(expected.source_range, actual.source)
|
||||
corrector.replace(actual, expected.source)
|
||||
corrector.replace(expected, actual.source)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -100,10 +100,10 @@ module RuboCop
|
||||
end
|
||||
end
|
||||
|
||||
AMBIGUOUS_TYPES = %i[send pair array and or if].freeze
|
||||
|
||||
def ambiguous_without_parentheses?(node)
|
||||
node.parent&.send_type? ||
|
||||
node.parent&.pair_type? ||
|
||||
node.parent&.array_type?
|
||||
node.parent && AMBIGUOUS_TYPES.include?(node.parent.type)
|
||||
end
|
||||
|
||||
def remove_parentheses(corrector, node)
|
||||
@ -0,0 +1,76 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module RuboCop
|
||||
module Cop
|
||||
module RSpec
|
||||
# Do not set up test data using indexes (e.g., `item_1`, `item_2`).
|
||||
#
|
||||
# It makes reading the test harder because it's not clear what exactly
|
||||
# is tested by this particular example.
|
||||
#
|
||||
# @example `Max: 1 (default)`
|
||||
# # bad
|
||||
# let(:item_1) { create(:item) }
|
||||
# let(:item_2) { create(:item) }
|
||||
#
|
||||
# let(:item1) { create(:item) }
|
||||
# let(:item2) { create(:item) }
|
||||
#
|
||||
# # good
|
||||
#
|
||||
# let(:visible_item) { create(:item, visible: true) }
|
||||
# let(:invisible_item) { create(:item, visible: false) }
|
||||
#
|
||||
# @example `Max: 2`
|
||||
# # bad
|
||||
# let(:item_1) { create(:item) }
|
||||
# let(:item_2) { create(:item) }
|
||||
# let(:item_3) { create(:item) }
|
||||
#
|
||||
# # good
|
||||
# let(:item_1) { create(:item) }
|
||||
# let(:item_2) { create(:item) }
|
||||
#
|
||||
class IndexedLet < Base
|
||||
MSG = 'This `let` statement uses index in its name. Please give it ' \
|
||||
'a meaningful name.'
|
||||
|
||||
# @!method let_name(node)
|
||||
def_node_matcher :let_name, <<~PATTERN
|
||||
{
|
||||
(block (send nil? #Helpers.all ({str sym} $_) ...) ...)
|
||||
(send nil? #Helpers.all ({str sym} $_) block_pass)
|
||||
}
|
||||
PATTERN
|
||||
|
||||
def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler
|
||||
return unless spec_group?(node)
|
||||
|
||||
children = node.body&.child_nodes
|
||||
return unless children
|
||||
|
||||
filter_indexed_lets(children).each do |let_node|
|
||||
add_offense(let_node)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
INDEX_REGEX = /_?\d+/.freeze
|
||||
|
||||
def filter_indexed_lets(candidates)
|
||||
candidates
|
||||
.filter { |node| indexed_let?(node) }
|
||||
.group_by { |node| let_name(node).to_s.gsub(INDEX_REGEX, '') }
|
||||
.values
|
||||
.filter { |lets| lets.length > cop_config['Max'] }
|
||||
.flatten
|
||||
end
|
||||
|
||||
def indexed_let?(node)
|
||||
let?(node) && INDEX_REGEX.match?(let_name(node))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -3,7 +3,11 @@
|
||||
module RuboCop
|
||||
module Cop
|
||||
module RSpec
|
||||
# Prefer `contain_exactly` when matching an array literal.
|
||||
# Checks where `match_array` is used.
|
||||
#
|
||||
# This cop checks for the following:
|
||||
# - Prefer `contain_exactly` when matching an array with values.
|
||||
# - Prefer `eq` when using `match_array` with an empty array literal.
|
||||
#
|
||||
# @example
|
||||
# # bad
|
||||
@ -17,20 +21,34 @@ module RuboCop
|
||||
#
|
||||
# # good
|
||||
# it { is_expected.to match_array(%w(tremble in fear foolish mortals)) }
|
||||
#
|
||||
class MatchArray < Base
|
||||
extend AutoCorrector
|
||||
|
||||
MSG = 'Prefer `contain_exactly` when matching an array literal.'
|
||||
RESTRICT_ON_SEND = %i[match_array].freeze
|
||||
|
||||
# @!method match_array_with_empty_array?(node)
|
||||
def_node_matcher :match_array_with_empty_array?, <<~PATTERN
|
||||
(send nil? :match_array (array))
|
||||
PATTERN
|
||||
|
||||
def on_send(node)
|
||||
return unless node.first_argument.array_type?
|
||||
return if match_array_with_empty_array?(node)
|
||||
|
||||
check_populated_array(node)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def check_populated_array(node)
|
||||
return if node.first_argument.percent_literal?
|
||||
|
||||
add_offense(node) do |corrector|
|
||||
array_contents = node.arguments.flat_map(&:to_a)
|
||||
corrector.replace(
|
||||
node.source_range,
|
||||
node,
|
||||
"contain_exactly(#{array_contents.map(&:source).join(', ')})"
|
||||
)
|
||||
end
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user