rspectre 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87d88a2681d80d0f13e8cad1a0b5147c92d0ced19dede1657a74261cd4f9a8ae
4
- data.tar.gz: 865b52f9b37fd3fa54b154dedb4196a4ce5bfcf20a0e8b8493e6bcd3611e8690
3
+ metadata.gz: 77d1fd05a8a9608c30ed29f93c408bf519507fe5e8560cb9a80542f13f2783fa
4
+ data.tar.gz: a2b683a3a2289c8f8b1e39fa09a0d3b55ca6e5d9337d922c8a0124b821d59242
5
5
  SHA512:
6
- metadata.gz: cebc09f233bd5f6f2fd76c6f0741866472badae3a6a8f9c6012cfac379af4f2c4585827e0f73b0cd0e3b39848c0376dead07fad7bbd209666f10d8cc3242ed55
7
- data.tar.gz: '09049b6500de8e538fa07a7e110e4671392e209b4345d1da8253c15901ce9af450cc54cfc330f19bcff1c5d05dd129df62ebcdc34c850d4daa92fa94e15056db'
6
+ metadata.gz: d8042b9d677bc5fbbd8ef98bac37f271a244622782391dda4926b0c63b5c5b21e36cdfa08e24e94b98a29079d5525180f5129e0534114fbe946538d1160ab679
7
+ data.tar.gz: 9e5bd54c5c3faedddaebb97a3265163ece4fece63d884ac22ba412dfe8c78de1e31cb097e83d3d0047ca10043908f74865e6c0c20b780c9e3fd0aa8f76cf546c
@@ -14,7 +14,7 @@ module RSpectre
14
14
  def correct
15
15
  File.write(
16
16
  filename,
17
- rewrite(buffer, Parser::CurrentRuby.new.parse(buffer))
17
+ rewrite(buffer, SourceMap::Parser.parser_class.new.parse(buffer))
18
18
  )
19
19
  end
20
20
 
@@ -5,8 +5,8 @@ module RSpectre
5
5
  class UnusedLet < self
6
6
  TAG = 'UnusedLet'
7
7
 
8
- def example_group.let(name, &block)
9
- super(name, &block)
8
+ def example_group.let(name, &)
9
+ super
10
10
 
11
11
  UnusedLet.register(:let, caller_locations) do |node|
12
12
  UnusedLet.prepend_behavior(self, name) { UnusedLet.record(node) }
@@ -10,21 +10,21 @@ module RSpectre
10
10
  original_method = receiver.method(method)
11
11
 
12
12
  # Overwrite the class method using define_singleton_method
13
- receiver.__send__(:define_singleton_method, method) do |name, *args, **kwargs, &block|
13
+ receiver.__send__(:define_singleton_method, method) do |name, *args, &block|
14
14
  # When we can locate the source of the node, tag it
15
15
  if (node = UnusedSharedSetup.register(method, caller_locations))
16
16
  # And call the original
17
- original_method.(name, *args, **kwargs) do |*shared_args, **shared_kwargs|
17
+ original_method.(name, *args) do |*shared_args|
18
18
  # But record that it was used in a `before`
19
19
  before { UnusedSharedSetup.record(node) }
20
20
 
21
21
  # And then perform the original block in a `class_exec` like the original block was
22
22
  # supposed to be
23
- class_exec(*shared_args, **shared_kwargs, &block)
23
+ RSpec::Support::WithKeywordsWhenNeeded.class_exec(self, *shared_args, &block)
24
24
  end
25
25
  else
26
26
  # If we couldn't locate the source, just delegate to the original method.
27
- original_method.(name, *args, **kwargs, &block)
27
+ original_method.(name, *args, &block)
28
28
  end
29
29
  end
30
30
  end
@@ -46,39 +46,39 @@ module RSpectre
46
46
  # terms of the old method. I think we can probably do some kind of module inclusion to reduce
47
47
  # this duplication (which is effectively what happens here anyway, i think), but this works
48
48
  # for now.
49
- def example_group.shared_examples(name, *args, **kwargs, &block)
49
+ def example_group.shared_examples(name, *args, &block)
50
50
  if (node = UnusedSharedSetup.register(:shared_examples, caller_locations))
