solargraph 0.54.5 → 0.58.2

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 (209) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.github/workflows/linting.yml +127 -0
  4. data/.github/workflows/plugins.yml +184 -6
  5. data/.github/workflows/rspec.yml +55 -5
  6. data/.github/workflows/typecheck.yml +8 -3
  7. data/.gitignore +8 -0
  8. data/.overcommit.yml +72 -0
  9. data/.rspec +1 -0
  10. data/.rubocop.yml +66 -0
  11. data/.rubocop_todo.yml +1279 -0
  12. data/.yardopts +1 -0
  13. data/CHANGELOG.md +135 -0
  14. data/README.md +20 -6
  15. data/Rakefile +125 -13
  16. data/bin/solargraph +3 -0
  17. data/lib/solargraph/api_map/cache.rb +110 -109
  18. data/lib/solargraph/api_map/constants.rb +279 -0
  19. data/lib/solargraph/api_map/index.rb +193 -167
  20. data/lib/solargraph/api_map/source_to_yard.rb +97 -88
  21. data/lib/solargraph/api_map/store.rb +384 -260
  22. data/lib/solargraph/api_map.rb +945 -870
  23. data/lib/solargraph/bench.rb +1 -0
  24. data/lib/solargraph/complex_type/type_methods.rb +228 -217
  25. data/lib/solargraph/complex_type/unique_type.rb +482 -386
  26. data/lib/solargraph/complex_type.rb +444 -394
  27. data/lib/solargraph/convention/active_support_concern.rb +111 -0
  28. data/lib/solargraph/convention/base.rb +20 -3
  29. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -0
  30. data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -0
  31. data/lib/solargraph/convention/data_definition.rb +105 -0
  32. data/lib/solargraph/convention/gemspec.rb +3 -2
  33. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -0
  34. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -0
  35. data/lib/solargraph/convention/struct_definition.rb +164 -0
  36. data/lib/solargraph/convention.rb +35 -4
  37. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  38. data/lib/solargraph/diagnostics/rubocop.rb +118 -113
  39. data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -66
  40. data/lib/solargraph/diagnostics/type_check.rb +55 -55
  41. data/lib/solargraph/doc_map.rb +439 -188
  42. data/lib/solargraph/environ.rb +9 -2
  43. data/lib/solargraph/equality.rb +34 -33
  44. data/lib/solargraph/gem_pins.rb +98 -72
  45. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  46. data/lib/solargraph/language_server/host/dispatch.rb +130 -128
  47. data/lib/solargraph/language_server/host/message_worker.rb +112 -106
  48. data/lib/solargraph/language_server/host/sources.rb +99 -99
  49. data/lib/solargraph/language_server/host.rb +878 -861
  50. data/lib/solargraph/language_server/message/base.rb +2 -1
  51. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -112
  52. data/lib/solargraph/language_server/message/extended/document.rb +23 -20
  53. data/lib/solargraph/language_server/message/extended/document_gems.rb +3 -3
  54. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
  55. data/lib/solargraph/language_server/message/text_document/definition.rb +40 -38
  56. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
  57. data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -131
  58. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  59. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
  60. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -24
  61. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +2 -0
  62. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  63. data/lib/solargraph/language_server/progress.rb +8 -0
  64. data/lib/solargraph/language_server/request.rb +4 -1
  65. data/lib/solargraph/library.rb +683 -663
  66. data/lib/solargraph/location.rb +82 -58
  67. data/lib/solargraph/logging.rb +37 -27
  68. data/lib/solargraph/page.rb +3 -0
  69. data/lib/solargraph/parser/comment_ripper.rb +69 -56
  70. data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -0
  71. data/lib/solargraph/parser/node_processor/base.rb +92 -87
  72. data/lib/solargraph/parser/node_processor.rb +62 -45
  73. data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -153
  74. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +1 -0
  75. data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -164
  76. data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -495
  77. data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +2 -1
  78. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -0
  79. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -57
  80. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
  81. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -43
  82. data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +2 -1
  83. data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +2 -1
  84. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -50
  85. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +2 -1
  86. data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +2 -1
  87. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -0
  88. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -38
  89. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -28
  90. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -53
  91. data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +8 -7
  92. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -0
  93. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -16
  94. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -36
  95. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -42
  96. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -259
  97. data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +3 -1
  98. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -0
  99. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -0
  100. data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -56
  101. data/lib/solargraph/parser/region.rb +69 -66
  102. data/lib/solargraph/parser/snippet.rb +17 -15
  103. data/lib/solargraph/parser.rb +1 -0
  104. data/lib/solargraph/pin/base.rb +729 -378
  105. data/lib/solargraph/pin/base_variable.rb +126 -118
  106. data/lib/solargraph/pin/block.rb +104 -101
  107. data/lib/solargraph/pin/breakable.rb +9 -0
  108. data/lib/solargraph/pin/callable.rb +231 -147
  109. data/lib/solargraph/pin/closure.rb +72 -57
  110. data/lib/solargraph/pin/common.rb +79 -70
  111. data/lib/solargraph/pin/constant.rb +2 -0
  112. data/lib/solargraph/pin/conversions.rb +123 -123
  113. data/lib/solargraph/pin/delegated_method.rb +120 -101
  114. data/lib/solargraph/pin/documenting.rb +114 -98
  115. data/lib/solargraph/pin/instance_variable.rb +34 -34
  116. data/lib/solargraph/pin/keyword.rb +20 -15
  117. data/lib/solargraph/pin/local_variable.rb +75 -67
  118. data/lib/solargraph/pin/method.rb +672 -527
  119. data/lib/solargraph/pin/method_alias.rb +34 -31
  120. data/lib/solargraph/pin/namespace.rb +115 -107
  121. data/lib/solargraph/pin/parameter.rb +275 -212
  122. data/lib/solargraph/pin/proxy_type.rb +39 -29
  123. data/lib/solargraph/pin/reference/override.rb +47 -29
  124. data/lib/solargraph/pin/reference/require.rb +2 -2
  125. data/lib/solargraph/pin/reference/superclass.rb +15 -10
  126. data/lib/solargraph/pin/reference.rb +39 -22
  127. data/lib/solargraph/pin/search.rb +61 -56
  128. data/lib/solargraph/pin/signature.rb +61 -17
  129. data/lib/solargraph/pin/singleton.rb +1 -1
  130. data/lib/solargraph/pin/symbol.rb +53 -47
  131. data/lib/solargraph/pin/until.rb +18 -0
  132. data/lib/solargraph/pin/while.rb +18 -0
  133. data/lib/solargraph/pin.rb +44 -41
  134. data/lib/solargraph/pin_cache.rb +245 -0
  135. data/lib/solargraph/position.rb +132 -107
  136. data/lib/solargraph/range.rb +112 -98
  137. data/lib/solargraph/rbs_map/conversions.rb +823 -646
  138. data/lib/solargraph/rbs_map/core_fills.rb +50 -16
  139. data/lib/solargraph/rbs_map/core_map.rb +58 -28
  140. data/lib/solargraph/rbs_map/stdlib_map.rb +43 -33
  141. data/lib/solargraph/rbs_map.rb +163 -93
  142. data/lib/solargraph/shell.rb +352 -269
  143. data/lib/solargraph/source/chain/array.rb +11 -7
  144. data/lib/solargraph/source/chain/block_symbol.rb +1 -1
  145. data/lib/solargraph/source/chain/block_variable.rb +1 -1
  146. data/lib/solargraph/source/chain/call.rb +337 -303
  147. data/lib/solargraph/source/chain/constant.rb +26 -89
  148. data/lib/solargraph/source/chain/hash.rb +34 -33
  149. data/lib/solargraph/source/chain/head.rb +1 -1
  150. data/lib/solargraph/source/chain/if.rb +28 -28
  151. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  152. data/lib/solargraph/source/chain/link.rb +13 -2
  153. data/lib/solargraph/source/chain/literal.rb +48 -28
  154. data/lib/solargraph/source/chain/or.rb +23 -23
  155. data/lib/solargraph/source/chain/z_super.rb +1 -1
  156. data/lib/solargraph/source/chain.rb +291 -252
  157. data/lib/solargraph/source/change.rb +82 -82
  158. data/lib/solargraph/source/cursor.rb +166 -167
  159. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  160. data/lib/solargraph/source/source_chainer.rb +194 -194
  161. data/lib/solargraph/source/updater.rb +55 -55
  162. data/lib/solargraph/source.rb +498 -495
  163. data/lib/solargraph/source_map/clip.rb +226 -232
  164. data/lib/solargraph/source_map/data.rb +34 -30
  165. data/lib/solargraph/source_map/mapper.rb +259 -255
  166. data/lib/solargraph/source_map.rb +212 -217
  167. data/lib/solargraph/type_checker/checks.rb +124 -120
  168. data/lib/solargraph/type_checker/param_def.rb +37 -35
  169. data/lib/solargraph/type_checker/problem.rb +32 -32
  170. data/lib/solargraph/type_checker/rules.rb +84 -62
  171. data/lib/solargraph/type_checker.rb +814 -672
  172. data/lib/solargraph/version.rb +5 -5
  173. data/lib/solargraph/views/_method.erb +10 -10
  174. data/lib/solargraph/views/_namespace.erb +3 -3
  175. data/lib/solargraph/views/document.erb +10 -10
  176. data/lib/solargraph/workspace/config.rb +255 -239
  177. data/lib/solargraph/workspace/require_paths.rb +97 -0
  178. data/lib/solargraph/workspace.rb +220 -239
  179. data/lib/solargraph/yard_map/helpers.rb +44 -16
  180. data/lib/solargraph/yard_map/mapper/to_constant.rb +7 -5
  181. data/lib/solargraph/yard_map/mapper/to_method.rb +130 -94
  182. data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -28
  183. data/lib/solargraph/yard_map/mapper.rb +79 -78
  184. data/lib/solargraph/yard_map/to_method.rb +89 -86
  185. data/lib/solargraph/yardoc.rb +87 -52
  186. data/lib/solargraph.rb +105 -72
  187. data/rbs/fills/bundler/0/bundler.rbs +4271 -0
  188. data/rbs/fills/open3/0/open3.rbs +172 -0
  189. data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
  190. data/rbs/fills/rubygems/0/errors.rbs +364 -0
  191. data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
  192. data/rbs/fills/rubygems/0/specification.rbs +1753 -0
  193. data/rbs/fills/tuple/tuple.rbs +149 -0
  194. data/rbs/shims/ast/0/node.rbs +5 -0
  195. data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
  196. data/rbs/shims/ast/2.4/ast.rbs +73 -0
  197. data/rbs/shims/parser/3.2.0.1/builders/default.rbs +195 -0
  198. data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
  199. data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
  200. data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
  201. data/rbs/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
  202. data/rbs/shims/thor/1.2.0.1/manifest.yaml +7 -0
  203. data/rbs/shims/thor/1.2.0.1/thor.rbs +17 -0
  204. data/rbs_collection.yaml +19 -0
  205. data/solargraph.gemspec +27 -5
  206. metadata +215 -18
  207. data/lib/.rubocop.yml +0 -22
  208. data/lib/solargraph/cache.rb +0 -77
  209. data/lib/solargraph/parser/node_methods.rb +0 -83
