solargraph 0.54.1 → 0.56.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.
Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/plugins.yml +2 -0
  3. data/.github/workflows/typecheck.yml +3 -1
  4. data/.gitignore +2 -0
  5. data/CHANGELOG.md +70 -0
  6. data/README.md +13 -3
  7. data/lib/solargraph/api_map/cache.rb +10 -1
  8. data/lib/solargraph/api_map/index.rb +175 -0
  9. data/lib/solargraph/api_map/store.rb +79 -126
  10. data/lib/solargraph/api_map.rb +247 -93
  11. data/lib/solargraph/bench.rb +17 -1
  12. data/lib/solargraph/complex_type/type_methods.rb +13 -1
  13. data/lib/solargraph/complex_type/unique_type.rb +118 -9
  14. data/lib/solargraph/complex_type.rb +48 -18
  15. data/lib/solargraph/convention/base.rb +3 -3
  16. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +60 -0
  17. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +100 -0
  18. data/lib/solargraph/convention/struct_definition.rb +101 -0
  19. data/lib/solargraph/convention.rb +5 -3
  20. data/lib/solargraph/doc_map.rb +274 -56
  21. data/lib/solargraph/equality.rb +33 -0
  22. data/lib/solargraph/gem_pins.rb +53 -37
  23. data/lib/solargraph/language_server/host/message_worker.rb +31 -11
  24. data/lib/solargraph/language_server/host.rb +24 -13
  25. data/lib/solargraph/language_server/message/base.rb +19 -12
  26. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +2 -0
  27. data/lib/solargraph/language_server/message/extended/document.rb +5 -2
  28. data/lib/solargraph/language_server/message/extended/document_gems.rb +3 -3
  29. data/lib/solargraph/language_server/message/initialize.rb +3 -1
  30. data/lib/solargraph/language_server/message/text_document/completion.rb +0 -3
  31. data/lib/solargraph/language_server/message/text_document/formatting.rb +4 -0
  32. data/lib/solargraph/library.rb +13 -11
  33. data/lib/solargraph/location.rb +28 -0
  34. data/lib/solargraph/logging.rb +1 -0
  35. data/lib/solargraph/parser/comment_ripper.rb +12 -6
  36. data/lib/solargraph/parser/flow_sensitive_typing.rb +227 -0
  37. data/lib/solargraph/parser/node_methods.rb +15 -1
  38. data/lib/solargraph/parser/node_processor.rb +3 -1
  39. data/lib/solargraph/parser/parser_gem/class_methods.rb +16 -14
  40. data/lib/solargraph/parser/parser_gem/node_chainer.rb +17 -23
  41. data/lib/solargraph/parser/parser_gem/node_methods.rb +5 -3
  42. data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +2 -1
  43. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +21 -0
  44. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +4 -2
  45. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +4 -2
  46. data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +23 -2
  47. data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +2 -1
  48. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +6 -3
  49. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +2 -1
  50. data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +2 -1
  51. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +21 -0
  52. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +4 -2
  53. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +4 -3
  54. data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +29 -6
  55. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +41 -0
  56. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +2 -1
  57. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +4 -3
  58. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +28 -16
  59. data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +2 -1
  60. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -0
  61. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -0
  62. data/lib/solargraph/parser/parser_gem/node_processors.rb +10 -0
  63. data/lib/solargraph/parser/region.rb +1 -1
  64. data/lib/solargraph/parser.rb +1 -0
  65. data/lib/solargraph/pin/base.rb +326 -43
  66. data/lib/solargraph/pin/base_variable.rb +18 -10
  67. data/lib/solargraph/pin/block.rb +3 -3
  68. data/lib/solargraph/pin/breakable.rb +9 -0
  69. data/lib/solargraph/pin/callable.rb +77 -6
  70. data/lib/solargraph/pin/closure.rb +18 -1
  71. data/lib/solargraph/pin/common.rb +5 -0
  72. data/lib/solargraph/pin/delegated_method.rb +20 -1
  73. data/lib/solargraph/pin/documenting.rb +16 -0
  74. data/lib/solargraph/pin/keyword.rb +7 -2
  75. data/lib/solargraph/pin/local_variable.rb +15 -6
  76. data/lib/solargraph/pin/method.rb +172 -42
  77. data/lib/solargraph/pin/namespace.rb +17 -9
  78. data/lib/solargraph/pin/parameter.rb +61 -11
  79. data/lib/solargraph/pin/proxy_type.rb +12 -6
  80. data/lib/solargraph/pin/reference/override.rb +10 -6
  81. data/lib/solargraph/pin/reference/require.rb +2 -2
  82. data/lib/solargraph/pin/signature.rb +42 -0
  83. data/lib/solargraph/pin/singleton.rb +1 -1
  84. data/lib/solargraph/pin/symbol.rb +3 -2
  85. data/lib/solargraph/pin/until.rb +18 -0
  86. data/lib/solargraph/pin/while.rb +18 -0
  87. data/lib/solargraph/pin.rb +4 -1
  88. data/lib/solargraph/pin_cache.rb +185 -0
  89. data/lib/solargraph/position.rb +16 -0
  90. data/lib/solargraph/range.rb +16 -0
  91. data/lib/solargraph/rbs_map/conversions.rb +199 -66
  92. data/lib/solargraph/rbs_map/core_fills.rb +32 -16
  93. data/lib/solargraph/rbs_map/core_map.rb +34 -11
  94. data/lib/solargraph/rbs_map/stdlib_map.rb +15 -5
  95. data/lib/solargraph/rbs_map.rb +74 -16
  96. data/lib/solargraph/shell.rb +19 -18
  97. data/lib/solargraph/source/chain/array.rb +12 -8
  98. data/lib/solargraph/source/chain/block_symbol.rb +1 -1
  99. data/lib/solargraph/source/chain/block_variable.rb +1 -1
  100. data/lib/solargraph/source/chain/call.rb +62 -25
  101. data/lib/solargraph/source/chain/constant.rb +1 -1
  102. data/lib/solargraph/source/chain/hash.rb +9 -3
  103. data/lib/solargraph/source/chain/head.rb +1 -1
  104. data/lib/solargraph/source/chain/if.rb +6 -1
  105. data/lib/solargraph/source/chain/link.rb +19 -5
  106. data/lib/solargraph/source/chain/literal.rb +27 -2
  107. data/lib/solargraph/source/chain/or.rb +1 -1
  108. data/lib/solargraph/source/chain/z_super.rb +1 -1
  109. data/lib/solargraph/source/chain.rb +106 -62
  110. data/lib/solargraph/source/cursor.rb +1 -11
  111. data/lib/solargraph/source/source_chainer.rb +2 -2
  112. data/lib/solargraph/source.rb +2 -1
  113. data/lib/solargraph/source_map/clip.rb +4 -2
  114. data/lib/solargraph/source_map/mapper.rb +9 -5
  115. data/lib/solargraph/source_map.rb +0 -17
  116. data/lib/solargraph/type_checker/checks.rb +4 -0
  117. data/lib/solargraph/type_checker.rb +41 -14
  118. data/lib/solargraph/version.rb +1 -1
  119. data/lib/solargraph/views/_method.erb +10 -10
  120. data/lib/solargraph/views/_namespace.erb +3 -3
  121. data/lib/solargraph/views/document.erb +10 -10
  122. data/lib/solargraph/workspace/config.rb +7 -3
  123. data/lib/solargraph/workspace.rb +16 -6
  124. data/lib/solargraph/yard_map/mapper/to_constant.rb +5 -2
  125. data/lib/solargraph/yard_map/mapper/to_method.rb +55 -15
  126. data/lib/solargraph/yard_map/mapper/to_namespace.rb +5 -2
  127. data/lib/solargraph/yard_map/mapper.rb +5 -3
  128. data/lib/solargraph/yard_map/to_method.rb +4 -2
  129. data/lib/solargraph/yardoc.rb +6 -9
  130. data/lib/solargraph.rb +20 -1
  131. data/rbs/fills/tuple.rbs +150 -0
  132. data/rbs_collection.yaml +19 -0
  133. data/solargraph.gemspec +6 -5
  134. metadata +56 -29
  135. data/lib/solargraph/cache.rb +0 -77
