solargraph 0.58.3 → 0.60.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 (238) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +3 -0
  3. data/.github/workflows/linting.yml +12 -5
  4. data/.github/workflows/plugins.yml +54 -34
  5. data/.github/workflows/rspec.yml +18 -28
  6. data/.github/workflows/typecheck.yml +6 -3
  7. data/.rubocop.yml +39 -6
  8. data/.rubocop_todo.yml +53 -966
  9. data/CHANGELOG.md +35 -0
  10. data/Gemfile +6 -1
  11. data/README.md +3 -3
  12. data/Rakefile +26 -23
  13. data/bin/solargraph +2 -1
  14. data/lib/solargraph/api_map/cache.rb +3 -3
  15. data/lib/solargraph/api_map/constants.rb +12 -3
  16. data/lib/solargraph/api_map/index.rb +42 -20
  17. data/lib/solargraph/api_map/source_to_yard.rb +22 -9
  18. data/lib/solargraph/api_map/store.rb +61 -36
  19. data/lib/solargraph/api_map.rb +192 -78
  20. data/lib/solargraph/bench.rb +2 -3
  21. data/lib/solargraph/complex_type/conformance.rb +176 -0
  22. data/lib/solargraph/complex_type/type_methods.rb +31 -18
  23. data/lib/solargraph/complex_type/unique_type.rb +225 -63
  24. data/lib/solargraph/complex_type.rb +177 -59
  25. data/lib/solargraph/convention/active_support_concern.rb +111 -111
  26. data/lib/solargraph/convention/base.rb +50 -50
  27. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +1 -1
  28. data/lib/solargraph/convention/data_definition/data_definition_node.rb +7 -5
  29. data/lib/solargraph/convention/data_definition.rb +5 -2
  30. data/lib/solargraph/convention/gemfile.rb +1 -1
  31. data/lib/solargraph/convention/gemspec.rb +1 -1
  32. data/lib/solargraph/convention/rakefile.rb +1 -1
  33. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +2 -1
  34. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +4 -3
  35. data/lib/solargraph/convention/struct_definition.rb +8 -4
  36. data/lib/solargraph/convention.rb +2 -2
  37. data/lib/solargraph/converters/dd.rb +2 -0
  38. data/lib/solargraph/converters/dl.rb +2 -0
  39. data/lib/solargraph/converters/dt.rb +2 -0
  40. data/lib/solargraph/converters/misc.rb +2 -0
  41. data/lib/solargraph/diagnostics/require_not_found.rb +1 -0
  42. data/lib/solargraph/diagnostics/rubocop.rb +11 -10
  43. data/lib/solargraph/diagnostics/rubocop_helpers.rb +5 -3
  44. data/lib/solargraph/diagnostics/type_check.rb +11 -10
  45. data/lib/solargraph/diagnostics/update_errors.rb +4 -8
  46. data/lib/solargraph/diagnostics.rb +55 -55
  47. data/lib/solargraph/doc_map.rb +39 -39
  48. data/lib/solargraph/environ.rb +52 -52
  49. data/lib/solargraph/equality.rb +4 -4
  50. data/lib/solargraph/gem_pins.rb +4 -15
  51. data/lib/solargraph/language_server/error_codes.rb +10 -10
  52. data/lib/solargraph/language_server/host/diagnoser.rb +1 -1
  53. data/lib/solargraph/language_server/host/dispatch.rb +3 -3
  54. data/lib/solargraph/language_server/host/message_worker.rb +4 -3
  55. data/lib/solargraph/language_server/host/sources.rb +2 -1
  56. data/lib/solargraph/language_server/host.rb +35 -28
  57. data/lib/solargraph/language_server/message/base.rb +1 -1
  58. data/lib/solargraph/language_server/message/client/register_capability.rb +1 -3
  59. data/lib/solargraph/language_server/message/completion_item/resolve.rb +6 -8
  60. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +12 -18
  61. data/lib/solargraph/language_server/message/extended/document.rb +1 -0
  62. data/lib/solargraph/language_server/message/extended/document_gems.rb +7 -7
  63. data/lib/solargraph/language_server/message/extended/download_core.rb +2 -1
  64. data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
  65. data/lib/solargraph/language_server/message/extended/search.rb +1 -1
  66. data/lib/solargraph/language_server/message/initialize.rb +20 -14
  67. data/lib/solargraph/language_server/message/initialized.rb +28 -28
  68. data/lib/solargraph/language_server/message/text_document/completion.rb +10 -8
  69. data/lib/solargraph/language_server/message/text_document/definition.rb +41 -32
  70. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +17 -10
  71. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -19
  72. data/lib/solargraph/language_server/message/text_document/formatting.rb +8 -6
  73. data/lib/solargraph/language_server/message/text_document/hover.rb +5 -5
  74. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +13 -6
  75. data/lib/solargraph/language_server/message/text_document/references.rb +17 -10
  76. data/lib/solargraph/language_server/message/text_document/rename.rb +20 -13
  77. data/lib/solargraph/language_server/message/text_document/signature_help.rb +3 -2
  78. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -17
  79. data/lib/solargraph/language_server/message/text_document.rb +28 -28
  80. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +34 -28
  81. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +38 -30
  82. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +23 -17
  83. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -17
  84. data/lib/solargraph/language_server/message.rb +1 -1
  85. data/lib/solargraph/language_server/progress.rb +143 -143
  86. data/lib/solargraph/language_server/request.rb +4 -2
  87. data/lib/solargraph/language_server/transport/adapter.rb +68 -68
  88. data/lib/solargraph/language_server/transport/data_reader.rb +11 -13
  89. data/lib/solargraph/language_server/uri_helpers.rb +2 -2
  90. data/lib/solargraph/language_server.rb +20 -20
  91. data/lib/solargraph/library.rb +57 -38
  92. data/lib/solargraph/location.rb +17 -14
  93. data/lib/solargraph/logging.rb +22 -4
  94. data/lib/solargraph/page.rb +1 -1
  95. data/lib/solargraph/parser/comment_ripper.rb +19 -4
  96. data/lib/solargraph/parser/flow_sensitive_typing.rb +324 -108
  97. data/lib/solargraph/parser/node_processor/base.rb +34 -4
  98. data/lib/solargraph/parser/node_processor.rb +8 -7
  99. data/lib/solargraph/parser/parser_gem/class_methods.rb +30 -14
  100. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +1 -1
  101. data/lib/solargraph/parser/parser_gem/node_chainer.rb +51 -25
  102. data/lib/solargraph/parser/parser_gem/node_methods.rb +222 -72
  103. data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +24 -24
  104. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +4 -4
  105. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +13 -11
  106. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +9 -0
  107. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +11 -12
  108. data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +36 -36
  109. data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +24 -24
  110. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +10 -3
  111. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +9 -8
  112. data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +24 -24
  113. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +36 -6
  114. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +5 -3
  115. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +1 -0
  116. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +3 -1
  117. data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +64 -40
  118. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +3 -3
  119. data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
  120. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +1 -1
  121. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +2 -1
  122. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +4 -5
  123. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +124 -113
  124. data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +20 -20
  125. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +1 -1
  126. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
  127. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +6 -2
  128. data/lib/solargraph/parser/parser_gem/node_processors.rb +4 -0
  129. data/lib/solargraph/parser/parser_gem.rb +2 -0
  130. data/lib/solargraph/parser/region.rb +9 -3
  131. data/lib/solargraph/parser/snippet.rb +3 -1
  132. data/lib/solargraph/parser.rb +2 -0
  133. data/lib/solargraph/pin/base.rb +156 -84
  134. data/lib/solargraph/pin/base_variable.rb +273 -24
  135. data/lib/solargraph/pin/block.rb +29 -6
  136. data/lib/solargraph/pin/breakable.rb +7 -1
  137. data/lib/solargraph/pin/callable.rb +67 -23
  138. data/lib/solargraph/pin/closure.rb +7 -10
  139. data/lib/solargraph/pin/common.rb +36 -6
  140. data/lib/solargraph/pin/compound_statement.rb +55 -0
  141. data/lib/solargraph/pin/constant.rb +3 -5
  142. data/lib/solargraph/pin/conversions.rb +10 -4
  143. data/lib/solargraph/pin/delegated_method.rb +19 -8
  144. data/lib/solargraph/pin/documenting.rb +4 -2
  145. data/lib/solargraph/pin/instance_variable.rb +5 -1
  146. data/lib/solargraph/pin/keyword.rb +0 -4
  147. data/lib/solargraph/pin/local_variable.rb +15 -59
  148. data/lib/solargraph/pin/method.rb +205 -111
  149. data/lib/solargraph/pin/method_alias.rb +8 -0
  150. data/lib/solargraph/pin/namespace.rb +19 -12
  151. data/lib/solargraph/pin/parameter.rb +102 -36
  152. data/lib/solargraph/pin/proxy_type.rb +4 -1
  153. data/lib/solargraph/pin/reference/override.rb +1 -1
  154. data/lib/solargraph/pin/reference/require.rb +14 -14
  155. data/lib/solargraph/pin/reference/superclass.rb +2 -0
  156. data/lib/solargraph/pin/reference/type_alias.rb +16 -0
  157. data/lib/solargraph/pin/reference.rb +20 -0
  158. data/lib/solargraph/pin/search.rb +8 -7
  159. data/lib/solargraph/pin/signature.rb +15 -12
  160. data/lib/solargraph/pin/singleton.rb +11 -11
  161. data/lib/solargraph/pin/symbol.rb +2 -1
  162. data/lib/solargraph/pin/until.rb +2 -4
  163. data/lib/solargraph/pin/while.rb +2 -4
  164. data/lib/solargraph/pin.rb +2 -0
  165. data/lib/solargraph/pin_cache.rb +22 -19
  166. data/lib/solargraph/position.rb +17 -10
  167. data/lib/solargraph/range.rb +16 -15
  168. data/lib/solargraph/rbs_map/conversions.rb +278 -191
  169. data/lib/solargraph/rbs_map/core_fills.rb +18 -11
  170. data/lib/solargraph/rbs_map/core_map.rb +24 -17
  171. data/lib/solargraph/rbs_map/stdlib_map.rb +33 -5
  172. data/lib/solargraph/rbs_map.rb +76 -32
  173. data/lib/solargraph/rbs_translator.rb +206 -0
  174. data/lib/solargraph/server_methods.rb +1 -1
  175. data/lib/solargraph/shell.rb +330 -71
  176. data/lib/solargraph/source/chain/array.rb +3 -12
  177. data/lib/solargraph/source/chain/block_symbol.rb +13 -13
  178. data/lib/solargraph/source/chain/block_variable.rb +13 -13
  179. data/lib/solargraph/source/chain/call.rb +91 -119
  180. data/lib/solargraph/source/chain/class_variable.rb +1 -1
  181. data/lib/solargraph/source/chain/constant.rb +5 -1
  182. data/lib/solargraph/source/chain/global_variable.rb +1 -1
  183. data/lib/solargraph/source/chain/hash.rb +8 -5
  184. data/lib/solargraph/source/chain/head.rb +19 -19
  185. data/lib/solargraph/source/chain/if.rb +12 -10
  186. data/lib/solargraph/source/chain/instance_variable.rb +24 -1
  187. data/lib/solargraph/source/chain/link.rb +12 -22
  188. data/lib/solargraph/source/chain/literal.rb +22 -15
  189. data/lib/solargraph/source/chain/or.rb +10 -4
  190. data/lib/solargraph/source/chain/q_call.rb +2 -0
  191. data/lib/solargraph/source/chain/variable.rb +3 -1
  192. data/lib/solargraph/source/chain/z_super.rb +1 -3
  193. data/lib/solargraph/source/chain.rb +51 -38
  194. data/lib/solargraph/source/change.rb +12 -5
  195. data/lib/solargraph/source/cursor.rb +33 -18
  196. data/lib/solargraph/source/encoding_fixes.rb +6 -7
  197. data/lib/solargraph/source/source_chainer.rb +56 -32
  198. data/lib/solargraph/source/updater.rb +5 -1
  199. data/lib/solargraph/source.rb +59 -35
  200. data/lib/solargraph/source_map/clip.rb +54 -30
  201. data/lib/solargraph/source_map/data.rb +4 -1
  202. data/lib/solargraph/source_map/mapper.rb +28 -131
  203. data/lib/solargraph/source_map.rb +35 -9
  204. data/lib/solargraph/type_checker/problem.rb +3 -1
  205. data/lib/solargraph/type_checker/rules.rb +81 -8
  206. data/lib/solargraph/type_checker.rb +196 -122
  207. data/lib/solargraph/version.rb +19 -1
  208. data/lib/solargraph/workspace/config.rb +14 -11
  209. data/lib/solargraph/workspace/gemspecs.rb +367 -0
  210. data/lib/solargraph/workspace/require_paths.rb +1 -0
  211. data/lib/solargraph/workspace.rb +50 -28
  212. data/lib/solargraph/yard_map/cache.rb +25 -25
  213. data/lib/solargraph/yard_map/directives/attribute_directive.rb +65 -0
  214. data/lib/solargraph/yard_map/directives/domain_directive.rb +30 -0
  215. data/lib/solargraph/yard_map/directives/method_directive.rb +51 -0
  216. data/lib/solargraph/yard_map/directives/override_directive.rb +30 -0
  217. data/lib/solargraph/yard_map/directives/parse_directive.rb +53 -0
  218. data/lib/solargraph/yard_map/directives/visibility_directive.rb +70 -0
  219. data/lib/solargraph/yard_map/directives.rb +35 -0
  220. data/lib/solargraph/yard_map/helpers.rb +8 -3
  221. data/lib/solargraph/yard_map/macro.rb +113 -0
  222. data/lib/solargraph/yard_map/mapper/to_constant.rb +28 -28
  223. data/lib/solargraph/yard_map/mapper/to_method.rb +13 -7
  224. data/lib/solargraph/yard_map/mapper/to_namespace.rb +2 -1
  225. data/lib/solargraph/yard_map/mapper.rb +31 -8
  226. data/lib/solargraph/yard_map.rb +19 -18
  227. data/lib/solargraph/yard_tags.rb +2 -2
  228. data/lib/solargraph/yardoc.rb +7 -4
  229. data/lib/solargraph.rb +34 -10
  230. data/rbs/fills/rubygems/0/dependency.rbs +193 -0
  231. data/rbs/shims/ast/0/node.rbs +1 -1
  232. data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
  233. data/solargraph.gemspec +38 -35
  234. metadata +64 -42
  235. data/lib/solargraph/type_checker/checks.rb +0 -124
  236. data/lib/solargraph/type_checker/param_def.rb +0 -37
  237. data/lib/solargraph/yard_map/to_method.rb +0 -89
  238. data/rbs/fills/tuple/tuple.rbs +0 -149
