solargraph-rspec 0.1.1 → 0.2.1
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/CHANGELOG.md +26 -1
- data/README.md +5 -2
- data/codecov.yml +13 -0
- data/lib/solargraph/rspec/convention.rb +20 -70
- data/lib/solargraph/rspec/correctors/base.rb +26 -3
- data/lib/solargraph/rspec/correctors/context_block_methods_corrector.rb +1 -3
- data/lib/solargraph/rspec/correctors/context_block_namespace_corrector.rb +11 -14
- data/lib/solargraph/rspec/correctors/described_class_corrector.rb +12 -11
- data/lib/solargraph/rspec/correctors/dsl_methods_corrector.rb +49 -20
- data/lib/solargraph/rspec/correctors/example_and_hook_blocks_binding_corrector.rb +20 -30
- data/lib/solargraph/rspec/correctors/let_methods_corrector.rb +12 -14
- data/lib/solargraph/rspec/correctors/subject_method_corrector.rb +44 -4
- data/lib/solargraph/rspec/pin_factory.rb +100 -0
- data/lib/solargraph/rspec/spec_walker/fake_let_method.rb +35 -0
- data/lib/solargraph/rspec/spec_walker/full_constant_name.rb +29 -0
- data/lib/solargraph/rspec/spec_walker/node_types.rb +82 -0
- data/lib/solargraph/rspec/spec_walker/rspec_context_namespace.rb +56 -0
- data/lib/solargraph/rspec/spec_walker.rb +63 -101
- data/lib/solargraph/rspec/version.rb +1 -1
- data/lib/solargraph/rspec/walker.rb +11 -35
- metadata +8 -5
- data/lib/solargraph/rspec/correctors/implicit_subject_method_corrector.rb +0 -48
- data/lib/solargraph/rspec/correctors/walker_base.rb +0 -27
- data/lib/solargraph/rspec/util.rb +0 -77
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Credits: This file is a copy of the original file from the solargraph-rails gem.
|
4
|
-
|
5
3
|
module Solargraph
|
6
4
|
module Rspec
|
7
5
|
class Walker
|
6
|
+
class ParsingError < StandardError; end
|
7
|
+
|
8
8
|
class Hook
|
9
9
|
attr_reader :node_type
|
10
10
|
|
@@ -17,7 +17,7 @@ module Solargraph
|
|
17
17
|
@proc = Proc.new(&block)
|
18
18
|
end
|
19
19
|
|
20
|
-
# @param node [
|
20
|
+
# @param node [RubyVM::AbstractSyntaxTree::Node]
|
21
21
|
# @return [void]
|
22
22
|
def visit(node)
|
23
23
|
return unless matches?(node)
|
@@ -33,15 +33,15 @@ module Solargraph
|
|
33
33
|
|
34
34
|
private
|
35
35
|
|
36
|
-
# @param node [
|
36
|
+
# @param node [RubyVM::AbstractSyntaxTree::Node]
|
37
37
|
# @return [Boolean]
|
38
38
|
def matches?(node)
|
39
39
|
return false unless node.type == node_type
|
40
40
|
return false unless node.children
|
41
41
|
return true if @args.empty?
|
42
42
|
|
43
|
-
a_child_matches = node.children.first.is_a?(::
|
44
|
-
child.is_a?(::
|
43
|
+
a_child_matches = node.children.first.is_a?(RubyVM::AbstractSyntaxTree::Node) && node.children.any? do |child|
|
44
|
+
child.is_a?(RubyVM::AbstractSyntaxTree::Node) &&
|
45
45
|
match_children(child.children, @args[1..])
|
46
46
|
end
|
47
47
|
|
@@ -50,12 +50,12 @@ module Solargraph
|
|
50
50
|
match_children(node.children)
|
51
51
|
end
|
52
52
|
|
53
|
-
# @param children [Array<
|
53
|
+
# @param children [Array<RubyVM::AbstractSyntaxTree::Node>]
|
54
54
|
def match_children(children, args = @args)
|
55
55
|
args.each_with_index.all? do |arg, i|
|
56
56
|
if arg == :any
|
57
57
|
true
|
58
|
-
elsif children[i].is_a?(::
|
58
|
+
elsif children[i].is_a?(RubyVM::AbstractSyntaxTree::Node) && arg.is_a?(Symbol)
|
59
59
|
children[i].type == arg
|
60
60
|
else
|
61
61
|
children[i] == arg
|
@@ -64,28 +64,9 @@ module Solargraph
|
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
-
|
68
|
-
def self.normalize_ast(source)
|
69
|
-
ast = source.node
|
70
|
-
|
71
|
-
if ast.is_a?(::Parser::AST::Node)
|
72
|
-
ast
|
73
|
-
else
|
74
|
-
NodeParser.parse_with_comments(source.code, source.filename)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
# @param source [Solargraph::Source]
|
79
|
-
def self.from_source(source)
|
80
|
-
new(*normalize_ast(source))
|
81
|
-
end
|
82
|
-
|
83
|
-
# @return ast [Parser::AST::Node]
|
84
|
-
attr_reader :ast
|
85
|
-
# @return comments [Hash]
|
86
|
-
attr_reader :comments
|
67
|
+
attr_reader :ast, :comments
|
87
68
|
|
88
|
-
# @param ast [
|
69
|
+
# @param ast [RubyVM::AbstractSyntaxTree::Node]
|
89
70
|
# @param comments [Hash]
|
90
71
|
def initialize(ast, comments = {})
|
91
72
|
@comments = comments
|
@@ -93,23 +74,18 @@ module Solargraph
|
|
93
74
|
@hooks = Hash.new([])
|
94
75
|
end
|
95
76
|
|
96
|
-
# @param node_type [Symbol]
|
97
|
-
# @param args [Array]
|
98
|
-
# @param block [Proc]
|
99
77
|
def on(node_type, args = [], &block)
|
100
78
|
@hooks[node_type] << Hook.new(node_type, args, &block)
|
101
79
|
end
|
102
80
|
|
103
|
-
# @return [void]
|
104
81
|
def walk
|
105
82
|
@ast.is_a?(Array) ? @ast.each { |node| traverse(node) } : traverse(@ast)
|
106
83
|
end
|
107
84
|
|
108
85
|
private
|
109
86
|
|
110
|
-
# @param node [Parser::AST::Node]
|
111
87
|
def traverse(node)
|
112
|
-
return unless node.is_a?(::
|
88
|
+
return unless node.is_a?(RubyVM::AbstractSyntaxTree::Node)
|
113
89
|
|
114
90
|
@hooks[node.type].each { |hook| hook.visit(node) }
|
115
91
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solargraph-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lekë Mula
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: solargraph
|
@@ -45,6 +45,7 @@ files:
|
|
45
45
|
- LICENSE.txt
|
46
46
|
- README.md
|
47
47
|
- Rakefile
|
48
|
+
- codecov.yml
|
48
49
|
- lib/solargraph-rspec.rb
|
49
50
|
- lib/solargraph/rspec/config.rb
|
50
51
|
- lib/solargraph/rspec/convention.rb
|
@@ -54,12 +55,14 @@ files:
|
|
54
55
|
- lib/solargraph/rspec/correctors/described_class_corrector.rb
|
55
56
|
- lib/solargraph/rspec/correctors/dsl_methods_corrector.rb
|
56
57
|
- lib/solargraph/rspec/correctors/example_and_hook_blocks_binding_corrector.rb
|
57
|
-
- lib/solargraph/rspec/correctors/implicit_subject_method_corrector.rb
|
58
58
|
- lib/solargraph/rspec/correctors/let_methods_corrector.rb
|
59
59
|
- lib/solargraph/rspec/correctors/subject_method_corrector.rb
|
60
|
-
- lib/solargraph/rspec/
|
60
|
+
- lib/solargraph/rspec/pin_factory.rb
|
61
61
|
- lib/solargraph/rspec/spec_walker.rb
|
62
|
-
- lib/solargraph/rspec/
|
62
|
+
- lib/solargraph/rspec/spec_walker/fake_let_method.rb
|
63
|
+
- lib/solargraph/rspec/spec_walker/full_constant_name.rb
|
64
|
+
- lib/solargraph/rspec/spec_walker/node_types.rb
|
65
|
+
- lib/solargraph/rspec/spec_walker/rspec_context_namespace.rb
|
63
66
|
- lib/solargraph/rspec/version.rb
|
64
67
|
- lib/solargraph/rspec/walker.rb
|
65
68
|
- lib/solargraph_rspec.rb
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'let_methods_corrector'
|
4
|
-
|
5
|
-
module Solargraph
|
6
|
-
module Rspec
|
7
|
-
module Correctors
|
8
|
-
# Defines let-like methods in the example group block
|
9
|
-
class ImplicitSubjectMethodCorrector < Base
|
10
|
-
# @return [Pin::Method]
|
11
|
-
attr_reader :described_class_pin
|
12
|
-
|
13
|
-
# @param namespace_pins [Array<Pin::Namespace>]
|
14
|
-
# @param described_class_pin [Pin::Method]
|
15
|
-
def initialize(namespace_pins:, described_class_pin:)
|
16
|
-
super(namespace_pins: namespace_pins)
|
17
|
-
|
18
|
-
@described_class_pin = described_class_pin
|
19
|
-
end
|
20
|
-
|
21
|
-
# @param source_map [Solargraph::SourceMap]
|
22
|
-
# @return [void]
|
23
|
-
def correct(_source_map)
|
24
|
-
namespace_pin = closest_namespace_pin(namespace_pins, described_class_pin.location.range.start.line)
|
25
|
-
|
26
|
-
yield [implicit_subject_pin(described_class_pin, namespace_pin)] if block_given? && namespace_pin
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
# @param described_class_pin [Pin::Method]
|
32
|
-
# @param namespace_pin [Pin::Namespace]
|
33
|
-
# @return [Pin::Method]
|
34
|
-
def implicit_subject_pin(described_class_pin, namespace_pin)
|
35
|
-
described_class = described_class_pin.return_type.first.subtypes.first.name
|
36
|
-
|
37
|
-
Util.build_public_method(
|
38
|
-
namespace_pin,
|
39
|
-
'subject',
|
40
|
-
types: [described_class],
|
41
|
-
location: described_class_pin.location,
|
42
|
-
scope: :instance
|
43
|
-
)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'base'
|
4
|
-
|
5
|
-
# A corrector that walks through RSpec AST nodes and corrects them
|
6
|
-
module Solargraph
|
7
|
-
module Rspec
|
8
|
-
module Correctors
|
9
|
-
# A corrector of RSpec parsed pins by Solargraph
|
10
|
-
# @abstract
|
11
|
-
class WalkerBase < Base
|
12
|
-
# @return [Array<Solargraph::Pin::Namespace>]
|
13
|
-
attr_reader :namespace_pins
|
14
|
-
|
15
|
-
# @return [Solargraph::Rspec::SpecWalker]
|
16
|
-
attr_reader :rspec_walker
|
17
|
-
|
18
|
-
# @param namespace_pins [Array<Solargraph::Pin::Base>]
|
19
|
-
# @param rspec_walker [Solargraph::Rspec::SpecWalker]
|
20
|
-
def initialize(namespace_pins:, rspec_walker:)
|
21
|
-
super(namespace_pins: namespace_pins)
|
22
|
-
@rspec_walker = rspec_walker
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Credits: This file is a copy of the file from the solargraph-rspec gem
|
4
|
-
|
5
|
-
# rubocop:disable Naming/MethodParameterName
|
6
|
-
module Solargraph
|
7
|
-
module Rspec
|
8
|
-
# Utility methods for building pins and references.
|
9
|
-
module Util
|
10
|
-
def self.build_public_method(
|
11
|
-
ns,
|
12
|
-
name,
|
13
|
-
types: nil,
|
14
|
-
location: nil,
|
15
|
-
comments: [],
|
16
|
-
attribute: false,
|
17
|
-
scope: :instance
|
18
|
-
)
|
19
|
-
opts = {
|
20
|
-
name: name,
|
21
|
-
location: location,
|
22
|
-
closure: ns,
|
23
|
-
scope: scope,
|
24
|
-
attribute: attribute,
|
25
|
-
comments: []
|
26
|
-
}
|
27
|
-
|
28
|
-
comments << "@return [#{types.join(",")}]" if types
|
29
|
-
|
30
|
-
opts[:comments] = comments.join("\n")
|
31
|
-
|
32
|
-
Solargraph::Pin::Method.new(**opts)
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.build_module_include(ns, module_name, location)
|
36
|
-
Solargraph::Pin::Reference::Include.new(
|
37
|
-
closure: ns,
|
38
|
-
name: module_name,
|
39
|
-
location: location
|
40
|
-
)
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.build_module_extend(ns, module_name, location)
|
44
|
-
Solargraph::Pin::Reference::Extend.new(
|
45
|
-
closure: ns,
|
46
|
-
name: module_name,
|
47
|
-
location: location
|
48
|
-
)
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.dummy_location(path)
|
52
|
-
Solargraph::Location.new(
|
53
|
-
File.expand_path(path),
|
54
|
-
Solargraph::Range.from_to(0, 0, 0, 0)
|
55
|
-
)
|
56
|
-
end
|
57
|
-
|
58
|
-
# @param ast [Parser::AST::Node]
|
59
|
-
def self.build_location(ast, path)
|
60
|
-
Solargraph::Location.new(
|
61
|
-
File.expand_path(path),
|
62
|
-
Solargraph::Range.from_to(
|
63
|
-
ast.location.first_line,
|
64
|
-
ast.location.column,
|
65
|
-
ast.location.last_line,
|
66
|
-
ast.location.last_column
|
67
|
-
)
|
68
|
-
)
|
69
|
-
end
|
70
|
-
|
71
|
-
def self.method_return(path, type)
|
72
|
-
Solargraph::Pin::Reference::Override.method_return(path, type)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
# rubocop:enable Naming/MethodParameterName
|