solargraph 0.58.0 → 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 (166) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +3 -0
  3. data/.gitattributes +2 -0
  4. data/.github/workflows/linting.yml +4 -5
  5. data/.github/workflows/plugins.yml +40 -36
  6. data/.github/workflows/rspec.yml +45 -13
  7. data/.github/workflows/typecheck.yml +2 -2
  8. data/.rubocop_todo.yml +27 -49
  9. data/CHANGELOG.md +3 -0
  10. data/README.md +3 -3
  11. data/Rakefile +1 -0
  12. data/bin/solargraph +8 -8
  13. data/lib/solargraph/api_map/cache.rb +110 -110
  14. data/lib/solargraph/api_map/constants.rb +289 -279
  15. data/lib/solargraph/api_map/index.rb +204 -193
  16. data/lib/solargraph/api_map/source_to_yard.rb +109 -97
  17. data/lib/solargraph/api_map/store.rb +387 -384
  18. data/lib/solargraph/api_map.rb +1000 -945
  19. data/lib/solargraph/complex_type/conformance.rb +176 -0
  20. data/lib/solargraph/complex_type/type_methods.rb +242 -228
  21. data/lib/solargraph/complex_type/unique_type.rb +632 -482
  22. data/lib/solargraph/complex_type.rb +549 -444
  23. data/lib/solargraph/convention/data_definition/data_definition_node.rb +93 -91
  24. data/lib/solargraph/convention/data_definition.rb +108 -105
  25. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +62 -61
  26. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +103 -102
  27. data/lib/solargraph/convention/struct_definition.rb +168 -164
  28. data/lib/solargraph/diagnostics/require_not_found.rb +54 -53
  29. data/lib/solargraph/diagnostics/rubocop.rb +119 -118
  30. data/lib/solargraph/diagnostics/rubocop_helpers.rb +70 -68
  31. data/lib/solargraph/diagnostics/type_check.rb +56 -55
  32. data/lib/solargraph/doc_map.rb +200 -439
  33. data/lib/solargraph/equality.rb +34 -34
  34. data/lib/solargraph/gem_pins.rb +97 -98
  35. data/lib/solargraph/language_server/host/dispatch.rb +131 -130
  36. data/lib/solargraph/language_server/host/message_worker.rb +113 -112
  37. data/lib/solargraph/language_server/host/sources.rb +100 -99
  38. data/lib/solargraph/language_server/host.rb +883 -878
  39. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +109 -114
  40. data/lib/solargraph/language_server/message/extended/document.rb +24 -23
  41. data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
  42. data/lib/solargraph/language_server/message/text_document/definition.rb +42 -40
  43. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +28 -26
  44. data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
  45. data/lib/solargraph/language_server/message/text_document/hover.rb +60 -58
  46. data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
  47. data/lib/solargraph/language_server/message/text_document/type_definition.rb +27 -25
  48. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +25 -23
  49. data/lib/solargraph/library.rb +729 -683
  50. data/lib/solargraph/location.rb +87 -82
  51. data/lib/solargraph/logging.rb +57 -37
  52. data/lib/solargraph/parser/comment_ripper.rb +76 -69
  53. data/lib/solargraph/parser/flow_sensitive_typing.rb +483 -255
  54. data/lib/solargraph/parser/node_processor/base.rb +122 -92
  55. data/lib/solargraph/parser/node_processor.rb +63 -62
  56. data/lib/solargraph/parser/parser_gem/class_methods.rb +167 -149
  57. data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
  58. data/lib/solargraph/parser/parser_gem/node_methods.rb +506 -486
  59. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
  60. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +61 -59
  61. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +24 -15
  62. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
  63. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
  64. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
  65. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +41 -40
  66. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +30 -29
  67. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +61 -59
  68. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
  69. data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
  70. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
  71. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +39 -38
  72. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +53 -52
  73. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +296 -291
  74. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
  75. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +33 -29
  76. data/lib/solargraph/parser/parser_gem/node_processors.rb +74 -70
  77. data/lib/solargraph/parser/region.rb +75 -69
  78. data/lib/solargraph/parser/snippet.rb +17 -17
  79. data/lib/solargraph/pin/base.rb +761 -729
  80. data/lib/solargraph/pin/base_variable.rb +418 -126
  81. data/lib/solargraph/pin/block.rb +126 -104
  82. data/lib/solargraph/pin/breakable.rb +13 -9
  83. data/lib/solargraph/pin/callable.rb +278 -231
  84. data/lib/solargraph/pin/closure.rb +68 -72
  85. data/lib/solargraph/pin/common.rb +94 -79
  86. data/lib/solargraph/pin/compound_statement.rb +55 -0
  87. data/lib/solargraph/pin/conversions.rb +124 -123
  88. data/lib/solargraph/pin/delegated_method.rb +131 -120
  89. data/lib/solargraph/pin/documenting.rb +115 -114
  90. data/lib/solargraph/pin/instance_variable.rb +38 -34
  91. data/lib/solargraph/pin/keyword.rb +16 -20
  92. data/lib/solargraph/pin/local_variable.rb +31 -75
  93. data/lib/solargraph/pin/method.rb +720 -672
  94. data/lib/solargraph/pin/method_alias.rb +42 -34
  95. data/lib/solargraph/pin/namespace.rb +121 -115
  96. data/lib/solargraph/pin/parameter.rb +338 -275
  97. data/lib/solargraph/pin/proxy_type.rb +40 -39
  98. data/lib/solargraph/pin/reference/override.rb +47 -47
  99. data/lib/solargraph/pin/reference/superclass.rb +17 -15
  100. data/lib/solargraph/pin/reference.rb +41 -39
  101. data/lib/solargraph/pin/search.rb +62 -61
  102. data/lib/solargraph/pin/signature.rb +69 -61
  103. data/lib/solargraph/pin/symbol.rb +53 -53
  104. data/lib/solargraph/pin/until.rb +18 -18
  105. data/lib/solargraph/pin/while.rb +18 -18
  106. data/lib/solargraph/pin.rb +46 -44
  107. data/lib/solargraph/pin_cache.rb +665 -245
  108. data/lib/solargraph/position.rb +118 -119
  109. data/lib/solargraph/range.rb +112 -112
  110. data/lib/solargraph/rbs_map/conversions.rb +846 -823
  111. data/lib/solargraph/rbs_map/core_map.rb +65 -58
  112. data/lib/solargraph/rbs_map/stdlib_map.rb +72 -43
  113. data/lib/solargraph/rbs_map.rb +217 -163
  114. data/lib/solargraph/shell.rb +397 -352
  115. data/lib/solargraph/source/chain/call.rb +372 -337
  116. data/lib/solargraph/source/chain/constant.rb +28 -26
  117. data/lib/solargraph/source/chain/hash.rb +35 -34
  118. data/lib/solargraph/source/chain/if.rb +29 -28
  119. data/lib/solargraph/source/chain/instance_variable.rb +34 -13
  120. data/lib/solargraph/source/chain/literal.rb +53 -48
  121. data/lib/solargraph/source/chain/or.rb +31 -23
  122. data/lib/solargraph/source/chain.rb +294 -291
  123. data/lib/solargraph/source/change.rb +89 -82
  124. data/lib/solargraph/source/cursor.rb +172 -166
  125. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  126. data/lib/solargraph/source/source_chainer.rb +204 -194
  127. data/lib/solargraph/source/updater.rb +59 -55
  128. data/lib/solargraph/source.rb +524 -498
  129. data/lib/solargraph/source_map/clip.rb +237 -226
  130. data/lib/solargraph/source_map/data.rb +37 -34
  131. data/lib/solargraph/source_map/mapper.rb +282 -259
  132. data/lib/solargraph/source_map.rb +220 -212
  133. data/lib/solargraph/type_checker/problem.rb +34 -32
  134. data/lib/solargraph/type_checker/rules.rb +157 -84
  135. data/lib/solargraph/type_checker.rb +895 -814
  136. data/lib/solargraph/version.rb +5 -5
  137. data/lib/solargraph/workspace/config.rb +257 -255
  138. data/lib/solargraph/workspace/gemspecs.rb +367 -0
  139. data/lib/solargraph/workspace/require_paths.rb +98 -97
  140. data/lib/solargraph/workspace.rb +362 -220
  141. data/lib/solargraph/yard_map/helpers.rb +45 -44
  142. data/lib/solargraph/yard_map/mapper/to_method.rb +134 -130
  143. data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
  144. data/lib/solargraph/yard_map/mapper.rb +84 -79
  145. data/lib/solargraph/yardoc.rb +97 -87
  146. data/lib/solargraph.rb +126 -105
  147. data/rbs/fills/rubygems/0/dependency.rbs +193 -0
  148. data/rbs/fills/tuple/tuple.rbs +28 -0
  149. data/rbs/shims/ast/0/node.rbs +5 -0
  150. data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
  151. data/rbs_collection.yaml +1 -1
  152. data/solargraph.gemspec +2 -1
  153. metadata +23 -17
  154. data/lib/solargraph/type_checker/checks.rb +0 -124
  155. data/lib/solargraph/type_checker/param_def.rb +0 -37
  156. data/lib/solargraph/yard_map/to_method.rb +0 -89
  157. data/sig/shims/ast/0/node.rbs +0 -5
  158. /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
  159. /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
  160. /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
  161. /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
  162. /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
  163. /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
  164. /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
  165. /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
  166. /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
