solargraph 0.54.4 → 0.58.3

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 (238) 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 +185 -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 +143 -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 -241
  22. data/lib/solargraph/api_map.rb +945 -875
  23. data/lib/solargraph/bench.rb +45 -28
  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/gemfile.rb +15 -15
  33. data/lib/solargraph/convention/gemspec.rb +23 -22
  34. data/lib/solargraph/convention/rakefile.rb +17 -17
  35. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -0
  36. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -0
  37. data/lib/solargraph/convention/struct_definition.rb +164 -0
  38. data/lib/solargraph/convention.rb +78 -47
  39. data/lib/solargraph/converters/dd.rb +17 -17
  40. data/lib/solargraph/converters/dl.rb +15 -15
  41. data/lib/solargraph/converters/dt.rb +15 -15
  42. data/lib/solargraph/converters/misc.rb +1 -1
  43. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  44. data/lib/solargraph/diagnostics/rubocop.rb +118 -113
  45. data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -66
  46. data/lib/solargraph/diagnostics/type_check.rb +55 -55
  47. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  48. data/lib/solargraph/doc_map.rb +439 -188
  49. data/lib/solargraph/environ.rb +9 -2
  50. data/lib/solargraph/equality.rb +34 -33
  51. data/lib/solargraph/gem_pins.rb +98 -72
  52. data/lib/solargraph/language_server/error_codes.rb +20 -20
  53. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  54. data/lib/solargraph/language_server/host/dispatch.rb +130 -128
  55. data/lib/solargraph/language_server/host/message_worker.rb +112 -106
  56. data/lib/solargraph/language_server/host/sources.rb +99 -99
  57. data/lib/solargraph/language_server/host.rb +878 -861
  58. data/lib/solargraph/language_server/message/base.rb +97 -96
  59. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  60. data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
  61. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -112
  62. data/lib/solargraph/language_server/message/extended/document.rb +23 -20
  63. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  64. data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
  65. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  66. data/lib/solargraph/language_server/message/initialize.rb +191 -191
  67. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
  68. data/lib/solargraph/language_server/message/text_document/definition.rb +40 -38
  69. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  70. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
  71. data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -131
  72. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  73. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  74. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  75. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  76. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
  77. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -24
  78. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
  79. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
  80. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -24
  81. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  82. data/lib/solargraph/language_server/message.rb +94 -94
  83. data/lib/solargraph/language_server/progress.rb +8 -0
  84. data/lib/solargraph/language_server/request.rb +27 -24
  85. data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
  86. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  87. data/lib/solargraph/library.rb +683 -662
  88. data/lib/solargraph/location.rb +82 -58
  89. data/lib/solargraph/logging.rb +37 -27
  90. data/lib/solargraph/page.rb +92 -89
  91. data/lib/solargraph/parser/comment_ripper.rb +69 -56
  92. data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -0
  93. data/lib/solargraph/parser/node_processor/base.rb +92 -87
  94. data/lib/solargraph/parser/node_processor.rb +62 -45
  95. data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -157
  96. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -18
  97. data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -164
  98. data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -495
  99. data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +2 -1
  100. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -0
  101. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -57
  102. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
  103. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -43
  104. data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +2 -1
  105. data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +2 -1
  106. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -50
  107. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -36
  108. data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +2 -1
  109. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -0
  110. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -38
  111. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -28
  112. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -53
  113. data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +8 -7
  114. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -0
  115. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -16
  116. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -36
  117. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -42
  118. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -259
  119. data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +3 -1
  120. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -0
  121. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -0
  122. data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -56
  123. data/lib/solargraph/parser/parser_gem.rb +12 -12
  124. data/lib/solargraph/parser/region.rb +69 -66
  125. data/lib/solargraph/parser/snippet.rb +17 -15
  126. data/lib/solargraph/parser.rb +23 -22
  127. data/lib/solargraph/pin/base.rb +729 -378
  128. data/lib/solargraph/pin/base_variable.rb +126 -118
  129. data/lib/solargraph/pin/block.rb +104 -101
  130. data/lib/solargraph/pin/breakable.rb +9 -0
  131. data/lib/solargraph/pin/callable.rb +231 -147
  132. data/lib/solargraph/pin/closure.rb +72 -57
  133. data/lib/solargraph/pin/common.rb +79 -70
  134. data/lib/solargraph/pin/constant.rb +45 -43
  135. data/lib/solargraph/pin/conversions.rb +123 -123
  136. data/lib/solargraph/pin/delegated_method.rb +120 -101
  137. data/lib/solargraph/pin/documenting.rb +114 -98
  138. data/lib/solargraph/pin/instance_variable.rb +34 -34
  139. data/lib/solargraph/pin/keyword.rb +20 -15
  140. data/lib/solargraph/pin/local_variable.rb +75 -67
  141. data/lib/solargraph/pin/method.rb +672 -527
  142. data/lib/solargraph/pin/method_alias.rb +34 -31
  143. data/lib/solargraph/pin/namespace.rb +115 -107
  144. data/lib/solargraph/pin/parameter.rb +275 -212
  145. data/lib/solargraph/pin/proxy_type.rb +39 -29
  146. data/lib/solargraph/pin/reference/override.rb +47 -29
  147. data/lib/solargraph/pin/reference/require.rb +2 -2
  148. data/lib/solargraph/pin/reference/superclass.rb +15 -10
  149. data/lib/solargraph/pin/reference.rb +39 -22
  150. data/lib/solargraph/pin/search.rb +61 -56
  151. data/lib/solargraph/pin/signature.rb +61 -17
  152. data/lib/solargraph/pin/singleton.rb +1 -1
  153. data/lib/solargraph/pin/symbol.rb +53 -47
  154. data/lib/solargraph/pin/until.rb +18 -0
  155. data/lib/solargraph/pin/while.rb +18 -0
  156. data/lib/solargraph/pin.rb +44 -41
  157. data/lib/solargraph/pin_cache.rb +245 -0
  158. data/lib/solargraph/position.rb +132 -107
  159. data/lib/solargraph/range.rb +112 -98
  160. data/lib/solargraph/rbs_map/conversions.rb +823 -646
  161. data/lib/solargraph/rbs_map/core_fills.rb +84 -50
  162. data/lib/solargraph/rbs_map/core_map.rb +58 -28
  163. data/lib/solargraph/rbs_map/stdlib_map.rb +43 -33
  164. data/lib/solargraph/rbs_map.rb +163 -93
  165. data/lib/solargraph/server_methods.rb +16 -16
  166. data/lib/solargraph/shell.rb +363 -269
  167. data/lib/solargraph/source/chain/array.rb +37 -33
  168. data/lib/solargraph/source/chain/block_symbol.rb +1 -1
  169. data/lib/solargraph/source/chain/block_variable.rb +1 -1
  170. data/lib/solargraph/source/chain/call.rb +337 -303
  171. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  172. data/lib/solargraph/source/chain/constant.rb +26 -89
  173. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  174. data/lib/solargraph/source/chain/hash.rb +34 -33
  175. data/lib/solargraph/source/chain/head.rb +1 -1
  176. data/lib/solargraph/source/chain/if.rb +28 -28
  177. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  178. data/lib/solargraph/source/chain/link.rb +109 -98
  179. data/lib/solargraph/source/chain/literal.rb +48 -28
  180. data/lib/solargraph/source/chain/or.rb +23 -23
  181. data/lib/solargraph/source/chain/q_call.rb +11 -11
  182. data/lib/solargraph/source/chain/variable.rb +13 -13
  183. data/lib/solargraph/source/chain/z_super.rb +30 -30
  184. data/lib/solargraph/source/chain.rb +291 -252
  185. data/lib/solargraph/source/change.rb +82 -82
  186. data/lib/solargraph/source/cursor.rb +166 -167
  187. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  188. data/lib/solargraph/source/source_chainer.rb +194 -194
  189. data/lib/solargraph/source/updater.rb +55 -55
  190. data/lib/solargraph/source.rb +498 -495
  191. data/lib/solargraph/source_map/clip.rb +226 -232
  192. data/lib/solargraph/source_map/data.rb +34 -30
  193. data/lib/solargraph/source_map/mapper.rb +259 -255
  194. data/lib/solargraph/source_map.rb +212 -217
  195. data/lib/solargraph/type_checker/checks.rb +124 -120
  196. data/lib/solargraph/type_checker/param_def.rb +37 -35
  197. data/lib/solargraph/type_checker/problem.rb +32 -32
  198. data/lib/solargraph/type_checker/rules.rb +84 -62
  199. data/lib/solargraph/type_checker.rb +814 -672
  200. data/lib/solargraph/version.rb +5 -5
  201. data/lib/solargraph/views/_method.erb +10 -10
  202. data/lib/solargraph/views/_namespace.erb +3 -3
  203. data/lib/solargraph/views/document.erb +10 -10
  204. data/lib/solargraph/workspace/config.rb +255 -239
  205. data/lib/solargraph/workspace/require_paths.rb +97 -0
  206. data/lib/solargraph/workspace.rb +220 -239
  207. data/lib/solargraph/yard_map/helpers.rb +44 -16
  208. data/lib/solargraph/yard_map/mapper/to_constant.rb +7 -5
  209. data/lib/solargraph/yard_map/mapper/to_method.rb +130 -94
  210. data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -28
  211. data/lib/solargraph/yard_map/mapper.rb +79 -78
  212. data/lib/solargraph/yard_map/to_method.rb +89 -86
  213. data/lib/solargraph/yard_tags.rb +20 -20
  214. data/lib/solargraph/yardoc.rb +87 -52
  215. data/lib/solargraph.rb +105 -72
  216. data/rbs/fills/bundler/0/bundler.rbs +4271 -0
  217. data/rbs/fills/open3/0/open3.rbs +172 -0
  218. data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
  219. data/rbs/fills/rubygems/0/errors.rbs +364 -0
  220. data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
  221. data/rbs/fills/rubygems/0/specification.rbs +1753 -0
  222. data/rbs/fills/tuple/tuple.rbs +149 -0
  223. data/rbs/shims/ast/0/node.rbs +5 -0
  224. data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
  225. data/rbs/shims/ast/2.4/ast.rbs +73 -0
  226. data/rbs/shims/parser/3.2.0.1/builders/default.rbs +195 -0
  227. data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
  228. data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
  229. data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
  230. data/rbs/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
  231. data/rbs/shims/thor/1.2.0.1/manifest.yaml +7 -0
  232. data/rbs/shims/thor/1.2.0.1/thor.rbs +17 -0
  233. data/rbs_collection.yaml +19 -0
  234. data/solargraph.gemspec +27 -5
  235. metadata +215 -18
  236. data/lib/.rubocop.yml +0 -22
  237. data/lib/solargraph/cache.rb +0 -77
  238. data/lib/solargraph/parser/node_methods.rb +0 -83
