solargraph 0.54.0 → 0.58.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/.github/workflows/linting.yml +127 -0
- data/.github/workflows/plugins.yml +184 -6
- data/.github/workflows/rspec.yml +55 -5
- data/.github/workflows/typecheck.yml +8 -3
- data/.gitignore +7 -0
- data/.overcommit.yml +72 -0
- data/.rspec +1 -0
- data/.rubocop.yml +66 -0
- data/.rubocop_todo.yml +1279 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +171 -0
- data/README.md +20 -6
- data/Rakefile +125 -13
- data/bin/solargraph +8 -5
- data/lib/solargraph/api_map/cache.rb +13 -3
- data/lib/solargraph/api_map/constants.rb +279 -0
- data/lib/solargraph/api_map/index.rb +193 -0
- data/lib/solargraph/api_map/source_to_yard.rb +13 -4
- data/lib/solargraph/api_map/store.rb +207 -132
- data/lib/solargraph/api_map.rb +394 -261
- data/lib/solargraph/bench.rb +18 -1
- data/lib/solargraph/complex_type/type_methods.rb +29 -12
- data/lib/solargraph/complex_type/unique_type.rb +205 -26
- data/lib/solargraph/complex_type.rb +126 -26
- data/lib/solargraph/convention/active_support_concern.rb +111 -0
- data/lib/solargraph/convention/base.rb +20 -3
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -0
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -0
- data/lib/solargraph/convention/data_definition.rb +105 -0
- data/lib/solargraph/convention/gemspec.rb +3 -2
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -0
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -0
- data/lib/solargraph/convention/struct_definition.rb +164 -0
- data/lib/solargraph/convention.rb +36 -4
- data/lib/solargraph/diagnostics/rubocop.rb +6 -1
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +5 -3
- data/lib/solargraph/doc_map.rb +316 -64
- data/lib/solargraph/environ.rb +9 -2
- data/lib/solargraph/equality.rb +34 -0
- data/lib/solargraph/gem_pins.rb +64 -38
- data/lib/solargraph/language_server/host/dispatch.rb +2 -0
- data/lib/solargraph/language_server/host/message_worker.rb +54 -5
- data/lib/solargraph/language_server/host.rb +36 -18
- data/lib/solargraph/language_server/message/base.rb +20 -12
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +2 -0
- data/lib/solargraph/language_server/message/extended/document.rb +5 -2
- data/lib/solargraph/language_server/message/extended/document_gems.rb +3 -3
- data/lib/solargraph/language_server/message/initialize.rb +3 -1
- data/lib/solargraph/language_server/message/text_document/completion.rb +0 -3
- data/lib/solargraph/language_server/message/text_document/definition.rb +5 -3
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +3 -3
- data/lib/solargraph/language_server/message/text_document/formatting.rb +23 -2
- data/lib/solargraph/language_server/message/text_document/hover.rb +1 -1
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +4 -3
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +2 -0
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +2 -2
- data/lib/solargraph/language_server/progress.rb +27 -2
- data/lib/solargraph/language_server/request.rb +4 -1
- data/lib/solargraph/library.rb +83 -73
- data/lib/solargraph/location.rb +45 -1
- data/lib/solargraph/logging.rb +12 -2
- data/lib/solargraph/page.rb +3 -0
- data/lib/solargraph/parser/comment_ripper.rb +20 -7
- data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -0
- data/lib/solargraph/parser/node_processor/base.rb +10 -5
- data/lib/solargraph/parser/node_processor.rb +26 -8
- data/lib/solargraph/parser/parser_gem/class_methods.rb +10 -18
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +1 -0
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +13 -11
- data/lib/solargraph/parser/parser_gem/node_methods.rb +10 -19
- data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +26 -20
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +7 -4
- data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +6 -3
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +4 -2
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +14 -2
- data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +8 -7
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +1 -0
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +16 -6
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +64 -32
- data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -0
- data/lib/solargraph/parser/parser_gem/node_processors.rb +14 -0
- data/lib/solargraph/parser/region.rb +4 -1
- data/lib/solargraph/parser/snippet.rb +2 -0
- data/lib/solargraph/parser.rb +3 -5
- data/lib/solargraph/pin/base.rb +417 -42
- data/lib/solargraph/pin/base_variable.rb +21 -12
- data/lib/solargraph/pin/block.rb +9 -26
- data/lib/solargraph/pin/breakable.rb +9 -0
- data/lib/solargraph/pin/callable.rb +231 -0
- data/lib/solargraph/pin/closure.rb +30 -10
- data/lib/solargraph/pin/common.rb +12 -7
- data/lib/solargraph/pin/constant.rb +2 -0
- data/lib/solargraph/pin/conversions.rb +3 -2
- data/lib/solargraph/pin/delegated_method.rb +20 -1
- data/lib/solargraph/pin/documenting.rb +16 -0
- data/lib/solargraph/pin/instance_variable.rb +2 -2
- data/lib/solargraph/pin/keyword.rb +7 -2
- data/lib/solargraph/pin/local_variable.rb +15 -7
- data/lib/solargraph/pin/method.rb +241 -70
- data/lib/solargraph/pin/method_alias.rb +3 -0
- data/lib/solargraph/pin/namespace.rb +21 -13
- data/lib/solargraph/pin/parameter.rb +94 -32
- data/lib/solargraph/pin/proxy_type.rb +17 -7
- data/lib/solargraph/pin/reference/override.rb +24 -6
- data/lib/solargraph/pin/reference/require.rb +2 -2
- data/lib/solargraph/pin/reference/superclass.rb +5 -0
- data/lib/solargraph/pin/reference.rb +17 -0
- data/lib/solargraph/pin/search.rb +6 -1
- data/lib/solargraph/pin/signature.rb +39 -121
- data/lib/solargraph/pin/singleton.rb +1 -1
- data/lib/solargraph/pin/symbol.rb +8 -2
- data/lib/solargraph/pin/until.rb +18 -0
- data/lib/solargraph/pin/while.rb +18 -0
- data/lib/solargraph/pin.rb +8 -2
- data/lib/solargraph/pin_cache.rb +245 -0
- data/lib/solargraph/position.rb +19 -0
- data/lib/solargraph/range.rb +23 -4
- data/lib/solargraph/rbs_map/conversions.rb +315 -99
- data/lib/solargraph/rbs_map/core_fills.rb +50 -16
- data/lib/solargraph/rbs_map/core_map.rb +41 -11
- data/lib/solargraph/rbs_map/stdlib_map.rb +15 -5
- data/lib/solargraph/rbs_map.rb +87 -16
- data/lib/solargraph/shell.rb +117 -17
- data/lib/solargraph/source/chain/array.rb +13 -8
- data/lib/solargraph/source/chain/block_symbol.rb +1 -1
- data/lib/solargraph/source/chain/block_variable.rb +1 -1
- data/lib/solargraph/source/chain/call.rb +135 -66
- data/lib/solargraph/source/chain/constant.rb +3 -66
- data/lib/solargraph/source/chain/hash.rb +9 -3
- data/lib/solargraph/source/chain/head.rb +1 -1
- data/lib/solargraph/source/chain/if.rb +7 -2
- data/lib/solargraph/source/chain/link.rb +38 -6
- data/lib/solargraph/source/chain/literal.rb +27 -2
- data/lib/solargraph/source/chain/or.rb +2 -2
- data/lib/solargraph/source/chain/z_super.rb +1 -1
- data/lib/solargraph/source/chain.rb +140 -63
- data/lib/solargraph/source/change.rb +2 -2
- data/lib/solargraph/source/cursor.rb +4 -4
- data/lib/solargraph/source/source_chainer.rb +3 -3
- data/lib/solargraph/source.rb +110 -89
- data/lib/solargraph/source_map/clip.rb +22 -28
- data/lib/solargraph/source_map/data.rb +34 -0
- data/lib/solargraph/source_map/mapper.rb +11 -7
- data/lib/solargraph/source_map.rb +50 -43
- data/lib/solargraph/type_checker/checks.rb +4 -0
- data/lib/solargraph/type_checker/param_def.rb +2 -0
- data/lib/solargraph/type_checker/rules.rb +35 -8
- data/lib/solargraph/type_checker.rb +331 -189
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/views/_method.erb +10 -10
- data/lib/solargraph/views/_namespace.erb +3 -3
- data/lib/solargraph/views/document.erb +10 -10
- data/lib/solargraph/views/environment.erb +3 -5
- data/lib/solargraph/workspace/config.rb +25 -5
- data/lib/solargraph/workspace/require_paths.rb +97 -0
- data/lib/solargraph/workspace.rb +53 -72
- data/lib/solargraph/yard_map/helpers.rb +29 -1
- data/lib/solargraph/yard_map/mapper/to_constant.rb +8 -5
- data/lib/solargraph/yard_map/mapper/to_method.rb +55 -19
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +11 -7
- data/lib/solargraph/yard_map/mapper.rb +5 -3
- data/lib/solargraph/yard_map/to_method.rb +6 -3
- data/lib/solargraph/yardoc.rb +45 -10
- data/lib/solargraph.rb +35 -1
- data/rbs/fills/bundler/0/bundler.rbs +4271 -0
- data/rbs/fills/open3/0/open3.rbs +172 -0
- data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
- data/rbs/fills/rubygems/0/errors.rbs +364 -0
- data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
- data/rbs/fills/rubygems/0/specification.rbs +1753 -0
- data/rbs/fills/tuple/tuple.rbs +149 -0
- data/rbs_collection.yaml +19 -0
- data/sig/shims/ast/0/node.rbs +5 -0
- data/sig/shims/ast/2.4/.rbs_meta.yaml +9 -0
- data/sig/shims/ast/2.4/ast.rbs +73 -0
- data/sig/shims/parser/3.2.0.1/builders/default.rbs +195 -0
- data/sig/shims/parser/3.2.0.1/manifest.yaml +7 -0
- data/sig/shims/parser/3.2.0.1/parser.rbs +201 -0
- data/sig/shims/parser/3.2.0.1/polyfill.rbs +4 -0
- data/sig/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
- data/sig/shims/thor/1.2.0.1/manifest.yaml +7 -0
- data/sig/shims/thor/1.2.0.1/thor.rbs +17 -0
- data/solargraph.gemspec +32 -10
- metadata +237 -37
- data/lib/.rubocop.yml +0 -22
- data/lib/solargraph/cache.rb +0 -77
- data/lib/solargraph/parser/node_methods.rb +0 -83
|
@@ -8,33 +8,42 @@ module Solargraph
|
|
|
8
8
|
include ParserGem::NodeMethods
|
|
9
9
|
|
|
10
10
|
def process
|
|
11
|
+
# @sg-ignore Variable type could not be inferred for method_name
|
|
12
|
+
# @type [Symbol]
|
|
13
|
+
method_name = node.children[1]
|
|
14
|
+
# :nocov:
|
|
15
|
+
unless method_name.instance_of?(Symbol)
|
|
16
|
+
Solargraph.assert_or_log(:parser_method_name, "Expected method name to be a Symbol, got #{method_name.class} for node #{node.inspect}")
|
|
17
|
+
return process_children
|
|
18
|
+
end
|
|
19
|
+
# :nocov:
|
|
11
20
|
if node.children[0].nil?
|
|
12
|
-
if [:private, :public, :protected].include?(
|
|
21
|
+
if [:private, :public, :protected].include?(method_name)
|
|
13
22
|
process_visibility
|
|
14
|
-
elsif
|
|
23
|
+
elsif method_name == :module_function
|
|
15
24
|
process_module_function
|
|
16
|
-
elsif [:attr_reader, :attr_writer, :attr_accessor].include?(
|
|
25
|
+
elsif [:attr_reader, :attr_writer, :attr_accessor].include?(method_name)
|
|
17
26
|
process_attribute
|
|
18
|
-
elsif
|
|
27
|
+
elsif method_name == :include
|
|
19
28
|
process_include
|
|
20
|
-
elsif
|
|
29
|
+
elsif method_name == :extend
|
|
21
30
|
process_extend
|
|
22
|
-
elsif
|
|
31
|
+
elsif method_name == :prepend
|
|
23
32
|
process_prepend
|
|
24
|
-
elsif
|
|
33
|
+
elsif method_name == :require
|
|
25
34
|
process_require
|
|
26
|
-
elsif
|
|
35
|
+
elsif method_name == :autoload
|
|
27
36
|
process_autoload
|
|
28
|
-
elsif
|
|
37
|
+
elsif method_name == :private_constant
|
|
29
38
|
process_private_constant
|
|
30
|
-
elsif
|
|
39
|
+
elsif method_name == :alias_method && node.children[2] && node.children[2] && node.children[2].type == :sym && node.children[3] && node.children[3].type == :sym
|
|
31
40
|
process_alias_method
|
|
32
|
-
elsif
|
|
41
|
+
elsif method_name == :private_class_method && node.children[2].is_a?(AST::Node)
|
|
33
42
|
# Processing a private class can potentially handle children on its own
|
|
34
43
|
return if process_private_class_method
|
|
35
44
|
end
|
|
36
|
-
elsif
|
|
37
|
-
pins.push Pin::Reference::Require.new(Solargraph::Location.new(region.filename, Solargraph::Range.from_to(0, 0, 0, 0)), 'bundler/require')
|
|
45
|
+
elsif method_name == :require && node.children[0].to_s == '(const nil :Bundler)'
|
|
46
|
+
pins.push Pin::Reference::Require.new(Solargraph::Location.new(region.filename, Solargraph::Range.from_to(0, 0, 0, 0)), 'bundler/require', source: :parser)
|
|
38
47
|
end
|
|
39
48
|
process_children
|
|
40
49
|
end
|
|
@@ -45,15 +54,24 @@ module Solargraph
|
|
|
45
54
|
def process_visibility
|
|
46
55
|
if (node.children.length > 2)
|
|
47
56
|
node.children[2..-1].each do |child|
|
|
48
|
-
|
|
57
|
+
# @sg-ignore Variable type could not be inferred for method_name
|
|
58
|
+
# @type [Symbol]
|
|
59
|
+
visibility = node.children[1]
|
|
60
|
+
# :nocov:
|
|
61
|
+
unless visibility.instance_of?(Symbol)
|
|
62
|
+
Solargraph.assert_or_log(:parser_visibility, "Expected visibility name to be a Symbol, got #{visibility.class} for node #{node.inspect}")
|
|
63
|
+
return process_children
|
|
64
|
+
end
|
|
65
|
+
# :nocov:
|
|
66
|
+
if child.is_a?(::Parser::AST::Node) && (child.type == :sym || child.type == :str)
|
|
49
67
|
name = child.children[0].to_s
|
|
50
68
|
matches = pins.select{ |pin| pin.is_a?(Pin::Method) && pin.name == name && pin.namespace == region.closure.full_context.namespace && pin.context.scope == (region.scope || :instance)}
|
|
51
69
|
matches.each do |pin|
|
|
52
70
|
# @todo Smelly instance variable access
|
|
53
|
-
pin.instance_variable_set(:@visibility,
|
|
71
|
+
pin.instance_variable_set(:@visibility, visibility)
|
|
54
72
|
end
|
|
55
73
|
else
|
|
56
|
-
process_children region.update(visibility:
|
|
74
|
+
process_children region.update(visibility: visibility)
|
|
57
75
|
end
|
|
58
76
|
end
|
|
59
77
|
else
|
|
@@ -76,7 +94,8 @@ module Solargraph
|
|
|
76
94
|
comments: cmnt,
|
|
77
95
|
scope: region.scope || :instance,
|
|
78
96
|
visibility: region.visibility,
|
|
79
|
-
attribute: true
|
|
97
|
+
attribute: true,
|
|
98
|
+
source: :parser
|
|
80
99
|
)
|
|
81
100
|
end
|
|
82
101
|
if node.children[1] == :attr_writer || node.children[1] == :attr_accessor
|
|
@@ -87,12 +106,13 @@ module Solargraph
|
|
|
87
106
|
comments: cmnt,
|
|
88
107
|
scope: region.scope || :instance,
|
|
89
108
|
visibility: region.visibility,
|
|
90
|
-
attribute: true
|
|
109
|
+
attribute: true,
|
|
110
|
+
source: :parser
|
|
91
111
|
)
|
|
92
112
|
pins.push method_pin
|
|
93
|
-
method_pin.parameters.push Pin::Parameter.new(name: 'value', decl: :arg, closure: pins.last)
|
|
113
|
+
method_pin.parameters.push Pin::Parameter.new(name: 'value', decl: :arg, closure: pins.last, source: :parser)
|
|
94
114
|
if method_pin.return_type.defined?
|
|
95
|
-
pins.last.docstring.add_tag YARD::Tags::Tag.new(:param, '', pins.last.return_type.
|
|
115
|
+
pins.last.docstring.add_tag YARD::Tags::Tag.new(:param, '', pins.last.return_type.items.map(&:rooted_tags), 'value')
|
|
96
116
|
end
|
|
97
117
|
end
|
|
98
118
|
end
|
|
@@ -107,7 +127,8 @@ module Solargraph
|
|
|
107
127
|
pins.push type.new(
|
|
108
128
|
location: get_node_location(i),
|
|
109
129
|
closure: cp,
|
|
110
|
-
name: unpack_name(i)
|
|
130
|
+
name: unpack_name(i),
|
|
131
|
+
source: :parser
|
|
111
132
|
)
|
|
112
133
|
end
|
|
113
134
|
end
|
|
@@ -121,7 +142,8 @@ module Solargraph
|
|
|
121
142
|
pins.push Pin::Reference::Prepend.new(
|
|
122
143
|
location: get_node_location(i),
|
|
123
144
|
closure: cp,
|
|
124
|
-
name: unpack_name(i)
|
|
145
|
+
name: unpack_name(i),
|
|
146
|
+
source: :parser
|
|
125
147
|
)
|
|
126
148
|
end
|
|
127
149
|
end
|
|
@@ -135,13 +157,15 @@ module Solargraph
|
|
|
135
157
|
pins.push Pin::Reference::Extend.new(
|
|
136
158
|
location: loc,
|
|
137
159
|
closure: region.closure,
|
|
138
|
-
name: region.closure.full_context.namespace
|
|
160
|
+
name: region.closure.full_context.namespace,
|
|
161
|
+
source: :parser
|
|
139
162
|
)
|
|
140
163
|
else
|
|
141
164
|
pins.push Pin::Reference::Extend.new(
|
|
142
165
|
location: loc,
|
|
143
166
|
closure: region.closure,
|
|
144
|
-
name: unpack_name(i)
|
|
167
|
+
name: unpack_name(i),
|
|
168
|
+
source: :parser
|
|
145
169
|
)
|
|
146
170
|
end
|
|
147
171
|
end
|
|
@@ -151,7 +175,7 @@ module Solargraph
|
|
|
151
175
|
def process_require
|
|
152
176
|
if node.children[2].is_a?(AST::Node) && node.children[2].type == :str
|
|
153
177
|
path = node.children[2].children[0].to_s
|
|
154
|
-
pins.push Pin::Reference::Require.new(get_node_location(node), path)
|
|
178
|
+
pins.push Pin::Reference::Require.new(get_node_location(node), path, source: :parser)
|
|
155
179
|
end
|
|
156
180
|
end
|
|
157
181
|
|
|
@@ -159,7 +183,7 @@ module Solargraph
|
|
|
159
183
|
def process_autoload
|
|
160
184
|
if node.children[3].is_a?(AST::Node) && node.children[3].type == :str
|
|
161
185
|
path = node.children[3].children[0].to_s
|
|
162
|
-
pins.push Pin::Reference::Require.new(get_node_location(node), path)
|
|
186
|
+
pins.push Pin::Reference::Require.new(get_node_location(node), path, source: :parser)
|
|
163
187
|
end
|
|
164
188
|
end
|
|
165
189
|
|
|
@@ -171,7 +195,8 @@ module Solargraph
|
|
|
171
195
|
elsif node.children[2].type == :sym || node.children[2].type == :str
|
|
172
196
|
node.children[2..-1].each do |x|
|
|
173
197
|
cn = x.children[0].to_s
|
|
174
|
-
|
|
198
|
+
# @type [Pin::Method, nil]
|
|
199
|
+
ref = pins.find { |p| p.is_a?(Pin::Method) && p.namespace == region.closure.full_context.namespace && p.name == cn }
|
|
175
200
|
unless ref.nil?
|
|
176
201
|
pins.delete ref
|
|
177
202
|
mm = Solargraph::Pin::Method.new(
|
|
@@ -182,7 +207,8 @@ module Solargraph
|
|
|
182
207
|
comments: ref.comments,
|
|
183
208
|
scope: :class,
|
|
184
209
|
visibility: :public,
|
|
185
|
-
node: ref.node
|
|
210
|
+
node: ref.node,
|
|
211
|
+
source: :parser
|
|
186
212
|
)
|
|
187
213
|
cm = Solargraph::Pin::Method.new(
|
|
188
214
|
location: ref.location,
|
|
@@ -192,7 +218,8 @@ module Solargraph
|
|
|
192
218
|
comments: ref.comments,
|
|
193
219
|
scope: :instance,
|
|
194
220
|
visibility: :private,
|
|
195
|
-
node: ref.node
|
|
221
|
+
node: ref.node,
|
|
222
|
+
source: :parser)
|
|
196
223
|
pins.push mm, cm
|
|
197
224
|
pins.select{|pin| pin.is_a?(Pin::InstanceVariable) && pin.closure.path == ref.path}.each do |ivar|
|
|
198
225
|
pins.delete ivar
|
|
@@ -201,14 +228,18 @@ module Solargraph
|
|
|
201
228
|
closure: cm,
|
|
202
229
|
name: ivar.name,
|
|
203
230
|
comments: ivar.comments,
|
|
204
|
-
|
|
231
|
+
# @sg-ignore https://github.com/castwide/solargraph/pull/1114
|
|
232
|
+
assignment: ivar.assignment,
|
|
233
|
+
source: :parser
|
|
205
234
|
)
|
|
206
235
|
pins.push Solargraph::Pin::InstanceVariable.new(
|
|
207
236
|
location: ivar.location,
|
|
208
237
|
closure: mm,
|
|
209
238
|
name: ivar.name,
|
|
210
239
|
comments: ivar.comments,
|
|
211
|
-
|
|
240
|
+
# @sg-ignore https://github.com/castwide/solargraph/pull/1114
|
|
241
|
+
assignment: ivar.assignment,
|
|
242
|
+
source: :parser
|
|
212
243
|
)
|
|
213
244
|
end
|
|
214
245
|
end
|
|
@@ -236,7 +267,8 @@ module Solargraph
|
|
|
236
267
|
closure: region.closure,
|
|
237
268
|
name: node.children[2].children[0].to_s,
|
|
238
269
|
original: node.children[3].children[0].to_s,
|
|
239
|
-
scope: region.scope || :instance
|
|
270
|
+
scope: region.scope || :instance,
|
|
271
|
+
source: :parser
|
|
240
272
|
)
|
|
241
273
|
end
|
|
242
274
|
|
|
@@ -5,10 +5,12 @@ module Solargraph
|
|
|
5
5
|
module ParserGem
|
|
6
6
|
module NodeProcessors
|
|
7
7
|
class SymNode < Parser::NodeProcessor::Base
|
|
8
|
+
# @return [void]
|
|
8
9
|
def process
|
|
9
10
|
pins.push Solargraph::Pin::Symbol.new(
|
|
10
11
|
get_node_location(node),
|
|
11
|
-
":#{node.children[0]}"
|
|
12
|
+
":#{node.children[0]}",
|
|
13
|
+
source: :parser
|
|
12
14
|
)
|
|
13
15
|
end
|
|
14
16
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Parser
|
|
5
|
+
module ParserGem
|
|
6
|
+
module NodeProcessors
|
|
7
|
+
class UntilNode < Parser::NodeProcessor::Base
|
|
8
|
+
include ParserGem::NodeMethods
|
|
9
|
+
|
|
10
|
+
def process
|
|
11
|
+
location = get_node_location(node)
|
|
12
|
+
# Note - this should not be considered a block, as the
|
|
13
|
+
# until statement doesn't create a closure - e.g.,
|
|
14
|
+
# variables created inside can be seen from outside as
|
|
15
|
+
# well
|
|
16
|
+
pins.push Solargraph::Pin::Until.new(
|
|
17
|
+
location: location,
|
|
18
|
+
closure: region.closure,
|
|
19
|
+
node: node,
|
|
20
|
+
comments: comments_for(node),
|
|
21
|
+
source: :parser,
|
|
22
|
+
)
|
|
23
|
+
process_children region
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Parser
|
|
5
|
+
module ParserGem
|
|
6
|
+
module NodeProcessors
|
|
7
|
+
class WhileNode < Parser::NodeProcessor::Base
|
|
8
|
+
include ParserGem::NodeMethods
|
|
9
|
+
|
|
10
|
+
def process
|
|
11
|
+
location = get_node_location(node)
|
|
12
|
+
# Note - this should not be considered a block, as the
|
|
13
|
+
# while statement doesn't create a closure - e.g.,
|
|
14
|
+
# variables created inside can be seen from outside as
|
|
15
|
+
# well
|
|
16
|
+
pins.push Solargraph::Pin::While.new(
|
|
17
|
+
location: location,
|
|
18
|
+
closure: region.closure,
|
|
19
|
+
node: node,
|
|
20
|
+
comments: comments_for(node),
|
|
21
|
+
source: :parser,
|
|
22
|
+
)
|
|
23
|
+
process_children region
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -13,6 +13,7 @@ module Solargraph
|
|
|
13
13
|
autoload :NamespaceNode, 'solargraph/parser/parser_gem/node_processors/namespace_node'
|
|
14
14
|
autoload :SclassNode, 'solargraph/parser/parser_gem/node_processors/sclass_node'
|
|
15
15
|
autoload :IvasgnNode, 'solargraph/parser/parser_gem/node_processors/ivasgn_node'
|
|
16
|
+
autoload :IfNode, 'solargraph/parser/parser_gem/node_processors/if_node'
|
|
16
17
|
autoload :CvasgnNode, 'solargraph/parser/parser_gem/node_processors/cvasgn_node'
|
|
17
18
|
autoload :LvasgnNode, 'solargraph/parser/parser_gem/node_processors/lvasgn_node'
|
|
18
19
|
autoload :GvasgnNode, 'solargraph/parser/parser_gem/node_processors/gvasgn_node'
|
|
@@ -22,8 +23,12 @@ module Solargraph
|
|
|
22
23
|
autoload :ArgsNode, 'solargraph/parser/parser_gem/node_processors/args_node'
|
|
23
24
|
autoload :BlockNode, 'solargraph/parser/parser_gem/node_processors/block_node'
|
|
24
25
|
autoload :OrasgnNode, 'solargraph/parser/parser_gem/node_processors/orasgn_node'
|
|
26
|
+
autoload :OpasgnNode, 'solargraph/parser/parser_gem/node_processors/opasgn_node'
|
|
25
27
|
autoload :SymNode, 'solargraph/parser/parser_gem/node_processors/sym_node'
|
|
26
28
|
autoload :ResbodyNode, 'solargraph/parser/parser_gem/node_processors/resbody_node'
|
|
29
|
+
autoload :UntilNode, 'solargraph/parser/parser_gem/node_processors/until_node'
|
|
30
|
+
autoload :WhileNode, 'solargraph/parser/parser_gem/node_processors/while_node'
|
|
31
|
+
autoload :AndNode, 'solargraph/parser/parser_gem/node_processors/and_node'
|
|
27
32
|
end
|
|
28
33
|
end
|
|
29
34
|
|
|
@@ -35,7 +40,10 @@ module Solargraph
|
|
|
35
40
|
register :resbody, ParserGem::NodeProcessors::ResbodyNode
|
|
36
41
|
register :def, ParserGem::NodeProcessors::DefNode
|
|
37
42
|
register :defs, ParserGem::NodeProcessors::DefsNode
|
|
43
|
+
register :if, ParserGem::NodeProcessors::IfNode
|
|
38
44
|
register :send, ParserGem::NodeProcessors::SendNode
|
|
45
|
+
register :class, Convention::StructDefinition::NodeProcessors::StructNode
|
|
46
|
+
register :class, Convention::DataDefinition::NodeProcessors::DataNode
|
|
39
47
|
register :class, ParserGem::NodeProcessors::NamespaceNode
|
|
40
48
|
register :module, ParserGem::NodeProcessors::NamespaceNode
|
|
41
49
|
register :sclass, ParserGem::NodeProcessors::SclassNode
|
|
@@ -43,6 +51,8 @@ module Solargraph
|
|
|
43
51
|
register :cvasgn, ParserGem::NodeProcessors::CvasgnNode
|
|
44
52
|
register :lvasgn, ParserGem::NodeProcessors::LvasgnNode
|
|
45
53
|
register :gvasgn, ParserGem::NodeProcessors::GvasgnNode
|
|
54
|
+
register :casgn, Convention::StructDefinition::NodeProcessors::StructNode
|
|
55
|
+
register :casgn, Convention::DataDefinition::NodeProcessors::DataNode
|
|
46
56
|
register :casgn, ParserGem::NodeProcessors::CasgnNode
|
|
47
57
|
register :masgn, ParserGem::NodeProcessors::MasgnNode
|
|
48
58
|
register :alias, ParserGem::NodeProcessors::AliasNode
|
|
@@ -50,7 +60,11 @@ module Solargraph
|
|
|
50
60
|
register :forward_args, ParserGem::NodeProcessors::ArgsNode
|
|
51
61
|
register :block, ParserGem::NodeProcessors::BlockNode
|
|
52
62
|
register :or_asgn, ParserGem::NodeProcessors::OrasgnNode
|
|
63
|
+
register :op_asgn, ParserGem::NodeProcessors::OpasgnNode
|
|
53
64
|
register :sym, ParserGem::NodeProcessors::SymNode
|
|
65
|
+
register :until, ParserGem::NodeProcessors::UntilNode
|
|
66
|
+
register :while, ParserGem::NodeProcessors::WhileNode
|
|
67
|
+
register :and, ParserGem::NodeProcessors::AndNode
|
|
54
68
|
end
|
|
55
69
|
end
|
|
56
70
|
end
|
|
@@ -23,13 +23,15 @@ module Solargraph
|
|
|
23
23
|
|
|
24
24
|
# @param source [Source]
|
|
25
25
|
# @param namespace [String]
|
|
26
|
+
# @param closure [Pin::Closure, nil]
|
|
26
27
|
# @param scope [Symbol, nil]
|
|
27
28
|
# @param visibility [Symbol]
|
|
29
|
+
# @param lvars [Array<Symbol>]
|
|
28
30
|
def initialize source: Solargraph::Source.load_string(''), closure: nil,
|
|
29
31
|
scope: nil, visibility: :public, lvars: []
|
|
30
32
|
@source = source
|
|
31
33
|
# @closure = closure
|
|
32
|
-
@closure = closure || Pin::Namespace.new(name: '', location: source.location)
|
|
34
|
+
@closure = closure || Pin::Namespace.new(name: '', location: source.location, source: :parser)
|
|
33
35
|
@scope = scope
|
|
34
36
|
@visibility = visibility
|
|
35
37
|
@lvars = lvars
|
|
@@ -45,6 +47,7 @@ module Solargraph
|
|
|
45
47
|
# @param closure [Pin::Closure, nil]
|
|
46
48
|
# @param scope [Symbol, nil]
|
|
47
49
|
# @param visibility [Symbol, nil]
|
|
50
|
+
# @param lvars [Array<Symbol>, nil]
|
|
48
51
|
# @return [Region]
|
|
49
52
|
def update closure: nil, scope: nil, visibility: nil, lvars: nil
|
|
50
53
|
Region.new(
|
data/lib/solargraph/parser.rb
CHANGED
|
@@ -4,20 +4,18 @@ module Solargraph
|
|
|
4
4
|
autoload :ParserGem, 'solargraph/parser/parser_gem'
|
|
5
5
|
autoload :Region, 'solargraph/parser/region'
|
|
6
6
|
autoload :NodeProcessor, 'solargraph/parser/node_processor'
|
|
7
|
+
autoload :FlowSensitiveTyping, 'solargraph/parser/flow_sensitive_typing'
|
|
7
8
|
autoload :Snippet, 'solargraph/parser/snippet'
|
|
8
9
|
|
|
9
10
|
class SyntaxError < StandardError
|
|
10
11
|
end
|
|
11
12
|
|
|
12
|
-
def self.rubyvm?
|
|
13
|
-
false
|
|
14
|
-
end
|
|
15
|
-
|
|
16
13
|
# @deprecated
|
|
17
14
|
Legacy = ParserGem
|
|
18
15
|
|
|
19
16
|
ClassMethods = ParserGem::ClassMethods
|
|
20
|
-
|
|
17
|
+
# @todo should be able to just 'extend ClassMethods' here and
|
|
18
|
+
# typecheck things off it in strict mode
|
|
21
19
|
extend ParserGem::ClassMethods
|
|
22
20
|
|
|
23
21
|
NodeMethods = ParserGem::NodeMethods
|