solargraph 0.58.1 → 0.59.0.dev.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/.envrc +3 -0
- data/.github/workflows/linting.yml +4 -5
- data/.github/workflows/plugins.yml +40 -36
- data/.github/workflows/rspec.yml +45 -13
- data/.github/workflows/typecheck.yml +2 -2
- data/.rubocop_todo.yml +27 -49
- data/README.md +3 -3
- data/Rakefile +1 -0
- data/lib/solargraph/api_map/cache.rb +110 -110
- data/lib/solargraph/api_map/constants.rb +289 -279
- data/lib/solargraph/api_map/index.rb +204 -193
- data/lib/solargraph/api_map/source_to_yard.rb +109 -97
- data/lib/solargraph/api_map/store.rb +387 -384
- data/lib/solargraph/api_map.rb +1000 -945
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +242 -228
- data/lib/solargraph/complex_type/unique_type.rb +632 -482
- data/lib/solargraph/complex_type.rb +549 -444
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +93 -91
- data/lib/solargraph/convention/data_definition.rb +108 -105
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +62 -61
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +103 -102
- data/lib/solargraph/convention/struct_definition.rb +168 -164
- data/lib/solargraph/diagnostics/require_not_found.rb +54 -53
- data/lib/solargraph/diagnostics/rubocop.rb +119 -118
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +70 -68
- data/lib/solargraph/diagnostics/type_check.rb +56 -55
- data/lib/solargraph/doc_map.rb +200 -439
- data/lib/solargraph/equality.rb +34 -34
- data/lib/solargraph/gem_pins.rb +97 -98
- data/lib/solargraph/language_server/host/dispatch.rb +131 -130
- data/lib/solargraph/language_server/host/message_worker.rb +113 -112
- data/lib/solargraph/language_server/host/sources.rb +100 -99
- data/lib/solargraph/language_server/host.rb +883 -878
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +109 -114
- data/lib/solargraph/language_server/message/extended/document.rb +24 -23
- data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +42 -40
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +28 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
- data/lib/solargraph/language_server/message/text_document/hover.rb +60 -58
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +27 -25
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +25 -23
- data/lib/solargraph/library.rb +729 -683
- data/lib/solargraph/location.rb +87 -82
- data/lib/solargraph/logging.rb +57 -37
- data/lib/solargraph/parser/comment_ripper.rb +76 -69
- data/lib/solargraph/parser/flow_sensitive_typing.rb +483 -255
- data/lib/solargraph/parser/node_processor/base.rb +122 -92
- data/lib/solargraph/parser/node_processor.rb +63 -62
- data/lib/solargraph/parser/parser_gem/class_methods.rb +167 -149
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
- data/lib/solargraph/parser/parser_gem/node_methods.rb +506 -486
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +61 -59
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +24 -15
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +41 -40
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +30 -29
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +61 -59
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
- data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +39 -38
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +53 -52
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +296 -291
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +33 -29
- data/lib/solargraph/parser/parser_gem/node_processors.rb +74 -70
- data/lib/solargraph/parser/region.rb +75 -69
- data/lib/solargraph/parser/snippet.rb +17 -17
- data/lib/solargraph/pin/base.rb +761 -729
- data/lib/solargraph/pin/base_variable.rb +418 -126
- data/lib/solargraph/pin/block.rb +126 -104
- data/lib/solargraph/pin/breakable.rb +13 -9
- data/lib/solargraph/pin/callable.rb +278 -231
- data/lib/solargraph/pin/closure.rb +68 -72
- data/lib/solargraph/pin/common.rb +94 -79
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/conversions.rb +124 -123
- data/lib/solargraph/pin/delegated_method.rb +131 -120
- data/lib/solargraph/pin/documenting.rb +115 -114
- data/lib/solargraph/pin/instance_variable.rb +38 -34
- data/lib/solargraph/pin/keyword.rb +16 -20
- data/lib/solargraph/pin/local_variable.rb +31 -75
- data/lib/solargraph/pin/method.rb +720 -672
- data/lib/solargraph/pin/method_alias.rb +42 -34
- data/lib/solargraph/pin/namespace.rb +121 -115
- data/lib/solargraph/pin/parameter.rb +338 -275
- data/lib/solargraph/pin/proxy_type.rb +40 -39
- data/lib/solargraph/pin/reference/override.rb +47 -47
- data/lib/solargraph/pin/reference/superclass.rb +17 -15
- data/lib/solargraph/pin/reference.rb +41 -39
- data/lib/solargraph/pin/search.rb +62 -61
- data/lib/solargraph/pin/signature.rb +69 -61
- data/lib/solargraph/pin/symbol.rb +53 -53
- data/lib/solargraph/pin/until.rb +18 -18
- data/lib/solargraph/pin/while.rb +18 -18
- data/lib/solargraph/pin.rb +46 -44
- data/lib/solargraph/pin_cache.rb +665 -245
- data/lib/solargraph/position.rb +118 -119
- data/lib/solargraph/range.rb +112 -112
- data/lib/solargraph/rbs_map/conversions.rb +846 -823
- data/lib/solargraph/rbs_map/core_map.rb +65 -58
- data/lib/solargraph/rbs_map/stdlib_map.rb +72 -43
- data/lib/solargraph/rbs_map.rb +217 -163
- data/lib/solargraph/shell.rb +397 -352
- data/lib/solargraph/source/chain/call.rb +372 -337
- data/lib/solargraph/source/chain/constant.rb +28 -26
- data/lib/solargraph/source/chain/hash.rb +35 -34
- data/lib/solargraph/source/chain/if.rb +29 -28
- data/lib/solargraph/source/chain/instance_variable.rb +34 -13
- data/lib/solargraph/source/chain/literal.rb +53 -48
- data/lib/solargraph/source/chain/or.rb +31 -23
- data/lib/solargraph/source/chain.rb +294 -291
- data/lib/solargraph/source/change.rb +89 -82
- data/lib/solargraph/source/cursor.rb +172 -166
- data/lib/solargraph/source/source_chainer.rb +204 -194
- data/lib/solargraph/source/updater.rb +59 -55
- data/lib/solargraph/source.rb +524 -498
- data/lib/solargraph/source_map/clip.rb +237 -226
- data/lib/solargraph/source_map/data.rb +37 -34
- data/lib/solargraph/source_map/mapper.rb +282 -259
- data/lib/solargraph/source_map.rb +220 -212
- data/lib/solargraph/type_checker/problem.rb +34 -32
- data/lib/solargraph/type_checker/rules.rb +157 -84
- data/lib/solargraph/type_checker.rb +895 -814
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +257 -255
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +98 -97
- data/lib/solargraph/workspace.rb +362 -220
- data/lib/solargraph/yard_map/helpers.rb +45 -44
- data/lib/solargraph/yard_map/mapper/to_method.rb +134 -130
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
- data/lib/solargraph/yard_map/mapper.rb +84 -79
- data/lib/solargraph/yardoc.rb +97 -87
- data/lib/solargraph.rb +126 -105
- data/rbs/fills/rubygems/0/dependency.rbs +193 -0
- data/rbs/fills/tuple/tuple.rbs +28 -0
- data/rbs/shims/ast/0/node.rbs +5 -0
- data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
- data/rbs_collection.yaml +1 -1
- data/solargraph.gemspec +2 -1
- metadata +22 -17
- data/lib/solargraph/type_checker/checks.rb +0 -124
- data/lib/solargraph/type_checker/param_def.rb +0 -37
- data/lib/solargraph/yard_map/to_method.rb +0 -89
- data/sig/shims/ast/0/node.rbs +0 -5
- /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
|
@@ -1,92 +1,122 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Parser
|
|
5
|
-
module NodeProcessor
|
|
6
|
-
class Base
|
|
7
|
-
# @return [Parser::AST::Node]
|
|
8
|
-
attr_reader :node
|
|
9
|
-
|
|
10
|
-
# @return [Region]
|
|
11
|
-
attr_reader :region
|
|
12
|
-
|
|
13
|
-
# @return [Array<Pin::Base>]
|
|
14
|
-
attr_reader :pins
|
|
15
|
-
|
|
16
|
-
# @return [Array<Pin::LocalVariable>]
|
|
17
|
-
attr_reader :locals
|
|
18
|
-
|
|
19
|
-
# @
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
# @param
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
@
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Parser
|
|
5
|
+
module NodeProcessor
|
|
6
|
+
class Base
|
|
7
|
+
# @return [Parser::AST::Node]
|
|
8
|
+
attr_reader :node
|
|
9
|
+
|
|
10
|
+
# @return [Region]
|
|
11
|
+
attr_reader :region
|
|
12
|
+
|
|
13
|
+
# @return [Array<Pin::Base>]
|
|
14
|
+
attr_reader :pins
|
|
15
|
+
|
|
16
|
+
# @return [Array<Pin::LocalVariable>]
|
|
17
|
+
attr_reader :locals
|
|
18
|
+
|
|
19
|
+
# @return [Array<Pin::InstanceVariable>]
|
|
20
|
+
attr_reader :ivars
|
|
21
|
+
|
|
22
|
+
# @param node [Parser::AST::Node]
|
|
23
|
+
# @param region [Region]
|
|
24
|
+
# @param pins [Array<Pin::Base>]
|
|
25
|
+
# @param locals [Array<Pin::LocalVariable>]
|
|
26
|
+
# @param ivars [Array<Pin::InstanceVariable>]
|
|
27
|
+
def initialize node, region, pins, locals, ivars
|
|
28
|
+
@node = node
|
|
29
|
+
@region = region
|
|
30
|
+
@pins = pins
|
|
31
|
+
@locals = locals
|
|
32
|
+
@ivars = ivars
|
|
33
|
+
@processed_children = false
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Subclasses should override this method to generate new pins.
|
|
37
|
+
#
|
|
38
|
+
# @return [Boolean] continue processing the next processor of the same node type.
|
|
39
|
+
# @return [void] In case there is only one processor registered for the node type, it can be void.
|
|
40
|
+
def process
|
|
41
|
+
process_children
|
|
42
|
+
|
|
43
|
+
true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
# @return [Solargraph::Location]
|
|
49
|
+
def location
|
|
50
|
+
get_node_location(node)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# @return [Solargraph::Position]
|
|
54
|
+
def position
|
|
55
|
+
Position.new(node.loc.line, node.loc.column)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# @sg-ignore downcast output of Enumerable#select
|
|
59
|
+
# @return [Solargraph::Pin::Breakable, nil]
|
|
60
|
+
def enclosing_breakable_pin
|
|
61
|
+
pins.select{|pin| pin.is_a?(Pin::Breakable) && pin.location&.range&.contain?(position)}.last
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# @todo downcast output of Enumerable#select
|
|
65
|
+
# @return [Solargraph::Pin::CompoundStatement, nil]
|
|
66
|
+
def enclosing_compound_statement_pin
|
|
67
|
+
pins.select{|pin| pin.is_a?(Pin::CompoundStatement) && pin.location&.range&.contain?(position)}.last
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# @param subregion [Region]
|
|
71
|
+
# @return [void]
|
|
72
|
+
def process_children subregion = region
|
|
73
|
+
return if @processed_children
|
|
74
|
+
@processed_children = true
|
|
75
|
+
node.children.each do |child|
|
|
76
|
+
next unless Parser.is_ast_node?(child)
|
|
77
|
+
NodeProcessor.process(child, subregion, pins, locals, ivars)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# @param node [Parser::AST::Node]
|
|
82
|
+
# @return [Solargraph::Location]
|
|
83
|
+
def get_node_location(node)
|
|
84
|
+
range = Parser.node_range(node)
|
|
85
|
+
Location.new(region.filename, range)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# @param node [Parser::AST::Node]
|
|
89
|
+
# @return [String, nil]
|
|
90
|
+
def comments_for(node)
|
|
91
|
+
region.source.comments_for(node)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# @param position [Solargraph::Position]
|
|
95
|
+
# @return [Pin::Closure, nil]
|
|
96
|
+
def named_path_pin position
|
|
97
|
+
pins.select do |pin|
|
|
98
|
+
# @sg-ignore Need to add nil check here
|
|
99
|
+
pin.is_a?(Pin::Closure) && pin.path && !pin.path.empty? && pin.location.range.contain?(position)
|
|
100
|
+
end.last
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# @todo Candidate for deprecation
|
|
104
|
+
# @param position [Solargraph::Position]
|
|
105
|
+
# @return [Pin::Closure, nil]
|
|
106
|
+
def block_pin position
|
|
107
|
+
# @todo determine if this can return a Pin::Block
|
|
108
|
+
# @sg-ignore Need to add nil check here
|
|
109
|
+
pins.select { |pin| pin.is_a?(Pin::Closure) && pin.location.range.contain?(position) }.last
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# @todo Candidate for deprecation
|
|
113
|
+
# @param position [Solargraph::Position]
|
|
114
|
+
# @return [Pin::Closure, nil]
|
|
115
|
+
def closure_pin position
|
|
116
|
+
# @sg-ignore Need to add nil check here
|
|
117
|
+
pins.select { |pin| pin.is_a?(Pin::Closure) && pin.location.range.contain?(position) }.last
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
@@ -1,62 +1,63 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Parser
|
|
5
|
-
# The processor classes used by SourceMap::Mapper to generate pins from
|
|
6
|
-
# parser nodes.
|
|
7
|
-
#
|
|
8
|
-
module NodeProcessor
|
|
9
|
-
autoload :Base, 'solargraph/parser/node_processor/base'
|
|
10
|
-
|
|
11
|
-
class << self
|
|
12
|
-
# @type [Hash{Symbol => Array<Class<NodeProcessor::Base>>}]
|
|
13
|
-
@@processors ||= {}
|
|
14
|
-
|
|
15
|
-
# Register a processor for a node type. You can register multiple processors for the same type.
|
|
16
|
-
# If a node processor returns true, it will skip the next processor of the same node type.
|
|
17
|
-
#
|
|
18
|
-
# @param type [Symbol]
|
|
19
|
-
# @param cls [Class<NodeProcessor::Base>]
|
|
20
|
-
# @return [Array<Class<NodeProcessor::Base>>]
|
|
21
|
-
def register type, cls
|
|
22
|
-
@@processors[type] ||= []
|
|
23
|
-
@@processors[type] << cls
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# @param type [Symbol]
|
|
27
|
-
# @param cls [Class<NodeProcessor::Base>]
|
|
28
|
-
#
|
|
29
|
-
# @return [void]
|
|
30
|
-
def deregister type, cls
|
|
31
|
-
@@processors[type].delete(cls)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# @param node [Parser::AST::Node]
|
|
36
|
-
# @param region [Region]
|
|
37
|
-
# @param pins [Array<Pin::Base>]
|
|
38
|
-
# @param locals [Array<Pin::
|
|
39
|
-
# @
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Parser
|
|
5
|
+
# The processor classes used by SourceMap::Mapper to generate pins from
|
|
6
|
+
# parser nodes.
|
|
7
|
+
#
|
|
8
|
+
module NodeProcessor
|
|
9
|
+
autoload :Base, 'solargraph/parser/node_processor/base'
|
|
10
|
+
|
|
11
|
+
class << self
|
|
12
|
+
# @type [Hash{Symbol => Array<Class<NodeProcessor::Base>>}]
|
|
13
|
+
@@processors ||= {}
|
|
14
|
+
|
|
15
|
+
# Register a processor for a node type. You can register multiple processors for the same type.
|
|
16
|
+
# If a node processor returns true, it will skip the next processor of the same node type.
|
|
17
|
+
#
|
|
18
|
+
# @param type [Symbol]
|
|
19
|
+
# @param cls [Class<NodeProcessor::Base>]
|
|
20
|
+
# @return [Array<Class<NodeProcessor::Base>>]
|
|
21
|
+
def register type, cls
|
|
22
|
+
@@processors[type] ||= []
|
|
23
|
+
@@processors[type] << cls
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# @param type [Symbol]
|
|
27
|
+
# @param cls [Class<NodeProcessor::Base>]
|
|
28
|
+
#
|
|
29
|
+
# @return [void]
|
|
30
|
+
def deregister type, cls
|
|
31
|
+
@@processors[type].delete(cls)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# @param node [Parser::AST::Node]
|
|
36
|
+
# @param region [Region]
|
|
37
|
+
# @param pins [Array<Pin::Base>]
|
|
38
|
+
# @param locals [Array<Pin::LocalVariable>]
|
|
39
|
+
# @param ivars [Array<Pin::InstanceVariable>]
|
|
40
|
+
# @return [Array(Array<Pin::Base>, Array<Pin::LocalVariable>, Array<Pin::InstanceVariable>)]
|
|
41
|
+
def self.process node, region = Region.new, pins = [], locals = [], ivars = []
|
|
42
|
+
if pins.empty?
|
|
43
|
+
pins.push Pin::Namespace.new(
|
|
44
|
+
location: region.source.location,
|
|
45
|
+
name: '',
|
|
46
|
+
source: :parser,
|
|
47
|
+
)
|
|
48
|
+
end
|
|
49
|
+
return [pins, locals, ivars] unless Parser.is_ast_node?(node)
|
|
50
|
+
node_processor_classes = @@processors[node.type] || [NodeProcessor::Base]
|
|
51
|
+
|
|
52
|
+
node_processor_classes.each do |klass|
|
|
53
|
+
processor = klass.new(node, region, pins, locals, ivars)
|
|
54
|
+
process_next = processor.process
|
|
55
|
+
|
|
56
|
+
break unless process_next
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
[pins, locals, ivars]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|