@@ -1,10 +1,15 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Reference
6
- class Superclass < Reference
7
- end
8
- end
9
- end
10
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Reference
6
+ # A Superclass reference pin.
7
+ #
8
+ class Superclass < Reference
9
+ def reference_gates
10
+ @reference_gates ||= closure.gates - [closure.path]
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,22 +1,39 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Reference < Base
6
- autoload :Require, 'solargraph/pin/reference/require'
7
- autoload :Superclass, 'solargraph/pin/reference/superclass'
8
- autoload :Include, 'solargraph/pin/reference/include'
9
- autoload :Prepend, 'solargraph/pin/reference/prepend'
10
- autoload :Extend, 'solargraph/pin/reference/extend'
11
- autoload :Override, 'solargraph/pin/reference/override'
12
-
13
- attr_reader :generic_values
14
-
15
- # @param generic_values [Array<String>]
16
- def initialize generic_values: [], **splat
17
- super(**splat)
18
- @generic_values = generic_values
19
- end
20
- end
21
- end
22
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Reference < Base
6
+ autoload :Require, 'solargraph/pin/reference/require'
7
+ autoload :Superclass, 'solargraph/pin/reference/superclass'
8
+ autoload :Include, 'solargraph/pin/reference/include'
9
+ autoload :Prepend, 'solargraph/pin/reference/prepend'
10
+ autoload :Extend, 'solargraph/pin/reference/extend'
11
+ autoload :Override, 'solargraph/pin/reference/override'
12
+
13
+ attr_reader :generic_values
14
+
15
+ # @param generic_values [Array<String>]
16
+ def initialize generic_values: [], **splat
17
+ super(**splat)
18
+ @generic_values = generic_values
19
+ end
20
+
21
+ # @return [ComplexType]
22
+ def type
23
+ @type ||= ComplexType.try_parse(
24
+ name +
25
+ if generic_values&.length&.> 0
26
+ "<#{generic_values.join(', ')}>"
27
+ else
28
+ ''
29
+ end
30
+ )
31
+ end
32
+
33
+ # @return [Array<String>]
34
+ def reference_gates
35
+ closure.gates
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,56 +1,61 @@
1
- # frozen_string_literal: true
2
-
3
- require 'jaro_winkler'
4
-
5
- module Solargraph
6
- module Pin
7
- class Search
8
- class Result
9
- # @return [Float]
10
- attr_reader :match
11
-
12
- # @return [Pin::Base]
13
- attr_reader :pin
14
-
15
- def initialize match, pin
16
- @match = match
17
- @pin = pin
18
- end
19
- end
20
-
21
- # @param pins [::Array<Pin::Base>]
22
- # @param query [String]
23
- def initialize pins, query
24
- @pins = pins
25
- @query = query
26
- end
27
-
28
- # @return [::Array<Pin::Base>]
29
- def results
30
- @results ||= do_query
31
- end
32
-
33
- private
34
-
35
- # @return [::Array<Pin::Base>]
36
- def do_query
37
- return @pins if @query.nil? || @query.empty?
38
- @pins.map do |pin|
39
- match = [fuzzy_string_match(pin.path, @query), fuzzy_string_match(pin.name, @query)].max
40
- Result.new(match, pin) if match > 0.7
41
- end
42
- .compact
43
- .sort { |a, b| b.match <=> a.match }
44
- .map(&:pin)
45
- end
46
-
47
- # @param str1 [String]
48
- # @param str2 [String]
49
- # @return [Float]
50
- def fuzzy_string_match str1, str2
51
- return (1.0 + (str2.length.to_f / str1.length.to_f)) if str1.downcase.include?(str2.downcase)
52
- JaroWinkler.similarity(str1, str2, ignore_case: true)
53
- end
54
- end
55
- end
56
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'jaro_winkler'
4
+
5
+ module Solargraph
6
+ module Pin
7
+ class Search
8
+ class Result
9
+ # @return [Float]
10
+ attr_reader :match
11
+
12
+ # @return [Pin::Base]
13
+ attr_reader :pin
14
+
15
+ # @param match [Float] The match score for the pin
16
+ # @param pin [Pin::Base]
17
+ def initialize match, pin
18
+ @match = match
19
+ @pin = pin
20
+ end
21
+ end
22
+
23
+ # @param pins [::Array<Pin::Base>]
24
+ # @param query [String]
25
+ def initialize pins, query
26
+ @pins = pins
27
+ @query = query
28
+ end
29
+
30
+ # @return [::Array<Pin::Base>]
31
+ def results
32
+ @results ||= do_query
33
+ end
34
+
35
+ private
36
+
37
+ # @return [::Array<Pin::Base>]
38
+ def do_query
39
+ return @pins if @query.nil? || @query.empty?
40
+ @pins.map do |pin|
41
+ match = [fuzzy_string_match(pin.path, @query), fuzzy_string_match(pin.name, @query)].max
42
+ Result.new(match, pin) if match > 0.7
43
+ end
44
+ .compact
45
+ # @param a [self]
46
+ # @param b [self]
47
+ # @sg-ignore https://github.com/castwide/solargraph/pull/1050
48
+ .sort { |a, b| b.match <=> a.match }
49
+ .map(&:pin)
50
+ end
51
+
52
+ # @param str1 [String]
53
+ # @param str2 [String]
54
+ # @return [Float]
55
+ def fuzzy_string_match str1, str2
56
+ return 1.0 + (str2.length.to_f / str1.length.to_f) if str1.downcase.include?(str2.downcase)
57
+ JaroWinkler.similarity(str1, str2, ignore_case: true)
58
+ end
59
+ end
60
+ end
61
+ end
@@ -1,17 +1,61 @@
1
- module Solargraph
2
- module Pin
3
- class Signature < Callable
4
- def initialize **splat
5
- super(**splat)
6
- end
7
-
8
- def generics
9
- @generics ||= [].freeze
10
- end
11
-
12
- def identity
13
- @identity ||= "signature#{object_id}"
14
- end
15
- end
16
- end
17
- end
1
+ module Solargraph
2
+ module Pin
3
+ class Signature < Callable
4
+ # allow signature to be created before method pin, then set this
5
+ # to the method pin
6
+ attr_writer :closure
7
+
8
+ def initialize **splat
9
+ super(**splat)
10
+ end
11
+
12
+ def generics
13
+ @generics ||= [].freeze
14
+ end
15
+
16
+ def identity
17
+ @identity ||= "signature#{object_id}"
18
+ end
19
+
20
+ attr_writer :closure
21
+
22
+ def dodgy_return_type_source?
23
+ super || closure&.dodgy_return_type_source?
24
+ end
25
+
26
+ def type_location
27
+ super || closure&.type_location
28
+ end
29
+
30
+ def location
31
+ super || closure&.location
32
+ end
33
+
34
+ def typify api_map
35
+ if return_type.defined?
36
+ qualified = return_type.qualify(api_map, closure.namespace)
37
+ logger.debug { "Signature#typify(self=#{self}) => #{qualified.rooted_tags.inspect}" }
38
+ return qualified
39
+ end
40
+ return ComplexType::UNDEFINED if closure.nil?
41
+ return ComplexType::UNDEFINED unless closure.is_a?(Pin::Method)
42
+ # @sg-ignore need is_a? support
43
+ # @type [Array<Pin::Method>]
44
+ method_stack = closure.rest_of_stack api_map
45
+ logger.debug { "Signature#typify(self=#{self}) - method_stack: #{method_stack}" }
46
+ method_stack.each do |pin|
47
+ sig = pin.signatures.find { |s| s.arity == self.arity }
48
+ next unless sig
49
+ unless sig.return_type.undefined?
50
+ qualified = sig.return_type.qualify(api_map, closure.namespace)
51
+ logger.debug { "Signature#typify(self=#{self}) => #{qualified.rooted_tags.inspect}" }
52
+ return qualified
53
+ end
54
+ end
55
+ out = super
56
+ logger.debug { "Signature#typify(self=#{self}) => #{out}" }
57
+ out
58
+ end
59
+ end
60
+ end
61
+ end
@@ -3,7 +3,7 @@
3
3
  module Solargraph
