solargraph 0.44.2 → 0.46.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 (246) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rspec.yml +41 -0
  3. data/.gitignore +9 -9
  4. data/.rspec +2 -2
  5. data/.travis.yml +19 -19
  6. data/CHANGELOG.md +1115 -1088
  7. data/Gemfile +0 -0
  8. data/LICENSE +0 -0
  9. data/README.md +128 -120
  10. data/Rakefile +0 -0
  11. data/SPONSORS.md +18 -15
  12. data/bin/solargraph +0 -0
  13. data/lib/solargraph/api_map/bundler_methods.rb +22 -22
  14. data/lib/solargraph/api_map/cache.rb +70 -70
  15. data/lib/solargraph/api_map/source_to_yard.rb +81 -81
  16. data/lib/solargraph/api_map/store.rb +256 -256
  17. data/lib/solargraph/api_map.rb +686 -681
  18. data/lib/solargraph/bench.rb +27 -27
  19. data/lib/solargraph/compat.rb +37 -37
  20. data/lib/solargraph/complex_type/type_methods.rb +130 -130
  21. data/lib/solargraph/complex_type/unique_type.rb +75 -75
  22. data/lib/solargraph/complex_type.rb +221 -221
  23. data/lib/solargraph/convention/base.rb +33 -33
  24. data/lib/solargraph/convention/gemfile.rb +15 -15
  25. data/lib/solargraph/convention/gemspec.rb +22 -22
  26. data/lib/solargraph/convention/rspec.rb +30 -21
  27. data/lib/solargraph/convention.rb +47 -47
  28. data/lib/solargraph/converters/dd.rb +12 -12
  29. data/lib/solargraph/converters/dl.rb +12 -12
  30. data/lib/solargraph/converters/dt.rb +12 -12
  31. data/lib/solargraph/converters/misc.rb +1 -1
  32. data/lib/solargraph/diagnostics/base.rb +29 -29
  33. data/lib/solargraph/diagnostics/require_not_found.rb +53 -37
  34. data/lib/solargraph/diagnostics/rubocop.rb +98 -98
  35. data/lib/solargraph/diagnostics/rubocop_helpers.rb +63 -63
  36. data/lib/solargraph/diagnostics/severities.rb +15 -15
  37. data/lib/solargraph/diagnostics/type_check.rb +54 -54
  38. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  39. data/lib/solargraph/diagnostics.rb +55 -55
  40. data/lib/solargraph/documentor.rb +76 -76
  41. data/lib/solargraph/environ.rb +45 -45
  42. data/lib/solargraph/language_server/completion_item_kinds.rb +35 -35
  43. data/lib/solargraph/language_server/error_codes.rb +20 -20
  44. data/lib/solargraph/language_server/host/cataloger.rb +56 -56
  45. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  46. data/lib/solargraph/language_server/host/dispatch.rb +111 -111
  47. data/lib/solargraph/language_server/host/message_worker.rb +59 -59
  48. data/lib/solargraph/language_server/host/sources.rb +156 -156
  49. data/lib/solargraph/language_server/host.rb +865 -865
  50. data/lib/solargraph/language_server/message/base.rb +89 -89
  51. data/lib/solargraph/language_server/message/cancel_request.rb +13 -13
  52. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  53. data/lib/solargraph/language_server/message/client.rb +11 -11
  54. data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -58
  55. data/lib/solargraph/language_server/message/completion_item.rb +11 -11
  56. data/lib/solargraph/language_server/message/exit_notification.rb +13 -13
  57. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +100 -100
  58. data/lib/solargraph/language_server/message/extended/document.rb +20 -20
  59. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  60. data/lib/solargraph/language_server/message/extended/download_core.rb +23 -23
  61. data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
  62. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  63. data/lib/solargraph/language_server/message/extended.rb +21 -21
  64. data/lib/solargraph/language_server/message/initialize.rb +162 -162
  65. data/lib/solargraph/language_server/message/initialized.rb +27 -27
  66. data/lib/solargraph/language_server/message/method_not_found.rb +16 -16
  67. data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -14
  68. data/lib/solargraph/language_server/message/shutdown.rb +13 -13
  69. data/lib/solargraph/language_server/message/text_document/base.rb +19 -19
  70. data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -17
  71. data/lib/solargraph/language_server/message/text_document/completion.rb +59 -59
  72. data/lib/solargraph/language_server/message/text_document/definition.rb +38 -38
  73. data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -15
  74. data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -15
  75. data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -15
  76. data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -17
  77. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  78. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +23 -23
  79. data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -26
  80. data/lib/solargraph/language_server/message/text_document/formatting.rb +126 -126
  81. data/lib/solargraph/language_server/message/text_document/hover.rb +54 -44
  82. data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -34
  83. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  84. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  85. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  86. data/lib/solargraph/language_server/message/text_document/signature_help.rb +29 -29
  87. data/lib/solargraph/language_server/message/text_document.rb +28 -28
  88. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +30 -30
  89. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +33 -33
  90. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
  91. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  92. data/lib/solargraph/language_server/message/workspace.rb +14 -14
  93. data/lib/solargraph/language_server/message.rb +93 -93
  94. data/lib/solargraph/language_server/message_types.rb +14 -14
  95. data/lib/solargraph/language_server/request.rb +24 -24
  96. data/lib/solargraph/language_server/symbol_kinds.rb +36 -36
  97. data/lib/solargraph/language_server/transport/adapter.rb +53 -53
  98. data/lib/solargraph/language_server/transport/data_reader.rb +72 -72
  99. data/lib/solargraph/language_server/transport.rb +13 -13
  100. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  101. data/lib/solargraph/language_server.rb +19 -19
  102. data/lib/solargraph/library.rb +546 -546
  103. data/lib/solargraph/location.rb +37 -37
  104. data/lib/solargraph/logging.rb +27 -27
  105. data/lib/solargraph/page.rb +83 -83
  106. data/lib/solargraph/parser/comment_ripper.rb +52 -52
  107. data/lib/solargraph/parser/legacy/class_methods.rb +135 -140
  108. data/lib/solargraph/parser/legacy/flawed_builder.rb +16 -16
  109. data/lib/solargraph/parser/legacy/node_chainer.rb +148 -148
  110. data/lib/solargraph/parser/legacy/node_methods.rb +325 -325
  111. data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +23 -23
  112. data/lib/solargraph/parser/legacy/node_processors/args_node.rb +35 -35
  113. data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +15 -15
  114. data/lib/solargraph/parser/legacy/node_processors/block_node.rb +42 -42
  115. data/lib/solargraph/parser/legacy/node_processors/casgn_node.rb +25 -25
  116. data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +23 -23
  117. data/lib/solargraph/parser/legacy/node_processors/def_node.rb +63 -63
  118. data/lib/solargraph/parser/legacy/node_processors/defs_node.rb +36 -36
  119. data/lib/solargraph/parser/legacy/node_processors/gvasgn_node.rb +23 -23
  120. data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +38 -38
  121. data/lib/solargraph/parser/legacy/node_processors/lvasgn_node.rb +28 -28
  122. data/lib/solargraph/parser/legacy/node_processors/namespace_node.rb +39 -39
  123. data/lib/solargraph/parser/legacy/node_processors/orasgn_node.rb +16 -16
  124. data/lib/solargraph/parser/legacy/node_processors/resbody_node.rb +36 -36
  125. data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +21 -21
  126. data/lib/solargraph/parser/legacy/node_processors/send_node.rb +257 -257
  127. data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +18 -18
  128. data/lib/solargraph/parser/legacy/node_processors.rb +54 -54
  129. data/lib/solargraph/parser/legacy.rb +12 -12
  130. data/lib/solargraph/parser/node_methods.rb +43 -43
  131. data/lib/solargraph/parser/node_processor/base.rb +77 -77
  132. data/lib/solargraph/parser/node_processor.rb +43 -43
  133. data/lib/solargraph/parser/region.rb +66 -66
  134. data/lib/solargraph/parser/rubyvm/class_methods.rb +144 -155
  135. data/lib/solargraph/parser/rubyvm/node_chainer.rb +160 -160
  136. data/lib/solargraph/parser/rubyvm/node_methods.rb +315 -315
  137. data/lib/solargraph/parser/rubyvm/node_processors/alias_node.rb +23 -23
  138. data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +85 -85
  139. data/lib/solargraph/parser/rubyvm/node_processors/begin_node.rb +15 -15
  140. data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +42 -42
  141. data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +22 -22
  142. data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +23 -23
  143. data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +63 -64
  144. data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +57 -57
  145. data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +23 -23
  146. data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +38 -38
  147. data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +39 -39
  148. data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +20 -20
  149. data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +27 -27
  150. data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +39 -39
  151. data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +26 -26
  152. data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +15 -15
  153. data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +45 -45
  154. data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +21 -21
  155. data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +15 -15
  156. data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +277 -277
  157. data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +18 -18
  158. data/lib/solargraph/parser/rubyvm/node_processors.rb +63 -62
  159. data/lib/solargraph/parser/rubyvm.rb +40 -40
  160. data/lib/solargraph/parser/snippet.rb +13 -13
  161. data/lib/solargraph/parser.rb +26 -26
  162. data/lib/solargraph/pin/base.rb +296 -296
  163. data/lib/solargraph/pin/base_variable.rb +84 -84
  164. data/lib/solargraph/pin/block.rb +72 -72
  165. data/lib/solargraph/pin/class_variable.rb +8 -8
  166. data/lib/solargraph/pin/closure.rb +37 -37
  167. data/lib/solargraph/pin/common.rb +70 -70
  168. data/lib/solargraph/pin/constant.rb +43 -43
  169. data/lib/solargraph/pin/conversions.rb +96 -96
  170. data/lib/solargraph/pin/documenting.rb +105 -105
  171. data/lib/solargraph/pin/duck_method.rb +16 -16
  172. data/lib/solargraph/pin/global_variable.rb +8 -8
  173. data/lib/solargraph/pin/instance_variable.rb +30 -30
  174. data/lib/solargraph/pin/keyword.rb +15 -15
  175. data/lib/solargraph/pin/keyword_param.rb +8 -8
  176. data/lib/solargraph/pin/local_variable.rb +55 -55
  177. data/lib/solargraph/pin/method.rb +245 -245
  178. data/lib/solargraph/pin/method_alias.rb +31 -31
  179. data/lib/solargraph/pin/namespace.rb +91 -91
  180. data/lib/solargraph/pin/parameter.rb +201 -206
  181. data/lib/solargraph/pin/proxy_type.rb +29 -29
  182. data/lib/solargraph/pin/reference/extend.rb +10 -10
  183. data/lib/solargraph/pin/reference/include.rb +10 -10
  184. data/lib/solargraph/pin/reference/override.rb +29 -29
  185. data/lib/solargraph/pin/reference/prepend.rb +10 -10
  186. data/lib/solargraph/pin/reference/require.rb +14 -14
  187. data/lib/solargraph/pin/reference/superclass.rb +10 -10
  188. data/lib/solargraph/pin/reference.rb +14 -14
  189. data/lib/solargraph/pin/search.rb +56 -0
  190. data/lib/solargraph/pin/singleton.rb +11 -11
  191. data/lib/solargraph/pin/symbol.rb +47 -47
  192. data/lib/solargraph/pin.rb +37 -36
  193. data/lib/solargraph/position.rb +100 -100
  194. data/lib/solargraph/range.rb +95 -95
  195. data/lib/solargraph/server_methods.rb +16 -16
  196. data/lib/solargraph/shell.rb +226 -226
  197. data/lib/solargraph/source/chain/block_variable.rb +13 -13
  198. data/lib/solargraph/source/chain/call.rb +204 -204
  199. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  200. data/lib/solargraph/source/chain/constant.rb +75 -75
  201. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  202. data/lib/solargraph/source/chain/hash.rb +28 -28
  203. data/lib/solargraph/source/chain/head.rb +19 -19
  204. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  205. data/lib/solargraph/source/chain/link.rb +71 -71
  206. data/lib/solargraph/source/chain/literal.rb +23 -23
  207. data/lib/solargraph/source/chain/or.rb +23 -23
  208. data/lib/solargraph/source/chain/q_call.rb +11 -11
  209. data/lib/solargraph/source/chain/variable.rb +13 -13
  210. data/lib/solargraph/source/chain/z_super.rb +30 -30
  211. data/lib/solargraph/source/chain.rb +164 -164
  212. data/lib/solargraph/source/change.rb +79 -79
  213. data/lib/solargraph/source/cursor.rb +164 -164
  214. data/lib/solargraph/source/source_chainer.rb +191 -191
  215. data/lib/solargraph/source/updater.rb +54 -54
  216. data/lib/solargraph/source.rb +522 -522
  217. data/lib/solargraph/source_map/clip.rb +224 -224
  218. data/lib/solargraph/source_map/completion.rb +23 -23
  219. data/lib/solargraph/source_map/mapper.rb +212 -212
  220. data/lib/solargraph/source_map.rb +180 -189
  221. data/lib/solargraph/type_checker/checks.rb +99 -99
  222. data/lib/solargraph/type_checker/param_def.rb +35 -35
  223. data/lib/solargraph/type_checker/problem.rb +32 -32
  224. data/lib/solargraph/type_checker/rules.rb +57 -57
  225. data/lib/solargraph/type_checker.rb +543 -510
  226. data/lib/solargraph/version.rb +5 -5
  227. data/lib/solargraph/views/environment.erb +58 -58
  228. data/lib/solargraph/workspace/config.rb +231 -231
  229. data/lib/solargraph/workspace.rb +215 -214
  230. data/lib/solargraph/yard_map/cache.rb +19 -19
  231. data/lib/solargraph/yard_map/core_docs.rb +170 -170
  232. data/lib/solargraph/yard_map/core_fills.rb +208 -203
  233. data/lib/solargraph/yard_map/core_gen.rb +76 -76
  234. data/lib/solargraph/yard_map/helpers.rb +16 -16
  235. data/lib/solargraph/yard_map/mapper/to_constant.rb +25 -25
  236. data/lib/solargraph/yard_map/mapper/to_method.rb +78 -78
  237. data/lib/solargraph/yard_map/mapper/to_namespace.rb +27 -27
  238. data/lib/solargraph/yard_map/mapper.rb +77 -77
  239. data/lib/solargraph/yard_map/rdoc_to_yard.rb +140 -140
  240. data/lib/solargraph/yard_map/stdlib_fills.rb +43 -43
  241. data/lib/solargraph/yard_map/to_method.rb +79 -79
  242. data/lib/solargraph/yard_map.rb +460 -443
  243. data/lib/solargraph.rb +69 -69
  244. data/lib/yard-solargraph.rb +33 -33
  245. data/solargraph.gemspec +0 -0
  246. metadata +14 -12