@@ -1,59 +1,61 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- module NodeProcessors
7
- class MasgnNode < Parser::NodeProcessor::Base
8
- include ParserGem::NodeMethods
9
-
10
- # @return [void]
11
- def process
12
- # Example:
13
- #
14
- # s(:masgn,
15
- # s(:mlhs,
16
- # s(:send,
17
- # s(:send, nil, :a), :b=),
18
- # s(:lvasgn, :b),
19
- # s(:ivasgn, :@c)),
20
- # s(:array,
21
- # s(:int, 1),
22
- # s(:int, 2),
23
- # s(:int, 3)))
24
- masgn = node
25
- # @type [Parser::AST::Node]
26
- mlhs = masgn.children.fetch(0)
27
- # @type [Array<Parser::AST::Node>]
28
- lhs_arr = mlhs.children
29
- # @type [Parser::AST::Node]
30
- mass_rhs = node.children.fetch(1)
31
-
32
- # Get pins created for the mlhs node
33
- process_children
34
-
35
- lhs_arr.each_with_index do |lhs, i|
36
- location = get_node_location(lhs)
37
- pin = if lhs.type == :lvasgn
38
- # lvasgn is a local variable
39
- locals.find { |l| l.location == location }
40
- else
41
- # e.g., ivasgn is an instance variable, etc
42
- pins.find { |iv| iv.location == location && iv.is_a?(Pin::BaseVariable) }
43
- end
44
- # @todo in line below, nothing in typechecking alerts
45
- # when a non-existant method is called on 'l'
46
- if pin.nil?
47
- Solargraph.logger.debug do
48
- "Could not find local for masgn= value in location #{location.inspect} in #{lhs_arr} - masgn = #{masgn}, lhs.type = #{lhs.type}"
49
- end
50
- next
51
- end
52
- pin.mass_assignment = [mass_rhs, i]
53
- end
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 MasgnNode < Parser::NodeProcessor::Base
8
+ include ParserGem::NodeMethods
9
+
10
+ # @return [void]
11
+ def process
12
+ # Example:
13
+ #
14
+ # s(:masgn,
15
+ # s(:mlhs,
16
+ # s(:send,
17
+ # s(:send, nil, :a), :b=),
18
+ # s(:lvasgn, :b),
19
+ # s(:ivasgn, :@c)),
20
+ # s(:array,
21
+ # s(:int, 1),
22
+ # s(:int, 2),
23
+ # s(:int, 3)))
24
+ masgn = node
25
+ # @type [Parser::AST::Node]
26
+ mlhs = masgn.children.fetch(0)
27
+ # @type [Array<Parser::AST::Node>]
28
+ lhs_arr = mlhs.children
29
+ # @type [Parser::AST::Node]
30
+ mass_rhs = node.children.fetch(1)
31
+
32
+ # Get pins created for the mlhs node
33
+ process_children
34
+
35
+ lhs_arr.each_with_index do |lhs, i|
36
+ location = get_node_location(lhs)
37
+ pin = if lhs.type == :lvasgn
38
+ # lvasgn is a local variable
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 }
43
+ else
44
+ pins.find { |iv| iv.location == location && iv.is_a?(Pin::BaseVariable) }
45
+ end
46
+ # @todo in line below, nothing in typechecking alerts
47
+ # when a non-existant method is called on 'l'
48
+ if pin.nil?
49
+ Solargraph.logger.debug do
50
+ "Could not find local for masgn= value in location #{location.inspect} in #{lhs_arr} - masgn = #{masgn}, lhs.type = #{lhs.type}"
51
+ end
52
+ next
53
+ end
54
+ pin.mass_assignment = [mass_rhs, i]
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -1,98 +1,98 @@
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
- # @return [void]
11
- def process
12
- target = node.children[0]
13
- operator = node.children[1]
14
- argument = node.children[2]
15
- if target.type == :send
16
- # @sg-ignore Need a downcast here
17
- process_send_target(target, operator, argument)
18
- elsif target.type.to_s.end_with?('vasgn')
19
- # @sg-ignore Need a downcast here
20
- process_vasgn_target(target, operator, argument)
21
- else
22
- Solargraph.assert_or_log(:opasgn_unknown_target,
23
- "Unexpected op_asgn target type: #{target.type}")
24
- end
25
- end
26
-
27
- # @param call [Parser::AST::Node] the target of the assignment
28
- # @param operator [Symbol] the operator, e.g. :+
29
- # @param argument [Parser::AST::Node] the argument of the operation
30
- #
31
- # @return [void]
32
- def process_send_target call, operator, argument
33
- # if target is a call:
34
- # [10] pry(main)> Parser::CurrentRuby.parse("Foo.bar += baz")
35
- # => s(:op_asgn,
36
- # s(:send, # call
37
- # s(:const, nil, :Foo), # calee
38
- # :bar), # call_method
39
- # :+, # operator
40
- # s(:send, nil, :baz)) # argument
41
- # [11] pry(main)>
42
- callee = call.children[0]
43
- call_method = call.children[1]
44
- asgn_method = :"#{call_method}="
45
-
46
- # [8] pry(main)> Parser::CurrentRuby.parse("Foo.bar = Foo.bar + baz")
47
- # => s(:send,
48
- # s(:const, nil, :Foo), # callee
49
- # :bar=, # asgn_method
50
- # s(:send,
51
- # s(:send,
52
- # s(:const, nil, :Foo), # callee
53
- # :bar), # call_method
54
- # :+, # operator
55
- # s(:send, nil, :baz))) # argument
56
- new_send = node.updated(:send,
57
- [callee,
58
- asgn_method,
59
- node.updated(:send, [call, operator, argument])])
60
- NodeProcessor.process(new_send, region, pins, locals)
61
- end
62
-
63
- # @param asgn [Parser::AST::Node] the target of the assignment
64
- # @param operator [Symbol] the operator, e.g. :+
65
- # @param argument [Parser::AST::Node] the argument of the operation
66
- #
67
- # @return [void]
68
- def process_vasgn_target asgn, operator, argument
69
- # => s(:op_asgn,
70
- # s(:lvasgn, :a), # asgn
71
- # :+, # operator
72
- # s(:int, 2)) # argument
73
-
74
- # @type [Parser::AST::Node]
75
- variable_name = asgn.children[0]
76
- # for lvasgn, gvasgn, cvasgn, convert to lvar, gvar, cvar
77
- # [6] pry(main)> Parser::CurrentRuby.parse("a = a + 1")
78
- # => s(:lvasgn, :a,
79
- # s(:send,
80
- # s(:lvar, :a), :+,
81
- # s(:int, 1)))
82
- # [7] pry(main)>
83
- variable_reference_type = asgn.type.to_s.sub(/vasgn$/, 'var').to_sym
84
- target_reference = node.updated(variable_reference_type, asgn.children)
85
- send_children = [
86
- target_reference,
87
- operator,
88
- argument
89
- ]
90
- send_node = node.updated(:send, send_children)
91
- new_asgn = node.updated(asgn.type, [variable_name, send_node])
92
- NodeProcessor.process(new_asgn, region, pins, locals)
93
- end
94
- end
95
- end
96
- end
97
- end
98
- end
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
+ # @return [void]
11
+ def process
12
+ target = node.children[0]
13
+ operator = node.children[1]
14
+ argument = node.children[2]
15
+ if target.type == :send
16
+ # @sg-ignore Need a downcast here
17
+ process_send_target(target, operator, argument)
18
+ elsif target.type.to_s.end_with?('vasgn')
19
+ # @sg-ignore Need a downcast here
20
+ process_vasgn_target(target, operator, argument)
21
+ else
22
+ Solargraph.assert_or_log(:opasgn_unknown_target,
23
+ "Unexpected op_asgn target type: #{target.type}")
24
+ end
25
+ end
26
+
27
+ # @param call [Parser::AST::Node] the target of the assignment
28
+ # @param operator [Symbol] the operator, e.g. :+
29
+ # @param argument [Parser::AST::Node] the argument of the operation
30
+ #
31
+ # @return [void]
32
+ def process_send_target call, operator, argument
33
+ # if target is a call:
34
+ # [10] pry(main)> Parser::CurrentRuby.parse("Foo.bar += baz")
35
+ # => s(:op_asgn,
36
+ # s(:send, # call
37
+ # s(:const, nil, :Foo), # calee
38
+ # :bar), # call_method
39
+ # :+, # operator
40
+ # s(:send, nil, :baz)) # argument
41
+ # [11] pry(main)>
42
+ callee = call.children[0]
43
+ call_method = call.children[1]
44
+ asgn_method = :"#{call_method}="
45
+
46
+ # [8] pry(main)> Parser::CurrentRuby.parse("Foo.bar = Foo.bar + baz")
47
+ # => s(:send,
48
+ # s(:const, nil, :Foo), # callee
49
+ # :bar=, # asgn_method
50
+ # s(:send,
51
+ # s(:send,
52
+ # s(:const, nil, :Foo), # callee
53
+ # :bar), # call_method
54
+ # :+, # operator
55
+ # s(:send, nil, :baz))) # argument
56
+ new_send = node.updated(:send,
57
+ [callee,
58
+ asgn_method,
59
+ node.updated(:send, [call, operator, argument])])
60
+ NodeProcessor.process(new_send, region, pins, locals, ivars)
61
+ end
62
+
63
+ # @param asgn [Parser::AST::Node] the target of the assignment
64
+ # @param operator [Symbol] the operator, e.g. :+
65
+ # @param argument [Parser::AST::Node] the argument of the operation
66
+ #
67
+ # @return [void]
68
+ def process_vasgn_target asgn, operator, argument
69
+ # => s(:op_asgn,
70
+ # s(:lvasgn, :a), # asgn
71
+ # :+, # operator
72
+ # s(:int, 2)) # argument
73
+
74
+ # @type [Parser::AST::Node]
75
+ variable_name = asgn.children[0]
76
+ # for lvasgn, gvasgn, cvasgn, convert to lvar, gvar, cvar
77
+ # [6] pry(main)> Parser::CurrentRuby.parse("a = a + 1")
78
+ # => s(:lvasgn, :a,
79
+ # s(:send,
80
+ # s(:lvar, :a), :+,
81
+ # s(:int, 1)))
82
+ # [7] pry(main)>
83
+ variable_reference_type = asgn.type.to_s.sub(/vasgn$/, 'var').to_sym
84
+ target_reference = node.updated(variable_reference_type, asgn.children)
85
+ send_children = [
86
+ target_reference,
87
+ operator,
88
+ argument
89
+ ]
90
+ send_node = node.updated(:send, send_children)
91
+ new_asgn = node.updated(asgn.type, [variable_name, send_node])
92
+ NodeProcessor.process(new_asgn, region, pins, locals, ivars)
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ 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
@@ -1,17 +1,17 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- module NodeProcessors
7
- class OrasgnNode < Parser::NodeProcessor::Base
8
- # @return [void]
9
- def process
10
- new_node = node.updated(node.children[0].type, node.children[0].children + [node.children[1]])
11
- NodeProcessor.process(new_node, region, pins, locals)
12
- end
13
- end
14
- end
15
- end
16
- end
17
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ module NodeProcessors
7
+ class OrasgnNode < Parser::NodeProcessor::Base
8
+ # @return [void]
9
+ def process
10
+ new_node = node.updated(node.children[0].type, node.children[0].children + [node.children[1]])
11
+ NodeProcessor.process(new_node, region, pins, locals, ivars)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,38 +1,39 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- module NodeProcessors
7
- class ResbodyNode < Parser::NodeProcessor::Base
8
- include ParserGem::NodeMethods
9
-
10
- # @return [void]
11
- def process
12
- if node.children[1] # Exception local variable name
13
- here = get_node_start_position(node.children[1])
14
- presence = Range.new(here, region.closure.location.range.ending)
15
- loc = get_node_location(node.children[1])
16
- types = if node.children[0].nil?
17
- ['Exception']
18
- else
19
- node.children[0].children.map do |child|
20
- unpack_name(child)
21
- end
22
- end
23
- locals.push Solargraph::Pin::LocalVariable.new(
24
- location: loc,
25
- closure: region.closure,
26
- name: node.children[1].children[0].to_s,
27
- comments: "@type [#{types.join(',')}]",
28
- presence: presence,
29
- source: :parser
30
- )
31
- end
32
- NodeProcessor.process(node.children[2], region, pins, locals)
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ module NodeProcessors
7
+ class ResbodyNode < Parser::NodeProcessor::Base
8
+ include ParserGem::NodeMethods
9
+
10
+ # @return [void]
11
+ def process
12
+ if node.children[1] # Exception local variable name
13
+ here = get_node_start_position(node.children[1])
14
+ # @sg-ignore Need to add nil check here
15
+ presence = Range.new(here, region.closure.location.range.ending)
16
+ loc = get_node_location(node.children[1])
17
+ types = if node.children[0].nil?
18
+ ['Exception']
19
+ else
20
+ node.children[0].children.map do |child|
21
+ unpack_name(child)
22
+ end
23
+ end
24
+ locals.push Solargraph::Pin::LocalVariable.new(
25
+ location: loc,
26
+ closure: region.closure,
27
+ name: node.children[1].children[0].to_s,
28
+ comments: "@type [#{types.join(',')}]",
29
+ presence: presence,
30
+ source: :parser
31
+ )
32
+ end
33
+ NodeProcessor.process(node.children[2], region, pins, locals, ivars)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,52 +1,53 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- module NodeProcessors
7
- class SclassNode < Parser::NodeProcessor::Base
8
- def process
9
- sclass = node.children[0]
10
- # @todo Changing Parser::AST::Node to AST::Node below will
11
- # cause type errors at strong level because the combined
12
- # pin for AST::Node#children has return type
13
- # "Array<AST::Node>, Array". YARD annotations in AST
14
- # provided the Array, RBS for Array<AST::Node>. We
15
- # should probably have a rule to combine "A, A<T>""
16
- # types to "A<T>" if the "A" comes from YARD, with the
17
- # rationale that folks tend to be less formal with types in
18
- # YARD.
19
- if sclass.is_a?(::Parser::AST::Node) && sclass.type == :self
20
- closure = region.closure
21
- elsif sclass.is_a?(::Parser::AST::Node) && sclass.type == :casgn
22
- names = [region.closure.namespace, region.closure.name]
23
- if sclass.children[0].nil? && names.last != sclass.children[1].to_s
24
- names << sclass.children[1].to_s
25
- else
26
- names.concat [NodeMethods.unpack_name(sclass.children[0]), sclass.children[1].to_s]
27
- end
28
- name = names.reject(&:empty?).join('::')
29
- closure = Solargraph::Pin::Namespace.new(name: name, location: region.closure.location, source: :parser)
30
- elsif sclass.is_a?(::Parser::AST::Node) && sclass.type == :const
31
- names = [region.closure.namespace, region.closure.name]
32
- also = NodeMethods.unpack_name(sclass)
33
- if also != region.closure.name
34
- names << also
35
- end
36
- name = names.reject(&:empty?).join('::')
37
- closure = Solargraph::Pin::Namespace.new(name: name, location: region.closure.location, source: :parser)
38
- else
39
- return
40
- end
41
- pins.push Solargraph::Pin::Singleton.new(
42
- location: get_node_location(node),
43
- closure: closure,
44
- source: :parser,
45
- )
46
- process_children region.update(visibility: :public, scope: :class, closure: pins.last)
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ module NodeProcessors
7
+ class SclassNode < Parser::NodeProcessor::Base
8
+ # @sg-ignore @override is adding, not overriding
9
+ def process
10
+ sclass = node.children[0]
11
+ # @todo Changing Parser::AST::Node to AST::Node below will
12
+ # cause type errors at strong level because the combined
13
+ # pin for AST::Node#children has return type
14
+ # "Array<AST::Node>, Array". YARD annotations in AST
15
+ # provided the Array, RBS for Array<AST::Node>. We
16
+ # should probably have a rule to combine "A, A<T>""
17
+ # types to "A<T>" if the "A" comes from YARD, with the
18
+ # rationale that folks tend to be less formal with types in
19
+ # YARD.
20
+ if sclass.is_a?(::Parser::AST::Node) && sclass.type == :self
21
+ closure = region.closure
22
+ elsif sclass.is_a?(::Parser::AST::Node) && sclass.type == :casgn
23
+ names = [region.closure.namespace, region.closure.name]
24
+ if sclass.children[0].nil? && names.last != sclass.children[1].to_s
25
+ names << sclass.children[1].to_s
26
+ else
27
+ names.concat [NodeMethods.unpack_name(sclass.children[0]), sclass.children[1].to_s]
28
+ end
29
+ name = names.reject(&:empty?).join('::')
30
+ closure = Solargraph::Pin::Namespace.new(name: name, location: region.closure.location, source: :parser)
31
+ elsif sclass.is_a?(::Parser::AST::Node) && sclass.type == :const
32
+ names = [region.closure.namespace, region.closure.name]
33
+ also = NodeMethods.unpack_name(sclass)
34
+ if also != region.closure.name
35
+ names << also
36
+ end
37
+ name = names.reject(&:empty?).join('::')
38
+ closure = Solargraph::Pin::Namespace.new(name: name, location: region.closure.location, source: :parser)
39
+ else
40
+ return
41
+ end
42
+ pins.push Solargraph::Pin::Singleton.new(
43
+ location: get_node_location(node),
44
+ closure: closure,
45
+ source: :parser,
46
+ )
47
+ process_children region.update(visibility: :public, scope: :class, closure: pins.last)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end