4
4
  module Pin
5
5
  class Singleton < Closure
6
- def initialize name: '', location: nil, closure: nil
6
+ def initialize name: '', location: nil, closure: nil, **splat
7
7
  super
8
8
  end
9
9
  end
@@ -1,47 +1,53 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Symbol < Base
6
- # @param location [Solargraph::Location]
7
- # @param name [String]
8
- def initialize location, name
9
- super(location: location, name: name)
10
- # @name = name
11
- # @location = location
12
- end
13
-
14
- def namespace
15
- ''
16
- end
17
-
18
- def path
19
- ''
20
- end
21
-
22
- def completion_item_kind
23
- Solargraph::LanguageServer::CompletionItemKinds::KEYWORD
24
- end
25
-
26
- def comments
27
- ''
28
- end
29
-
30
- def return_type
31
- @return_type ||= Solargraph::ComplexType::SYMBOL
32
- end
33
-
34
- def directives
35
- []
36
- end
37
-
38
- def visibility
39
- :public
40
- end
41
-
42
- def deprecated?
43
- false
44
- end
45
- end
46
- end
47
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Symbol < Base
6
+ # @param location [Solargraph::Location]
7
+ # @param name [String]
8
+ def initialize(location, name, **kwargs)
9
+ # @sg-ignore "Unrecognized keyword argument kwargs to Solargraph::Pin::Base#initialize"
10
+ super(location: location, name: name, **kwargs)
11
+ # @name = name
12
+ # @location = location
13
+ end
14
+
15
+ def namespace
16
+ ''
17
+ end
18
+
19
+ def path
20
+ ''
21
+ end
22
+
23
+ def closure
24
+ @closure ||= Pin::ROOT_PIN
25
+ end
26
+
27
+ def completion_item_kind
28
+ Solargraph::LanguageServer::CompletionItemKinds::KEYWORD
29
+ end
30
+
31
+ def comments
32
+ ''
33
+ end
34
+
35
+ def return_type
36
+ @return_type ||= Solargraph::ComplexType::SYMBOL
37
+ end
38
+
39
+ def directives
40
+ []
41
+ end
42
+
43
+ # @return [::Symbol]
44
+ def visibility
45
+ :public
46
+ end
47
+
48
+ def deprecated?
49
+ false
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Until < Base
6
+ include Breakable
7
+
8
+ # @param receiver [Parser::AST::Node, nil]
9
+ # @param node [Parser::AST::Node, nil]
10
+ # @param context [ComplexType, nil]
11
+ # @param args [::Array<Parameter>]
12
+ def initialize node: nil, **splat
13
+ super(**splat)
14
+ @node = node
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class While < Base
6
+ include Breakable
7
+
8
+ # @param receiver [Parser::AST::Node, nil]
9
+ # @param node [Parser::AST::Node, nil]
10
+ # @param context [ComplexType, nil]
11
+ # @param args [::Array<Parameter>]
12
+ def initialize node: nil, **splat
13
+ super(**splat)
14
+ @node = node
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,41 +1,44 @@
1
- # frozen_string_literal: true
2
-
3
- require 'yard'
4
-
5
- module Solargraph
6
- # The namespace for Pins used in SourceMaps.
7
- #
8
- # Pins represent declarations, from gems, Sources, and the Ruby core.
9
- #
10
- module Pin
11
- autoload :Common, 'solargraph/pin/common'
12
- autoload :Conversions, 'solargraph/pin/conversions'
13
- autoload :Base, 'solargraph/pin/base'
14
- autoload :Method, 'solargraph/pin/method'
15
- autoload :Signature, 'solargraph/pin/signature'
16
- autoload :MethodAlias, 'solargraph/pin/method_alias'
17
- autoload :DelegatedMethod, 'solargraph/pin/delegated_method'
18
- autoload :BaseVariable, 'solargraph/pin/base_variable'
19
- autoload :InstanceVariable, 'solargraph/pin/instance_variable'
20
- autoload :ClassVariable, 'solargraph/pin/class_variable'
21
- autoload :LocalVariable, 'solargraph/pin/local_variable'
22
- autoload :GlobalVariable, 'solargraph/pin/global_variable'
23
- autoload :Constant, 'solargraph/pin/constant'
24
- autoload :Symbol, 'solargraph/pin/symbol'
25
- autoload :Closure, 'solargraph/pin/closure'
26
- autoload :Namespace, 'solargraph/pin/namespace'
27
- autoload :Keyword, 'solargraph/pin/keyword'
28
- autoload :Parameter, 'solargraph/pin/parameter'
29
- autoload :Reference, 'solargraph/pin/reference'
30
- autoload :Documenting, 'solargraph/pin/documenting'
31
- autoload :Block, 'solargraph/pin/block'
32
- autoload :ProxyType, 'solargraph/pin/proxy_type'
33
- autoload :DuckMethod, 'solargraph/pin/duck_method'
34
- autoload :Singleton, 'solargraph/pin/singleton'
35
- autoload :KeywordParam, 'solargraph/pin/keyword_param'
36
- autoload :Search, 'solargraph/pin/search'
37
- autoload :Callable, 'solargraph/pin/callable'
38
-
39
- ROOT_PIN = Pin::Namespace.new(type: :class, name: '', closure: nil)
40
- end
41
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'yard'
4
+
5
+ module Solargraph
6
+ # The namespace for Pins used in SourceMaps.
7
+ #
8
+ # Pins represent declarations, from gems, Sources, and the Ruby core.
9
+ #
10
+ module Pin
11
+ autoload :Common, 'solargraph/pin/common'
12
+ autoload :Conversions, 'solargraph/pin/conversions'
13
+ autoload :Base, 'solargraph/pin/base'
14
+ autoload :Method, 'solargraph/pin/method'
15
+ autoload :Signature, 'solargraph/pin/signature'
16
+ autoload :MethodAlias, 'solargraph/pin/method_alias'
17
+ autoload :DelegatedMethod, 'solargraph/pin/delegated_method'
18
+ autoload :BaseVariable, 'solargraph/pin/base_variable'
19
+ autoload :InstanceVariable, 'solargraph/pin/instance_variable'
20
+ autoload :ClassVariable, 'solargraph/pin/class_variable'
21
+ autoload :LocalVariable, 'solargraph/pin/local_variable'
22
+ autoload :GlobalVariable, 'solargraph/pin/global_variable'
23
+ autoload :Constant, 'solargraph/pin/constant'
24
+ autoload :Symbol, 'solargraph/pin/symbol'
25
+ autoload :Closure, 'solargraph/pin/closure'
26
+ autoload :Namespace, 'solargraph/pin/namespace'
27
+ autoload :Keyword, 'solargraph/pin/keyword'
28
+ autoload :Parameter, 'solargraph/pin/parameter'
29
+ autoload :Reference, 'solargraph/pin/reference'
30
+ autoload :Documenting, 'solargraph/pin/documenting'
31
+ autoload :Block, 'solargraph/pin/block'
32
+ autoload :ProxyType, 'solargraph/pin/proxy_type'
33
+ autoload :DuckMethod, 'solargraph/pin/duck_method'
34
+ autoload :Singleton, 'solargraph/pin/singleton'
35
+ autoload :KeywordParam, 'solargraph/pin/keyword_param'
36
+ autoload :Search, 'solargraph/pin/search'
37
+ autoload :Breakable, 'solargraph/pin/breakable'
38
+ autoload :Until, 'solargraph/pin/until'
39
+ autoload :While, 'solargraph/pin/while'
40
+ autoload :Callable, 'solargraph/pin/callable'
41
+
42
+ ROOT_PIN = Pin::Namespace.new(type: :class, name: '', closure: nil, source: :pin_rb)
43
+ end
44
+ end