solargraph 0.51.2 → 0.54.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.
- checksums.yaml +4 -4
- data/.github/workflows/plugins.yml +40 -0
- data/.github/workflows/rspec.yml +1 -3
- data/.github/workflows/typecheck.yml +34 -0
- data/.yardopts +2 -2
- data/CHANGELOG.md +127 -5
- data/README.md +13 -16
- data/SPONSORS.md +1 -7
- data/lib/solargraph/api_map/cache.rb +50 -20
- data/lib/solargraph/api_map/source_to_yard.rb +17 -10
- data/lib/solargraph/api_map/store.rb +60 -15
- data/lib/solargraph/api_map.rb +282 -123
- data/lib/solargraph/bench.rb +3 -2
- data/lib/solargraph/cache.rb +29 -5
- data/lib/solargraph/complex_type/type_methods.rb +122 -39
- data/lib/solargraph/complex_type/unique_type.rb +310 -76
- data/lib/solargraph/complex_type.rb +166 -44
- data/lib/solargraph/convention.rb +0 -1
- data/lib/solargraph/converters/dd.rb +5 -0
- data/lib/solargraph/converters/dl.rb +3 -0
- data/lib/solargraph/converters/dt.rb +3 -0
- data/lib/solargraph/diagnostics/rubocop.rb +8 -7
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +1 -0
- data/lib/solargraph/diagnostics/type_check.rb +1 -0
- data/lib/solargraph/diagnostics.rb +2 -2
- data/lib/solargraph/doc_map.rb +187 -0
- data/lib/solargraph/gem_pins.rb +72 -0
- data/lib/solargraph/language_server/host/diagnoser.rb +2 -2
- data/lib/solargraph/language_server/host/dispatch.rb +22 -5
- data/lib/solargraph/language_server/host/message_worker.rb +49 -5
- data/lib/solargraph/language_server/host/sources.rb +8 -65
- data/lib/solargraph/language_server/host.rb +65 -84
- data/lib/solargraph/language_server/message/base.rb +19 -12
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +3 -1
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +13 -1
- data/lib/solargraph/language_server/message/initialize.rb +19 -2
- data/lib/solargraph/language_server/message/text_document/completion.rb +0 -3
- data/lib/solargraph/language_server/message/text_document/definition.rb +3 -3
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +3 -3
- data/lib/solargraph/language_server/message/text_document/formatting.rb +1 -0
- data/lib/solargraph/language_server/message/text_document/hover.rb +3 -1
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +3 -3
- data/lib/solargraph/language_server/message/text_document.rb +0 -1
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +5 -0
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +2 -2
- data/lib/solargraph/language_server/progress.rb +135 -0
- data/lib/solargraph/language_server/transport/adapter.rb +16 -1
- data/lib/solargraph/language_server/transport/data_reader.rb +2 -0
- data/lib/solargraph/language_server.rb +1 -0
- data/lib/solargraph/library.rb +207 -111
- data/lib/solargraph/location.rb +15 -1
- data/lib/solargraph/page.rb +6 -0
- data/lib/solargraph/parser/comment_ripper.rb +4 -0
- data/lib/solargraph/parser/node_methods.rb +47 -7
- data/lib/solargraph/parser/node_processor/base.rb +11 -1
- data/lib/solargraph/parser/node_processor.rb +1 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/class_methods.rb +31 -9
- data/lib/solargraph/parser/{legacy → parser_gem}/flawed_builder.rb +3 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_chainer.rb +62 -43
- data/lib/solargraph/parser/parser_gem/node_methods.rb +495 -0
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/alias_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +57 -0
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/begin_node.rb +1 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/block_node.rb +3 -2
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/casgn_node.rb +2 -2
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/cvasgn_node.rb +1 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/def_node.rb +7 -20
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/defs_node.rb +2 -2
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/gvasgn_node.rb +1 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/ivasgn_node.rb +2 -2
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/lvasgn_node.rb +4 -4
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +53 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/namespace_node.rb +2 -2
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/orasgn_node.rb +1 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/resbody_node.rb +3 -3
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/sclass_node.rb +1 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/send_node.rb +8 -6
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/sym_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors.rb +56 -0
- data/lib/solargraph/parser/parser_gem.rb +12 -0
- data/lib/solargraph/parser/region.rb +1 -1
- data/lib/solargraph/parser/snippet.rb +2 -0
- data/lib/solargraph/parser.rb +8 -12
- data/lib/solargraph/pin/base.rb +78 -10
- data/lib/solargraph/pin/base_variable.rb +40 -7
- data/lib/solargraph/pin/block.rb +69 -46
- data/lib/solargraph/pin/callable.rb +147 -0
- data/lib/solargraph/pin/closure.rb +23 -3
- data/lib/solargraph/pin/common.rb +6 -6
- data/lib/solargraph/pin/conversions.rb +36 -5
- data/lib/solargraph/pin/delegated_method.rb +6 -2
- data/lib/solargraph/pin/documenting.rb +25 -32
- data/lib/solargraph/pin/instance_variable.rb +6 -2
- data/lib/solargraph/pin/local_variable.rb +13 -1
- data/lib/solargraph/pin/method.rb +205 -32
- data/lib/solargraph/pin/namespace.rb +20 -7
- data/lib/solargraph/pin/parameter.rb +41 -36
- data/lib/solargraph/pin/proxy_type.rb +1 -1
- data/lib/solargraph/pin/reference/override.rb +2 -2
- data/lib/solargraph/pin/reference.rb +8 -0
- data/lib/solargraph/pin/search.rb +3 -3
- data/lib/solargraph/pin/signature.rb +8 -14
- data/lib/solargraph/pin.rb +4 -2
- data/lib/solargraph/range.rb +4 -6
- data/lib/solargraph/rbs_map/conversions.rb +326 -76
- data/lib/solargraph/rbs_map/core_fills.rb +16 -33
- data/lib/solargraph/rbs_map/core_map.rb +3 -13
- data/lib/solargraph/rbs_map/stdlib_map.rb +2 -8
- data/lib/solargraph/rbs_map.rb +32 -13
- data/lib/solargraph/shell.rb +95 -72
- data/lib/solargraph/source/chain/array.rb +33 -0
- data/lib/solargraph/source/chain/block_symbol.rb +13 -0
- data/lib/solargraph/source/chain/block_variable.rb +1 -1
- data/lib/solargraph/source/chain/call.rb +152 -69
- data/lib/solargraph/source/chain/constant.rb +15 -1
- data/lib/solargraph/source/chain/if.rb +23 -0
- data/lib/solargraph/source/chain/link.rb +17 -2
- data/lib/solargraph/source/chain/or.rb +2 -2
- data/lib/solargraph/source/chain/z_super.rb +3 -3
- data/lib/solargraph/source/chain.rb +85 -26
- data/lib/solargraph/source/change.rb +3 -0
- data/lib/solargraph/source/cursor.rb +16 -2
- data/lib/solargraph/source/source_chainer.rb +8 -5
- data/lib/solargraph/source/updater.rb +1 -0
- data/lib/solargraph/source.rb +120 -148
- data/lib/solargraph/source_map/clip.rb +16 -27
- data/lib/solargraph/source_map/data.rb +30 -0
- data/lib/solargraph/source_map/mapper.rb +15 -3
- data/lib/solargraph/source_map.rb +48 -24
- data/lib/solargraph/type_checker/checks.rb +10 -2
- data/lib/solargraph/type_checker/rules.rb +6 -1
- data/lib/solargraph/type_checker.rb +150 -39
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/views/environment.erb +3 -5
- data/lib/solargraph/workspace/config.rb +9 -6
- data/lib/solargraph/workspace.rb +30 -3
- data/lib/solargraph/yard_map/cache.rb +6 -0
- data/lib/solargraph/yard_map/helpers.rb +1 -1
- data/lib/solargraph/yard_map/mapper/to_method.rb +16 -3
- data/lib/solargraph/yard_map/mapper.rb +1 -1
- data/lib/solargraph/yard_map/to_method.rb +11 -4
- data/lib/solargraph/yard_map.rb +1 -292
- data/lib/solargraph/yard_tags.rb +20 -0
- data/lib/solargraph/yardoc.rb +52 -0
- data/lib/solargraph.rb +6 -4
- data/solargraph.gemspec +7 -6
- metadata +71 -82
- data/lib/solargraph/api_map/bundler_methods.rb +0 -22
- data/lib/solargraph/documentor.rb +0 -76
- data/lib/solargraph/language_server/host/cataloger.rb +0 -56
- data/lib/solargraph/parser/legacy/node_methods.rb +0 -325
- data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +0 -23
- data/lib/solargraph/parser/legacy/node_processors/args_node.rb +0 -50
- data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +0 -15
- data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +0 -18
- data/lib/solargraph/parser/legacy/node_processors.rb +0 -55
- data/lib/solargraph/parser/legacy.rb +0 -12
- data/lib/solargraph/parser/rubyvm/class_methods.rb +0 -153
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +0 -160
- data/lib/solargraph/parser/rubyvm/node_methods.rb +0 -317
- data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +0 -85
- data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +0 -42
- data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +0 -33
- data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +0 -23
- data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +0 -75
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +0 -68
- data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +0 -23
- data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +0 -38
- data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +0 -39
- data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +0 -20
- data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +0 -27
- data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +0 -39
- data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +0 -26
- data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +0 -15
- data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +0 -51
- data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +0 -32
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +0 -15
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +0 -279
- data/lib/solargraph/parser/rubyvm/node_processors.rb +0 -64
- data/lib/solargraph/parser/rubyvm/node_wrapper.rb +0 -47
- data/lib/solargraph/parser/rubyvm.rb +0 -40
- data/lib/solargraph/rbs_map/core_signs.rb +0 -33
- data/lib/yard-solargraph.rb +0 -33
@@ -1,11 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'set'
|
4
3
|
|
5
4
|
module Solargraph
|
6
5
|
class ApiMap
|
6
|
+
# Queryable collection of Pins representing a Workspace, gems and the Ruby
|
7
|
+
# core.
|
8
|
+
#
|
7
9
|
class Store
|
8
|
-
# @return [
|
10
|
+
# @return [Array<Solargraph::Pin::Base>]
|
9
11
|
attr_reader :pins
|
10
12
|
|
11
13
|
# @param pins [Enumerable<Solargraph::Pin::Base>]
|
@@ -26,7 +28,7 @@ module Solargraph
|
|
26
28
|
# @param fqns [String]
|
27
29
|
# @param scope [Symbol]
|
28
30
|
# @param visibility [Array<Symbol>]
|
29
|
-
# @return [Enumerable<Solargraph::Pin::
|
31
|
+
# @return [Enumerable<Solargraph::Pin::Method>]
|
30
32
|
def get_methods fqns, scope: :instance, visibility: [:public]
|
31
33
|
namespace_children(fqns).select do |pin|
|
32
34
|
pin.is_a?(Pin::Method) && pin.scope == scope && visibility.include?(pin.visibility)
|
@@ -36,6 +38,7 @@ module Solargraph
|
|
36
38
|
# @param fqns [String]
|
37
39
|
# @return [String, nil]
|
38
40
|
def get_superclass fqns
|
41
|
+
raise "Do not prefix fully qualified namespaces with '::' - #{fqns.inspect}" if fqns.start_with?('::')
|
39
42
|
return superclass_references[fqns].first if superclass_references.key?(fqns)
|
40
43
|
return 'Object' if fqns != 'BasicObject' && namespace_exists?(fqns)
|
41
44
|
return 'Object' if fqns == 'Boolean'
|
@@ -61,11 +64,15 @@ module Solargraph
|
|
61
64
|
end
|
62
65
|
|
63
66
|
# @param path [String]
|
64
|
-
# @return [
|
67
|
+
# @return [Array<Solargraph::Pin::Base>]
|
65
68
|
def get_path_pins path
|
66
69
|
path_pin_hash[path] || []
|
67
70
|
end
|
68
71
|
|
72
|
+
def cacheable_pins
|
73
|
+
@cacheable_pins ||= pins_by_class(Pin::Namespace) + pins_by_class(Pin::Constant) + pins_by_class(Pin::Method) + pins_by_class(Pin::Reference)
|
74
|
+
end
|
75
|
+
|
69
76
|
# @param fqns [String]
|
70
77
|
# @param scope [Symbol] :class or :instance
|
71
78
|
# @return [Enumerable<Solargraph::Pin::Base>]
|
@@ -117,7 +124,7 @@ module Solargraph
|
|
117
124
|
result
|
118
125
|
end
|
119
126
|
|
120
|
-
# @return [Hash]
|
127
|
+
# @return [Hash{String => YARD::Tags::MacroDirective}]
|
121
128
|
def named_macros
|
122
129
|
@named_macros ||= begin
|
123
130
|
result = {}
|
@@ -141,14 +148,15 @@ module Solargraph
|
|
141
148
|
to_s
|
142
149
|
end
|
143
150
|
|
144
|
-
# @
|
145
|
-
# @
|
151
|
+
# @generic T
|
152
|
+
# @param klass [Class<T>]
|
153
|
+
# @return [Set<T>]
|
146
154
|
def pins_by_class klass
|
147
|
-
@
|
155
|
+
# @type [Set<Solargraph::Pin::Base>]
|
156
|
+
s = Set.new
|
157
|
+
@pin_select_cache[klass] ||= @pin_class_hash.each_with_object(s) { |(key, o), n| n.merge(o) if key <= klass }
|
148
158
|
end
|
149
159
|
|
150
|
-
private
|
151
|
-
|
152
160
|
# @param fqns [String]
|
153
161
|
# @return [Array<Solargraph::Pin::Namespace>]
|
154
162
|
def fqns_pins fqns
|
@@ -164,6 +172,9 @@ module Solargraph
|
|
164
172
|
fqns_pins_map[[base, name]]
|
165
173
|
end
|
166
174
|
|
175
|
+
private
|
176
|
+
|
177
|
+
# @return [Hash{::Array(String, String) => ::Array<Pin::Namespace>}]
|
167
178
|
def fqns_pins_map
|
168
179
|
@fqns_pins_map ||= Hash.new do |h, (base, name)|
|
169
180
|
value = namespace_children(base).select { |pin| pin.name == name && pin.is_a?(Pin::Namespace) }
|
@@ -176,18 +187,22 @@ module Solargraph
|
|
176
187
|
pins_by_class(Pin::Symbol)
|
177
188
|
end
|
178
189
|
|
190
|
+
# @return [Hash{String => Array<String>}]
|
179
191
|
def superclass_references
|
180
192
|
@superclass_references ||= {}
|
181
193
|
end
|
182
194
|
|
195
|
+
# @return [Hash{String => Array<String>}]
|
183
196
|
def include_references
|
184
197
|
@include_references ||= {}
|
185
198
|
end
|
186
199
|
|
200
|
+
# @return [Hash{String => Array<String>}]
|
187
201
|
def prepend_references
|
188
202
|
@prepend_references ||= {}
|
189
203
|
end
|
190
204
|
|
205
|
+
# @return [Hash{String => Array<String>}]
|
191
206
|
def extend_references
|
192
207
|
@extend_references ||= {}
|
193
208
|
end
|
@@ -198,31 +213,58 @@ module Solargraph
|
|
198
213
|
namespace_map[name] || []
|
199
214
|
end
|
200
215
|
|
201
|
-
# @return [Hash
|
216
|
+
# @return [Hash{String => Enumerable<Pin::Base>}
|
202
217
|
def namespace_map
|
203
218
|
@namespace_map ||= {}
|
204
219
|
end
|
205
220
|
|
221
|
+
# @return [Enumerable<Pin::InstanceVariable>]
|
206
222
|
def all_instance_variables
|
207
223
|
pins_by_class(Pin::InstanceVariable)
|
208
224
|
end
|
209
225
|
|
226
|
+
# @return [Hash{String => Array<Pin::Base>}]
|
210
227
|
def path_pin_hash
|
211
228
|
@path_pin_hash ||= {}
|
212
229
|
end
|
213
230
|
|
231
|
+
# Add references to a map
|
232
|
+
#
|
233
|
+
# @param h [Hash{String => Pin:Base}]
|
234
|
+
# @param reference_pin [Pin::Reference]
|
235
|
+
#
|
236
|
+
# @return [void]
|
237
|
+
def store_parametric_reference(h, reference_pin)
|
238
|
+
referenced_ns = reference_pin.name
|
239
|
+
referenced_tag_params = reference_pin.generic_values
|
240
|
+
referenced_tag = referenced_ns +
|
241
|
+
if referenced_tag_params && referenced_tag_params.length > 0
|
242
|
+
"<" + referenced_tag_params.join(', ') + ">"
|
243
|
+
else
|
244
|
+
''
|
245
|
+
end
|
246
|
+
referencing_ns = reference_pin.namespace
|
247
|
+
h[referencing_ns] ||= []
|
248
|
+
h[referencing_ns].push referenced_tag
|
249
|
+
end
|
250
|
+
|
214
251
|
# @return [void]
|
215
252
|
def index
|
216
253
|
set = pins.to_set
|
217
254
|
@pin_class_hash = set.classify(&:class).transform_values(&:to_a)
|
255
|
+
# @type [Hash{Class => ::Array<Solargraph::Pin::Base>}]
|
218
256
|
@pin_select_cache = {}
|
219
257
|
@namespace_map = set.classify(&:namespace)
|
220
258
|
@path_pin_hash = set.classify(&:path)
|
221
259
|
@namespaces = @path_pin_hash.keys.compact.to_set
|
222
260
|
pins_by_class(Pin::Reference::Include).each do |pin|
|
223
|
-
include_references
|
224
|
-
include_references[pin.namespace].push pin.name
|
261
|
+
store_parametric_reference(include_references, pin)
|
225
262
|
end
|
263
|
+
# @todo move the rest of these reference pins over to use
|
264
|
+
# generic types, adding rbs_map/conversions.rb code to
|
265
|
+
# populate type parameters and adding related specs ensuring
|
266
|
+
# the generics get resolved, along with any api_map.rb
|
267
|
+
# changes needed in
|
226
268
|
pins_by_class(Pin::Reference::Prepend).each do |pin|
|
227
269
|
prepend_references[pin.namespace] ||= []
|
228
270
|
prepend_references[pin.namespace].push pin.name
|
@@ -242,8 +284,8 @@ module Solargraph
|
|
242
284
|
get_path_pins(pin.path.sub(/#initialize/, '.new')).first
|
243
285
|
end
|
244
286
|
(ovr.tags.map(&:tag_name) + ovr.delete).uniq.each do |tag|
|
245
|
-
pin.docstring.delete_tags tag
|
246
|
-
new_pin.docstring.delete_tags tag
|
287
|
+
pin.docstring.delete_tags tag
|
288
|
+
new_pin.docstring.delete_tags tag if new_pin
|
247
289
|
end
|
248
290
|
ovr.tags.each do |tag|
|
249
291
|
pin.docstring.add_tag(tag)
|
@@ -256,6 +298,9 @@ module Solargraph
|
|
256
298
|
end
|
257
299
|
end
|
258
300
|
|
301
|
+
# @param pin [Pin::Base]
|
302
|
+
# @param tag [String]
|
303
|
+
# @return [void]
|
259
304
|
def redefine_return_type pin, tag
|
260
305
|
return unless pin && tag.tag_name == 'return'
|
261
306
|
pin.instance_variable_set(:@return_type, ComplexType.try_parse(tag.type))
|