@@ -8,8 +8,8 @@ module Solargraph
8
8
  include ParserGem::NodeMethods
9
9
 
10
10
  def process
11
- # variable not visible until next statement
12
- presence = Range.new(get_node_end_position(node), region.closure.location.range.ending)
11
+ here = get_node_start_position(node)
12
+ presence = Range.new(here, region.closure.location.range.ending)
13
13
  loc = get_node_location(node)
14
14
  locals.push Solargraph::Pin::LocalVariable.new(
15
15
  location: loc,
@@ -17,7 +17,8 @@ module Solargraph
17
17
  name: node.children[0].to_s,
18
18
  assignment: node.children[1],
19
19
  comments: comments_for(node),
20
- presence: presence
20
+ presence: presence,
21
+ source: :parser
21
22
  )
22
23
  process_children
23
24
  end
@@ -8,10 +8,20 @@ module Solargraph
8
8
  include ParserGem::NodeMethods
9
9
 
10
10
  def process
11
- sc = nil
12
- if node.type == :class and !node.children[1].nil?
13
- sc = unpack_name(node.children[1])
11
+ superclass_name = nil
12
+ superclass_name = unpack_name(node.children[1]) if node.type == :class && node.children[1]&.type == :const
13
+
14
+ if Convention::StructDefinition::StructDefintionNode.valid?(node)
15
+ process_struct_definition
16
+ else
17
+ process_namespace(superclass_name)
14
18
  end
