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.
Files changed (162) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +3 -0
  3. data/.github/workflows/linting.yml +4 -5
  4. data/.github/workflows/plugins.yml +40 -36
  5. data/.github/workflows/rspec.yml +45 -13
  6. data/.github/workflows/typecheck.yml +2 -2
  7. data/.rubocop_todo.yml +27 -49
  8. data/README.md +3 -3
  9. data/Rakefile +1 -0
  10. data/lib/solargraph/api_map/cache.rb +110 -110
  11. data/lib/solargraph/api_map/constants.rb +289 -279
  12. data/lib/solargraph/api_map/index.rb +204 -193
  13. data/lib/solargraph/api_map/source_to_yard.rb +109 -97
  14. data/lib/solargraph/api_map/store.rb +387 -384
  15. data/lib/solargraph/api_map.rb +1000 -945
  16. data/lib/solargraph/complex_type/conformance.rb +176 -0
  17. data/lib/solargraph/complex_type/type_methods.rb +242 -228
  18. data/lib/solargraph/complex_type/unique_type.rb +632 -482
  19. data/lib/solargraph/complex_type.rb +549 -444
  20. data/lib/solargraph/convention/data_definition/data_definition_node.rb +93 -91
  21. data/lib/solargraph/convention/data_definition.rb +108 -105
  22. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +62 -61
  23. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +103 -102
  24. data/lib/solargraph/convention/struct_definition.rb +168 -164
  25. data/lib/solargraph/diagnostics/require_not_found.rb +54 -53
  26. data/lib/solargraph/diagnostics/rubocop.rb +119 -118
  27. data/lib/solargraph/diagnostics/rubocop_helpers.rb +70 -68
  28. data/lib/solargraph/diagnostics/type_check.rb +56 -55
  29. data/lib/solargraph/doc_map.rb +200 -439
  30. data/lib/solargraph/equality.rb +34 -34
  31. data/lib/solargraph/gem_pins.rb +97 -98
  32. data/lib/solargraph/language_server/host/dispatch.rb +131 -130
  33. data/lib/solargraph/language_server/host/message_worker.rb +113 -112
  34. data/lib/solargraph/language_server/host/sources.rb +100 -99
  35. data/lib/solargraph/language_server/host.rb +883 -878
  36. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +109 -114
  37. data/lib/solargraph/language_server/message/extended/document.rb +24 -23
  38. data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
  39. data/lib/solargraph/language_server/message/text_document/definition.rb +42 -40
  40. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +28 -26
  41. data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
  42. data/lib/solargraph/language_server/message/text_document/hover.rb +60 -58
  43. data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
  44. data/lib/solargraph/language_server/message/text_document/type_definition.rb +27 -25
  45. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +25 -23
  46. data/lib/solargraph/library.rb +729 -683
  47. data/lib/solargraph/location.rb +87 -82
  48. data/lib/solargraph/logging.rb +57 -37
  49. data/lib/solargraph/parser/comment_ripper.rb +76 -69
  50. data/lib/solargraph/parser/flow_sensitive_typing.rb +483 -255
  51. data/lib/solargraph/parser/node_processor/base.rb +122 -92
  52. data/lib/solargraph/parser/node_processor.rb +63 -62
  53. data/lib/solargraph/parser/parser_gem/class_methods.rb +167 -149
  54. data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
  55. data/lib/solargraph/parser/parser_gem/node_methods.rb +506 -486
  56. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
  57. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +61 -59
  58. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +24 -15
  59. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
  60. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
  61. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
  62. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +41 -40
  63. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +30 -29
  64. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +61 -59
  65. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
  66. data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
  67. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
  68. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +39 -38
  69. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +53 -52
  70. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +296 -291
  71. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
  72. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +33 -29
  73. data/lib/solargraph/parser/parser_gem/node_processors.rb +74 -70
  74. data/lib/solargraph/parser/region.rb +75 -69
  75. data/lib/solargraph/parser/snippet.rb +17 -17
  76. data/lib/solargraph/pin/base.rb +761 -729
  77. data/lib/solargraph/pin/base_variable.rb +418 -126
  78. data/lib/solargraph/pin/block.rb +126 -104
  79. data/lib/solargraph/pin/breakable.rb +13 -9
  80. data/lib/solargraph/pin/callable.rb +278 -231
  81. data/lib/solargraph/pin/closure.rb +68 -72
  82. data/lib/solargraph/pin/common.rb +94 -79
  83. data/lib/solargraph/pin/compound_statement.rb +55 -0
  84. data/lib/solargraph/pin/conversions.rb +124 -123
  85. data/lib/solargraph/pin/delegated_method.rb +131 -120
  86. data/lib/solargraph/pin/documenting.rb +115 -114
  87. data/lib/solargraph/pin/instance_variable.rb +38 -34
  88. data/lib/solargraph/pin/keyword.rb +16 -20
  89. data/lib/solargraph/pin/local_variable.rb +31 -75
  90. data/lib/solargraph/pin/method.rb +720 -672
  91. data/lib/solargraph/pin/method_alias.rb +42 -34
  92. data/lib/solargraph/pin/namespace.rb +121 -115
  93. data/lib/solargraph/pin/parameter.rb +338 -275
  94. data/lib/solargraph/pin/proxy_type.rb +40 -39
  95. data/lib/solargraph/pin/reference/override.rb +47 -47
  96. data/lib/solargraph/pin/reference/superclass.rb +17 -15
  97. data/lib/solargraph/pin/reference.rb +41 -39
  98. data/lib/solargraph/pin/search.rb +62 -61
  99. data/lib/solargraph/pin/signature.rb +69 -61
  100. data/lib/solargraph/pin/symbol.rb +53 -53
  101. data/lib/solargraph/pin/until.rb +18 -18
  102. data/lib/solargraph/pin/while.rb +18 -18
  103. data/lib/solargraph/pin.rb +46 -44
  104. data/lib/solargraph/pin_cache.rb +665 -245
  105. data/lib/solargraph/position.rb +118 -119
  106. data/lib/solargraph/range.rb +112 -112
  107. data/lib/solargraph/rbs_map/conversions.rb +846 -823
  108. data/lib/solargraph/rbs_map/core_map.rb +65 -58
  109. data/lib/solargraph/rbs_map/stdlib_map.rb +72 -43
  110. data/lib/solargraph/rbs_map.rb +217 -163
  111. data/lib/solargraph/shell.rb +397 -352
  112. data/lib/solargraph/source/chain/call.rb +372 -337
  113. data/lib/solargraph/source/chain/constant.rb +28 -26
  114. data/lib/solargraph/source/chain/hash.rb +35 -34
  115. data/lib/solargraph/source/chain/if.rb +29 -28
  116. data/lib/solargraph/source/chain/instance_variable.rb +34 -13
  117. data/lib/solargraph/source/chain/literal.rb +53 -48
  118. data/lib/solargraph/source/chain/or.rb +31 -23
  119. data/lib/solargraph/source/chain.rb +294 -291
  120. data/lib/solargraph/source/change.rb +89 -82
  121. data/lib/solargraph/source/cursor.rb +172 -166
  122. data/lib/solargraph/source/source_chainer.rb +204 -194
  123. data/lib/solargraph/source/updater.rb +59 -55
  124. data/lib/solargraph/source.rb +524 -498
  125. data/lib/solargraph/source_map/clip.rb +237 -226
  126. data/lib/solargraph/source_map/data.rb +37 -34
  127. data/lib/solargraph/source_map/mapper.rb +282 -259
  128. data/lib/solargraph/source_map.rb +220 -212
  129. data/lib/solargraph/type_checker/problem.rb +34 -32
  130. data/lib/solargraph/type_checker/rules.rb +157 -84
  131. data/lib/solargraph/type_checker.rb +895 -814
  132. data/lib/solargraph/version.rb +1 -1
  133. data/lib/solargraph/workspace/config.rb +257 -255
  134. data/lib/solargraph/workspace/gemspecs.rb +367 -0
  135. data/lib/solargraph/workspace/require_paths.rb +98 -97
  136. data/lib/solargraph/workspace.rb +362 -220
  137. data/lib/solargraph/yard_map/helpers.rb +45 -44
  138. data/lib/solargraph/yard_map/mapper/to_method.rb +134 -130
  139. data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
  140. data/lib/solargraph/yard_map/mapper.rb +84 -79
  141. data/lib/solargraph/yardoc.rb +97 -87
  142. data/lib/solargraph.rb +126 -105
  143. data/rbs/fills/rubygems/0/dependency.rbs +193 -0
  144. data/rbs/fills/tuple/tuple.rbs +28 -0
  145. data/rbs/shims/ast/0/node.rbs +5 -0
  146. data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
  147. data/rbs_collection.yaml +1 -1
  148. data/solargraph.gemspec +2 -1
  149. metadata +22 -17
  150. data/lib/solargraph/type_checker/checks.rb +0 -124
  151. data/lib/solargraph/type_checker/param_def.rb +0 -37
  152. data/lib/solargraph/yard_map/to_method.rb +0 -89
  153. data/sig/shims/ast/0/node.rbs +0 -5
  154. /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
  155. /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
  156. /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
  157. /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
  158. /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
  159. /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
  160. /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
  161. /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
  162. /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