@@ -21,27 +21,31 @@ module Solargraph
21
21
  # - pinsets[0] = core Ruby pins
22
22
  # - pinsets[1] = documentation/gem pins
23
23
  # - pinsets[2] = convention pins
24
- # - pinsets[3] = workspace source pins
24
+ # - pinsets[3] = workspace source pins (aka. "iced_pins")
25
25
  # - pinsets[4] = currently open file pins
26
26
  # @return [Boolean] True if the index was updated
27
- def update *pinsets
28
- return catalog(pinsets) if pinsets.length != @pinsets.length
27
+ def update *pinsets, &block
28
+ return catalog(pinsets, &block) if pinsets.length != @pinsets.length
29
29
 
30
30
  changed = pinsets.find_index.with_index { |pinset, idx| @pinsets[idx] != pinset }
31
31
  return false unless changed
32
32
 
33
33
  # @todo Fix this map
34
34
  @fqns_pins_map = nil
35
- return catalog(pinsets) if changed == 0
35
+ return catalog(pinsets) if changed.zero?
36
36
 
37
+ # @sg-ignore Need to add nil check here
37
38
  pinsets[changed..].each_with_index do |pins, idx|
38
39
  @pinsets[changed + idx] = pins
39
40
  @indexes[changed + idx] = if pins.empty?