51
- super(name, *args, **kwargs) do |*shared_args, **shared_kwargs|
51
+ super do |*shared_args|
52
52
  before { UnusedSharedSetup.record(node) }
53
53
 
54
- class_exec(*shared_args, **shared_kwargs, &block)
54
+ RSpec::Support::WithKeywordsWhenNeeded.class_exec(self, *shared_args, &block)
55
55
  end
56
56
  else
57
- super(name, *args, **kwargs, &block)
57
+ super
58
58
  end
59
59
  end
60
60
 
61
- def example_group.shared_examples_for(name, *args, **kwargs, &block)
61
+ def example_group.shared_examples_for(name, *args, &block)
62
62
  if (node = UnusedSharedSetup.register(:shared_examples_for, caller_locations))
63
- super(name, *args, **kwargs) do |*shared_args, **shared_kwargs|
63
+ super do |*shared_args|
64
64
  before { UnusedSharedSetup.record(node) }
65
65
 
66
- class_exec(*shared_args, **shared_kwargs, &block)
66
+ RSpec::Support::WithKeywordsWhenNeeded.class_exec(self, *shared_args, &block)
67
67
  end
68
68
  else
69
- super(name, *args, **kwargs, &block)
69
+ super
70
70
  end
71
71
  end
72
72
 
73
- def example_group.shared_context(name, *args, **kwargs, &block)
73
+ def example_group.shared_context(name, *args, &block)
74
74
  if (node = UnusedSharedSetup.register(:shared_context, caller_locations))
75
- super(name, *args, **kwargs) do |*shared_args, **shared_kwargs|
75
+ super do |*shared_args|
76
76
  before { UnusedSharedSetup.record(node) }
77
77
 
78
- class_exec(*shared_args, **shared_kwargs, &block)
78
+ RSpec::Support::WithKeywordsWhenNeeded.class_exec(self, *shared_args, &block)
79
79
  end
80
80
  else
81
- super(name, *args, **kwargs, &block)
81
+ super
82
82
  end
83
83
  end
84
84
  end
@@ -5,8 +5,8 @@ module RSpectre
5
5
  class UnusedSubject < self
6
6
  TAG = 'UnusedSubject'
7
7
 
8
- def example_group.subject(name = nil, &block)
9
- super(*name, &block)
8
+ def example_group.subject(name = nil, &)
9
+ super(*name, &)
10
10
 
11
11
  UnusedSubject.register(:subject, caller_locations) do |node|
12
12
  UnusedSubject.prepend_behavior(self, :subject) { UnusedSubject.record(node) }
@@ -40,6 +40,8 @@ module RSpectre
40
40
  def self.prepend_behavior(scope, method_name)
41
41
  original_method = scope.instance_method(method_name)
42
42
 
43
+ # Removing the method first prevents method redefined warnings when $VERBOSE is true
44
+ scope.remove_method(method_name)
43
45
  scope.__send__(:define_method, method_name) do |*args, **kwargs, &block|
44
46
  yield
45
47
 
@@ -15,6 +15,14 @@ module RSpectre
15
15
  Null.new
16
16
  end
17
17
 
18
+ def self.parser_class
19
+ if RSpectre.ruby_version_supports_prism?
20
+ Prism::Translation::Parser
21
+ else
22
+ ::Parser::CurrentRuby
23
+ end
24
+ end
25
+
18
26
  private
19
27
 
20
28
  def walk(node, &block)
@@ -28,9 +36,8 @@ module RSpectre
28
36
  end
29
37
 
30
38
  def parsed_source
31
- parser = ::Parser::CurrentRuby.new(PermissiveASTBuilder.new)
39
+ parser = self.class.parser_class.new(PermissiveASTBuilder.new)
32
40
  buffer = ::Parser::Source::Buffer.new(file, source: raw_source)
33
-
34
41
  parser.parse(buffer)
35
42
  end
36
43
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RSpectre
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
data/lib/rspectre.rb CHANGED
@@ -6,8 +6,24 @@ require 'pathname'
6
6
  require 'set'
7
7
  require 'stringio'
8
8
 
9
- require 'parser/current'
10
9
  require 'rspec'