@@ -1,22 +1,22 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- module NodeProcessors
7
- class AndNode < Parser::NodeProcessor::Base
8
- include ParserGem::NodeMethods
9
-
10
- def process
11
- process_children
12
-
13
- position = get_node_start_position(node)
14
- # @sg-ignore https://github.com/castwide/solargraph/pull/1114
15
- enclosing_breakable_pin = pins.select{|pin| pin.is_a?(Pin::Breakable) && pin.location.range.contain?(position)}.last
16
- FlowSensitiveTyping.new(locals, enclosing_breakable_pin).process_and(node)
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ module NodeProcessors
7
+ class AndNode < 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_and(node)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,59 +1,61 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- module NodeProcessors
7
- class ArgsNode < Parser::NodeProcessor::Base
8
- def process
9
- callable = region.closure
10
- if callable.is_a? Pin::Callable
11
- if node.type == :forward_args
12
- forward(callable)
13
- else
14
- node.children.each do |u|
15
- loc = get_node_location(u)
16
- locals.push Solargraph::Pin::Parameter.new(
17
- location: loc,
18
- closure: callable,
19
- comments: comments_for(node),
20
- name: u.children[0].to_s,
21
- assignment: u.children[1],
22
- asgn_code: u.children[1] ? region.code_for(u.children[1]) : nil,
23
- presence: callable.location.range,
24
- decl: get_decl(u),
25
- source: :parser
26
- )
27
- callable.parameters.push locals.last
28
- end
29
- end
30
- end
31
- process_children
32
- end
33
-
34
- private
35
-
36
- # @param callable [Pin::Callable]
37
- # @return [void]
38
- def forward(callable)
39
- loc = get_node_location(node)
40
- locals.push Solargraph::Pin::Parameter.new(
41
- location: loc,
42
- closure: callable,
43
- presence: region.closure.location.range,
44
- decl: get_decl(node),
45
- source: :parser
46
- )
47
- callable.parameters.push locals.last
48
- end
49
-
50
- # @param node [AST::Node]
51
- # @return [Symbol]
52
- def get_decl node
53
- node.type
54
- end
55
- end
56
- end
57
- end
58
- end
59
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ module NodeProcessors
7
+ class ArgsNode < Parser::NodeProcessor::Base
8
+ def process
9
+ callable = region.closure
10
+ if callable.is_a? Pin::Callable
11
+ if node.type == :forward_args
12
+ forward(callable)
13
+ else
14
+ node.children.each do |u|
15
+ loc = get_node_location(u)
16
+ locals.push Solargraph::Pin::Parameter.new(
17
+ location: loc,
18
+ closure: callable,
19
+ comments: comments_for(node),
20
+ name: u.children[0].to_s,
21
+ assignment: u.children[1],
22
+ asgn_code: u.children[1] ? region.code_for(u.children[1]) : nil,
23
+ # @sg-ignore Need to add nil check here
24
+ presence: callable.location.range,
25
+ decl: get_decl(u),
26
+ source: :parser
27
+ )
28
+ callable.parameters.push locals.last
29
+ end
30
+ end
31
+ end
32
+ process_children
33
+ end
34
+
35
+ private
36
+
37
+ # @param callable [Pin::Callable]
38
+ # @return [void]
39
+ def forward(callable)
40
+ loc = get_node_location(node)
41
+ locals.push Solargraph::Pin::Parameter.new(
42
+ location: loc,
43
+ closure: callable,
44
+ # @sg-ignore Need to add nil check here
45
+ presence: region.closure.location.range,
46
+ decl: get_decl(node),
47
+ source: :parser
48
+ )
49
+ callable.parameters.push locals.last
50
+ end
51
+
52
+ # @param node [AST::Node]
53
+ # @return [Symbol]
54
+ def get_decl node
55
+ node.type
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -1,15 +1,24 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- module NodeProcessors
7
- class BeginNode < Parser::NodeProcessor::Base
8
- def process
9
- process_children
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ module NodeProcessors
7
+ class BeginNode < Parser::NodeProcessor::Base
8
+ def process
9
+ # We intentionally don't create a CompoundStatement pin
10
+ # here, as this is not necessarily a control flow block -
11
+ # e.g., a begin...end without rescue or ensure should be
12
+ # treated by flow sensitive typing as if the begin and end
13
+ # didn't exist at all. As such, we create the
14
+ # CompoundStatement pins around the things which actually
15
+ # result in control flow changes - like
16
+ # if/while/rescue/etc
17
+
18
+ process_children
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,46 +1,46 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- module NodeProcessors
7
- class BlockNode < Parser::NodeProcessor::Base
8
- include ParserGem::NodeMethods
9
-
10
- def process
11
- location = get_node_location(node)
12
- parent = if other_class_eval?
13
- Solargraph::Pin::Namespace.new(
14
- location: location,
15
- type: :class,
16
- name: unpack_name(node.children[0].children[0]),
17
- source: :parser,
18
- )
19
- else
20
- region.closure
21
- end
22
- block_pin = Solargraph::Pin::Block.new(
23
- location: location,
24
- closure: parent,
25
- node: node,
26
- receiver: node.children[0],
27
- comments: comments_for(node),
28
- scope: region.scope || region.closure.context.scope,
29
- source: :parser
30
- )
31
- pins.push block_pin
32
- process_children region.update(closure: block_pin)
33
- end
34
-
35
- private
36
-
37
- def other_class_eval?
38
- node.children[0].type == :send &&
39
- node.children[0].children[1] == :class_eval &&
40
- [:cbase, :const].include?(node.children[0].children[0]&.type)
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ module NodeProcessors
7
+ class BlockNode < Parser::NodeProcessor::Base
8
+ include ParserGem::NodeMethods
9
+
10
+ def process
11
+ location = get_node_location(node)
12
+ scope = region.scope || region.closure.context.scope
13
+ if other_class_eval?
14
+ clazz_name = unpack_name(node.children[0].children[0])
15
+ # instance variables should come from the Class<T> type
16
+ # - i.e., treated as class instance variables
17
+ context = ComplexType.try_parse("Class<#{clazz_name}>")
18
+ scope = :class
19
+ end
20
+ block_pin = Solargraph::Pin::Block.new(
21
+ location: location,
22
+ closure: region.closure,
23
+ node: node,
24
+ context: context,
25
+ receiver: node.children[0],
26
+ comments: comments_for(node),
27
+ scope: scope,
28
+ source: :parser
29
+ )
30
+ pins.push block_pin
31
+ process_children region.update(closure: block_pin)
32
+ end
33
+
34
+ private
35
+
36
+ def other_class_eval?
37
+ node.children[0].type == :send &&
38
+ node.children[0].children[1] == :class_eval &&
39
+ # @sg-ignore Need to add nil check here
40
+ [:cbase, :const].include?(node.children[0].children[0]&.type)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,53 +1,60 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- module NodeProcessors
7
- class DefNode < Parser::NodeProcessor::Base
8
- def process
9
- name = node.children[0].to_s
10
- scope = region.scope || (region.closure.is_a?(Pin::Singleton) ? :class : :instance)
11
- methpin = Solargraph::Pin::Method.new(
12
- location: get_node_location(node),
13
- closure: region.closure,
14
- name: name,
15
- comments: comments_for(node),
16
- scope: scope,
17
- visibility: scope == :instance && name == 'initialize' ? :private : region.visibility,
18
- node: node,
19
- source: :parser,
20
- )
21
- if region.visibility == :module_function
22
- pins.push Solargraph::Pin::Method.new(
23
- location: methpin.location,
24
- closure: methpin.closure,
25
- name: methpin.name,
26
- comments: methpin.comments,
27
- scope: :class,
28
- visibility: :public,
29
- parameters: methpin.parameters,
30
- node: methpin.node,
31
- source: :parser,
32
- )
33
- pins.push Solargraph::Pin::Method.new(
34
- location: methpin.location,
35
- closure: methpin.closure,
36
- name: methpin.name,
37
- comments: methpin.comments,
38
- scope: :instance,
39
- visibility: :private,
40
- parameters: methpin.parameters,
41
- node: methpin.node,
42
- source: :parser,
43
- )
44
- else
45
- pins.push methpin
46
- end
47
- process_children region.update(closure: methpin, scope: methpin.scope)
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ module NodeProcessors
7
+ class DefNode < Parser::NodeProcessor::Base
8
+ def process
9
+ name = node.children[0].to_s
10
+ scope = region.scope || (region.closure.is_a?(Pin::Singleton) ? :class : :instance)
11
+ # specify context explicitly instead of relying on
12
+ # closure, as they may differ (e.g., defs inside
13
+ # class_eval)
14
+ method_context = scope == :instance ? region.closure.binder.namespace_type : region.closure.binder
15
+ methpin = Solargraph::Pin::Method.new(
16
+ location: get_node_location(node),
17
+ closure: region.closure,
18
+ name: name,
19
+ context: method_context,
20
+ comments: comments_for(node),
21
+ scope: scope,
22
+ visibility: scope == :instance && name == 'initialize' ? :private : region.visibility,
23
+ node: node,
24
+ source: :parser,
25
+ )
26
+ if region.visibility == :module_function
27
+ pins.push Solargraph::Pin::Method.new(
28
+ location: methpin.location,
29
+ closure: methpin.closure,
30
+ name: methpin.name,
31
+ context: method_context,
32
+ comments: methpin.comments,
33
+ scope: :class,
34
+ visibility: :public,
35
+ parameters: methpin.parameters,
36
+ node: methpin.node,
37
+ source: :parser,
38
+ )
39
+ pins.push Solargraph::Pin::Method.new(
40
+ location: methpin.location,
41
+ closure: methpin.closure,
42
+ name: methpin.name,
43
+ context: method_context,
44
+ comments: methpin.comments,
45
+ scope: :instance,
46
+ visibility: :private,
47
+ parameters: methpin.parameters,
48
+ node: methpin.node,
49
+ source: :parser,
50
+ )
51
+ else
52
+ pins.push methpin
53
+ end
54
+ process_children region.update(closure: methpin, scope: methpin.scope)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,23 +1,53 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- module NodeProcessors
7
- class IfNode < Parser::NodeProcessor::Base
8
- include ParserGem::NodeMethods
9
-
10
- def process
11
- process_children
12
-
13
- position = get_node_start_position(node)
14
- # @sg-ignore
15
- # @type [Solargraph::Pin::Breakable, nil]
16
- enclosing_breakable_pin = pins.select{|pin| pin.is_a?(Pin::Breakable) && pin.location.range.contain?(position)}.last
17
- FlowSensitiveTyping.new(locals, enclosing_breakable_pin).process_if(node)
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ module NodeProcessors
7
+ class IfNode < Parser::NodeProcessor::Base
8
+ include ParserGem::NodeMethods
9
+
10
+ def process
11
+ FlowSensitiveTyping.new(locals,
12
+ ivars,
13
+ enclosing_breakable_pin,
14
+ enclosing_compound_statement_pin).process_if(node)
15
+ condition_node = node.children[0]
16
+ if condition_node
17
+ pins.push Solargraph::Pin::CompoundStatement.new(
18
+ location: get_node_location(condition_node),
19
+ closure: region.closure,
20
+ node: condition_node,
21
+ source: :parser,
22
+ )
23
+ NodeProcessor.process(condition_node, region, pins, locals, ivars)
24
+ end
25
+ then_node = node.children[1]
26
+ if then_node
27
+ pins.push Solargraph::Pin::CompoundStatement.new(
28
+ location: get_node_location(then_node),
29
+ closure: region.closure,
30
+ node: then_node,
31
+ source: :parser,
32
+ )
33
+ NodeProcessor.process(then_node, region, pins, locals, ivars)
34
+ end
35
+
36
+ else_node = node.children[2]
37
+ if else_node
38
+ pins.push Solargraph::Pin::CompoundStatement.new(
39
+ location: get_node_location(else_node),
40
+ closure: region.closure,
41
+ node: else_node,
42
+ source: :parser,
43
+ )
44
+ NodeProcessor.process(else_node, region, pins, locals, ivars)
45
+ end
46
+
47
+ true
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,40 +1,41 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- module NodeProcessors
7
- class IvasgnNode < Parser::NodeProcessor::Base
8
- include ParserGem::NodeMethods
9
-
10
- def process
11
- loc = get_node_location(node)
12
- pins.push Solargraph::Pin::InstanceVariable.new(
13
- location: loc,
14
- closure: region.closure,
15
- name: node.children[0].to_s,
16
- comments: comments_for(node),
17
- assignment: node.children[1],
18
- source: :parser
19
- )
20
- if region.visibility == :module_function
21
- here = get_node_start_position(node)
22
- named_path = named_path_pin(here)
23
- if named_path.is_a?(Pin::Method)
24
- pins.push Solargraph::Pin::InstanceVariable.new(
25
- location: loc,
26
- closure: Pin::Namespace.new(type: :module, closure: region.closure.closure, name: region.closure.name),
27
- name: node.children[0].to_s,
28
- comments: comments_for(node),
29
- assignment: node.children[1],
30
- source: :parser
31
- )
32
- end
33
- end
34
- process_children
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ module NodeProcessors
7
+ class IvasgnNode < Parser::NodeProcessor::Base
8
+ include ParserGem::NodeMethods
9
+
10
+ def process
11
+ loc = get_node_location(node)
12
+ ivars.push Solargraph::Pin::InstanceVariable.new(
13
+ location: loc,
14
+ closure: region.closure,
15
+ name: node.children[0].to_s,
16
+ comments: comments_for(node),
17
+ assignment: node.children[1],
18
+ source: :parser
19
+ )
20
+ if region.visibility == :module_function
21
+ here = get_node_start_position(node)
22
+ # @type [Pin::Closure, nil]
23
+ named_path = named_path_pin(here)
24
+ if named_path.is_a?(Pin::Method)
25
+ ivars.push Solargraph::Pin::InstanceVariable.new(
26
+ location: loc,
27
+ closure: Pin::Namespace.new(type: :module, closure: region.closure.closure, name: region.closure.name),
28
+ name: node.children[0].to_s,
29
+ comments: comments_for(node),
30
+ assignment: node.children[1],
31
+ source: :parser
32
+ )
33
+ end
34
+ end
35
+ process_children
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,29 +1,30 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- module NodeProcessors
7
- class LvasgnNode < Parser::NodeProcessor::Base
8
- include ParserGem::NodeMethods
9
-
10
- def process
11
- here = get_node_start_position(node)
12
- presence = Range.new(here, region.closure.location.range.ending)
13
- loc = get_node_location(node)
14
- locals.push Solargraph::Pin::LocalVariable.new(
15
- location: loc,
16
- closure: region.closure,
17
- name: node.children[0].to_s,
18
- assignment: node.children[1],
19
- comments: comments_for(node),
20
- presence: presence,
21
- source: :parser
22
- )
23
- process_children
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 LvasgnNode < Parser::NodeProcessor::Base
8
+ include ParserGem::NodeMethods
9
+
10
+ def process
11
+ here = get_node_start_position(node)
12
+ # @sg-ignore Need to add nil check here
13
+ presence = Range.new(here, region.closure.location.range.ending)
14
+ loc = get_node_location(node)
15
+ locals.push Solargraph::Pin::LocalVariable.new(
16
+ location: loc,
17
+ closure: region.closure,
18
+ name: node.children[0].to_s,
19
+ assignment: node.children[1],
20
+ comments: comments_for(node),
21
+ presence: presence,
22
+ source: :parser
23
+ )
24
+ process_children
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end