solargraph 0.47.2 → 0.54.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/FUNDING.yml +1 -0
- data/.github/workflows/plugins.yml +40 -0
- data/.github/workflows/rspec.yml +4 -8
- data/.github/workflows/typecheck.yml +34 -0
- data/.yardopts +2 -2
- data/CHANGELOG.md +166 -3
- data/LICENSE +1 -1
- data/README.md +19 -16
- data/SPONSORS.md +2 -9
- 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 +68 -15
- data/lib/solargraph/api_map.rb +238 -112
- data/lib/solargraph/bench.rb +3 -2
- data/lib/solargraph/cache.rb +77 -0
- data/lib/solargraph/complex_type/type_methods.rb +116 -35
- data/lib/solargraph/complex_type/unique_type.rb +261 -33
- data/lib/solargraph/complex_type.rb +149 -30
- data/lib/solargraph/convention/rakefile.rb +17 -0
- data/lib/solargraph/convention.rb +2 -3
- 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 +23 -8
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +4 -1
- 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 +4 -0
- data/lib/solargraph/language_server/host/sources.rb +8 -65
- data/lib/solargraph/language_server/host.rb +88 -93
- data/lib/solargraph/language_server/message/base.rb +1 -1
- 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/extended/download_core.rb +1 -5
- data/lib/solargraph/language_server/message/initialize.rb +27 -0
- data/lib/solargraph/language_server/message/initialized.rb +1 -0
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +4 -1
- data/lib/solargraph/language_server/message/text_document/formatting.rb +5 -4
- data/lib/solargraph/language_server/message/text_document/hover.rb +2 -0
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +1 -6
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +24 -0
- data/lib/solargraph/language_server/message/text_document.rb +1 -1
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +5 -0
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +10 -3
- data/lib/solargraph/language_server/message.rb +1 -0
- data/lib/solargraph/language_server/progress.rb +118 -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 +231 -104
- data/lib/solargraph/location.rb +1 -0
- 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 +57 -41
- 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 +53 -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 +14 -4
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/cvasgn_node.rb +1 -1
- data/lib/solargraph/parser/{rubyvm → 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 +2 -2
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +47 -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/parser_gem/node_processors/sclass_node.rb +42 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/send_node.rb +7 -5
- data/lib/solargraph/parser/{legacy → 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 +9 -10
- data/lib/solargraph/pin/base.rb +69 -11
- data/lib/solargraph/pin/base_variable.rb +40 -7
- data/lib/solargraph/pin/block.rb +81 -33
- data/lib/solargraph/pin/closure.rb +17 -2
- data/lib/solargraph/pin/common.rb +7 -3
- data/lib/solargraph/pin/conversions.rb +34 -8
- data/lib/solargraph/pin/delegated_method.rb +101 -0
- data/lib/solargraph/pin/documenting.rb +25 -32
- data/lib/solargraph/pin/instance_variable.rb +4 -0
- data/lib/solargraph/pin/local_variable.rb +13 -1
- data/lib/solargraph/pin/method.rb +273 -17
- data/lib/solargraph/pin/namespace.rb +17 -1
- data/lib/solargraph/pin/parameter.rb +40 -28
- data/lib/solargraph/pin/reference/override.rb +2 -2
- data/lib/solargraph/pin/reference.rb +8 -0
- data/lib/solargraph/pin/search.rb +4 -4
- data/lib/solargraph/pin/signature.rb +143 -0
- data/lib/solargraph/pin.rb +2 -1
- data/lib/solargraph/range.rb +4 -6
- data/lib/solargraph/rbs_map/conversions.rb +607 -0
- data/lib/solargraph/rbs_map/core_fills.rb +50 -0
- data/lib/solargraph/rbs_map/core_map.rb +28 -0
- data/lib/solargraph/rbs_map/stdlib_map.rb +33 -0
- data/lib/solargraph/rbs_map.rb +92 -0
- data/lib/solargraph/shell.rb +85 -59
- data/lib/solargraph/source/chain/array.rb +32 -0
- data/lib/solargraph/source/chain/block_symbol.rb +13 -0
- data/lib/solargraph/source/chain/call.rb +125 -61
- 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 +8 -2
- data/lib/solargraph/source/chain/or.rb +1 -1
- data/lib/solargraph/source/chain/z_super.rb +3 -3
- data/lib/solargraph/source/chain.rb +64 -14
- data/lib/solargraph/source/change.rb +3 -0
- data/lib/solargraph/source/cursor.rb +2 -0
- data/lib/solargraph/source/source_chainer.rb +8 -5
- data/lib/solargraph/source/updater.rb +1 -0
- data/lib/solargraph/source.rb +18 -63
- data/lib/solargraph/source_map/clip.rb +31 -23
- data/lib/solargraph/source_map/mapper.rb +23 -7
- data/lib/solargraph/source_map.rb +36 -11
- data/lib/solargraph/type_checker/checks.rb +10 -2
- data/lib/solargraph/type_checker.rb +229 -100
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/views/environment.erb +2 -2
- data/lib/solargraph/workspace/config.rb +15 -11
- data/lib/solargraph/workspace.rb +41 -17
- 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 +23 -7
- 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 -443
- data/lib/solargraph/yard_tags.rb +20 -0
- data/lib/solargraph/yardoc.rb +52 -0
- data/lib/solargraph.rb +8 -6
- data/solargraph.gemspec +19 -8
- metadata +164 -99
- data/.travis.yml +0 -19
- data/lib/solargraph/api_map/bundler_methods.rb +0 -22
- data/lib/solargraph/compat.rb +0 -37
- data/lib/solargraph/convention/rspec.rb +0 -30
- 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 -35
- data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +0 -15
- data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +0 -23
- data/lib/solargraph/parser/legacy/node_processors/def_node.rb +0 -63
- data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +0 -21
- data/lib/solargraph/parser/legacy/node_processors.rb +0 -54
- data/lib/solargraph/parser/legacy.rb +0 -12
- data/lib/solargraph/parser/rubyvm/class_methods.rb +0 -144
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +0 -160
- data/lib/solargraph/parser/rubyvm/node_methods.rb +0 -315
- 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 -22
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +0 -57
- 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 -45
- data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +0 -21
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +0 -15
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +0 -277
- data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +0 -18
- data/lib/solargraph/parser/rubyvm/node_processors.rb +0 -63
- data/lib/solargraph/parser/rubyvm.rb +0 -40
- data/lib/solargraph/yard_map/core_docs.rb +0 -170
- data/lib/solargraph/yard_map/core_fills.rb +0 -208
- data/lib/solargraph/yard_map/core_gen.rb +0 -76
- data/lib/solargraph/yard_map/rdoc_to_yard.rb +0 -140
- data/lib/solargraph/yard_map/stdlib_fills.rb +0 -43
- data/lib/yard-solargraph.rb +0 -33
- data/yardoc/2.2.2.tar.gz +0 -0
@@ -1,11 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'set'
|
4
3
|
|
5
4
|
module Solargraph
|
6
5
|
class ApiMap
|
7
6
|
class Store
|
8
|
-
# @return [
|
7
|
+
# @return [Array<Solargraph::Pin::Base>]
|
9
8
|
attr_reader :pins
|
10
9
|
|
11
10
|
# @param pins [Enumerable<Solargraph::Pin::Base>]
|
@@ -26,7 +25,7 @@ module Solargraph
|
|
26
25
|
# @param fqns [String]
|
27
26
|
# @param scope [Symbol]
|
28
27
|
# @param visibility [Array<Symbol>]
|
29
|
-
# @return [Enumerable<Solargraph::Pin::
|
28
|
+
# @return [Enumerable<Solargraph::Pin::Method>]
|
30
29
|
def get_methods fqns, scope: :instance, visibility: [:public]
|
31
30
|
namespace_children(fqns).select do |pin|
|
32
31
|
pin.is_a?(Pin::Method) && pin.scope == scope && visibility.include?(pin.visibility)
|
@@ -61,11 +60,15 @@ module Solargraph
|
|
61
60
|
end
|
62
61
|
|
63
62
|
# @param path [String]
|
64
|
-
# @return [
|
63
|
+
# @return [Array<Solargraph::Pin::Base>]
|
65
64
|
def get_path_pins path
|
66
65
|
path_pin_hash[path] || []
|
67
66
|
end
|
68
67
|
|
68
|
+
def cacheable_pins
|
69
|
+
@cacheable_pins ||= pins_by_class(Pin::Namespace) + pins_by_class(Pin::Constant) + pins_by_class(Pin::Method) + pins_by_class(Pin::Reference)
|
70
|
+
end
|
71
|
+
|
69
72
|
# @param fqns [String]
|
70
73
|
# @param scope [Symbol] :class or :instance
|
71
74
|
# @return [Enumerable<Solargraph::Pin::Base>]
|
@@ -97,7 +100,7 @@ module Solargraph
|
|
97
100
|
@namespaces ||= Set.new
|
98
101
|
end
|
99
102
|
|
100
|
-
# @return [
|
103
|
+
# @return [Array<Solargraph::Pin::Base>]
|
101
104
|
def namespace_pins
|
102
105
|
pins_by_class(Solargraph::Pin::Namespace)
|
103
106
|
end
|
@@ -117,7 +120,7 @@ module Solargraph
|
|
117
120
|
result
|
118
121
|
end
|
119
122
|
|
120
|
-
# @return [Hash]
|
123
|
+
# @return [Hash{String => YARD::Tags::MacroDirective}]
|
121
124
|
def named_macros
|
122
125
|
@named_macros ||= begin
|
123
126
|
result = {}
|
@@ -141,14 +144,15 @@ module Solargraph
|
|
141
144
|
to_s
|
142
145
|
end
|
143
146
|
|
144
|
-
# @
|
145
|
-
# @
|
147
|
+
# @generic T
|
148
|
+
# @param klass [Class<T>]
|
149
|
+
# @return [Array<T>]
|
146
150
|
def pins_by_class klass
|
147
|
-
@
|
151
|
+
# @type [Set<Solargraph::Pin::Base>]
|
152
|
+
s = Set.new
|
153
|
+
@pin_select_cache[klass] ||= @pin_class_hash.each_with_object(s) { |(key, o), n| n.merge(o) if key <= klass }
|
148
154
|
end
|
149
155
|
|
150
|
-
private
|
151
|
-
|
152
156
|
# @param fqns [String]
|
153
157
|
# @return [Array<Solargraph::Pin::Namespace>]
|
154
158
|
def fqns_pins fqns
|
@@ -164,6 +168,9 @@ module Solargraph
|
|
164
168
|
fqns_pins_map[[base, name]]
|
165
169
|
end
|
166
170
|
|
171
|
+
private
|
172
|
+
|
173
|
+
# @return [Hash{::Array(String, String) => ::Array<Pin::Namespace>}]
|
167
174
|
def fqns_pins_map
|
168
175
|
@fqns_pins_map ||= Hash.new do |h, (base, name)|
|
169
176
|
value = namespace_children(base).select { |pin| pin.name == name && pin.is_a?(Pin::Namespace) }
|
@@ -176,18 +183,22 @@ module Solargraph
|
|
176
183
|
pins_by_class(Pin::Symbol)
|
177
184
|
end
|
178
185
|
|
186
|
+
# @return [Hash{String => Array<String>}]
|
179
187
|
def superclass_references
|
180
188
|
@superclass_references ||= {}
|
181
189
|
end
|
182
190
|
|
191
|
+
# @return [Hash{String => Array<String>}]
|
183
192
|
def include_references
|
184
193
|
@include_references ||= {}
|
185
194
|
end
|
186
195
|
|
196
|
+
# @return [Hash{String => Array<String>}]
|
187
197
|
def prepend_references
|
188
198
|
@prepend_references ||= {}
|
189
199
|
end
|
190
200
|
|
201
|
+
# @return [Hash{String => Array<String>}]
|
191
202
|
def extend_references
|
192
203
|
@extend_references ||= {}
|
193
204
|
end
|
@@ -198,31 +209,58 @@ module Solargraph
|
|
198
209
|
namespace_map[name] || []
|
199
210
|
end
|
200
211
|
|
201
|
-
# @return [Hash
|
212
|
+
# @return [Hash{String => Enumerable<Pin::Base>}
|
202
213
|
def namespace_map
|
203
214
|
@namespace_map ||= {}
|
204
215
|
end
|
205
216
|
|
217
|
+
# @return [Enumerable<Pin::InstanceVariable>]
|
206
218
|
def all_instance_variables
|
207
219
|
pins_by_class(Pin::InstanceVariable)
|
208
220
|
end
|
209
221
|
|
222
|
+
# @return [Hash{String => Array<Pin::Base>}]
|
210
223
|
def path_pin_hash
|
211
224
|
@path_pin_hash ||= {}
|
212
225
|
end
|
213
226
|
|
227
|
+
# Add references to a map
|
228
|
+
#
|
229
|
+
# @param h [Hash{String => Pin:Base}]
|
230
|
+
# @param reference_pin [Pin::Reference]
|
231
|
+
#
|
232
|
+
# @return [void]
|
233
|
+
def store_parametric_reference(h, reference_pin)
|
234
|
+
referenced_ns = reference_pin.name
|
235
|
+
referenced_tag_params = reference_pin.generic_values
|
236
|
+
referenced_tag = referenced_ns +
|
237
|
+
if referenced_tag_params && referenced_tag_params.length > 0
|
238
|
+
"<" + referenced_tag_params.join(', ') + ">"
|
239
|
+
else
|
240
|
+
''
|
241
|
+
end
|
242
|
+
referencing_ns = reference_pin.namespace
|
243
|
+
h[referencing_ns] ||= []
|
244
|
+
h[referencing_ns].push referenced_tag
|
245
|
+
end
|
246
|
+
|
214
247
|
# @return [void]
|
215
248
|
def index
|
216
249
|
set = pins.to_set
|
217
250
|
@pin_class_hash = set.classify(&:class).transform_values(&:to_a)
|
251
|
+
# @type [Hash{Class => ::Array<Solargraph::Pin::Base>}]
|
218
252
|
@pin_select_cache = {}
|
219
253
|
@namespace_map = set.classify(&:namespace)
|
220
254
|
@path_pin_hash = set.classify(&:path)
|
221
255
|
@namespaces = @path_pin_hash.keys.compact.to_set
|
222
256
|
pins_by_class(Pin::Reference::Include).each do |pin|
|
223
|
-
include_references
|
224
|
-
include_references[pin.namespace].push pin.name
|
257
|
+
store_parametric_reference(include_references, pin)
|
225
258
|
end
|
259
|
+
# @todo move the rest of these reference pins over to use
|
260
|
+
# generic types, adding rbs_map/conversions.rb code to
|
261
|
+
# populate type parameters and adding related specs ensuring
|
262
|
+
# the generics get resolved, along with any api_map.rb
|
263
|
+
# changes needed in
|
226
264
|
pins_by_class(Pin::Reference::Prepend).each do |pin|
|
227
265
|
prepend_references[pin.namespace] ||= []
|
228
266
|
prepend_references[pin.namespace].push pin.name
|
@@ -247,10 +285,25 @@ module Solargraph
|
|
247
285
|
end
|
248
286
|
ovr.tags.each do |tag|
|
249
287
|
pin.docstring.add_tag(tag)
|
250
|
-
|
288
|
+
redefine_return_type pin, tag
|
289
|
+
if new_pin
|
290
|
+
new_pin.docstring.add_tag(tag)
|
291
|
+
redefine_return_type new_pin, tag
|
292
|
+
end
|
251
293
|
end
|
252
294
|
end
|
253
295
|
end
|
296
|
+
|
297
|
+
# @param pin [Pin::Base]
|
298
|
+
# @param tag [String]
|
299
|
+
# @return [void]
|
300
|
+
def redefine_return_type pin, tag
|
301
|
+
return unless pin && tag.tag_name == 'return'
|
302
|
+
pin.instance_variable_set(:@return_type, ComplexType.try_parse(tag.type))
|
303
|
+
pin.signatures.each do |sig|
|
304
|
+
sig.instance_variable_set(:@return_type, ComplexType.try_parse(tag.type))
|
305
|
+
end
|
306
|
+
end
|
254
307
|
end
|
255
308
|
end
|
256
309
|
end
|