solargraph 0.52.0 → 0.53.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/plugins.yml +40 -0
- data/.github/workflows/rspec.yml +1 -3
- data/.github/workflows/typecheck.yml +34 -0
- data/CHANGELOG.md +30 -0
- data/README.md +13 -16
- data/SPONSORS.md +1 -7
- data/lib/solargraph/api_map/cache.rb +59 -21
- data/lib/solargraph/api_map/store.rb +45 -9
- data/lib/solargraph/api_map.rb +152 -93
- data/lib/solargraph/bench.rb +2 -2
- data/lib/solargraph/cache.rb +29 -5
- data/lib/solargraph/complex_type/type_methods.rb +53 -8
- data/lib/solargraph/complex_type/unique_type.rb +149 -59
- data/lib/solargraph/complex_type.rb +62 -9
- 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 +146 -0
- data/lib/solargraph/gem_pins.rb +64 -0
- data/lib/solargraph/language_server/host/cataloger.rb +1 -0
- data/lib/solargraph/language_server/host/diagnoser.rb +2 -2
- data/lib/solargraph/language_server/host/dispatch.rb +10 -4
- data/lib/solargraph/language_server/host/message_worker.rb +4 -0
- data/lib/solargraph/language_server/host/sources.rb +7 -4
- data/lib/solargraph/language_server/host.rb +15 -6
- 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 +5 -2
- data/lib/solargraph/language_server/message/text_document/hover.rb +2 -0
- 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/transport/adapter.rb +16 -1
- data/lib/solargraph/language_server/transport/data_reader.rb +2 -0
- data/lib/solargraph/library.rb +58 -11
- data/lib/solargraph/location.rb +1 -0
- data/lib/solargraph/parser/comment_ripper.rb +3 -0
- data/lib/solargraph/parser/node_methods.rb +47 -8
- data/lib/solargraph/parser/node_processor/base.rb +9 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/class_methods.rb +29 -3
- data/lib/solargraph/parser/{legacy → parser_gem}/flawed_builder.rb +3 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_chainer.rb +42 -34
- data/lib/solargraph/parser/{legacy → parser_gem}/node_methods.rb +201 -29
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/alias_node.rb +1 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/args_node.rb +4 -1
- 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 +1 -1
- 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/{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 +2 -2
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/sym_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors.rb +54 -0
- data/lib/solargraph/parser/parser_gem.rb +12 -0
- data/lib/solargraph/parser/snippet.rb +2 -0
- data/lib/solargraph/parser.rb +8 -11
- data/lib/solargraph/pin/base.rb +63 -8
- data/lib/solargraph/pin/base_variable.rb +6 -2
- data/lib/solargraph/pin/block.rb +11 -6
- data/lib/solargraph/pin/closure.rb +17 -2
- data/lib/solargraph/pin/common.rb +7 -3
- data/lib/solargraph/pin/conversions.rb +33 -3
- data/lib/solargraph/pin/documenting.rb +25 -34
- data/lib/solargraph/pin/instance_variable.rb +4 -0
- data/lib/solargraph/pin/local_variable.rb +13 -1
- data/lib/solargraph/pin/method.rb +109 -15
- data/lib/solargraph/pin/namespace.rb +16 -10
- data/lib/solargraph/pin/parameter.rb +41 -10
- 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 +114 -2
- data/lib/solargraph/pin.rb +0 -1
- data/lib/solargraph/range.rb +2 -2
- data/lib/solargraph/rbs_map/conversions.rb +212 -25
- data/lib/solargraph/rbs_map/core_fills.rb +4 -26
- data/lib/solargraph/rbs_map/core_map.rb +1 -0
- data/lib/solargraph/rbs_map/core_signs.rb +2 -0
- data/lib/solargraph/rbs_map/stdlib_map.rb +2 -8
- data/lib/solargraph/rbs_map.rb +19 -9
- data/lib/solargraph/shell.rb +62 -59
- data/lib/solargraph/source/chain/array.rb +4 -1
- data/lib/solargraph/source/chain/block_symbol.rb +13 -0
- data/lib/solargraph/source/chain/call.rb +95 -26
- 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 +7 -1
- data/lib/solargraph/source/chain/or.rb +1 -1
- data/lib/solargraph/source/chain/z_super.rb +2 -2
- data/lib/solargraph/source/chain.rb +20 -4
- data/lib/solargraph/source/change.rb +3 -0
- data/lib/solargraph/source/cursor.rb +2 -0
- data/lib/solargraph/source/source_chainer.rb +6 -5
- data/lib/solargraph/source.rb +15 -16
- data/lib/solargraph/source_map/clip.rb +11 -7
- data/lib/solargraph/source_map/mapper.rb +10 -0
- data/lib/solargraph/source_map.rb +13 -3
- data/lib/solargraph/type_checker/checks.rb +10 -2
- data/lib/solargraph/type_checker.rb +74 -19
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +8 -6
- data/lib/solargraph/workspace.rb +1 -1
- 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 +11 -1
- data/lib/solargraph/yard_map/to_method.rb +11 -4
- data/lib/solargraph/yard_map.rb +0 -292
- data/lib/solargraph/yardoc.rb +52 -0
- data/lib/solargraph.rb +4 -1
- data/solargraph.gemspec +2 -2
- metadata +35 -57
- data/lib/solargraph/api_map/bundler_methods.rb +0 -22
- data/lib/solargraph/documentor.rb +0 -76
- data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +0 -23
- 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 -151
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +0 -163
- 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
@@ -51,6 +51,7 @@ module Solargraph
|
|
51
51
|
|
52
52
|
class << self
|
53
53
|
# @param filename [String]
|
54
|
+
# @param level [Symbol]
|
54
55
|
# @return [self]
|
55
56
|
def load filename, level = :normal
|
56
57
|
source = Solargraph::Source.load(filename)
|
@@ -61,6 +62,7 @@ module Solargraph
|
|
61
62
|
|
62
63
|
# @param code [String]
|
63
64
|
# @param filename [String, nil]
|
65
|
+
# @param level [Symbol]
|
64
66
|
# @return [self]
|
65
67
|
def load_string code, filename = nil, level = :normal
|
66
68
|
source = Solargraph::Source.load_string(code, filename)
|
@@ -126,11 +128,16 @@ module Solargraph
|
|
126
128
|
# @return [Boolean]
|
127
129
|
def resolved_constant? pin
|
128
130
|
return true if pin.typify(api_map).defined?
|
129
|
-
api_map.get_constants('', *pin.closure.gates)
|
130
|
-
|
131
|
-
|
131
|
+
constant_pins = api_map.get_constants('', *pin.closure.gates)
|
132
|
+
.select { |p| p.name == pin.return_type.namespace }
|
133
|
+
return true if constant_pins.find { |p| p.typify(api_map).defined? }
|
134
|
+
# will need to probe when a constant name is assigned to a
|
135
|
+
# class/module (alias)
|
136
|
+
return true if constant_pins.find { |p| p.probe(api_map).defined? }
|
137
|
+
false
|
132
138
|
end
|
133
139
|
|
140
|
+
# @param pin [Pin::Base]
|
134
141
|
def virtual_pin? pin
|
135
142
|
pin.location && source_map.source.comment_at?(pin.location.range.ending)
|
136
143
|
end
|
@@ -158,7 +165,11 @@ module Solargraph
|
|
158
165
|
end
|
159
166
|
end
|
160
167
|
end
|
168
|
+
# @todo Should be able to probe type of name and data here
|
169
|
+
# @param name [String]
|
170
|
+
# @param data [Hash{Symbol => BasicObject}]
|
161
171
|
params.each_pair do |name, data|
|
172
|
+
# @type [ComplexType]
|
162
173
|
type = data[:qualified]
|
163
174
|
if type.undefined?
|
164
175
|
result.push Problem.new(pin.location, "Unresolved type #{data[:tagged]} for #{name} param on #{pin.path}", pin: pin)
|
@@ -167,6 +178,7 @@ module Solargraph
|
|
167
178
|
result
|
168
179
|
end
|
169
180
|
|
181
|
+
# @return [Array<Pin::Base>]
|
170
182
|
def ignored_pins
|
171
183
|
@ignored_pins ||= []
|
172
184
|
end
|
@@ -214,6 +226,7 @@ module Solargraph
|
|
214
226
|
source_map.pins_by_class(Pin::BaseVariable) + source_map.locals.select { |pin| pin.is_a?(Pin::LocalVariable) }
|
215
227
|
end
|
216
228
|
|
229
|
+
# @return [Array<Problem>]
|
217
230
|
def const_problems
|
218
231
|
return [] unless rules.validate_consts?
|
219
232
|
result = []
|
@@ -232,6 +245,7 @@ module Solargraph
|
|
232
245
|
result
|
233
246
|
end
|
234
247
|
|
248
|
+
# @return [Array<Problem>]
|
235
249
|
def call_problems
|
236
250
|
result = []
|
237
251
|
Solargraph::Parser::NodeMethods.call_nodes_from(source_map.source.node).each do |call|
|
@@ -271,6 +285,7 @@ module Solargraph
|
|
271
285
|
# @param block_pin [Solargraph::Pin::Base]
|
272
286
|
# @param locals [Array<Solargraph::Pin::Base>]
|
273
287
|
# @param location [Solargraph::Location]
|
288
|
+
# @return [Array<Problem>]
|
274
289
|
def argument_problems_for chain, api_map, block_pin, locals, location
|
275
290
|
result = []
|
276
291
|
base = chain
|
@@ -298,6 +313,9 @@ module Solargraph
|
|
298
313
|
all_errors = []
|
299
314
|
pin.signatures.sort { |sig| sig.parameters.length }.each do |sig|
|
300
315
|
errors = []
|
316
|
+
# @todo these should be able to be probed
|
317
|
+
# @param par [Parameter]
|
318
|
+
# @param idx [Integer]
|
301
319
|
sig.parameters.each_with_index do |par, idx|
|
302
320
|
argchain = base.links.last.arguments[idx]
|
303
321
|
if argchain.nil?
|
@@ -311,7 +329,7 @@ module Solargraph
|
|
311
329
|
end
|
312
330
|
if argchain
|
313
331
|
if par.decl != :arg
|
314
|
-
errors.concat kwarg_problems_for argchain, api_map, block_pin, locals, location, pin, params, idx
|
332
|
+
errors.concat kwarg_problems_for sig, argchain, api_map, block_pin, locals, location, pin, params, idx
|
315
333
|
next
|
316
334
|
else
|
317
335
|
ptype = params.key?(par.name) ? params[par.name][:qualified] : ComplexType::UNDEFINED
|
@@ -343,10 +361,21 @@ module Solargraph
|
|
343
361
|
result
|
344
362
|
end
|
345
363
|
|
346
|
-
|
364
|
+
# @param sig [Pin::Signature]
|
365
|
+
# @param argchain [Source::Chain]
|
366
|
+
# @param api_map [ApiMap]
|
367
|
+
# @param block_pin [Pin::Block]
|
368
|
+
# @param locals [Array<Pin::LocalVariable>]
|
369
|
+
# @param location [Location]
|
370
|
+
# @param pin [Pin::Method]
|
371
|
+
# @param params [Hash{String => [nil, Hash]}]
|
372
|
+
# @param idx [Integer]
|
373
|
+
#
|
374
|
+
# @return [Array<Problem>]
|
375
|
+
def kwarg_problems_for sig, argchain, api_map, block_pin, locals, location, pin, params, idx
|
347
376
|
result = []
|
348
377
|
kwargs = convert_hash(argchain.node)
|
349
|
-
par =
|
378
|
+
par = sig.parameters[idx]
|
350
379
|
argchain = kwargs[par.name.to_sym]
|
351
380
|
if par.decl == :kwrestarg || (par.decl == :optarg && idx == pin.parameters.length - 1 && par.asgn_code == '{}')
|
352
381
|
result.concat kwrestarg_problems_for(api_map, block_pin, locals, location, pin, params, kwargs)
|
@@ -371,6 +400,14 @@ module Solargraph
|
|
371
400
|
result
|
372
401
|
end
|
373
402
|
|
403
|
+
# @param api_map [ApiMap]
|
404
|
+
# @param block_pin [Pin::Block]
|
405
|
+
# @param locals [Array<Pin::LocalVariable>]
|
406
|
+
# @param location [Location]
|
407
|
+
# @param pin [Pin::Method]
|
408
|
+
# @param params [Hash{String => [nil, Hash]}]
|
409
|
+
# @param kwargs [Hash{Symbol => Source::Chain}]
|
410
|
+
# @return [Array<Problem>]
|
374
411
|
def kwrestarg_problems_for(api_map, block_pin, locals, location, pin, params, kwargs)
|
375
412
|
result = []
|
376
413
|
kwargs.each_pair do |pname, argchain|
|
@@ -384,8 +421,8 @@ module Solargraph
|
|
384
421
|
result
|
385
422
|
end
|
386
423
|
|
387
|
-
# @param [Pin::Method]
|
388
|
-
# @return [Hash]
|
424
|
+
# @param pin [Pin::Method]
|
425
|
+
# @return [Hash{String => Hash{Symbol => BaseObject}}]
|
389
426
|
def param_hash(pin)
|
390
427
|
tags = pin.docstring.tags(:param)
|
391
428
|
return {} if tags.empty?
|
@@ -400,10 +437,12 @@ module Solargraph
|
|
400
437
|
result
|
401
438
|
end
|
402
439
|
|
403
|
-
# @param [Array<Pin::Method>]
|
404
|
-
# @return [Hash]
|
440
|
+
# @param pins [Array<Pin::Method>]
|
441
|
+
# @return [Hash{String => Hash{Symbol => BasicObject}}]
|
405
442
|
def first_param_hash(pins)
|
406
443
|
pins.each do |pin|
|
444
|
+
# @todo this assignment from parametric use of Hash should not lose its generic
|
445
|
+
# @type [Hash{String => Hash{Symbol => BasicObject}]
|
407
446
|
result = param_hash(pin)
|
408
447
|
return result unless result.empty?
|
409
448
|
end
|
@@ -417,6 +456,7 @@ module Solargraph
|
|
417
456
|
end
|
418
457
|
|
419
458
|
# True if the pin is either internal (part of the workspace) or from the core/stdlib
|
459
|
+
# @param pin [Pin::Base]
|
420
460
|
def internal_or_core? pin
|
421
461
|
# @todo RBS pins are not necessarily core/stdlib pins
|
422
462
|
internal?(pin) || pin.source == :rbs
|
@@ -427,6 +467,7 @@ module Solargraph
|
|
427
467
|
!internal? pin
|
428
468
|
end
|
429
469
|
|
470
|
+
# @param pin [Pin::Base]
|
430
471
|
def declared_externally? pin
|
431
472
|
return true if pin.assignment.nil?
|
432
473
|
chain = Solargraph::Parser.chain(pin.assignment, filename)
|
@@ -454,6 +495,10 @@ module Solargraph
|
|
454
495
|
true
|
455
496
|
end
|
456
497
|
|
498
|
+
# @param pin [Pin::Method]
|
499
|
+
# @param arguments [Array<Source::Chain>]
|
500
|
+
# @param location [Location]
|
501
|
+
# @return [Array<Problem>]
|
457
502
|
def arity_problems_for pin, arguments, location
|
458
503
|
results = pin.signatures.map do |sig|
|
459
504
|
r = parameterized_arity_problems_for(pin, sig.parameters, arguments, location)
|
@@ -463,14 +508,15 @@ module Solargraph
|
|
463
508
|
results.first
|
464
509
|
end
|
465
510
|
|
511
|
+
# @param pin [Pin::Method]
|
512
|
+
# @param parameters [Array<Pin::Parameter>]
|
513
|
+
# @param arguments [Array<Source::Chain>]
|
514
|
+
# @param location [Location]
|
515
|
+
# @return [Array<Problem>]
|
466
516
|
def parameterized_arity_problems_for(pin, parameters, arguments, location)
|
467
517
|
return [] unless pin.explicit?
|
468
518
|
return [] if parameters.empty? && arguments.empty?
|
469
519
|
return [] if pin.anon_splat?
|
470
|
-
if parameters.empty?
|
471
|
-
return [] if arguments.length == 1 && arguments.last.links.last.is_a?(Source::Chain::BlockVariable)
|
472
|
-
return [Problem.new(location, "Too many arguments to #{pin.path}")]
|
473
|
-
end
|
474
520
|
unchecked = arguments.clone
|
475
521
|
add_params = 0
|
476
522
|
if unchecked.empty? && parameters.any? { |param| param.decl == :kwarg }
|
@@ -510,9 +556,6 @@ module Solargraph
|
|
510
556
|
return [] if parameters.any?(&:rest?)
|
511
557
|
opt = optional_param_count(parameters)
|
512
558
|
return [] if unchecked.length <= req + opt
|
513
|
-
if unchecked.length == req + opt + 1 && unchecked.last.links.last.is_a?(Source::Chain::BlockVariable)
|
514
|
-
return []
|
515
|
-
end
|
516
559
|
if req + add_params + 1 == unchecked.length && any_splatted_call?(unchecked.map(&:node)) && (parameters.map(&:decl) & [:kwarg, :kwoptarg, :kwrestarg]).any?
|
517
560
|
return []
|
518
561
|
end
|
@@ -528,20 +571,30 @@ module Solargraph
|
|
528
571
|
[]
|
529
572
|
end
|
530
573
|
|
574
|
+
# @param parameters [Enumerable<Pin::Parameter>]
|
575
|
+
# @todo need to use generic types in method to choose correct
|
576
|
+
# signature and generate Integer as return type
|
577
|
+
# @sg-ignore
|
578
|
+
# @return [Integer]
|
531
579
|
def required_param_count(parameters)
|
532
580
|
parameters.sum { |param| %i[arg kwarg].include?(param.decl) ? 1 : 0 }
|
533
581
|
end
|
534
582
|
|
583
|
+
# @param parameters [Enumerable<Pin::Parameter>]
|
535
584
|
# @param pin [Pin::Method]
|
585
|
+
# @return [Integer]
|
536
586
|
def optional_param_count(parameters)
|
537
587
|
parameters.select { |p| p.decl == :optarg }.length
|
538
588
|
end
|
539
589
|
|
590
|
+
# @param pin [Pin::Method]
|
540
591
|
def abstract? pin
|
541
|
-
pin.docstring.has_tag?(
|
542
|
-
(pin.closure && pin.closure.docstring.has_tag?(
|
592
|
+
pin.docstring.has_tag?('abstract') ||
|
593
|
+
(pin.closure && pin.closure.docstring.has_tag?('abstract'))
|
543
594
|
end
|
544
595
|
|
596
|
+
# @param pin [Pin::Base]
|
597
|
+
# @return [Array<Source::Chain>]
|
545
598
|
def fake_args_for(pin)
|
546
599
|
args = []
|
547
600
|
with_opts = false
|
@@ -562,6 +615,8 @@ module Solargraph
|
|
562
615
|
args
|
563
616
|
end
|
564
617
|
|
618
|
+
# @param problems [Array<Problem>]
|
619
|
+
# @return [Array<Problem>]
|
565
620
|
def without_ignored problems
|
566
621
|
problems.reject do |problem|
|
567
622
|
node = source_map.source.node_at(problem.location.range.start.line, problem.location.range.start.column)
|
data/lib/solargraph/version.rb
CHANGED
@@ -14,7 +14,7 @@ module Solargraph
|
|
14
14
|
# @return [String]
|
15
15
|
attr_reader :directory
|
16
16
|
|
17
|
-
# @return [Hash]
|
17
|
+
# @return [Hash{String => BasicObject}]
|
18
18
|
attr_reader :raw_data
|
19
19
|
|
20
20
|
# @param directory [String]
|
@@ -41,6 +41,7 @@ module Solargraph
|
|
41
41
|
@excluded ||= process_exclusions(@raw_data['exclude'])
|
42
42
|
end
|
43
43
|
|
44
|
+
# @param filename [String]
|
44
45
|
def allow? filename
|
45
46
|
filename = File.absolute_path(filename, directory)
|
46
47
|
filename.start_with?(directory) &&
|
@@ -111,7 +112,7 @@ module Solargraph
|
|
111
112
|
|
112
113
|
# @return [String]
|
113
114
|
def global_config_path
|
114
|
-
ENV['SOLARGRAPH_GLOBAL_CONFIG'] ||
|
115
|
+
ENV['SOLARGRAPH_GLOBAL_CONFIG'] ||
|
115
116
|
File.join(Dir.home, '.config', 'solargraph', 'config.yml')
|
116
117
|
end
|
117
118
|
|
@@ -121,7 +122,7 @@ module Solargraph
|
|
121
122
|
File.join(@directory, '.solargraph.yml')
|
122
123
|
end
|
123
124
|
|
124
|
-
# @return [Hash]
|
125
|
+
# @return [Hash{String => Array, Hash, Integer}]
|
125
126
|
def config_data
|
126
127
|
workspace_config = read_config(workspace_config_path)
|
127
128
|
global_config = read_config(global_config_path)
|
@@ -136,15 +137,15 @@ module Solargraph
|
|
136
137
|
|
137
138
|
# Read a .solargraph yaml config
|
138
139
|
#
|
139
|
-
# @param
|
140
|
-
# @return [Hash, nil]
|
140
|
+
# @param config_path [String]
|
141
|
+
# @return [Hash{String => Array, Hash, Integer}, nil]
|
141
142
|
def read_config config_path = ''
|
142
143
|
return nil if config_path.empty?
|
143
144
|
return nil unless File.file?(config_path)
|
144
145
|
YAML.safe_load(File.read(config_path))
|
145
146
|
end
|
146
147
|
|
147
|
-
# @return [Hash]
|
148
|
+
# @return [Hash{String => Array, Hash, Integer}]
|
148
149
|
def default_config
|
149
150
|
{
|
150
151
|
'include' => ['**/*.rb'],
|
@@ -222,6 +223,7 @@ module Solargraph
|
|
222
223
|
glob.gsub(/(\/\*|\/\*\*\/\*\*?)$/, '')
|
223
224
|
end
|
224
225
|
|
226
|
+
# @return [Array<String>]
|
225
227
|
def excluded_directories
|
226
228
|
@raw_data['exclude']
|
227
229
|
.select { |g| glob_is_directory?(g) }
|
data/lib/solargraph/workspace.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'open3'
|
4
|
-
require 'rubygems'
|
5
4
|
require 'json'
|
6
5
|
|
7
6
|
module Solargraph
|
@@ -200,6 +199,7 @@ module Solargraph
|
|
200
199
|
config.require_paths.map{|p| File.join(directory, p)}
|
201
200
|
end
|
202
201
|
|
202
|
+
# @return [void]
|
203
203
|
def require_plugins
|
204
204
|
config.plugins.each do |plugin|
|
205
205
|
begin
|
@@ -4,13 +4,19 @@ module Solargraph
|
|
4
4
|
class YardMap
|
5
5
|
class Cache
|
6
6
|
def initialize
|
7
|
+
# @type [Hash{String => Array<Solargraph::Pin::Base>}]
|
7
8
|
@path_pins = {}
|
8
9
|
end
|
9
10
|
|
11
|
+
# @param path [String]
|
12
|
+
# @param pins [Array<Solargraph::Pin::Base>]
|
13
|
+
# @return [Array<Solargraph::Pin::Base>]
|
10
14
|
def set_path_pins path, pins
|
11
15
|
@path_pins[path] = pins
|
12
16
|
end
|
13
17
|
|
18
|
+
# @param path [String]
|
19
|
+
# @return [Array<Solargraph::Pin::Base>]
|
14
20
|
def get_path_pins path
|
15
21
|
@path_pins[path]
|
16
22
|
end
|
@@ -4,7 +4,7 @@ module Solargraph
|
|
4
4
|
module_function
|
5
5
|
|
6
6
|
# @param code_object [YARD::CodeObjects::Base]
|
7
|
-
# @param spec [Gem::Specification]
|
7
|
+
# @param spec [Gem::Specification, nil]
|
8
8
|
# @return [Solargraph::Location, nil]
|
9
9
|
def object_location code_object, spec
|
10
10
|
return nil if spec.nil? || code_object.nil? || code_object.file.nil? || code_object.line.nil?
|
@@ -6,6 +6,13 @@ module Solargraph
|
|
6
6
|
module ToMethod
|
7
7
|
extend YardMap::Helpers
|
8
8
|
|
9
|
+
# @param code_object [YARD::CodeObjects::Base]
|
10
|
+
# @param name [String, nil]
|
11
|
+
# @param scope [Symbol, nil]
|
12
|
+
# @param visibility [Symbol, nil]
|
13
|
+
# @param closure [Solargraph::Pin::Namespace, nil]
|
14
|
+
# @param spec [Gem::Specification, nil]
|
15
|
+
# @return [Solargraph::Pin::Method]
|
9
16
|
def self.make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
|
10
17
|
closure ||= Solargraph::Pin::Namespace.new(
|
11
18
|
name: code_object.namespace.to_s,
|
@@ -32,6 +39,9 @@ module Solargraph
|
|
32
39
|
private
|
33
40
|
|
34
41
|
# @param code_object [YARD::CodeObjects::Base]
|
42
|
+
# @param location [Location],
|
43
|
+
# @param comments [String]
|
44
|
+
# @param pin [Pin::Base]
|
35
45
|
# @return [Array<Solargraph::Pin::Parameter>]
|
36
46
|
def get_parameters code_object, location, comments, pin
|
37
47
|
return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
|
@@ -51,7 +61,7 @@ module Solargraph
|
|
51
61
|
end
|
52
62
|
end
|
53
63
|
|
54
|
-
# @param a [Array]
|
64
|
+
# @param a [Array<String>]
|
55
65
|
# @return [String]
|
56
66
|
def arg_name a
|
57
67
|
a[0].gsub(/[^a-z0-9_]/i, '')
|
@@ -7,6 +7,8 @@ module Solargraph
|
|
7
7
|
module_function
|
8
8
|
|
9
9
|
# @param code_object [YARD::CodeObjects::Base]
|
10
|
+
# @param location [Solargraph::Location]
|
11
|
+
# @param comments [String]
|
10
12
|
# @return [Array<Solargraph::Pin::Parameter>]
|
11
13
|
def get_parameters code_object, location, comments
|
12
14
|
return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
|
@@ -26,7 +28,7 @@ module Solargraph
|
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
29
|
-
# @param a [Array]
|
31
|
+
# @param a [Array<String>]
|
30
32
|
# @return [String]
|
31
33
|
def arg_name a
|
32
34
|
a[0].gsub(/[^a-z0-9_]/i, '')
|
@@ -52,10 +54,15 @@ module Solargraph
|
|
52
54
|
end
|
53
55
|
private_constant :InnerMethods
|
54
56
|
|
55
|
-
|
56
|
-
# extend YardMixin
|
57
|
-
extend Helpers
|
57
|
+
include Helpers
|
58
58
|
|
59
|
+
# @param code_object [YARD::CodeObjects::Base]
|
60
|
+
# @param name [String, nil]
|
61
|
+
# @param scope [Symbol, nil]
|
62
|
+
# @param visibility [Symbol, nil]
|
63
|
+
# @param closure [Solargraph::Pin::Base, nil]
|
64
|
+
# @param spec [Solargraph::Pin::Base, nil]
|
65
|
+
# @return [Solargraph::Pin::Method]
|
59
66
|
def make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
|
60
67
|
closure ||= Solargraph::Pin::Namespace.new(
|
61
68
|
name: code_object.namespace.to_s,
|