19
+ end
20
+
21
+ private
22
+
23
+ # @param superclass_name [String, nil]
24
+ def process_namespace(superclass_name)
15
25
  loc = get_node_location(node)
16
26
  nspin = Solargraph::Pin::Namespace.new(
17
27
  type: node.type,
@@ -20,18 +30,31 @@ module Solargraph
20
30
  name: unpack_name(node.children[0]),
21
31
  comments: comments_for(node),
22
32
  visibility: :public,
23
- gates: region.closure.gates.freeze
33
+ gates: region.closure.gates.freeze,
34
+ source: :parser
24
35
  )
25
36
  pins.push nspin
26
- unless sc.nil?
37
+ unless superclass_name.nil?
27
38
  pins.push Pin::Reference::Superclass.new(
28
39
  location: loc,
29
40
  closure: pins.last,
30
- name: sc
41
+ name: superclass_name,
42
+ source: :parser
31
43
  )
32
44
  end
33
45
  process_children region.update(closure: nspin, visibility: :public)
34
46
  end
47
+
48
+ # @todo Move this out of [NamespaceNode] once [Solargraph::Parser::NodeProcessor] supports
49
+ # multiple processors.
50
+ def process_struct_definition
51
+ processor_klass = Convention::StructDefinition::NodeProcessors::StructNode
52
+ processor = processor_klass.new(node, region, pins, locals)
53
+ processor.process
54
+
55
+ @pins = processor.pins
56
+ @locals = processor.locals
57
+ end
35
58
  end
36
59
  end
37
60
  end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'parser'
4
+
5
+ module Solargraph
6
+ module Parser
7
+ module ParserGem
8
+ module NodeProcessors
9
+ class OpasgnNode < Parser::NodeProcessor::Base
10
+ def process
11
+ # Parser::CurrentRuby.parse("a += 2")
12
+ # => s(:op_asgn,
13
+ # s(:lvasgn, :a), :+,
14
+ # s(:int, 2))
15
+ asgn = node.children[0]
16
+ variable_name = asgn.children[0]
17
+ operator = node.children[1]
18
+ argument = node.children[2]
19
+ # for lvasgn, gvasgn, cvasgn, convert to lvar, gvar, cvar
20
+ # [6] pry(main)> Parser::CurrentRuby.parse("a = a + 1")
21
+ # => s(:lvasgn, :a,
22
+ # s(:send,
23
+ # s(:lvar, :a), :+,
24
+ # s(:int, 1)))
25
+ # [7] pry(main)>
26
+ variable_reference_type = asgn.type.to_s.sub(/vasgn$/, 'var').to_sym
27
+ variable_reference = node.updated(variable_reference_type, asgn.children)
28
+ send_children = [
29
+ variable_reference,
30
+ operator,
31
+ argument
32
+ ]
33
+ send_node = node.updated(:send, send_children)
34
+ new_asgn = node.updated(asgn.type, [variable_name, send_node])
35
+ NodeProcessor.process(new_asgn, region, pins, locals)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -24,7 +24,8 @@ module Solargraph
24
24
  closure: region.closure,
25
25
  name: node.children[1].children[0].to_s,
26
26
  comments: "@type [#{types.join(',')}]",
27
- presence: presence
27
+ presence: presence,
28
+ source: :parser
28
29
  )
29
30
  end
30
31
  NodeProcessor.process(node.children[2], region, pins, locals)
@@ -17,7 +17,7 @@ module Solargraph
17
17
  names.concat [NodeMethods.unpack_name(sclass.children[0]), sclass.children[1].to_s]
18
18
  end
19
19
  name = names.reject(&:empty?).join('::')
20
- closure = Solargraph::Pin::Namespace.new(name: name, location: region.closure.location)
20
+ closure = Solargraph::Pin::Namespace.new(name: name, location: region.closure.location, source: :parser)
21
21
  elsif sclass.is_a?(AST::Node) && sclass.type == :const