@@ -1,84 +1,84 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class BaseVariable < Base
6
- include Solargraph::Parser::NodeMethods
7
- # include Solargraph::Source::NodeMethods
8
-
9
- # @return [Parser::AST::Node, nil]
10
- attr_reader :assignment
11
-
12
- # @param assignment [Parser::AST::Node, nil]
13
- def initialize assignment: nil, **splat
14
- super(**splat)
15
- @assignment = assignment
16
- end
17
-
18
- def completion_item_kind
19
- Solargraph::LanguageServer::CompletionItemKinds::VARIABLE
20
- end
21
-
22
- # @return [Integer]
23
- def symbol_kind
24
- Solargraph::LanguageServer::SymbolKinds::VARIABLE
25
- end
26
-
27
- def return_type
28
- @return_type ||= generate_complex_type
29
- end
30
-
31
- def nil_assignment?
32
- return_type.nil?
33
- end
34
-
35
- def variable?
36
- true
37
- end
38
-
39
- def probe api_map
40
- return ComplexType::UNDEFINED if @assignment.nil?
41
- types = []
42
- returns_from(@assignment).each do |node|
43
- # Nil nodes may not have a location
44
- if node.nil? || node.type == :NIL || node.type == :nil
45
- types.push ComplexType::NIL
46
- else
47
- rng = Range.from_node(node)
48
- next if rng.nil?
49
- pos = rng.ending
50
- clip = api_map.clip_at(location.filename, pos)
51
- # Use the return node for inference. The clip might infer from the
52
- # first node in a method call instead of the entire call.
53
- chain = Parser.chain(node, nil, clip.in_block?)
54
- result = chain.infer(api_map, closure, clip.locals)
55
- types.push result unless result.undefined?
56
- end
57
- end
58
- return ComplexType::UNDEFINED if types.empty?
59
- ComplexType.try_parse(*types.map(&:tag))
60
- end
61
-
62
- def == other
63
- return false unless super
64
- assignment == other.assignment
65
- end
66
-
67
- def try_merge! pin
68
- return false unless super
69
- @assignment = pin.assignment
70
- @return_type = pin.return_type
71
- true
72
- end
73
-
74
- private
75
-
76
- # @return [ComplexType]
77
- def generate_complex_type
78
- tag = docstring.tag(:type)
79
- return ComplexType.try_parse(*tag.types) unless tag.nil? || tag.types.nil? || tag.types.empty?
80
- ComplexType.new
81
- end
82
- end
83
- end
84
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class BaseVariable < Base
6
+ include Solargraph::Parser::NodeMethods
7
+ # include Solargraph::Source::NodeMethods
8
+
9
+ # @return [Parser::AST::Node, nil]
10
+ attr_reader :assignment
11
+
12
+ # @param assignment [Parser::AST::Node, nil]
13
+ def initialize assignment: nil, **splat
14
+ super(**splat)
15
+ @assignment = assignment
16
+ end
17
+
18
+ def completion_item_kind
19
+ Solargraph::LanguageServer::CompletionItemKinds::VARIABLE
20
+ end
21
+
22
+ # @return [Integer]
23
+ def symbol_kind
24
+ Solargraph::LanguageServer::SymbolKinds::VARIABLE
25
+ end
26
+
27
+ def return_type
28
+ @return_type ||= generate_complex_type
29
+ end
30
+
31
+ def nil_assignment?
32
+ return_type.nil?
33
+ end
34
+
35
+ def variable?
36
+ true
37
+ end
38
+
39
+ def probe api_map
40
+ return ComplexType::UNDEFINED if @assignment.nil?
41
+ types = []
42
+ returns_from(@assignment).each do |node|
43
+ # Nil nodes may not have a location
44
+ if node.nil? || node.type == :NIL || node.type == :nil
45
+ types.push ComplexType::NIL
46
+ else
47
+ rng = Range.from_node(node)
48
+ next if rng.nil?
49
+ pos = rng.ending
50
+ clip = api_map.clip_at(location.filename, pos)
51
+ # Use the return node for inference. The clip might infer from the
52
+ # first node in a method call instead of the entire call.
53
+ chain = Parser.chain(node, nil, clip.in_block?)
54
+ result = chain.infer(api_map, closure, clip.locals)
55
+ types.push result unless result.undefined?
56
+ end
57
+ end
58
+ return ComplexType::UNDEFINED if types.empty?
59
+ ComplexType.try_parse(*types.map(&:tag))
60
+ end
61
+
62
+ def == other
63
+ return false unless super
64
+ assignment == other.assignment
65
+ end
66
+
67
+ def try_merge! pin
68
+ return false unless super
69
+ @assignment = pin.assignment
70
+ @return_type = pin.return_type
71
+ true
72
+ end
73
+
74
+ private
75
+
76
+ # @return [ComplexType]
77
+ def generate_complex_type
78
+ tag = docstring.tag(:type)
79
+ return ComplexType.try_parse(*tag.types) unless tag.nil? || tag.types.nil? || tag.types.empty?
80
+ ComplexType.new
81
+ end
82
+ end
83
+ end
84
+ end
@@ -1,72 +1,72 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Block < Closure
6
- # The signature of the method that receives this block.
7
- #
8
- # @return [Parser::AST::Node]
9
- attr_reader :receiver
10
-
11
- def initialize receiver: nil, args: [], context: nil, **splat
12
- super(**splat)
13
- @receiver = receiver
14
- @context = context
15
- @parameters = args
16
- end
17
-
18
- # @param api_map [ApiMap]
19
- # @return [void]
20
- def rebind api_map
21
- @binder ||= binder_or_nil(api_map)
22
- end
23
-
24
- def binder
25
- @binder || closure.binder
26
- end
27
-
28
- # @return [Array<String>]
29
- def parameters
30
- @parameters ||= []
31
- end
32
-
33
- # @return [Array<String>]
34
- def parameter_names
35
- @parameter_names ||= parameters.map(&:name)
36
- end
37
-
38
- private
39
-
40
- # @param api_map [ApiMap]
41
- # @return [ComplexType, nil]
42
- def binder_or_nil api_map
43
- return nil unless receiver
44
- word = receiver.children.find { |c| c.is_a?(::Symbol) }.to_s
45
- return nil unless api_map.rebindable_method_names.include?(word)
46
- chain = Parser.chain(receiver, location.filename)
47
- locals = api_map.source_map(location.filename).locals_at(location)
48
- links_last_word = chain.links.last.word
49
- if %w[instance_eval instance_exec class_eval class_exec module_eval module_exec].include?(links_last_word)
50
- return chain.base.infer(api_map, self, locals)
51
- end
52
- if 'define_method' == links_last_word and chain.define(api_map, self, locals).first&.path == 'Module#define_method' # change class type to instance type
53
- if chain.links.size > 1 # Class.define_method
54
- ty = chain.base.infer(api_map, self, locals)
55
- return Solargraph::ComplexType.parse(ty.namespace)
56
- else # define_method without self
57
- return Solargraph::ComplexType.parse(closure.binder.namespace)
58
- end
59
- end
60
- # other case without early return, read block yieldself tags
61
- receiver_pin = chain.define(api_map, self, locals).first
62
- if receiver_pin && receiver_pin.docstring
63
- ys = receiver_pin.docstring.tag(:yieldself)
64
- if ys && ys.types && !ys.types.empty?
65
- return ComplexType.try_parse(*ys.types).qualify(api_map, receiver_pin.context.namespace)
66
- end
67
- end
68
- nil
69
- end
70
- end
71
- end
72
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Block < Closure
6
+ # The signature of the method that receives this block.
7
+ #
8
+ # @return [Parser::AST::Node]
9
+ attr_reader :receiver
10
+
11
+ def initialize receiver: nil, args: [], context: nil, **splat
12
+ super(**splat)
13
+ @receiver = receiver
14
+ @context = context
15
+ @parameters = args
16
+ end
17
+
18
+ # @param api_map [ApiMap]
19
+ # @return [void]
20
+ def rebind api_map
21
+ @binder ||= binder_or_nil(api_map)
22
+ end
23
+
24
+ def binder
25
+ @binder || closure.binder
26
+ end
27
+
28
+ # @return [Array<String>]
29
+ def parameters
30
+ @parameters ||= []
31
+ end
32
+
33
+ # @return [Array<String>]
34
+ def parameter_names
35
+ @parameter_names ||= parameters.map(&:name)
36
+ end
37
+
38
+ private
39
+
40
+ # @param api_map [ApiMap]
41
+ # @return [ComplexType, nil]
42
+ def binder_or_nil api_map
43
+ return nil unless receiver
44
+ word = receiver.children.find { |c| c.is_a?(::Symbol) }.to_s
45
+ return nil unless api_map.rebindable_method_names.include?(word)
46
+ chain = Parser.chain(receiver, location.filename)
47
+ locals = api_map.source_map(location.filename).locals_at(location)
48
+ links_last_word = chain.links.last.word
49
+ if %w[instance_eval instance_exec class_eval class_exec module_eval module_exec].include?(links_last_word)
50
+ return chain.base.infer(api_map, self, locals)
51
+ end
52
+ if 'define_method' == links_last_word and chain.define(api_map, self, locals).first&.path == 'Module#define_method' # change class type to instance type
53
+ if chain.links.size > 1 # Class.define_method
54
+ ty = chain.base.infer(api_map, self, locals)
55
+ return Solargraph::ComplexType.parse(ty.namespace)
56
+ else # define_method without self
57
+ return Solargraph::ComplexType.parse(closure.binder.namespace)
58
+ end
59
+ end
60
+ # other case without early return, read block yieldself tags
61
+ receiver_pin = chain.define(api_map, self, locals).first
62
+ if receiver_pin && receiver_pin.docstring
63
+ ys = receiver_pin.docstring.tag(:yieldself)
64
+ if ys && ys.types && !ys.types.empty?
65
+ return ComplexType.try_parse(*ys.types).qualify(api_map, receiver_pin.context.namespace)
66
+ end
67
+ end
68
+ nil
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,8 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class ClassVariable < BaseVariable
6
- end
7
- end
8
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class ClassVariable < BaseVariable
6
+ end
7
+ end
8
+ end
@@ -1,37 +1,37 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Closure < Base
6
- # @return [::Symbol] :class or :instance
7
- attr_reader :scope
8
-
9
- def initialize scope: :class, **splat
10
- super(**splat)
11
- @scope = scope
12
- end
13
-
14
- def context
15
- @context ||= begin
16
- result = super
17
- if scope == :instance
18
- Solargraph::ComplexType.parse(result.namespace)
19
- else
20
- result
21
- end
22
- end
23
- end
24
-
25
- def binder
26
- @binder || context
27
- end
28
-
29
- # @return [Array<String>]
30
- def gates
31
- # @todo This check might not be necessary. There should always be a
32
- # root pin
33
- closure ? closure.gates : ['']
34
- end
35
- end
36
- end
37
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Closure < Base
6
+ # @return [::Symbol] :class or :instance
7
+ attr_reader :scope
8
+
9
+ def initialize scope: :class, **splat
10
+ super(**splat)
11
+ @scope = scope
12
+ end
13
+
14
+ def context
15
+ @context ||= begin
16
+ result = super
17
+ if scope == :instance
18
+ Solargraph::ComplexType.parse(result.namespace)
19
+ else
20
+ result
21
+ end
22
+ end
23
+ end
24
+
25
+ def binder
26
+ @binder || context
27
+ end
28
+
29
+ # @return [Array<String>]
30
+ def gates
31
+ # @todo This check might not be necessary. There should always be a
32
+ # root pin
33
+ closure ? closure.gates : ['']
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,70 +1,70 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- module Common
6
- # @return [Location]
7
- attr_reader :location
8
-
9
- # @return [Pin::Base, nil]
10
- attr_reader :closure
11
-
12
- # @return [String]
13
- def name
14
- @name ||= ''
15
- end
16
-
17
- # @return [ComplexType]
18
- def return_type
19
- @return_type ||= ComplexType::UNDEFINED
20
- end
21
-
22
- # @return [ComplexType]
23
- def context
24
- # Get the static context from the nearest namespace
25
- @context ||= find_context
26
- end
27
- alias full_context context
28
-
29
- # @return [String]
30
- def namespace
31
- context.namespace.to_s
32
- end
33
-
34
- # @return [ComplexType]
35
- def binder
36
- @binder || context
37
- end
38
-
39
- # @return [String]
40
- def comments
41
- @comments ||= ''
42
- end
43
-
44
- # @return [String]
45
- def path
46
- @path ||= name.empty? ? context.namespace : "#{context.namespace}::#{name}"
47
- end
48
-
49
- private
50
-
51
- # @return [ComplexType]
52
- def find_context
53
- here = closure
54
- until here.nil?
55
- if here.is_a?(Pin::Namespace)
56
- return here.return_type
57
- elsif here.is_a?(Pin::Method)
58
- if here.scope == :instance
59
- return ComplexType.try_parse(here.context.namespace)
60
- else
61
- return here.context
62
- end
63
- end
64
- here = here.closure
65
- end
66
- ComplexType::ROOT
67
- end
68
- end
69
- end
70
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ module Common
6
+ # @return [Location]
7
+ attr_reader :location
8
+
9
+ # @return [Pin::Base, nil]
10
+ attr_reader :closure
11
+
12
+ # @return [String]
13
+ def name
14
+ @name ||= ''
15
+ end
16
+
17
+ # @return [ComplexType]
18
+ def return_type
19
+ @return_type ||= ComplexType::UNDEFINED
20
+ end
21
+
22
+ # @return [ComplexType]
23
+ def context
24
+ # Get the static context from the nearest namespace
25
+ @context ||= find_context
26
+ end
27
+ alias full_context context
28
+
29
+ # @return [String]
30
+ def namespace
31
+ context.namespace.to_s
32
+ end
33
+
34
+ # @return [ComplexType]
35
+ def binder
36
+ @binder || context
37
+ end
38
+
39
+ # @return [String]
40
+ def comments
41
+ @comments ||= ''
42
+ end
43
+
44
+ # @return [String]
45
+ def path
46
+ @path ||= name.empty? ? context.namespace : "#{context.namespace}::#{name}"
47
+ end
48
+
49
+ private
50
+
51
+ # @return [ComplexType]
52
+ def find_context
53
+ here = closure
54
+ until here.nil?
55
+ if here.is_a?(Pin::Namespace)
56
+ return here.return_type
57
+ elsif here.is_a?(Pin::Method)
58
+ if here.scope == :instance
59
+ return ComplexType.try_parse(here.context.namespace)
60
+ else
61
+ return here.context
62
+ end
63
+ end
64
+ here = here.closure
65
+ end
66
+ ComplexType::ROOT
67
+ end
68
+ end
69
+ end
70
+ end
@@ -1,43 +1,43 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Constant < BaseVariable
6
- attr_reader :visibility
7
-
8
- def initialize visibility: :public, **splat
9
- super(**splat)
10
- @visibility = visibility
11
- end
12
-
13
- def return_type
14
- @return_type ||= generate_complex_type
15
- end
16
-
17
- def completion_item_kind
18
- Solargraph::LanguageServer::CompletionItemKinds::CONSTANT
19
- end
20
-
21
- # @return [Integer]
22
- def symbol_kind
23
- LanguageServer::SymbolKinds::CONSTANT
24
- end
25
-
26
- def path
27
- @path ||= context.namespace.to_s.empty? ? name : "#{context.namespace}::#{name}"
28
- end
29
-
30
- private
31
-
32
- # @return [ComplexType]
33
- def generate_complex_type
34
- tags = docstring.tags(:return).map(&:types).flatten.reject(&:nil?)
35
- if tags.empty?
36
- tags = docstring.tags(:type).map(&:types).flatten.reject(&:nil?)
37
- end
38
- return ComplexType::UNDEFINED if tags.empty?
39
- ComplexType.try_parse *tags
40
- end
41
- end
42
- end
43
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Constant < BaseVariable
6
+ attr_reader :visibility
7
+
8
+ def initialize visibility: :public, **splat
9
+ super(**splat)
10
+ @visibility = visibility
11
+ end
12
+
13
+ def return_type
14
+ @return_type ||= generate_complex_type
15
+ end
16
+
17
+ def completion_item_kind
18
+ Solargraph::LanguageServer::CompletionItemKinds::CONSTANT
19
+ end
20
+
21
+ # @return [Integer]
22
+ def symbol_kind
23
+ LanguageServer::SymbolKinds::CONSTANT
24
+ end
25
+
26
+ def path
27
+ @path ||= context.namespace.to_s.empty? ? name : "#{context.namespace}::#{name}"
28
+ end
29
+
30
+ private
31
+
32
+ # @return [ComplexType]
33
+ def generate_complex_type
34
+ tags = docstring.tags(:return).map(&:types).flatten.reject(&:nil?)
35
+ if tags.empty?
36
+ tags = docstring.tags(:type).map(&:types).flatten.reject(&:nil?)
37
+ end
38
+ return ComplexType::UNDEFINED if tags.empty?
39
+ ComplexType.try_parse *tags
40
+ end
41
+ end
42
+ end
43
+ end