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 +4 -4
- data/lib/rspectre/auto_corrector.rb +1 -1
- data/lib/rspectre/linter/unused_let.rb +2 -2
- data/lib/rspectre/linter/unused_shared_setup.rb +16 -16
- data/lib/rspectre/linter/unused_subject.rb +2 -2
- data/lib/rspectre/linter.rb +2 -0
- data/lib/rspectre/source_map/parser.rb +9 -2
- data/lib/rspectre/version.rb +1 -1
- data/lib/rspectre.rb +17 -2
- metadata +17 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77d1fd05a8a9608c30ed29f93c408bf519507fe5e8560cb9a80542f13f2783fa
|
4
|
+
data.tar.gz: a2b683a3a2289c8f8b1e39fa09a0d3b55ca6e5d9337d922c8a0124b821d59242
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8042b9d677bc5fbbd8ef98bac37f271a244622782391dda4926b0c63b5c5b21e36cdfa08e24e94b98a29079d5525180f5129e0534114fbe946538d1160ab679
|
7
|
+
data.tar.gz: 9e5bd54c5c3faedddaebb97a3265163ece4fece63d884ac22ba412dfe8c78de1e31cb097e83d3d0047ca10043908f74865e6c0c20b780c9e3fd0aa8f76cf546c
|
@@ -5,8 +5,8 @@ module RSpectre
|
|
5
5
|
class UnusedLet < self
|
6
6
|
TAG = 'UnusedLet'
|
7
7
|
|
8
|
-
def example_group.let(name, &
|
9
|
-
super
|
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,
|
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
|
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,
|
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,
|
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,
|
49
|
+
def example_group.shared_examples(name, *args, &block)
|
50
50
|
if (node = UnusedSharedSetup.register(:shared_examples, caller_locations))
|
51
|
-
super
|
51
|
+
super do |*shared_args|
|
52
52
|
before { UnusedSharedSetup.record(node) }
|
53
53
|
|
54
|
-
class_exec(*shared_args,
|
54
|
+
RSpec::Support::WithKeywordsWhenNeeded.class_exec(self, *shared_args, &block)
|
55
55
|
end
|
56
56
|
else
|
57
|
-
super
|
57
|
+
super
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
def example_group.shared_examples_for(name, *args,
|
61
|
+
def example_group.shared_examples_for(name, *args, &block)
|
62
62
|
if (node = UnusedSharedSetup.register(:shared_examples_for, caller_locations))
|
63
|
-
super
|
63
|
+
super do |*shared_args|
|
64
64
|
before { UnusedSharedSetup.record(node) }
|
65
65
|
|
66
|
-
class_exec(*shared_args,
|
66
|
+
RSpec::Support::WithKeywordsWhenNeeded.class_exec(self, *shared_args, &block)
|
67
67
|
end
|
68
68
|
else
|
69
|
-
super
|
69
|
+
super
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
def example_group.shared_context(name, *args,
|
73
|
+
def example_group.shared_context(name, *args, &block)
|
74
74
|
if (node = UnusedSharedSetup.register(:shared_context, caller_locations))
|
75
|
-
super
|
75
|
+
super do |*shared_args|
|
76
76
|
before { UnusedSharedSetup.record(node) }
|
77
77
|
|
78
|
-
class_exec(*shared_args,
|
78
|
+
RSpec::Support::WithKeywordsWhenNeeded.class_exec(self, *shared_args, &block)
|
79
79
|
end
|
80
80
|
else
|
81
|
-
super
|
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, &
|
9
|
-
super(*name, &
|
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) }
|
data/lib/rspectre/linter.rb
CHANGED
@@ -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 =
|
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
|
|
data/lib/rspectre/version.rb
CHANGED
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.
|
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:
|
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.
|
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.
|
25
|
+
version: 3.3.7.1
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
27
|
+
name: prism
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
30
29
|
requirements:
|
31
30
|
- - "~>"
|
32
31
|
- !ruby/object:Gem::Version
|
33
|
-
version: '3
|
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
|
39
|
+
version: '1.3'
|
41
40
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
41
|
+
name: rspec
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
44
43
|
requirements:
|
45
44
|
- - "~>"
|
46
45
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
48
|
-
type: :
|
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: '
|
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.
|
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.
|
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:
|
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:
|
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.
|
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.
|
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: []
|