@@ -12,7 +12,8 @@ module Solargraph
12
12
  closure: region.closure,
13
13
  name: node.children[0].children[0].to_s,
14
14
  original: node.children[1].children[0].to_s,
15
- scope: region.scope || :instance
15
+ scope: region.scope || :instance,
16
+ source: :parser
16
17
  )
17
18
  process_children
18
19
  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 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,57 +1,59 @@
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
- )
26
- callable.parameters.push locals.last
27
- end
28
- end
29
- end
30
- process_children
31
- end
32
-
33
- private
34
-
35
- # @param callable [Pin::Callable]
36
- # @return [void]
37
- def forward(callable)
38
- loc = get_node_location(node)
39
- locals.push Solargraph::Pin::Parameter.new(
40
- location: loc,
41
- closure: callable,
42
- presence: region.closure.location.range,
43
- decl: get_decl(node)
44
- )
45
- callable.parameters.push locals.last
46
- end
47
-
48
- # @param node [AST::Node]
49
- # @return [Symbol]
50
- def get_decl node
51
- node.type
52
- end
53
- end
54
- end
55
- end
56
- end
57
- 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
+ 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,15 +1,15 @@
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
+ process_children
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,43 +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
- )
18
- else
19
- region.closure
20
- end
21
- pins.push Solargraph::Pin::Block.new(
22
- location: location,
23
- closure: parent,
24
- node: node,
25
- receiver: node.children[0],
26
- comments: comments_for(node),
27
- scope: region.scope || region.closure.context.scope
28
- )
29
- process_children region.update(closure: pins.last)
30
- end
31
-
32
- private
33
-
34
- def other_class_eval?
35
- node.children[0].type == :send &&
36
- node.children[0].children[1] == :class_eval &&
37
- [:cbase, :const].include?(node.children[0].children[0]&.type)
38
- end
39
- end
40
- end
41
- end
42
- end
43
- 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
+ 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
@@ -13,7 +13,8 @@ module Solargraph
13
13
  closure: region.closure,