40
- @indexes[changed + idx - 1]
41
- else
42
- @indexes[changed + idx - 1].merge(pins)
43
- end
41
+ @indexes[changed + idx - 1]
42
+ else
43
+ @indexes[changed + idx - 1].merge(pins)
44
+ end
44
45
  end
46
+ # @type [Index]
47
+ @index = @indexes.last.clone
48
+ @index = @index.merge(block.call) if block
45
49
  constants.clear
46
50
  cached_qualify_superclass.clear
47
51
  true
@@ -59,10 +63,10 @@ module Solargraph
59
63
  # @param visibility [Array<Symbol>]
60
64
  # @return [Enumerable<Solargraph::Pin::Namespace, Solargraph::Pin::Constant>]
61
65
  def get_constants fqns, visibility = [:public]
62
- namespace_children(fqns).select { |pin|
63
- # @sg-ignore flow-sensitive typing not smart enough to handle this case
66
+ namespace_children(fqns).select do |pin|
67
+ # @sg-ignore flow sensitive typing not smart enough to handle this case
64
68
  !pin.name.empty? && (pin.is_a?(Pin::Namespace) || pin.is_a?(Pin::Constant)) && visibility.include?(pin.visibility)
65
- }
69
+ end
66
70
  end
67
71
 
68
72
  # @param fqns [String]
