From 2c14a450f2de063a39d5d897281f774355ea54fe Mon Sep 17 00:00:00 2001 From: Markus Schirp Date: Fri, 20 Sep 2024 21:26:21 +0000 Subject: [PATCH] Upgrade to unparser 0.7.x interface --- Gemfile.lock | 45 +++++++++--------- Gemfile.shared | 1 + lib/mutant/cli/command/util.rb | 2 +- lib/mutant/meta/example.rb | 4 +- lib/mutant/meta/example/verification.rb | 46 +++++++++++------- lib/mutant/mutation.rb | 18 +++---- lib/mutant/parser.rb | 6 +-- lib/mutant/subject.rb | 13 +++-- mutant.gemspec | 2 +- scripts/devloop.sh | 2 +- spec/support/shared_context.rb | 4 +- .../mutant/meta/example/verification_spec.rb | 20 ++++++-- spec/unit/mutant/meta/example_spec.rb | 47 +++++++++++++++++-- spec/unit/mutant/mutation_spec.rb | 2 +- .../cli/printer/mutation_result_spec.rb | 4 +- spec/unit/mutant/subject/config_spec.rb | 4 +- .../mutant/subject/method/instance_spec.rb | 8 ++-- spec/unit/mutant/subject_spec.rb | 8 ++-- test_app/Gemfile.minitest.lock | 13 +++-- test_app/Gemfile.rspec3.10.lock | 13 +++-- test_app/Gemfile.rspec3.11.lock | 13 +++-- test_app/Gemfile.rspec3.12.lock | 13 +++-- test_app/Gemfile.rspec3.13.lock | 13 +++-- test_app/Gemfile.rspec3.8.lock | 13 +++-- test_app/Gemfile.rspec3.9.lock | 13 +++-- 25 files changed, 218 insertions(+), 109 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b75ba2413..b13ac6210 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,10 @@ +PATH + remote: ../unparser + specs: + unparser (0.7.0) + diff-lcs (~> 1.3) + parser (>= 3.3.0) + PATH remote: . specs: @@ -6,60 +13,53 @@ PATH parser (~> 3.3.0) regexp_parser (~> 2.9.0) sorbet-runtime (~> 0.5.0) - unparser (~> 0.6.14) + unparser (~> 0.7.0) GEM remote: https://rubygems.org/ specs: ast (2.4.2) diff-lcs (1.5.1) - json (2.7.2) + json (2.7.5) language_server-protocol (3.17.0.3) - parallel (1.25.1) - parser (3.3.2.0) + parallel (1.26.3) + parser (3.3.5.0) ast (~> 2.4.1) racc - racc (1.8.0) + racc (1.8.1) rainbow (3.1.1) regexp_parser (2.9.2) - rexml (3.2.9) - strscan rspec (3.13.0) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) rspec-mocks (~> 3.13.0) - rspec-core (3.13.0) + rspec-core (3.13.2) rspec-support (~> 3.13.0) - rspec-expectations (3.13.0) + rspec-expectations (3.13.3) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-its (1.3.0) + rspec-its (1.3.1) rspec-core (>= 3.0.0) rspec-expectations (>= 3.0.0) - rspec-mocks (3.13.1) + rspec-mocks (3.13.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-support (3.13.1) - rubocop (1.64.1) + rubocop (1.67.0) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.8, < 3.0) - rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.31.1, < 2.0) + regexp_parser (>= 2.4, < 3.0) + rubocop-ast (>= 1.32.2, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.31.3) + rubocop-ast (1.33.0) parser (>= 3.3.1.0) ruby-progressbar (1.13.0) - sorbet-runtime (0.5.11422) - strscan (3.1.0) - unicode-display_width (2.5.0) - unparser (0.6.14) - diff-lcs (~> 1.3) - parser (>= 3.3.0) + sorbet-runtime (0.5.11625) + unicode-display_width (2.6.0) PLATFORMS ruby @@ -70,6 +70,7 @@ DEPENDENCIES rspec-core (~> 3.10) rspec-its (~> 1.3.0) rubocop (~> 1.7) + unparser! BUNDLED WITH 2.5.6 diff --git a/Gemfile.shared b/Gemfile.shared index e69de29bb..e75a88c34 100644 --- a/Gemfile.shared +++ b/Gemfile.shared @@ -0,0 +1 @@ +gem 'unparser', path: '../unparser' diff --git a/lib/mutant/cli/command/util.rb b/lib/mutant/cli/command/util.rb index 0c1ed1515..f3ba8a5f7 100644 --- a/lib/mutant/cli/command/util.rb +++ b/lib/mutant/cli/command/util.rb @@ -78,7 +78,7 @@ def print_mutations(target) node: target.node ).each do |mutation| Reporter::CLI::Printer::Mutation.call( - object: Mutant::Mutation::Evil.new(subject: target, node: mutation), + object: Mutant::Mutation::Evil.from_node(subject: target, node: mutation).from_right, output: world.stdout ) end diff --git a/lib/mutant/meta/example.rb b/lib/mutant/meta/example.rb index 96520f49c..b76d639fa 100644 --- a/lib/mutant/meta/example.rb +++ b/lib/mutant/meta/example.rb @@ -23,7 +23,7 @@ class Expected # # @return [Verification] def verification - Verification.new(example: self, mutations: generated) + Verification.from_mutations(example: self, mutations: generated) end memoize :verification @@ -61,7 +61,7 @@ def generated config: Mutation::Config::DEFAULT.with(operators:), node: ).map do |node| - Mutation::Evil.new(subject: self, node:) + Mutation::Evil.from_node(subject: self, node:) end end memoize :generated diff --git a/lib/mutant/meta/example/verification.rb b/lib/mutant/meta/example/verification.rb index 56c50f70f..01ba72d33 100644 --- a/lib/mutant/meta/example/verification.rb +++ b/lib/mutant/meta/example/verification.rb @@ -5,14 +5,24 @@ module Meta class Example # Example verification class Verification - include Adamantium, Anima.new(:example, :mutations) + include Adamantium, Anima.new(:example, :invalid, :valid) + + def self.from_mutations(example:, mutations:) + valid, invalid = [], [] + + mutations.each do |mutation| + mutation.either(invalid.public_method(:<<), valid.public_method(:<<)) + end + + new(example:, invalid:, valid:) + end # Test if mutation was verified successfully # # @return [Boolean] def success? [ - original_verification, + original_verification_report, invalid, missing, no_diffs, @@ -29,12 +39,12 @@ def error_report def reports reports = [example.location] - reports.concat(original) - reports.concat(original_verification) + reports.concat(original_report) + reports.concat(original_verification_report) reports.concat(make_report('Missing mutations:', missing)) reports.concat(make_report('Unexpected mutations:', unexpected)) reports.concat(make_report('No-Diff mutations:', no_diffs)) - reports.concat(invalid) + reports.concat(invalid_report) end def make_report(label, mutations) @@ -52,7 +62,7 @@ def report_mutation(mutation) ] end - def original + def original_report [ "Original: (operators: #{example.operators.class.operators_name})", example.node, @@ -60,7 +70,7 @@ def original ] end - def original_verification + def original_verification_report validation = Unparser::Validation.from_string(example.original_source) if validation.success? [] @@ -77,30 +87,34 @@ def prefix(prefix, string) end.join end - def invalid - mutations.each_with_object([]) do |mutation, aggregate| - validation = Unparser::Validation.from_node(mutation.node) - aggregate << prefix('[invalid-mutation]', validation.report) unless validation.success? + def invalid_report + invalid.map do |validation| + prefix('[invalid-mutation]', validation.report) end end - memoize :invalid + memoize :invalid_report def unexpected - mutations.reject do |mutation| + valid.reject do |mutation| example.expected.any? { |expected| expected.node.eql?(mutation.node) } end end memoize :unexpected def missing - (example.expected.map(&:node) - mutations.map(&:node)).map do |node| - Mutation::Evil.new(subject: example, node:) + example.expected.each_with_object([]) do |expected, aggregate| + next if valid.any? { |mutation| expected.node.eql?(mutation.node) } + aggregate << Mutation::Evil.new( + node: expected.node, + source: expected.original_source, + subject: example + ) end end memoize :missing def no_diffs - mutations.select { |mutation| mutation.source.eql?(example.original_source_generated) } + valid.select { |mutation| mutation.source.eql?(example.original_source_generated) } end memoize :no_diffs diff --git a/lib/mutant/mutation.rb b/lib/mutant/mutation.rb index 0d1400e0b..12f8228d5 100644 --- a/lib/mutant/mutation.rb +++ b/lib/mutant/mutation.rb @@ -4,11 +4,19 @@ module Mutant # Represent a mutated node with its subject class Mutation include AbstractType, Adamantium - include Anima.new(:subject, :node) + include Anima.new(:subject, :node, :source) CODE_DELIMITER = "\0" CODE_RANGE = (..4) + def self.from_node(subject:, node:) + ast = Unparser::AST.from_node(node:) + + Unparser + .unparse_validate_ast_either(ast:) + .fmap { |source| new(node:, source:, subject:) } + end + # Mutation identification code # # @return [String] @@ -17,14 +25,6 @@ def code end memoize :code - # Normalized mutation source - # - # @return [String] - def source - Unparser.unparse(node) - end - memoize :source - # Identification string # # @return [String] diff --git a/lib/mutant/parser.rb b/lib/mutant/parser.rb index 0f2e8b623..d46a1275a 100644 --- a/lib/mutant/parser.rb +++ b/lib/mutant/parser.rb @@ -24,11 +24,11 @@ def call(path) private def parse(source) - node, comments = Unparser.parse_with_comments(source) + ast = Unparser.parse_ast_either(source).from_right AST.new( - node:, - comment_associations: ::Parser::Source::Comment.associate_by_identity(node, comments) + comment_associations: ::Parser::Source::Comment.associate_by_identity(ast.node, ast.comments), + node: ast.node ) end diff --git a/lib/mutant/subject.rb b/lib/mutant/subject.rb index 3870ab60d..25d1f7a40 100644 --- a/lib/mutant/subject.rb +++ b/lib/mutant/subject.rb @@ -15,8 +15,13 @@ def mutations Mutator::Node.mutate( config: config.mutation, node: - ).map do |mutant| - Mutation::Evil.new(subject: self, node: wrap_node(mutant)) + ).each_with_object([]) do |mutant, aggregate| + Mutation::Evil + .from_node(subject: self, node: wrap_node(mutant)) + .either( + ->(validation) { $stderr.puts("generated invalid mutation: #{validation.report}") }, + aggregate.method(:<<) + ) end ) end @@ -92,7 +97,9 @@ def source private def neutral_mutation - Mutation::Neutral.new(subject: self, node: wrap_node(node)) + Mutation::Neutral + .from_node(subject: self, node: wrap_node(node)) + .from_right end def wrap_node(node) diff --git a/mutant.gemspec b/mutant.gemspec index 1a747c9b4..0016a0da2 100644 --- a/mutant.gemspec +++ b/mutant.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |gem| gem.add_runtime_dependency('parser', '~> 3.3.0') gem.add_runtime_dependency('regexp_parser', '~> 2.9.0') gem.add_runtime_dependency('sorbet-runtime', '~> 0.5.0') - gem.add_runtime_dependency('unparser', '~> 0.6.14') + gem.add_runtime_dependency('unparser', '~> 0.7.0') gem.add_development_dependency('rspec', '~> 3.10') gem.add_development_dependency('rspec-core', '~> 3.10') diff --git a/scripts/devloop.sh b/scripts/devloop.sh index 48c839274..777fdc24a 100755 --- a/scripts/devloop.sh +++ b/scripts/devloop.sh @@ -1,4 +1,4 @@ -while inotifywait lib/**/*.rb meta/**/*.rb spec/**/*.rb Gemfile Gemfile.shared mutant.gemspec; do +while inotifywait ../unparser/lib/**/*.rb lib/**/*.rb meta/**/*.rb spec/**/*.rb Gemfile Gemfile.shared mutant.gemspec; do bundle exec mutant environment test run --fail-fast spec/unit \ && bundle exec mutant run --fail-fast --since main --zombie -- 'Mutant*' \ && bundle exec rubocop diff --git a/spec/support/shared_context.rb b/spec/support/shared_context.rb index 364f31b3b..625965512 100644 --- a/spec/support/shared_context.rb +++ b/spec/support/shared_context.rb @@ -38,11 +38,11 @@ def setup_shared_context let(:subjects) { [subject_a] } let(:mutation_a) do - Mutant::Mutation::Evil.new(subject: subject_a, node: mutation_a_node) + Mutant::Mutation::Evil.from_node(subject: subject_a, node: mutation_a_node).from_right end let(:mutation_b) do - Mutant::Mutation::Evil.new(subject: subject_a, node: mutation_b_node) + Mutant::Mutation::Evil.from_node(subject: subject_a, node: mutation_b_node).from_right end let(:job_a) do diff --git a/spec/unit/mutant/meta/example/verification_spec.rb b/spec/unit/mutant/meta/example/verification_spec.rb index 20ac8dbe2..b332f14a3 100644 --- a/spec/unit/mutant/meta/example/verification_spec.rb +++ b/spec/unit/mutant/meta/example/verification_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true RSpec.describe Mutant::Meta::Example::Verification do - let(:object) { described_class.new(example:, mutations:) } + let(:object) { described_class.from_mutations(example:, mutations:) } let(:original_source) { 'true' } let(:location) do @@ -26,7 +26,7 @@ let(:mutations) do generated_nodes.map do |node| - Mutant::Mutation::Evil.new(subject: example, node:) + Mutant::Mutation::Evil.from_node(subject: example, node:) end end @@ -145,7 +145,7 @@ def make_expected(input) include_examples 'failure' end - context 'when the mutation is invalid' do + context 'when the generated mutation is invalid' do let(:invalid_node) do s(:op_asgn, s(:send, s(:self), :at, s(:int, 1)), :+, s(:int, 1)) end @@ -167,6 +167,13 @@ def make_expected(input) Original: (operators: full) (true) true + Missing mutations: + s(:op_asgn, + s(:send, + s(:self), :at, + s(:int, 1)), :+, + s(:int, 1)) + self.at(1) += 1 [invalid-mutation] report [invalid-mutation] lines REPORT @@ -177,7 +184,7 @@ def make_expected(input) end before do - allow(Unparser::Validation).to receive_messages(from_node: validation) + allow(Mutant::Mutation).to receive_messages(from_node: left(validation)) end include_examples 'failure' @@ -185,7 +192,10 @@ def make_expected(input) it 'genrates validation with expected node' do object.success? - expect(Unparser::Validation).to have_received(:from_node).with(invalid_node) + expect(Mutant::Mutation).to have_received(:from_node).with( + node: invalid_node, + subject: example + ) end end end diff --git a/spec/unit/mutant/meta/example_spec.rb b/spec/unit/mutant/meta/example_spec.rb index 24fc1f7ef..a103849fe 100644 --- a/spec/unit/mutant/meta/example_spec.rb +++ b/spec/unit/mutant/meta/example_spec.rb @@ -7,12 +7,16 @@ location:, lvars: [], node:, - operators: Mutant::Mutation::Operators::Full.new, + operators:, original_source: 'true', types: [node.type] ) end + let(:operators) do + Mutant::Mutation::Operators::Full.new + end + let(:location) do instance_double( Thread::Backtrace::Location, @@ -26,7 +30,7 @@ let(:mutations) do mutation_nodes.map do |node| - Mutant::Mutation::Evil.new(subject: object, node:) + Mutant::Mutation::Evil.from_node(subject: object, node:) end end @@ -47,7 +51,7 @@ describe '#verification' do subject { object.verification } - it { should eql(Mutant::Meta::Example::Verification.new(example: object, mutations:)) } + it { should eql(Mutant::Meta::Example::Verification.from_mutations(example: object, mutations:)) } end let(:constant_scope) do @@ -72,4 +76,41 @@ it { should eql('') } end + + describe '#generated' do + subject { object.generated } + + let(:node) { s(:send, s(:nil), :==, s(:nil)) } + + shared_examples 'expected mutations' do + it 'generates expected mutations' do + expect(subject).to eql( + expected.map do |node| + Mutant::Mutation::Evil.from_node(node:, subject: object) + end + ) + end + end + + context 'on light operator set' do + let(:expected) { [s(:nil)] } + let(:operators) { Mutant::Mutation::Operators::Light.new } + + include_examples 'expected mutations' + end + + context 'on full operator set' do + let(:operators) { Mutant::Mutation::Operators::Full.new } + + let(:expected) do + [ + s(:nil), + s(:send, s(:nil), :eql?, s(:nil)), + s(:send, s(:nil), :equal?, s(:nil)) + ] + end + + include_examples 'expected mutations' + end + end end diff --git a/spec/unit/mutant/mutation_spec.rb b/spec/unit/mutant/mutation_spec.rb index 5125b48b8..43a5fdef5 100644 --- a/spec/unit/mutant/mutation_spec.rb +++ b/spec/unit/mutant/mutation_spec.rb @@ -14,7 +14,7 @@ let(:root_node) { s(:int, 1) } let(:object) do - mutation_class.new(subject: mutation_subject, node:) + mutation_class.from_node(subject: mutation_subject, node:).from_right end let(:mutation_subject) do diff --git a/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb b/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb index b87703a0a..8863d8614 100644 --- a/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +++ b/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb @@ -84,7 +84,7 @@ with(:mutation_a_test_result) { { passed: false } } let(:mutation_a) do - Mutant::Mutation::Neutral.new(subject: subject_a, node: s(:true)) + Mutant::Mutation::Neutral.from_node(subject: subject_a, node: s(:true)).from_right end it_reports(<<~REPORT) @@ -106,7 +106,7 @@ with(:mutation_a_test_result) { { passed: false } } let(:mutation_a) do - Mutant::Mutation::Noop.new(subject: subject_a, node: s(:true)) + Mutant::Mutation::Noop.from_node(subject: subject_a, node: s(:true)).from_right end it_reports(<<~REPORT) diff --git a/spec/unit/mutant/subject/config_spec.rb b/spec/unit/mutant/subject/config_spec.rb index 4100214ab..5b1be82f3 100644 --- a/spec/unit/mutant/subject/config_spec.rb +++ b/spec/unit/mutant/subject/config_spec.rb @@ -12,9 +12,9 @@ def apply let(:mutation_config) { Mutant::Mutation::Config::DEFAULT } let(:comments) do - node, comments = Unparser.parse_with_comments(source) + ast = Unparser.parse_ast(source) - Parser::Source::Comment.associate_by_identity(node, comments).fetch(node, []) + Parser::Source::Comment.associate_by_identity(ast.node, ast.comments).fetch(ast.node, []) end shared_examples 'returns default config' do diff --git a/spec/unit/mutant/subject/method/instance_spec.rb b/spec/unit/mutant/subject/method/instance_spec.rb index e8cc903da..7ea404575 100644 --- a/spec/unit/mutant/subject/method/instance_spec.rb +++ b/spec/unit/mutant/subject/method/instance_spec.rb @@ -155,19 +155,19 @@ def foo; end let(:expected) do [ - Mutant::Mutation::Neutral.new( + Mutant::Mutation::Neutral.from_node( subject: object, node: s(:begin, s(:def, :foo, s(:args), nil), memoize_node) ), - Mutant::Mutation::Evil.new( + Mutant::Mutation::Evil.from_node( subject: object, node: s(:begin, s(:def, :foo, s(:args), s(:send, nil, :raise)), memoize_node) ), - Mutant::Mutation::Evil.new( + Mutant::Mutation::Evil.from_node( subject: object, node: s(:begin, s(:def, :foo, s(:args), s(:zsuper)), memoize_node) ) - ] + ].map(&:from_right) end let(:memoize_node) do diff --git a/spec/unit/mutant/subject_spec.rb b/spec/unit/mutant/subject_spec.rb index 70469029f..f7715d50a 100644 --- a/spec/unit/mutant/subject_spec.rb +++ b/spec/unit/mutant/subject_spec.rb @@ -100,10 +100,10 @@ def foo it 'generates neutral and evil mutations' do should eql([ - Mutant::Mutation::Neutral.new(subject: object, node:), - Mutant::Mutation::Evil.new(subject: object, node: mutation_a), - Mutant::Mutation::Evil.new(subject: object, node: mutation_b) - ]) + Mutant::Mutation::Neutral.from_node(subject: object, node:), + Mutant::Mutation::Evil.from_node(subject: object, node: mutation_a), + Mutant::Mutation::Evil.from_node(subject: object, node: mutation_b) + ].map(&:from_right)) end end diff --git a/test_app/Gemfile.minitest.lock b/test_app/Gemfile.minitest.lock index d76019b70..a5c007cf6 100644 --- a/test_app/Gemfile.minitest.lock +++ b/test_app/Gemfile.minitest.lock @@ -1,3 +1,10 @@ +PATH + remote: ../../unparser + specs: + unparser (0.7.0) + diff-lcs (~> 1.3) + parser (>= 3.3.0) + PATH remote: .. specs: @@ -6,7 +13,7 @@ PATH parser (~> 3.3.0) regexp_parser (~> 2.9.0) sorbet-runtime (~> 0.5.0) - unparser (~> 0.6.14) + unparser (~> 0.7.0) mutant-minitest (0.12.4) minitest (~> 5.11) mutant (= 0.12.4) @@ -23,9 +30,6 @@ GEM racc (1.7.1) regexp_parser (2.9.0) sorbet-runtime (0.5.10607) - unparser (0.6.14) - diff-lcs (~> 1.3) - parser (>= 3.3.0) PLATFORMS x86_64-linux @@ -33,6 +37,7 @@ PLATFORMS DEPENDENCIES mutant! mutant-minitest! + unparser! BUNDLED WITH 2.4.2 diff --git a/test_app/Gemfile.rspec3.10.lock b/test_app/Gemfile.rspec3.10.lock index ba5fc1722..4517a1cdf 100644 --- a/test_app/Gemfile.rspec3.10.lock +++ b/test_app/Gemfile.rspec3.10.lock @@ -1,3 +1,10 @@ +PATH + remote: ../../unparser + specs: + unparser (0.7.0) + diff-lcs (~> 1.3) + parser (>= 3.3.0) + PATH remote: .. specs: @@ -6,7 +13,7 @@ PATH parser (~> 3.3.0) regexp_parser (~> 2.9.0) sorbet-runtime (~> 0.5.0) - unparser (~> 0.6.14) + unparser (~> 0.7.0) mutant-rspec (0.12.4) mutant (= 0.12.4) rspec-core (>= 3.8.0, < 4.0.0) @@ -42,9 +49,6 @@ GEM rspec-support (3.13.1) sorbet-runtime (0.5.11292) thread_safe (0.3.6) - unparser (0.6.14) - diff-lcs (~> 1.3) - parser (>= 3.3.0) PLATFORMS x86_64-linux @@ -55,6 +59,7 @@ DEPENDENCIES mutant-rspec! rspec (~> 3.10) rspec-core (~> 3.10) + unparser! BUNDLED WITH 2.5.6 diff --git a/test_app/Gemfile.rspec3.11.lock b/test_app/Gemfile.rspec3.11.lock index cd9585d90..8fe87e5ea 100644 --- a/test_app/Gemfile.rspec3.11.lock +++ b/test_app/Gemfile.rspec3.11.lock @@ -1,3 +1,10 @@ +PATH + remote: ../../unparser + specs: + unparser (0.7.0) + diff-lcs (~> 1.3) + parser (>= 3.3.0) + PATH remote: .. specs: @@ -6,7 +13,7 @@ PATH parser (~> 3.3.0) regexp_parser (~> 2.9.0) sorbet-runtime (~> 0.5.0) - unparser (~> 0.6.14) + unparser (~> 0.7.0) mutant-rspec (0.12.4) mutant (= 0.12.4) rspec-core (>= 3.8.0, < 4.0.0) @@ -42,9 +49,6 @@ GEM rspec-support (3.13.1) sorbet-runtime (0.5.11292) thread_safe (0.3.6) - unparser (0.6.14) - diff-lcs (~> 1.3) - parser (>= 3.3.0) PLATFORMS x86_64-linux @@ -55,6 +59,7 @@ DEPENDENCIES mutant-rspec! rspec (~> 3.12) rspec-core (~> 3.12) + unparser! BUNDLED WITH 2.5.6 diff --git a/test_app/Gemfile.rspec3.12.lock b/test_app/Gemfile.rspec3.12.lock index 9d43e551f..5671c9ae0 100644 --- a/test_app/Gemfile.rspec3.12.lock +++ b/test_app/Gemfile.rspec3.12.lock @@ -1,3 +1,10 @@ +PATH + remote: ../../unparser + specs: + unparser (0.7.0) + diff-lcs (~> 1.3) + parser (>= 3.3.0) + PATH remote: .. specs: @@ -6,7 +13,7 @@ PATH parser (~> 3.3.0) regexp_parser (~> 2.9.0) sorbet-runtime (~> 0.5.0) - unparser (~> 0.6.14) + unparser (~> 0.7.0) mutant-rspec (0.12.4) mutant (= 0.12.4) rspec-core (>= 3.8.0, < 4.0.0) @@ -42,9 +49,6 @@ GEM rspec-support (3.13.1) sorbet-runtime (0.5.11292) thread_safe (0.3.6) - unparser (0.6.14) - diff-lcs (~> 1.3) - parser (>= 3.3.0) PLATFORMS x86_64-linux @@ -55,6 +59,7 @@ DEPENDENCIES mutant-rspec! rspec (~> 3.9) rspec-core (~> 3.9) + unparser! BUNDLED WITH 2.5.6 diff --git a/test_app/Gemfile.rspec3.13.lock b/test_app/Gemfile.rspec3.13.lock index cea09ef1e..752742902 100644 --- a/test_app/Gemfile.rspec3.13.lock +++ b/test_app/Gemfile.rspec3.13.lock @@ -1,3 +1,10 @@ +PATH + remote: ../../unparser + specs: + unparser (0.7.0) + diff-lcs (~> 1.3) + parser (>= 3.3.0) + PATH remote: .. specs: @@ -6,7 +13,7 @@ PATH parser (~> 3.3.0) regexp_parser (~> 2.9.0) sorbet-runtime (~> 0.5.0) - unparser (~> 0.6.14) + unparser (~> 0.7.0) mutant-rspec (0.12.4) mutant (= 0.12.4) rspec-core (>= 3.8.0, < 4.0.0) @@ -42,9 +49,6 @@ GEM rspec-support (3.13.1) sorbet-runtime (0.5.11292) thread_safe (0.3.6) - unparser (0.6.14) - diff-lcs (~> 1.3) - parser (>= 3.3.0) PLATFORMS x86_64-linux @@ -55,6 +59,7 @@ DEPENDENCIES mutant-rspec! rspec (~> 3.13) rspec-core (~> 3.13) + unparser! BUNDLED WITH 2.5.6 diff --git a/test_app/Gemfile.rspec3.8.lock b/test_app/Gemfile.rspec3.8.lock index 13ca1b243..bbf3be434 100644 --- a/test_app/Gemfile.rspec3.8.lock +++ b/test_app/Gemfile.rspec3.8.lock @@ -1,3 +1,10 @@ +PATH + remote: ../../unparser + specs: + unparser (0.7.0) + diff-lcs (~> 1.3) + parser (>= 3.3.0) + PATH remote: .. specs: @@ -6,7 +13,7 @@ PATH parser (~> 3.3.0) regexp_parser (~> 2.9.0) sorbet-runtime (~> 0.5.0) - unparser (~> 0.6.14) + unparser (~> 0.7.0) mutant-rspec (0.12.4) mutant (= 0.12.4) rspec-core (>= 3.8.0, < 4.0.0) @@ -42,9 +49,6 @@ GEM rspec-support (3.8.3) sorbet-runtime (0.5.10607) thread_safe (0.3.6) - unparser (0.6.14) - diff-lcs (~> 1.3) - parser (>= 3.3.0) PLATFORMS x86_64-linux @@ -55,6 +59,7 @@ DEPENDENCIES mutant-rspec! rspec (~> 3.8) rspec-core (~> 3.8) + unparser! BUNDLED WITH 2.5.6 diff --git a/test_app/Gemfile.rspec3.9.lock b/test_app/Gemfile.rspec3.9.lock index 9d43e551f..5671c9ae0 100644 --- a/test_app/Gemfile.rspec3.9.lock +++ b/test_app/Gemfile.rspec3.9.lock @@ -1,3 +1,10 @@ +PATH + remote: ../../unparser + specs: + unparser (0.7.0) + diff-lcs (~> 1.3) + parser (>= 3.3.0) + PATH remote: .. specs: @@ -6,7 +13,7 @@ PATH parser (~> 3.3.0) regexp_parser (~> 2.9.0) sorbet-runtime (~> 0.5.0) - unparser (~> 0.6.14) + unparser (~> 0.7.0) mutant-rspec (0.12.4) mutant (= 0.12.4) rspec-core (>= 3.8.0, < 4.0.0) @@ -42,9 +49,6 @@ GEM rspec-support (3.13.1) sorbet-runtime (0.5.11292) thread_safe (0.3.6) - unparser (0.6.14) - diff-lcs (~> 1.3) - parser (>= 3.3.0) PLATFORMS x86_64-linux @@ -55,6 +59,7 @@ DEPENDENCIES mutant-rspec! rspec (~> 3.9) rspec-core (~> 3.9) + unparser! BUNDLED WITH 2.5.6