solargraph 0.56.2 → 0.57.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.
- checksums.yaml +4 -4
- data/.github/workflows/linting.yml +125 -0
- data/.github/workflows/plugins.yml +148 -6
- data/.github/workflows/rspec.yml +39 -4
- data/.github/workflows/typecheck.yml +5 -2
- data/.gitignore +5 -0
- data/.overcommit.yml +72 -0
- data/.rspec +1 -0
- data/.rubocop.yml +66 -0
- data/.rubocop_todo.yml +2627 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +42 -0
- data/README.md +8 -4
- data/Rakefile +125 -13
- data/lib/solargraph/api_map/cache.rb +3 -2
- data/lib/solargraph/api_map/constants.rb +218 -0
- data/lib/solargraph/api_map/index.rb +20 -26
- data/lib/solargraph/api_map/source_to_yard.rb +10 -4
- data/lib/solargraph/api_map/store.rb +126 -18
- data/lib/solargraph/api_map.rb +212 -234
- data/lib/solargraph/bench.rb +1 -0
- data/lib/solargraph/complex_type/type_methods.rb +1 -0
- data/lib/solargraph/complex_type/unique_type.rb +7 -7
- data/lib/solargraph/complex_type.rb +5 -1
- data/lib/solargraph/convention/active_support_concern.rb +111 -0
- data/lib/solargraph/convention/base.rb +17 -0
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +1 -0
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +3 -1
- data/lib/solargraph/convention/data_definition.rb +2 -1
- data/lib/solargraph/convention/gemspec.rb +1 -1
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +1 -0
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +3 -1
- data/lib/solargraph/convention/struct_definition.rb +36 -13
- data/lib/solargraph/convention.rb +31 -2
- data/lib/solargraph/diagnostics/rubocop.rb +6 -1
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +1 -1
- data/lib/solargraph/doc_map.rb +40 -12
- data/lib/solargraph/environ.rb +9 -2
- data/lib/solargraph/gem_pins.rb +17 -11
- data/lib/solargraph/language_server/host/dispatch.rb +2 -0
- data/lib/solargraph/language_server/host/message_worker.rb +3 -0
- data/lib/solargraph/language_server/host.rb +2 -1
- data/lib/solargraph/language_server/message/base.rb +2 -1
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +1 -1
- data/lib/solargraph/language_server/message/text_document/definition.rb +2 -0
- data/lib/solargraph/language_server/message/text_document/formatting.rb +16 -2
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +1 -0
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +2 -0
- data/lib/solargraph/language_server/progress.rb +8 -0
- data/lib/solargraph/language_server/request.rb +1 -0
- data/lib/solargraph/library.rb +8 -15
- data/lib/solargraph/location.rb +2 -0
- data/lib/solargraph/logging.rb +11 -2
- data/lib/solargraph/page.rb +4 -0
- data/lib/solargraph/parser/comment_ripper.rb +8 -1
- data/lib/solargraph/parser/flow_sensitive_typing.rb +32 -4
- data/lib/solargraph/parser/node_methods.rb +2 -2
- data/lib/solargraph/parser/node_processor/base.rb +1 -1
- data/lib/solargraph/parser/node_processor.rb +6 -2
- data/lib/solargraph/parser/parser_gem/class_methods.rb +1 -1
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +1 -0
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_methods.rb +4 -2
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +3 -2
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +2 -0
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +3 -0
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +35 -14
- data/lib/solargraph/parser/region.rb +3 -0
- data/lib/solargraph/parser/snippet.rb +2 -0
- data/lib/solargraph/pin/base.rb +50 -8
- data/lib/solargraph/pin/base_variable.rb +1 -2
- data/lib/solargraph/pin/callable.rb +9 -0
- data/lib/solargraph/pin/closure.rb +2 -0
- data/lib/solargraph/pin/common.rb +6 -2
- data/lib/solargraph/pin/constant.rb +2 -0
- data/lib/solargraph/pin/delegated_method.rb +1 -0
- data/lib/solargraph/pin/local_variable.rb +4 -1
- data/lib/solargraph/pin/method.rb +8 -5
- data/lib/solargraph/pin/method_alias.rb +3 -0
- data/lib/solargraph/pin/parameter.rb +18 -8
- data/lib/solargraph/pin/proxy_type.rb +1 -0
- data/lib/solargraph/pin/reference/override.rb +15 -1
- data/lib/solargraph/pin/reference/superclass.rb +5 -0
- data/lib/solargraph/pin/reference.rb +26 -0
- data/lib/solargraph/pin/search.rb +3 -1
- data/lib/solargraph/pin/signature.rb +2 -0
- data/lib/solargraph/pin/symbol.rb +5 -0
- data/lib/solargraph/pin_cache.rb +64 -4
- data/lib/solargraph/position.rb +2 -0
- data/lib/solargraph/range.rb +1 -0
- data/lib/solargraph/rbs_map/conversions.rb +7 -5
- data/lib/solargraph/rbs_map/core_map.rb +3 -0
- data/lib/solargraph/rbs_map.rb +15 -2
- data/lib/solargraph/shell.rb +3 -0
- data/lib/solargraph/source/chain/link.rb +10 -1
- data/lib/solargraph/source/chain.rb +9 -2
- data/lib/solargraph/source/change.rb +2 -2
- data/lib/solargraph/source/cursor.rb +2 -3
- data/lib/solargraph/source/source_chainer.rb +1 -1
- data/lib/solargraph/source.rb +5 -2
- data/lib/solargraph/source_map/clip.rb +1 -1
- data/lib/solargraph/source_map/data.rb +4 -0
- data/lib/solargraph/source_map/mapper.rb +4 -2
- data/lib/solargraph/source_map.rb +21 -14
- data/lib/solargraph/type_checker/param_def.rb +2 -0
- data/lib/solargraph/type_checker/rules.rb +8 -0
- data/lib/solargraph/type_checker.rb +173 -120
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +0 -2
- data/lib/solargraph/workspace/require_paths.rb +98 -0
- data/lib/solargraph/workspace.rb +16 -48
- data/lib/solargraph/yard_map/mapper/to_method.rb +2 -2
- data/lib/solargraph/yardoc.rb +16 -3
- data/lib/solargraph.rb +2 -0
- data/rbs/fills/tuple.rbs +2 -3
- data/sig/shims/parser/3.2.0.1/builders/default.rbs +195 -0
- data/sig/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
- data/sig/shims/thor/1.2.0.1/manifest.yaml +7 -0
- data/sig/shims/thor/1.2.0.1/thor.rbs +17 -0
- data/solargraph.gemspec +14 -4
- metadata +123 -9
- data/lib/.rubocop.yml +0 -22
@@ -8,6 +8,7 @@ module Solargraph
|
|
8
8
|
class Store
|
9
9
|
# @param pinsets [Array<Enumerable<Pin::Base>>]
|
10
10
|
def initialize *pinsets
|
11
|
+
@pinsets = pinsets
|
11
12
|
catalog pinsets
|
12
13
|
end
|
13
14
|
|
@@ -17,6 +18,11 @@ module Solargraph
|
|
17
18
|
end
|
18
19
|
|
19
20
|
# @param pinsets [Array<Enumerable<Pin::Base>>]
|
21
|
+
# - pinsets[0] = core Ruby pins
|
22
|
+
# - pinsets[1] = documentation/gem pins
|
23
|
+
# - pinsets[2] = convention pins
|
24
|
+
# - pinsets[3] = workspace source pins
|
25
|
+
# - pinsets[4] = currently open file pins
|
20
26
|
# @return [Boolean] True if the index was updated
|
21
27
|
def update *pinsets
|
22
28
|
return catalog(pinsets) if pinsets.length != @pinsets.length
|
@@ -36,6 +42,8 @@ module Solargraph
|
|
36
42
|
@indexes[changed + idx - 1].merge(pins)
|
37
43
|
end
|
38
44
|
end
|
45
|
+
constants.clear
|
46
|
+
cached_qualify_superclass.clear
|
39
47
|
true
|
40
48
|
end
|
41
49
|
|
@@ -67,35 +75,45 @@ module Solargraph
|
|
67
75
|
GemPins.combine_method_pins_by_path(all_pins)
|
68
76
|
end
|
69
77
|
|
70
|
-
|
78
|
+
BOOLEAN_SUPERCLASS_PIN = Pin::Reference::Superclass.new(name: 'Boolean', closure: Pin::ROOT_PIN, source: :solargraph)
|
79
|
+
OBJECT_SUPERCLASS_PIN = Pin::Reference::Superclass.new(name: 'Object', closure: Pin::ROOT_PIN, source: :solargraph)
|
80
|
+
|
81
|
+
# @param fqns [String]
|
82
|
+
# @return [Pin::Reference::Superclass]
|
83
|
+
def get_superclass fqns
|
84
|
+
return nil if fqns.nil? || fqns.empty?
|
85
|
+
return BOOLEAN_SUPERCLASS_PIN if %w[TrueClass FalseClass].include?(fqns)
|
86
|
+
|
87
|
+
superclass_references[fqns].first || try_special_superclasses(fqns)
|
88
|
+
end
|
89
|
+
|
90
|
+
# @param fq_sub_tag [String]
|
71
91
|
# @return [String, nil]
|
72
|
-
def
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
return
|
78
|
-
|
79
|
-
return
|
80
|
-
|
81
|
-
return simplified_literal_name if simplified_literal_name != fqns
|
82
|
-
nil
|
92
|
+
def qualify_superclass fq_sub_tag
|
93
|
+
cached_qualify_superclass[fq_sub_tag] || qualify_and_cache_superclass(fq_sub_tag)
|
94
|
+
type = ComplexType.try_parse(fq_sub_tag)
|
95
|
+
return type.simplify_literals.to_s if type.literal?
|
96
|
+
ref = get_superclass(fq_sub_tag)
|
97
|
+
return unless ref
|
98
|
+
res = constants.dereference(ref)
|
99
|
+
return unless res
|
100
|
+
res + type.substring
|
83
101
|
end
|
84
102
|
|
85
103
|
# @param fqns [String]
|
86
|
-
# @return [Array<
|
104
|
+
# @return [Array<Pin::Reference::Include>]
|
87
105
|
def get_includes fqns
|
88
106
|
include_references[fqns] || []
|
89
107
|
end
|
90
108
|
|
91
109
|
# @param fqns [String]
|
92
|
-
# @return [Array<
|
110
|
+
# @return [Array<Pin::Reference::Prepend>]
|
93
111
|
def get_prepends fqns
|
94
112
|
prepend_references[fqns] || []
|
95
113
|
end
|
96
114
|
|
97
115
|
# @param fqns [String]
|
98
|
-
# @return [Array<
|
116
|
+
# @return [Array<Pin::Reference::Extend>]
|
99
117
|
def get_extends fqns
|
100
118
|
extend_references[fqns] || []
|
101
119
|
end
|
@@ -198,14 +216,62 @@ module Solargraph
|
|
198
216
|
fqns_pins_map[[base, name]]
|
199
217
|
end
|
200
218
|
|
219
|
+
# Get all ancestors (superclasses, includes, prepends, extends) for a namespace
|
220
|
+
# @param fqns [String] The fully qualified namespace
|
221
|
+
# @return [Array<String>] Array of ancestor namespaces including the original
|
222
|
+
def get_ancestors(fqns)
|
223
|
+
return [] if fqns.nil? || fqns.empty?
|
224
|
+
|
225
|
+
ancestors = [fqns]
|
226
|
+
visited = Set.new
|
227
|
+
queue = [fqns]
|
228
|
+
|
229
|
+
until queue.empty?
|
230
|
+
current = queue.shift
|
231
|
+
next if current.nil? || current.empty? || visited.include?(current)
|
232
|
+
visited.add(current)
|
233
|
+
|
234
|
+
current = current.gsub(/^::/, '')
|
235
|
+
|
236
|
+
# Add superclass
|
237
|
+
ref = get_superclass(current)
|
238
|
+
superclass = ref && constants.dereference(ref)
|
239
|
+
if superclass && !superclass.empty? && !visited.include?(superclass)
|
240
|
+
ancestors << superclass
|
241
|
+
queue << superclass
|
242
|
+
end
|
243
|
+
|
244
|
+
# Add includes, prepends, and extends
|
245
|
+
[get_includes(current), get_prepends(current), get_extends(current)].each do |refs|
|
246
|
+
next if refs.nil?
|
247
|
+
refs.map(&:parametrized_tag).map(&:to_s).each do |ref|
|
248
|
+
next if ref.nil? || ref.empty? || visited.include?(ref)
|
249
|
+
ancestors << ref
|
250
|
+
queue << ref
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
ancestors.compact.uniq
|
256
|
+
end
|
257
|
+
|
258
|
+
# @return [Constants]
|
259
|
+
def constants
|
260
|
+
@constants ||= Constants.new(self)
|
261
|
+
end
|
262
|
+
|
201
263
|
private
|
202
264
|
|
265
|
+
# @return [Index]
|
203
266
|
def index
|
204
267
|
@indexes.last
|
205
268
|
end
|
206
269
|
|
270
|
+
# @param pinsets [Array<Enumerable<Pin::Base>>]
|
271
|
+
# @return [Boolean]
|
207
272
|
def catalog pinsets
|
208
273
|
@pinsets = pinsets
|
274
|
+
# @type [Array<Index>]
|
209
275
|
@indexes = []
|
210
276
|
pinsets.each do |pins|
|
211
277
|
if @indexes.last && pins.empty?
|
@@ -214,6 +280,8 @@ module Solargraph
|
|
214
280
|
@indexes.push(@indexes.last&.merge(pins) || Solargraph::ApiMap::Index.new(pins))
|
215
281
|
end
|
216
282
|
end
|
283
|
+
constants.clear
|
284
|
+
cached_qualify_superclass.clear
|
217
285
|
true
|
218
286
|
end
|
219
287
|
|
@@ -235,17 +303,22 @@ module Solargraph
|
|
235
303
|
index.superclass_references
|
236
304
|
end
|
237
305
|
|
238
|
-
# @return [Hash{String => Array<
|
306
|
+
# @return [Hash{String => Array<Pin::Reference::Include>}]
|
239
307
|
def include_references
|
240
308
|
index.include_references
|
241
309
|
end
|
242
310
|
|
243
|
-
# @return [Hash{String => Array<
|
311
|
+
# @return [Hash{String => Array<Solargraph::Pin::Reference::Include>}]
|
312
|
+
def include_reference_pins
|
313
|
+
index.include_reference_pins
|
314
|
+
end
|
315
|
+
|
316
|
+
# @return [Hash{String => Array<Pin::Reference::Prepend>}]
|
244
317
|
def prepend_references
|
245
318
|
index.prepend_references
|
246
319
|
end
|
247
320
|
|
248
|
-
# @return [Hash{String => Array<
|
321
|
+
# @return [Hash{String => Array<Pin::Reference::Extend>}]
|
249
322
|
def extend_references
|
250
323
|
index.extend_references
|
251
324
|
end
|
@@ -261,6 +334,41 @@ module Solargraph
|
|
261
334
|
def all_instance_variables
|
262
335
|
index.pins_by_class(Pin::InstanceVariable)
|
263
336
|
end
|
337
|
+
|
338
|
+
# @param fqns [String]
|
339
|
+
# @return [Pin::Reference::Superclass, nil]
|
340
|
+
def try_special_superclasses(fqns)
|
341
|
+
return OBJECT_SUPERCLASS_PIN if fqns == 'Boolean'
|
342
|
+
return OBJECT_SUPERCLASS_PIN if !%w[BasicObject Object].include?(fqns) && namespace_exists?(fqns)
|
343
|
+
|
344
|
+
sub = ComplexType.try_parse(fqns)
|
345
|
+
return get_superclass(sub.simplify_literals.name) if sub.literal?
|
346
|
+
|
347
|
+
get_superclass(sub.namespace) if sub.namespace != fqns
|
348
|
+
end
|
349
|
+
|
350
|
+
# @param fq_sub_tag [String]
|
351
|
+
# @return [String, nil]
|
352
|
+
def qualify_and_cache_superclass fq_sub_tag
|
353
|
+
cached_qualify_superclass[fq_sub_tag] = uncached_qualify_superclass(fq_sub_tag)
|
354
|
+
end
|
355
|
+
|
356
|
+
# @return [Hash{String => String, nil}]
|
357
|
+
def cached_qualify_superclass
|
358
|
+
@cached_qualify_superclass ||= {}
|
359
|
+
end
|
360
|
+
|
361
|
+
# @param fq_sub_tag [String]
|
362
|
+
# @return [String, nil]
|
363
|
+
def uncached_qualify_superclass fq_sub_tag
|
364
|
+
type = ComplexType.try_parse(fq_sub_tag)
|
365
|
+
return type.simplify_literals.to_s if type.literal?
|
366
|
+
ref = get_superclass(fq_sub_tag)
|
367
|
+
return unless ref
|
368
|
+
res = constants.dereference(ref)
|
369
|
+
return unless res
|
370
|
+
res + type.substring
|
371
|
+
end
|
264
372
|
end
|
265
373
|
end
|
266
374
|
end
|