@@ -70,18 +74,18 @@ module Solargraph
70
74
  # @param visibility [Array<Symbol>]
71
75
  # @return [Enumerable<Solargraph::Pin::Method>]
72
76
  def get_methods fqns, scope: :instance, visibility: [:public]
73
- all_pins = namespace_children(fqns).select do |pin|
74
- # @sg-ignore https://github.com/castwide/solargraph/pull/1114
77
+ namespace_children(fqns).select do |pin|
75
78
  pin.is_a?(Pin::Method) && pin.scope == scope && visibility.include?(pin.visibility)
76
79
  end
77
- GemPins.combine_method_pins_by_path(all_pins)
78
80
  end
79
81
 
80
- BOOLEAN_SUPERCLASS_PIN = Pin::Reference::Superclass.new(name: 'Boolean', closure: Pin::ROOT_PIN, source: :solargraph)
81
- OBJECT_SUPERCLASS_PIN = Pin::Reference::Superclass.new(name: 'Object', closure: Pin::ROOT_PIN, source: :solargraph)
82
+ BOOLEAN_SUPERCLASS_PIN = Pin::Reference::Superclass.new(name: 'Boolean', closure: Pin::ROOT_PIN,
83
+ source: :solargraph)
84
+ OBJECT_SUPERCLASS_PIN = Pin::Reference::Superclass.new(name: 'Object', closure: Pin::ROOT_PIN,
85
+ source: :solargraph)
82
86
 