10
+ module RSpectre
11
+ LIB_PATH = Pathname.new(File.expand_path('../lib', __dir__))
12
+
13
+ MINIMUM_RUBY_FOR_PRISM = Gem::Version.new('3.3')
14
+ private_constant(:MINIMUM_RUBY_FOR_PRISM)
15
+
16
+ def self.ruby_version_supports_prism?
17
+ Gem::Version.new(RUBY_VERSION) >= MINIMUM_RUBY_FOR_PRISM
18
+ end
19
+ end
20
+
21
+ if RSpectre.ruby_version_supports_prism?
22
+ require 'parser'
23
+ require 'prism'
24
+ else
25
+ require 'parser/current'
26
+ end
11
27
 
12
28
  require 'rspectre/keyword_struct'
13
29
 
@@ -28,5 +44,4 @@ require 'rspectre/linter/unused_shared_setup'
28
44
 
29
45
  module RSpectre
30
46
  TRACKER = Tracker.new
31
- LIB_PATH = Pathname.new(File.expand_path('../lib', __dir__))
32
47
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspectre
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Gollahon
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-05-13 00:00:00.000000000 Z
10
+ date: 2025-03-17 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: parser
@@ -16,72 +15,70 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: 3.2.2.1
18
+ version: 3.3.7.1
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: 3.2.2.1
25
+ version: 3.3.7.1
27
26
  - !ruby/object:Gem::Dependency
28
- name: rspec
27
+ name: prism
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: '3.9'
32
+ version: '1.3'
34
33
  type: :runtime
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: '3.9'
39
+ version: '1.3'
41
40
  - !ruby/object:Gem::Dependency
42
- name: pry
41
+ name: rspec
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - "~>"
46
45
  - !ruby/object:Gem::Version
47
- version: '0.14'
48
- type: :development
46
+ version: '3.10'
47
+ type: :runtime
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
51
  - - "~>"
53
52
  - !ruby/object:Gem::Version
54
- version: '0.14'
53
+ version: '3.10'
55
54
  - !ruby/object:Gem::Dependency
56
55
  name: rubocop
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - "~>"
60
59
  - !ruby/object:Gem::Version
61
- version: 1.51.0
60
+ version: 1.71.2
62
61
  type: :development
63
62
  prerelease: false
64
63
  version_requirements: !ruby/object:Gem::Requirement
65
64
  requirements:
66
65
  - - "~>"
67
66
  - !ruby/object:Gem::Version
68
- version: 1.51.0
67
+ version: 1.71.2
69
68
  - !ruby/object:Gem::Dependency
70
69
  name: rubocop-rspec
71
70
  requirement: !ruby/object:Gem::Requirement
72
71
  requirements:
73
72
  - - "~>"
74
73
  - !ruby/object:Gem::Version
75
- version: 2.22.0
74
+ version: 3.4.0
76
75
  type: :development
77
76
  prerelease: false
78
77
  version_requirements: !ruby/object:Gem::Requirement
79
78
  requirements:
80
79
  - - "~>"
81
80
  - !ruby/object:Gem::Version
82
- version: 2.22.0
83
- description:
84
- email:
81
+ version: 3.4.0
85
82
  executables:
86
83
  - rspectre
87
84
  extensions: []
@@ -109,7 +106,6 @@ licenses:
109
106
  - MIT
110
107
  metadata:
111
108
  rubygems_mfa_required: 'true'
112
- post_install_message:
113
109
  rdoc_options: []
114
110
  require_paths:
115
111
  - lib
@@ -117,15 +113,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
113
  requirements:
118
114
  - - ">="
119
115
  - !ruby/object:Gem::Version
120
- version: '3.0'
116
+ version: '3.1'
121
117
  required_rubygems_version: !ruby/object:Gem::Requirement
122
118
  requirements:
123
119
  - - ">="
124
120
  - !ruby/object:Gem::Version
125
121
  version: '0'
126
122
  requirements: []
127
- rubygems_version: 3.4.10
128
- signing_key:
123
+ rubygems_version: 3.6.2
129
124
  specification_version: 4
130
125
  summary: A tool for linting RSpec test suites.
131
126
  test_files: []