14
14
  name: const_name,
15
15
  comments: comments_for(node),
16
- assignment: node.children[2]
16
+ assignment: node.children[2],
17
+ source: :parser
17
18
  )
18
19
  process_children
19
20
  end
@@ -12,7 +12,8 @@ module Solargraph
12
12
  closure: region.closure,
13
13
  name: node.children[0].to_s,
14
14
  comments: comments_for(node),
15
- assignment: node.children[1]
15
+ assignment: node.children[1],
16
+ source: :parser
16
17
  )
17
18
  process_children
18
19
  end
@@ -1,50 +1,53 @@
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
- )
20
- if region.visibility == :module_function
21
- pins.push Solargraph::Pin::Method.new(
22
- location: methpin.location,
23
- closure: methpin.closure,
24
- name: methpin.name,
25
- comments: methpin.comments,
26
- scope: :class,
27
- visibility: :public,
28
- parameters: methpin.parameters,
29
- node: methpin.node
30
- )
31
- pins.push Solargraph::Pin::Method.new(
32
- location: methpin.location,
33
- closure: methpin.closure,
34
- name: methpin.name,
35
- comments: methpin.comments,
36
- scope: :instance,
37
- visibility: :private,
38
- parameters: methpin.parameters,
39
- node: methpin.node
40
- )
41
- else
42
- pins.push methpin
43
- end
44
- process_children region.update(closure: methpin, scope: methpin.scope)
45
- end
46
- end
47
- end
48
- end
49
- end
50
- 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
+ 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
@@ -25,7 +25,8 @@ module Solargraph
25
25
  comments: comments_for(node),