83
- # @param fqns [String]
84
- # @return [Pin::Reference::Superclass]
87
+ # @param fqns [String, nil]
88
+ # @return [Pin::Reference::Superclass, nil]
85
89
  def get_superclass fqns
86
90
  return nil if fqns.nil? || fqns.empty?
87
91
  return BOOLEAN_SUPERCLASS_PIN if %w[TrueClass FalseClass].include?(fqns)
@@ -126,20 +130,20 @@ module Solargraph
126
130
  index.path_pin_hash[path]
127
131
  end
128
132
 
129
- # @param fqns [String]
133
+ # @param fqns [String, nil]
130
134
  # @param scope [Symbol] :class or :instance
131
135
  # @return [Enumerable<Solargraph::Pin::Base>]
132
- def get_instance_variables(fqns, scope = :instance)
133
- all_instance_variables.select { |pin|
136
+ def get_instance_variables fqns, scope = :instance
137
+ all_instance_variables.select do |pin|
134
138
  pin.binder.namespace == fqns && pin.binder.scope == scope
135
- }
139
+ end
136
140
  end
137
141
 
138
142
  # @param fqns [String]
139
143
  #
140
144
  # @return [Enumerable<Solargraph::Pin::ClassVariable>]
141
- def get_class_variables(fqns)
142
- namespace_children(fqns).select { |pin| pin.is_a?(Pin::ClassVariable)}
145
+ def get_class_variables fqns
146
+ namespace_children(fqns).select { |pin| pin.is_a?(Pin::ClassVariable) }
143
147
  end
144
148
 
145
149
  # @return [Enumerable<Solargraph::Pin::Base>]
@@ -149,7 +153,7 @@ module Solargraph
149
153
 
150
154
  # @param fqns [String]
151
155
  # @return [Boolean]
152
- def namespace_exists?(fqns)
156
+ def namespace_exists? fqns
153
157
  fqns_pins(fqns).any?
154
158
  end
155
159
 
@@ -165,7 +169,7 @@ module Solargraph
165
169
 
166
170
  # @param fqns [String]
167
171
  # @return [Array<String>]
168
- def domains(fqns)
172
+ def domains fqns
169
173
  result = []
170
174
  fqns_pins(fqns).each do |nspin|
171
175
  result.concat nspin.domains
@@ -173,12 +177,12 @@ module Solargraph
173
177
  result
174
178
  end
175
179
 
176
- # @return [Hash{String => YARD::Tags::MacroDirective}]
180
+ # @return [Hash{String => YardMap::Macro}]
177
181
  def named_macros
178
182
  @named_macros ||= begin
179
183
  result = {}
180
184
  pins.each do |pin|
181
- pin.macros.select{|m| m.tag.tag_name == 'macro' && !m.tag.text.empty? }.each do |macro|
185
+ pin.macros.select { |m| m.tag.tag_name == 'macro' && !m.tag.text.empty? }.each do |macro|
182
186
  next if macro.tag.name.nil? || macro.tag.name.empty?