22
22
  names = [region.closure.namespace, region.closure.name]
23
23
  also = NodeMethods.unpack_name(sclass)
@@ -25,13 +25,14 @@ module Solargraph
25
25
  names << also
26
26
  end
27
27
  name = names.reject(&:empty?).join('::')
28
- closure = Solargraph::Pin::Namespace.new(name: name, location: region.closure.location)
28
+ closure = Solargraph::Pin::Namespace.new(name: name, location: region.closure.location, source: :parser)
29
29
  else
30
30
  return
31
31
  end
32
32
  pins.push Solargraph::Pin::Singleton.new(
33
33
  location: get_node_location(node),
34
- closure: closure
34
+ closure: closure,
35
+ source: :parser,
35
36
  )
36
37
  process_children region.update(visibility: :public, scope: :class, closure: pins.last)
37
38
  end
@@ -34,7 +34,7 @@ module Solargraph
34
34
  return if process_private_class_method
35
35
  end
36
36
  elsif node.children[1] == :require && node.children[0].to_s == '(const nil :Bundler)'
37
- pins.push Pin::Reference::Require.new(Solargraph::Location.new(region.filename, Solargraph::Range.from_to(0, 0, 0, 0)), 'bundler/require')
37
+ pins.push Pin::Reference::Require.new(Solargraph::Location.new(region.filename, Solargraph::Range.from_to(0, 0, 0, 0)), 'bundler/require', source: :parser)
38
38
  end
39
39
  process_children
40
40
  end
@@ -76,7 +76,8 @@ module Solargraph
76
76
  comments: cmnt,
77
77
  scope: region.scope || :instance,
78
78
  visibility: region.visibility,
79
- attribute: true
79
+ attribute: true,
80
+ source: :parser
80
81
  )
81
82
  end
82
83
  if node.children[1] == :attr_writer || node.children[1] == :attr_accessor
@@ -87,10 +88,11 @@ module Solargraph
87
88
  comments: cmnt,
88
89
  scope: region.scope || :instance,
89
90
  visibility: region.visibility,
90
- attribute: true
91
+ attribute: true,
92
+ source: :parser
91
93
  )
92
94
  pins.push method_pin
93
- method_pin.parameters.push Pin::Parameter.new(name: 'value', decl: :arg, closure: pins.last)
95
+ method_pin.parameters.push Pin::Parameter.new(name: 'value', decl: :arg, closure: pins.last, source: :parser)
94
96
  if method_pin.return_type.defined?
95
97
  pins.last.docstring.add_tag YARD::Tags::Tag.new(:param, '', pins.last.return_type.items.map(&:rooted_tags), 'value')
96
98
  end
@@ -107,7 +109,8 @@ module Solargraph
107
109
  pins.push type.new(
108
110
  location: get_node_location(i),
109
111
  closure: cp,
110
- name: unpack_name(i)
112
+ name: unpack_name(i),
113
+ source: :parser
111
114
  )
112
115
  end
113
116
  end
@@ -121,7 +124,8 @@ module Solargraph
121
124
  pins.push Pin::Reference::Prepend.new(
122
125
  location: get_node_location(i),
123
126
  closure: cp,
124
- name: unpack_name(i)
127
+ name: unpack_name(i),
128
+ source: :parser
125
129
  )
126
130
  end
127
131
  end
@@ -135,13 +139,15 @@ module Solargraph
135
139
  pins.push Pin::Reference::Extend.new(
136
140
  location: loc,
137
141
  closure: region.closure,
138
- name: region.closure.full_context.namespace
142
+ name: region.closure.full_context.namespace,
143
+ source: :parser
139
144
  )
140
145
  else
141
146
  pins.push Pin::Reference::Extend.new(
142
147
  location: loc,
143
148
  closure: region.closure,
144
- name: unpack_name(i)
149
+ name: unpack_name(i),
150
+ source: :parser
145
151
  )
146
152
  end
147
153
  end
@@ -151,7 +157,7 @@ module Solargraph
151
157
  def process_require
152
158
  if node.children[2].is_a?(AST::Node) && node.children[2].type == :str
153
159
  path = node.children[2].children[0].to_s
154
- pins.push Pin::Reference::Require.new(get_node_location(node), path)
160
+ pins.push Pin::Reference::Require.new(get_node_location(node), path, source: :parser)
155
161
  end
156
162
  end
157
163
 
@@ -159,7 +165,7 @@ module Solargraph
159
165
  def process_autoload
160
166
  if node.children[3].is_a?(AST::Node) && node.children[3].type == :str