26
26
  scope: :class,
27
27
  visibility: s_visi,
28
- node: node
28
+ node: node,
29
+ source: :parser,
29
30
  )
30
31
  process_children region.update(closure: pins.last, scope: :class)
31
32
  end
@@ -12,7 +12,8 @@ module Solargraph
12
12
  closure: region.closure,
13
13
  name: node.children[0].to_s,
14
14
  comments: comments_for(node),
15
- assignment: node.children[1]
15
+ assignment: node.children[1],
16
+ source: :parser
16
17
  )
17
18
  process_children
18
19
  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 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,38 +1,40 @@
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
- )
19
- if region.visibility == :module_function
20
- here = get_node_start_position(node)
21
- named_path = named_path_pin(here)
22
- if named_path.is_a?(Pin::Method)
23
- pins.push Solargraph::Pin::InstanceVariable.new(
24
- location: loc,
25
- closure: Pin::Namespace.new(type: :module, closure: region.closure.closure, name: region.closure.name),
26
- name: node.children[0].to_s,
27
- comments: comments_for(node),
28
- assignment: node.children[1]
29
- )
30
- end
31
- end
32
- process_children
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 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,28 +1,29 @@
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
- )
22
- process_children
23
- end
24
- end
25
- end
26
- end
27
- end
28
- 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
+ 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