183
187
  result[macro.tag.name] = macro
184
188
  end
@@ -199,7 +203,7 @@ module Solargraph
199
203
  index.pins_by_class klass
200
204
  end
201
205
 
202
- # @param fqns [String]
206
+ # @param fqns [String, nil]
203
207
  # @return [Array<Solargraph::Pin::Namespace>]
204
208
  def fqns_pins fqns
205
209
  return [] if fqns.nil?
@@ -217,7 +221,7 @@ module Solargraph
217
221
  # Get all ancestors (superclasses, includes, prepends, extends) for a namespace
218
222
  # @param fqns [String] The fully qualified namespace
219
223
  # @return [Array<String>] Array of ancestor namespaces including the original
220
- def get_ancestors(fqns)
224
+ def get_ancestors fqns
221
225
  return [] if fqns.nil? || fqns.empty?
222
226
 
223
227
  ancestors = [fqns]
@@ -244,8 +248,11 @@ module Solargraph
244
248
  next if refs.nil?
245
249
  # @param ref [String]
246
250
  refs.map(&:type).map(&:to_s).each do |ref|
251
+ # @sg-ignore flow sensitive typing should be able to handle redefinition
247
252
  next if ref.nil? || ref.empty? || visited.include?(ref)
253
+ # @sg-ignore flow sensitive typing should be able to handle redefinition
248
254
  ancestors << ref
255
+ # @sg-ignore flow sensitive typing should be able to handle redefinition
249
256
  queue << ref
250
257
  end
251
258
  end
@@ -257,7 +264,7 @@ module Solargraph
257
264
  # @param fqns [String]
258
265
  #
259
266
  # @return [Array<Solargraph::Pin::Reference>]
260
- def get_ancestor_references(fqns)
267
+ def get_ancestor_references fqns
261
268
  (get_prepends(fqns) + get_includes(fqns) + [get_superclass(fqns)]).compact
262
269
  end
263
270
 
@@ -266,17 +273,33 @@ module Solargraph
266
273
  @constants ||= Constants.new(self)
267
274
  end
268
275
 
276
+ # @param name [String]
277
+ # @return [ComplexType, nil]
278
+ def unalias name
279
+ index.alias_hash[name]
280
+ end
281
+
282
+ # @return [Array<String>]
283
+ def macro_method_names
284
+ index.macro_method_names
285
+ end
286
+
287
+ # @return [Hash{String => Array<Pin::Method>}]
288
+ def macro_method_name_pins
289
+ index.macro_method_name_pins
290
+ end
291
+
269
292
  private
270
293
 
271
294
  # @return [Index]
272
295
  def index
273
- @indexes.last
296
+ @index ||= Index.new
274
297
  end
275
298
 
276
299
  # @param pinsets [Array<Array<Pin::Base>>]
277
300
  #
278
- # @return [void]
279
- def catalog pinsets
301
+ # @return [true]
302
+ def catalog pinsets, &block
280
303
  @pinsets = pinsets
281
304
  # @type [Array<Index>]
282
305
  @indexes = []
@@ -287,6 +310,8 @@ module Solargraph
287
310
  @indexes.push(@indexes.last&.merge(pins) || Solargraph::ApiMap::Index.new(pins))
288
311
  end
289
312
  end
313
+ @index = @indexes.last.clone
314
+ @index = @index.merge(block.call) if block
290
315
  constants.clear
291
316
  cached_qualify_superclass.clear
292
317
  true
@@ -308,7 +333,7 @@ module Solargraph
308
333
  index.pins_by_class(Pin::Symbol)
309
334
  end
310
335
 
311
- # @return [Hash{String => Array<String>}]
336
+ # @return [Hash{String => Array<Pin::Reference::Superclass>}]
312
337
  def superclass_references
313
338
  index.superclass_references
314
339
  end
@@ -347,7 +372,7 @@ module Solargraph
347
372
 
348
373
  # @param fqns [String]
349
374
  # @return [Pin::Reference::Superclass, nil]
350
- def try_special_superclasses(fqns)
375
+ def try_special_superclasses fqns
351
376
  return OBJECT_SUPERCLASS_PIN if fqns == 'Boolean'
352
377
  return OBJECT_SUPERCLASS_PIN if !%w[BasicObject Object].include?(fqns) && namespace_exists?(fqns)
353
378