161
167
  path = node.children[3].children[0].to_s
162
- pins.push Pin::Reference::Require.new(get_node_location(node), path)
168
+ pins.push Pin::Reference::Require.new(get_node_location(node), path, source: :parser)
163
169
  end
164
170
  end
165
171
 
@@ -171,7 +177,8 @@ module Solargraph
171
177
  elsif node.children[2].type == :sym || node.children[2].type == :str
172
178
  node.children[2..-1].each do |x|
173
179
  cn = x.children[0].to_s
174
- ref = pins.select{ |p| p.is_a?(Pin::Method) && p.namespace == region.closure.full_context.namespace && p.name == cn }.first
180
+ # @type [Pin::Method]
181
+ ref = pins.find { |p| p.is_a?(Pin::Method) && p.namespace == region.closure.full_context.namespace && p.name == cn }
175
182
  unless ref.nil?
176
183
  pins.delete ref
177
184
  mm = Solargraph::Pin::Method.new(
@@ -182,7 +189,8 @@ module Solargraph
182
189
  comments: ref.comments,
183
190
  scope: :class,
184
191
  visibility: :public,
185
- node: ref.node
192
+ node: ref.node,
193
+ source: :parser
186
194
  )
187
195
  cm = Solargraph::Pin::Method.new(
188
196
  location: ref.location,
@@ -192,7 +200,8 @@ module Solargraph
192
200
  comments: ref.comments,
193
201
  scope: :instance,
194
202
  visibility: :private,
195
- node: ref.node)
203
+ node: ref.node,
204
+ source: :parser)
196
205
  pins.push mm, cm
197
206
  pins.select{|pin| pin.is_a?(Pin::InstanceVariable) && pin.closure.path == ref.path}.each do |ivar|
198
207
  pins.delete ivar
@@ -201,14 +210,16 @@ module Solargraph
201
210
  closure: cm,
202
211
  name: ivar.name,
203
212
  comments: ivar.comments,
204
- assignment: ivar.assignment
213
+ assignment: ivar.assignment,
214
+ source: :parser
205
215
  )
206
216
  pins.push Solargraph::Pin::InstanceVariable.new(
207
217
  location: ivar.location,
208
218
  closure: mm,
209
219
  name: ivar.name,
210
220
  comments: ivar.comments,
211
- assignment: ivar.assignment
221
+ assignment: ivar.assignment,
222
+ source: :parser
212
223
  )
213
224
  end
214
225
  end
@@ -236,7 +247,8 @@ module Solargraph
236
247
  closure: region.closure,
237
248
  name: node.children[2].children[0].to_s,
238
249
  original: node.children[3].children[0].to_s,
239
- scope: region.scope || :instance
250
+ scope: region.scope || :instance,
251
+ source: :parser
240
252
  )
241
253
  end
242
254
 
@@ -8,7 +8,8 @@ module Solargraph
8
8
  def process
9
9
  pins.push Solargraph::Pin::Symbol.new(
10
10
  get_node_location(node),
11
- ":#{node.children[0]}"
11
+ ":#{node.children[0]}",
12
+ source: :parser
12
13
  )
13
14
  end
14
15
  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,6 +40,7 @@ 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
39
45
  register :class, ParserGem::NodeProcessors::NamespaceNode
40
46
  register :module, ParserGem::NodeProcessors::NamespaceNode
@@ -50,7 +56,11 @@ module Solargraph
50
56
  register :forward_args, ParserGem::NodeProcessors::ArgsNode
51
57
  register :block, ParserGem::NodeProcessors::BlockNode
52
58
  register :or_asgn, ParserGem::NodeProcessors::OrasgnNode
59
+ register :op_asgn, ParserGem::NodeProcessors::OpasgnNode
53
60
  register :sym, ParserGem::NodeProcessors::SymNode
61
+ register :until, ParserGem::NodeProcessors::UntilNode
62
+ register :while, ParserGem::NodeProcessors::WhileNode
63
+ register :and, ParserGem::NodeProcessors::AndNode
54
64
  end
55
65
  end
56
66
  end
@@ -29,7 +29,7 @@ module Solargraph
29
29
  scope: nil, visibility: :public, lvars: []
30
30
  @source = source
31
31
  # @closure = closure
32
- @closure = closure || Pin::Namespace.new(name: '', location: source.location)
32
+ @closure = closure || Pin::Namespace.new(name: '', location: source.location, source: :parser)
33
33
  @scope = scope
34
34
  @visibility = visibility
35
35
  @lvars = lvars
@@ -4,6 +4,7 @@ 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