solargraph 0.58.3 → 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 +41 -38
- data/.github/workflows/rspec.yml +45 -13
- data/.github/workflows/typecheck.yml +2 -2
- data/.gitignore +0 -1
- data/.rubocop_todo.yml +27 -49
- data/CHANGELOG.md +1 -10
- data/README.md +3 -3
- data/Rakefile +1 -0
- data/lib/solargraph/api_map/cache.rb +3 -3
- data/lib/solargraph/api_map/constants.rb +13 -3
- data/lib/solargraph/api_map/index.rb +22 -11
- data/lib/solargraph/api_map/source_to_yard.rb +13 -1
- data/lib/solargraph/api_map/store.rb +11 -8
- data/lib/solargraph/api_map.rb +105 -50
- data/lib/solargraph/bench.rb +45 -45
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +16 -2
- data/lib/solargraph/complex_type/unique_type.rb +170 -20
- data/lib/solargraph/complex_type.rb +119 -14
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +3 -1
- data/lib/solargraph/convention/data_definition.rb +4 -1
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +23 -23
- data/lib/solargraph/convention/rakefile.rb +17 -17
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +1 -0
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +1 -0
- data/lib/solargraph/convention/struct_definition.rb +5 -1
- data/lib/solargraph/convention.rb +78 -78
- data/lib/solargraph/converters/dd.rb +17 -17
- data/lib/solargraph/converters/dl.rb +15 -15
- data/lib/solargraph/converters/dt.rb +15 -15
- data/lib/solargraph/converters/misc.rb +1 -1
- data/lib/solargraph/diagnostics/require_not_found.rb +1 -0
- data/lib/solargraph/diagnostics/rubocop.rb +1 -0
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +2 -0
- data/lib/solargraph/diagnostics/type_check.rb +1 -0
- data/lib/solargraph/diagnostics/update_errors.rb +41 -41
- data/lib/solargraph/doc_map.rb +134 -373
- data/lib/solargraph/equality.rb +1 -1
- data/lib/solargraph/gem_pins.rb +14 -15
- data/lib/solargraph/language_server/error_codes.rb +20 -20
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +1 -0
- data/lib/solargraph/language_server/host/message_worker.rb +2 -1
- data/lib/solargraph/language_server/host/sources.rb +1 -0
- data/lib/solargraph/language_server/host.rb +6 -1
- data/lib/solargraph/language_server/message/base.rb +97 -97
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +2 -7
- data/lib/solargraph/language_server/message/extended/document.rb +1 -0
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/initialize.rb +191 -191
- data/lib/solargraph/language_server/message/text_document/completion.rb +2 -0
- data/lib/solargraph/language_server/message/text_document/definition.rb +2 -0
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +2 -0
- data/lib/solargraph/language_server/message/text_document/formatting.rb +2 -0
- data/lib/solargraph/language_server/message/text_document/hover.rb +2 -0
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +1 -0
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +2 -0
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -26
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +2 -0
- data/lib/solargraph/language_server/message.rb +94 -94
- data/lib/solargraph/language_server/request.rb +27 -27
- data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/library.rb +59 -13
- data/lib/solargraph/location.rb +9 -4
- data/lib/solargraph/logging.rb +21 -1
- data/lib/solargraph/page.rb +92 -92
- data/lib/solargraph/parser/comment_ripper.rb +7 -0
- data/lib/solargraph/parser/flow_sensitive_typing.rb +330 -102
- data/lib/solargraph/parser/node_processor/base.rb +32 -2
- data/lib/solargraph/parser/node_processor.rb +7 -6
- data/lib/solargraph/parser/parser_gem/class_methods.rb +28 -10
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +31 -6
- data/lib/solargraph/parser/parser_gem/node_methods.rb +27 -7
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +4 -4
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +2 -0
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +9 -0
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +11 -11
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +7 -0
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -37
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +36 -6
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +3 -2
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +1 -0
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +2 -2
- data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +1 -0
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +12 -7
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +5 -1
- data/lib/solargraph/parser/parser_gem/node_processors.rb +4 -0
- data/lib/solargraph/parser/parser_gem.rb +12 -12
- data/lib/solargraph/parser/region.rb +9 -3
- data/lib/solargraph/parser/snippet.rb +1 -1
- data/lib/solargraph/parser.rb +23 -23
- data/lib/solargraph/pin/base.rb +53 -21
- data/lib/solargraph/pin/base_variable.rb +312 -20
- data/lib/solargraph/pin/block.rb +26 -4
- data/lib/solargraph/pin/breakable.rb +5 -1
- data/lib/solargraph/pin/callable.rb +50 -3
- data/lib/solargraph/pin/closure.rb +2 -6
- data/lib/solargraph/pin/common.rb +20 -5
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/constant.rb +45 -45
- data/lib/solargraph/pin/conversions.rb +2 -1
- data/lib/solargraph/pin/delegated_method.rb +15 -4
- data/lib/solargraph/pin/documenting.rb +1 -0
- data/lib/solargraph/pin/instance_variable.rb +5 -1
- data/lib/solargraph/pin/keyword.rb +0 -4
- data/lib/solargraph/pin/local_variable.rb +13 -57
- data/lib/solargraph/pin/method.rb +90 -42
- data/lib/solargraph/pin/method_alias.rb +8 -0
- data/lib/solargraph/pin/namespace.rb +7 -1
- data/lib/solargraph/pin/parameter.rb +76 -13
- data/lib/solargraph/pin/proxy_type.rb +2 -1
- data/lib/solargraph/pin/reference/override.rb +1 -1
- data/lib/solargraph/pin/reference/superclass.rb +2 -0
- data/lib/solargraph/pin/reference.rb +2 -0
- data/lib/solargraph/pin/search.rb +1 -0
- data/lib/solargraph/pin/signature.rb +8 -0
- data/lib/solargraph/pin/symbol.rb +1 -1
- data/lib/solargraph/pin/until.rb +1 -1
- data/lib/solargraph/pin/while.rb +1 -1
- data/lib/solargraph/pin.rb +2 -0
- data/lib/solargraph/pin_cache.rb +477 -57
- data/lib/solargraph/position.rb +12 -26
- data/lib/solargraph/range.rb +6 -6
- data/lib/solargraph/rbs_map/conversions.rb +33 -10
- data/lib/solargraph/rbs_map/core_fills.rb +84 -84
- data/lib/solargraph/rbs_map/core_map.rb +24 -17
- data/lib/solargraph/rbs_map/stdlib_map.rb +34 -5
- data/lib/solargraph/rbs_map.rb +74 -20
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +73 -39
- data/lib/solargraph/source/chain/array.rb +37 -37
- data/lib/solargraph/source/chain/call.rb +52 -17
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +2 -0
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +1 -0
- data/lib/solargraph/source/chain/if.rb +1 -0
- data/lib/solargraph/source/chain/instance_variable.rb +22 -1
- data/lib/solargraph/source/chain/link.rb +109 -109
- data/lib/solargraph/source/chain/literal.rb +5 -0
- data/lib/solargraph/source/chain/or.rb +9 -1
- data/lib/solargraph/source/chain/q_call.rb +11 -11
- data/lib/solargraph/source/chain/variable.rb +13 -13
- data/lib/solargraph/source/chain/z_super.rb +30 -30
- data/lib/solargraph/source/chain.rb +25 -22
- data/lib/solargraph/source/change.rb +9 -2
- data/lib/solargraph/source/cursor.rb +7 -1
- data/lib/solargraph/source/source_chainer.rb +13 -3
- data/lib/solargraph/source/updater.rb +4 -0
- data/lib/solargraph/source.rb +33 -7
- data/lib/solargraph/source_map/clip.rb +13 -2
- data/lib/solargraph/source_map/data.rb +4 -1
- data/lib/solargraph/source_map/mapper.rb +24 -1
- data/lib/solargraph/source_map.rb +14 -6
- data/lib/solargraph/type_checker/problem.rb +3 -1
- data/lib/solargraph/type_checker/rules.rb +75 -2
- data/lib/solargraph/type_checker.rb +111 -30
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +3 -1
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +1 -0
- data/lib/solargraph/workspace.rb +158 -16
- data/lib/solargraph/yard_map/helpers.rb +2 -1
- data/lib/solargraph/yard_map/mapper/to_method.rb +5 -1
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -0
- data/lib/solargraph/yard_map/mapper.rb +5 -0
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph/yardoc.rb +33 -23
- data/lib/solargraph.rb +24 -3
- data/rbs/fills/rubygems/0/dependency.rbs +193 -0
- data/rbs/fills/tuple/tuple.rbs +28 -0
- data/rbs/shims/ast/0/node.rbs +1 -1
- data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
- data/solargraph.gemspec +2 -1
- metadata +12 -7
- 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
|
@@ -9,7 +9,7 @@ module Solargraph
|
|
|
9
9
|
|
|
10
10
|
def process
|
|
11
11
|
loc = get_node_location(node)
|
|
12
|
-
|
|
12
|
+
ivars.push Solargraph::Pin::InstanceVariable.new(
|
|
13
13
|
location: loc,
|
|
14
14
|
closure: region.closure,
|
|
15
15
|
name: node.children[0].to_s,
|
|
@@ -19,9 +19,10 @@ module Solargraph
|
|
|
19
19
|
)
|
|
20
20
|
if region.visibility == :module_function
|
|
21
21
|
here = get_node_start_position(node)
|
|
22
|
+
# @type [Pin::Closure, nil]
|
|
22
23
|
named_path = named_path_pin(here)
|
|
23
24
|
if named_path.is_a?(Pin::Method)
|
|
24
|
-
|
|
25
|
+
ivars.push Solargraph::Pin::InstanceVariable.new(
|
|
25
26
|
location: loc,
|
|
26
27
|
closure: Pin::Namespace.new(type: :module, closure: region.closure.closure, name: region.closure.name),
|
|
27
28
|
name: node.children[0].to_s,
|
|
@@ -9,6 +9,7 @@ module Solargraph
|
|
|
9
9
|
|
|
10
10
|
def process
|
|
11
11
|
here = get_node_start_position(node)
|
|
12
|
+
# @sg-ignore Need to add nil check here
|
|
12
13
|
presence = Range.new(here, region.closure.location.range.ending)
|
|
13
14
|
loc = get_node_location(node)
|
|
14
15
|
locals.push Solargraph::Pin::LocalVariable.new(
|
|
@@ -37,8 +37,10 @@ module Solargraph
|
|
|
37
37
|
pin = if lhs.type == :lvasgn
|
|
38
38
|
# lvasgn is a local variable
|
|
39
39
|
locals.find { |l| l.location == location }
|
|
40
|
+
elsif lhs.type == :ivasgn
|
|
41
|
+
# ivasgn is an instance variable assignment
|
|
42
|
+
ivars.find { |iv| iv.location == location }
|
|
40
43
|
else
|
|
41
|
-
# e.g., ivasgn is an instance variable, etc
|
|
42
44
|
pins.find { |iv| iv.location == location && iv.is_a?(Pin::BaseVariable) }
|
|
43
45
|
end
|
|
44
46
|
# @todo in line below, nothing in typechecking alerts
|
|
@@ -57,7 +57,7 @@ module Solargraph
|
|
|
57
57
|
[callee,
|
|
58
58
|
asgn_method,
|
|
59
59
|
node.updated(:send, [call, operator, argument])])
|
|
60
|
-
NodeProcessor.process(new_send, region, pins, locals)
|
|
60
|
+
NodeProcessor.process(new_send, region, pins, locals, ivars)
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
# @param asgn [Parser::AST::Node] the target of the assignment
|
|
@@ -89,7 +89,7 @@ module Solargraph
|
|
|
89
89
|
]
|
|
90
90
|
send_node = node.updated(:send, send_children)
|
|
91
91
|
new_asgn = node.updated(asgn.type, [variable_name, send_node])
|
|
92
|
-
NodeProcessor.process(new_asgn, region, pins, locals)
|
|
92
|
+
NodeProcessor.process(new_asgn, region, pins, locals, ivars)
|
|
93
93
|
end
|
|
94
94
|
end
|
|
95
95
|
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Parser
|
|
5
|
+
module ParserGem
|
|
6
|
+
module NodeProcessors
|
|
7
|
+
class OrNode < Parser::NodeProcessor::Base
|
|
8
|
+
include ParserGem::NodeMethods
|
|
9
|
+
|
|
10
|
+
def process
|
|
11
|
+
process_children
|
|
12
|
+
|
|
13
|
+
FlowSensitiveTyping.new(locals,
|
|
14
|
+
ivars,
|
|
15
|
+
enclosing_breakable_pin,
|
|
16
|
+
enclosing_compound_statement_pin).process_or(node)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -8,7 +8,7 @@ module Solargraph
|
|
|
8
8
|
# @return [void]
|
|
9
9
|
def process
|
|
10
10
|
new_node = node.updated(node.children[0].type, node.children[0].children + [node.children[1]])
|
|
11
|
-
NodeProcessor.process(new_node, region, pins, locals)
|
|
11
|
+
NodeProcessor.process(new_node, region, pins, locals, ivars)
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -11,6 +11,7 @@ module Solargraph
|
|
|
11
11
|
def process
|
|
12
12
|
if node.children[1] # Exception local variable name
|
|
13
13
|
here = get_node_start_position(node.children[1])
|
|
14
|
+
# @sg-ignore Need to add nil check here
|
|
14
15
|
presence = Range.new(here, region.closure.location.range.ending)
|
|
15
16
|
loc = get_node_location(node.children[1])
|
|
16
17
|
types = if node.children[0].nil?
|
|
@@ -29,7 +30,7 @@ module Solargraph
|
|
|
29
30
|
source: :parser
|
|
30
31
|
)
|
|
31
32
|
end
|
|
32
|
-
NodeProcessor.process(node.children[2], region, pins, locals)
|
|
33
|
+
NodeProcessor.process(node.children[2], region, pins, locals, ivars)
|
|
33
34
|
end
|
|
34
35
|
end
|
|
35
36
|
end
|
|
@@ -7,6 +7,7 @@ module Solargraph
|
|
|
7
7
|
class SendNode < Parser::NodeProcessor::Base
|
|
8
8
|
include ParserGem::NodeMethods
|
|
9
9
|
|
|
10
|
+
# @sg-ignore @override is adding, not overriding
|
|
10
11
|
def process
|
|
11
12
|
# @sg-ignore Variable type could not be inferred for method_name
|
|
12
13
|
# @type [Symbol]
|
|
@@ -53,6 +54,7 @@ module Solargraph
|
|
|
53
54
|
# @return [void]
|
|
54
55
|
def process_visibility
|
|
55
56
|
if (node.children.length > 2)
|
|
57
|
+
# @sg-ignore Need to add nil check here
|
|
56
58
|
node.children[2..-1].each do |child|
|
|
57
59
|
# @sg-ignore Variable type could not be inferred for method_name
|
|
58
60
|
# @type [Symbol]
|
|
@@ -82,6 +84,7 @@ module Solargraph
|
|
|
82
84
|
|
|
83
85
|
# @return [void]
|
|
84
86
|
def process_attribute
|
|
87
|
+
# @sg-ignore Need to add nil check here
|
|
85
88
|
node.children[2..-1].each do |a|
|
|
86
89
|
loc = get_node_location(node)
|
|
87
90
|
clos = region.closure
|
|
@@ -122,6 +125,7 @@ module Solargraph
|
|
|
122
125
|
def process_include
|
|
123
126
|
if node.children[2].is_a?(AST::Node) && node.children[2].type == :const
|
|
124
127
|
cp = region.closure
|
|
128
|
+
# @sg-ignore Need to add nil check here
|
|
125
129
|
node.children[2..-1].each do |i|
|
|
126
130
|
type = region.scope == :class ? Pin::Reference::Extend : Pin::Reference::Include
|
|
127
131
|
pins.push type.new(
|
|
@@ -138,6 +142,7 @@ module Solargraph
|
|
|
138
142
|
def process_prepend
|
|
139
143
|
if node.children[2].is_a?(AST::Node) && node.children[2].type == :const
|
|
140
144
|
cp = region.closure
|
|
145
|
+
# @sg-ignore Need to add nil check here
|
|
141
146
|
node.children[2..-1].each do |i|
|
|
142
147
|
pins.push Pin::Reference::Prepend.new(
|
|
143
148
|
location: get_node_location(i),
|
|
@@ -151,6 +156,7 @@ module Solargraph
|
|
|
151
156
|
|
|
152
157
|
# @return [void]
|
|
153
158
|
def process_extend
|
|
159
|
+
# @sg-ignore Need to add nil check here
|
|
154
160
|
node.children[2..-1].each do |i|
|
|
155
161
|
loc = get_node_location(node)
|
|
156
162
|
if i.type == :self
|
|
@@ -193,6 +199,7 @@ module Solargraph
|
|
|
193
199
|
# @todo Smelly instance variable access
|
|
194
200
|
region.instance_variable_set(:@visibility, :module_function)
|
|
195
201
|
elsif node.children[2].type == :sym || node.children[2].type == :str
|
|
202
|
+
# @sg-ignore Need to add nil check here
|
|
196
203
|
node.children[2..-1].each do |x|
|
|
197
204
|
cn = x.children[0].to_s
|
|
198
205
|
# @type [Pin::Method, nil]
|
|
@@ -221,23 +228,21 @@ module Solargraph
|
|
|
221
228
|
node: ref.node,
|
|
222
229
|
source: :parser)
|
|
223
230
|
pins.push mm, cm
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
231
|
+
ivars.select{|pin| pin.is_a?(Pin::InstanceVariable) && pin.closure.path == ref.path}.each do |ivar|
|
|
232
|
+
ivars.delete ivar
|
|
233
|
+
ivars.push Solargraph::Pin::InstanceVariable.new(
|
|
227
234
|
location: ivar.location,
|
|
228
235
|
closure: cm,
|
|
229
236
|
name: ivar.name,
|
|
230
237
|
comments: ivar.comments,
|
|
231
|
-
# @sg-ignore https://github.com/castwide/solargraph/pull/1114
|
|
232
238
|
assignment: ivar.assignment,
|
|
233
239
|
source: :parser
|
|
234
240
|
)
|
|
235
|
-
|
|
241
|
+
ivars.push Solargraph::Pin::InstanceVariable.new(
|
|
236
242
|
location: ivar.location,
|
|
237
243
|
closure: mm,
|
|
238
244
|
name: ivar.name,
|
|
239
245
|
comments: ivar.comments,
|
|
240
|
-
# @sg-ignore https://github.com/castwide/solargraph/pull/1114
|
|
241
246
|
assignment: ivar.assignment,
|
|
242
247
|
source: :parser
|
|
243
248
|
)
|
|
@@ -245,7 +250,7 @@ module Solargraph
|
|
|
245
250
|
end
|
|
246
251
|
end
|
|
247
252
|
elsif node.children[2].type == :def
|
|
248
|
-
NodeProcessor.process node.children[2], region.update(visibility: :module_function), pins, locals
|
|
253
|
+
NodeProcessor.process node.children[2], region.update(visibility: :module_function), pins, locals, ivars
|
|
249
254
|
end
|
|
250
255
|
end
|
|
251
256
|
|
|
@@ -1,29 +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
|
|
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,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Parser
|
|
5
|
+
module ParserGem
|
|
6
|
+
module NodeProcessors
|
|
7
|
+
class WhenNode < Parser::NodeProcessor::Base
|
|
8
|
+
include ParserGem::NodeMethods
|
|
9
|
+
|
|
10
|
+
def process
|
|
11
|
+
pins.push Solargraph::Pin::CompoundStatement.new(
|
|
12
|
+
location: get_node_location(node),
|
|
13
|
+
closure: region.closure,
|
|
14
|
+
node: node,
|
|
15
|
+
source: :parser,
|
|
16
|
+
)
|
|
17
|
+
process_children
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -8,7 +8,11 @@ module Solargraph
|
|
|
8
8
|
include ParserGem::NodeMethods
|
|
9
9
|
|
|
10
10
|
def process
|
|
11
|
-
|
|
11
|
+
FlowSensitiveTyping.new(locals,
|
|
12
|
+
ivars,
|
|
13
|
+
enclosing_breakable_pin,
|
|
14
|
+
enclosing_compound_statement_pin).process_while(node)
|
|
15
|
+
|
|
12
16
|
# Note - this should not be considered a block, as the
|
|
13
17
|
# while statement doesn't create a closure - e.g.,
|
|
14
18
|
# variables created inside can be seen from outside as
|
|
@@ -27,8 +27,10 @@ module Solargraph
|
|
|
27
27
|
autoload :SymNode, 'solargraph/parser/parser_gem/node_processors/sym_node'
|
|
28
28
|
autoload :ResbodyNode, 'solargraph/parser/parser_gem/node_processors/resbody_node'
|
|
29
29
|
autoload :UntilNode, 'solargraph/parser/parser_gem/node_processors/until_node'
|
|
30
|
+
autoload :WhenNode, 'solargraph/parser/parser_gem/node_processors/when_node'
|
|
30
31
|
autoload :WhileNode, 'solargraph/parser/parser_gem/node_processors/while_node'
|
|
31
32
|
autoload :AndNode, 'solargraph/parser/parser_gem/node_processors/and_node'
|
|
33
|
+
autoload :OrNode, 'solargraph/parser/parser_gem/node_processors/or_node'
|
|
32
34
|
end
|
|
33
35
|
end
|
|
34
36
|
|
|
@@ -63,8 +65,10 @@ module Solargraph
|
|
|
63
65
|
register :op_asgn, ParserGem::NodeProcessors::OpasgnNode
|
|
64
66
|
register :sym, ParserGem::NodeProcessors::SymNode
|
|
65
67
|
register :until, ParserGem::NodeProcessors::UntilNode
|
|
68
|
+
register :when, ParserGem::NodeProcessors::WhenNode
|
|
66
69
|
register :while, ParserGem::NodeProcessors::WhileNode
|
|
67
70
|
register :and, ParserGem::NodeProcessors::AndNode
|
|
71
|
+
register :or, ParserGem::NodeProcessors::OrNode
|
|
68
72
|
end
|
|
69
73
|
end
|
|
70
74
|
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
module Parser
|
|
3
|
-
module ParserGem
|
|
4
|
-
autoload :FlawedBuilder, 'solargraph/parser/parser_gem/flawed_builder'
|
|
5
|
-
autoload :ClassMethods, 'solargraph/parser/parser_gem/class_methods'
|
|
6
|
-
autoload :NodeMethods, 'solargraph/parser/parser_gem/node_methods'
|
|
7
|
-
autoload :NodeChainer, 'solargraph/parser/parser_gem/node_chainer'
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
require 'solargraph/parser/parser_gem/node_processors'
|
|
1
|
+
module Solargraph
|
|
2
|
+
module Parser
|
|
3
|
+
module ParserGem
|
|
4
|
+
autoload :FlawedBuilder, 'solargraph/parser/parser_gem/flawed_builder'
|
|
5
|
+
autoload :ClassMethods, 'solargraph/parser/parser_gem/class_methods'
|
|
6
|
+
autoload :NodeMethods, 'solargraph/parser/parser_gem/node_methods'
|
|
7
|
+
autoload :NodeChainer, 'solargraph/parser/parser_gem/node_chainer'
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
require 'solargraph/parser/parser_gem/node_processors'
|
|
@@ -22,7 +22,6 @@ module Solargraph
|
|
|
22
22
|
attr_reader :lvars
|
|
23
23
|
|
|
24
24
|
# @param source [Source]
|
|
25
|
-
# @param namespace [String]
|
|
26
25
|
# @param closure [Pin::Closure, nil]
|
|
27
26
|
# @param scope [Symbol, nil]
|
|
28
27
|
# @param visibility [Symbol]
|
|
@@ -30,18 +29,25 @@ module Solargraph
|
|
|
30
29
|
def initialize source: Solargraph::Source.load_string(''), closure: nil,
|
|
31
30
|
scope: nil, visibility: :public, lvars: []
|
|
32
31
|
@source = source
|
|
33
|
-
# @closure = closure
|
|
34
32
|
@closure = closure || Pin::Namespace.new(name: '', location: source.location, source: :parser)
|
|
35
33
|
@scope = scope
|
|
36
34
|
@visibility = visibility
|
|
37
35
|
@lvars = lvars
|
|
38
36
|
end
|
|
39
37
|
|
|
40
|
-
# @return [String]
|
|
38
|
+
# @return [String, nil]
|
|
41
39
|
def filename
|
|
42
40
|
source.filename
|
|
43
41
|
end
|
|
44
42
|
|
|
43
|
+
# @return [Pin::Namespace, nil]
|
|
44
|
+
def namespace_pin
|
|
45
|
+
ns = closure
|
|
46
|
+
# @sg-ignore flow sensitive typing needs to handle while
|
|
47
|
+
ns = ns.closure while ns && !ns.is_a?(Pin::Namespace)
|
|
48
|
+
ns
|
|
49
|
+
end
|
|
50
|
+
|
|
45
51
|
# Generate a new Region with the provided attribute changes.
|
|
46
52
|
#
|
|
47
53
|
# @param closure [Pin::Closure, nil]
|
data/lib/solargraph/parser.rb
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
module Parser
|
|
3
|
-
autoload :CommentRipper, 'solargraph/parser/comment_ripper'
|
|
4
|
-
autoload :ParserGem, 'solargraph/parser/parser_gem'
|
|
5
|
-
autoload :Region, 'solargraph/parser/region'
|
|
6
|
-
autoload :NodeProcessor, 'solargraph/parser/node_processor'
|
|
7
|
-
autoload :FlowSensitiveTyping, 'solargraph/parser/flow_sensitive_typing'
|
|
8
|
-
autoload :Snippet, 'solargraph/parser/snippet'
|
|
9
|
-
|
|
10
|
-
class SyntaxError < StandardError
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# @deprecated
|
|
14
|
-
Legacy = ParserGem
|
|
15
|
-
|
|
16
|
-
ClassMethods = ParserGem::ClassMethods
|
|
17
|
-
# @todo should be able to just 'extend ClassMethods' here and
|
|
18
|
-
# typecheck things off it in strict mode
|
|
19
|
-
extend ParserGem::ClassMethods
|
|
20
|
-
|
|
21
|
-
NodeMethods = ParserGem::NodeMethods
|
|
22
|
-
end
|
|
23
|
-
end
|
|
1
|
+
module Solargraph
|
|
2
|
+
module Parser
|
|
3
|
+
autoload :CommentRipper, 'solargraph/parser/comment_ripper'
|
|
4
|
+
autoload :ParserGem, 'solargraph/parser/parser_gem'
|
|
5
|
+
autoload :Region, 'solargraph/parser/region'
|
|
6
|
+
autoload :NodeProcessor, 'solargraph/parser/node_processor'
|
|
7
|
+
autoload :FlowSensitiveTyping, 'solargraph/parser/flow_sensitive_typing'
|
|
8
|
+
autoload :Snippet, 'solargraph/parser/snippet'
|
|
9
|
+
|
|
10
|
+
class SyntaxError < StandardError
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# @deprecated
|
|
14
|
+
Legacy = ParserGem
|
|
15
|
+
|
|
16
|
+
ClassMethods = ParserGem::ClassMethods
|
|
17
|
+
# @todo should be able to just 'extend ClassMethods' here and
|
|
18
|
+
# typecheck things off it in strict mode
|
|
19
|
+
extend ParserGem::ClassMethods
|
|
20
|
+
|
|
21
|
+
NodeMethods = ParserGem::NodeMethods
|
|
22
|
+
end
|
|
23
|
+
end
|