solargraph 0.15.3 → 0.15.4
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/lib/solargraph/api_map.rb +40 -6
- data/lib/solargraph/api_map/source.rb +10 -1
- data/lib/solargraph/api_map/source_to_yard.rb +1 -1
- data/lib/solargraph/code_map.rb +13 -9
- data/lib/solargraph/server.rb +1 -1
- data/lib/solargraph/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24b597ba06561ddd1bc1a8b4552b7d3bb1ee3867
|
4
|
+
data.tar.gz: 37bc48eabc24b26b736b64f451402faa0cce7624
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9bdf2c98784584111834a166a87daab38c94aa9158db3efd05e655651b5b050afdcf488a7d33b78704f9cb04274a137ca047855df93dd1e91a9b010ce69b0b4a
|
7
|
+
data.tar.gz: e7de68f3751c3a86cd7ed7c3ea3003a902ad72cf6fab8cac6f05a13190118b360e0da4926c707ffdaf5a7075a54a23c12e5e6b665d82279653cb3d5335020c80
|
data/lib/solargraph/api_map.rb
CHANGED
@@ -187,7 +187,7 @@ module Solargraph
|
|
187
187
|
resolved = find_namespace_pins(parts.join('::'))
|
188
188
|
resolved.each do |pin|
|
189
189
|
visi = :public
|
190
|
-
visi = :private if root != '' and pin.path == fqns
|
190
|
+
visi = :private if namespace == '' and root != '' and pin.path == fqns
|
191
191
|
result.concat inner_get_constants(pin.path, skip, true, visi)
|
192
192
|
end
|
193
193
|
end
|
@@ -338,6 +338,7 @@ module Solargraph
|
|
338
338
|
suggest_unique_variables globals
|
339
339
|
end
|
340
340
|
|
341
|
+
# @return [Array<Solargraph::Pin::GlobalVariable>]
|
341
342
|
def get_global_variable_pins
|
342
343
|
globals = []
|
343
344
|
@sources.values.each do |s|
|
@@ -366,7 +367,9 @@ module Solargraph
|
|
366
367
|
if cache.has_signature_type?(signature, namespace, scope)
|
367
368
|
return cache.get_signature_type(signature, namespace, scope)
|
368
369
|
end
|
369
|
-
return nil if signature.nil?
|
370
|
+
return nil if signature.nil?
|
371
|
+
return namespace if signature.empty? and scope == :instance
|
372
|
+
return nil if signature.empty? # @todo This might need to return Class<namespace>
|
370
373
|
if !signature.include?('.')
|
371
374
|
fqns = find_fully_qualified_namespace(signature, namespace)
|
372
375
|
unless fqns.nil? or fqns.empty?
|
@@ -412,6 +415,8 @@ module Solargraph
|
|
412
415
|
result
|
413
416
|
end
|
414
417
|
|
418
|
+
# @param [String] A fully qualified namespace
|
419
|
+
# @return [Symbol] :class, :module, or nil
|
415
420
|
def get_namespace_type fqns
|
416
421
|
return nil if fqns.nil?
|
417
422
|
type = nil
|
@@ -435,7 +440,7 @@ module Solargraph
|
|
435
440
|
fqns = find_fully_qualified_namespace(namespace, root)
|
436
441
|
meths = []
|
437
442
|
skip = []
|
438
|
-
meths.concat inner_get_methods(namespace, root, skip)
|
443
|
+
meths.concat inner_get_methods(namespace, root, skip, visibility)
|
439
444
|
yard_meths = yard_map.get_methods(fqns, '', visibility: visibility)
|
440
445
|
if yard_meths.any?
|
441
446
|
meths.concat yard_meths
|
@@ -522,6 +527,8 @@ module Solargraph
|
|
522
527
|
arr
|
523
528
|
end
|
524
529
|
|
530
|
+
# Update the ApiMap with the most recent version of the specified file.
|
531
|
+
#
|
525
532
|
def update filename
|
526
533
|
filename.gsub!(/\\/, '/')
|
527
534
|
if filename.end_with?('.rb')
|
@@ -544,11 +551,12 @@ module Solargraph
|
|
544
551
|
end
|
545
552
|
end
|
546
553
|
|
554
|
+
# @return [Array<Solargraph::ApiMap::Source>]
|
547
555
|
def sources
|
548
556
|
@sources.values
|
549
557
|
end
|
550
558
|
|
551
|
-
# @return [Array<
|
559
|
+
# @return [Array<Solargraph::Suggestion>]
|
552
560
|
def get_path_suggestions path
|
553
561
|
refresh
|
554
562
|
result = []
|
@@ -572,6 +580,7 @@ module Solargraph
|
|
572
580
|
result
|
573
581
|
end
|
574
582
|
|
583
|
+
# @return [Array<String>]
|
575
584
|
def search query
|
576
585
|
refresh
|
577
586
|
rake_yard(@sources.values) if @yard_stale
|
@@ -619,6 +628,7 @@ module Solargraph
|
|
619
628
|
@symbol_pins = []
|
620
629
|
@attr_pins = {}
|
621
630
|
@namespace_includes = {}
|
631
|
+
@namespace_extends = {}
|
622
632
|
@superclasses = {}
|
623
633
|
@namespace_pins = {}
|
624
634
|
namespace_map.clear
|
@@ -716,6 +726,10 @@ module Solargraph
|
|
716
726
|
@namespace_includes[ns] ||= []
|
717
727
|
@namespace_includes[ns].concat(i).uniq!
|
718
728
|
end
|
729
|
+
source.namespace_extends.each_pair do |ns, e|
|
730
|
+
@namespace_extends[ns] ||= []
|
731
|
+
@namespace_extends[ns].concat(e).uniq!
|
732
|
+
end
|
719
733
|
source.superclasses.each_pair do |cls, sup|
|
720
734
|
@superclasses[cls] = sup
|
721
735
|
end
|
@@ -742,7 +756,7 @@ module Solargraph
|
|
742
756
|
mn = @method_pins[fqns]
|
743
757
|
unless mn.nil?
|
744
758
|
mn.select{ |pin| pin.scope == :class }.each do |pin|
|
745
|
-
meths.push pin_to_suggestion(pin)
|
759
|
+
meths.push pin_to_suggestion(pin) if visibility.include?(pin.visibility)
|
746
760
|
end
|
747
761
|
end
|
748
762
|
if visibility.include?(:public) or visibility.include?(:protected)
|
@@ -753,6 +767,12 @@ module Solargraph
|
|
753
767
|
meths.concat get_methods(sc, fqns, visibility: sc_visi)
|
754
768
|
end
|
755
769
|
end
|
770
|
+
em = @namespace_extends[fqns]
|
771
|
+
unless em.nil?
|
772
|
+
em.each do |e|
|
773
|
+
meths.concat get_instance_methods(e, fqns, visibility: visibility)
|
774
|
+
end
|
775
|
+
end
|
756
776
|
meths.uniq
|
757
777
|
end
|
758
778
|
|
@@ -875,10 +895,13 @@ module Solargraph
|
|
875
895
|
result
|
876
896
|
end
|
877
897
|
|
898
|
+
# @return [AST::Node]
|
878
899
|
def file_nodes
|
879
900
|
@sources.values.map(&:node)
|
880
901
|
end
|
881
902
|
|
903
|
+
# @param namespace [String]
|
904
|
+
# @return [String]
|
882
905
|
def clean_namespace_string namespace
|
883
906
|
result = namespace.to_s.gsub(/<.*$/, '')
|
884
907
|
if result == 'Class' and namespace.include?('<')
|
@@ -894,7 +917,18 @@ module Solargraph
|
|
894
917
|
# @param pin [Solargraph::Pin::Base]
|
895
918
|
# @return [Solargraph::Suggestion]
|
896
919
|
def pin_to_suggestion pin
|
897
|
-
|
920
|
+
return_type = pin.return_type
|
921
|
+
if return_type.nil? and pin.is_a?(Solargraph::Pin::Method)
|
922
|
+
sc = @superclasses[pin.namespace]
|
923
|
+
while return_type.nil? and !sc.nil?
|
924
|
+
sc_path = "#{sc}#{pin.scope == :instance ? '#' : '.'}#{pin.name}"
|
925
|
+
sugg = get_path_suggestions(sc_path).first
|
926
|
+
break if sugg.nil?
|
927
|
+
return_type = sugg.return_type
|
928
|
+
sc = @superclasses[sc]
|
929
|
+
end
|
930
|
+
end
|
931
|
+
@pin_suggestions[pin] ||= Suggestion.pull(pin, return_type)
|
898
932
|
end
|
899
933
|
|
900
934
|
def require_extensions
|
@@ -70,6 +70,10 @@ module Solargraph
|
|
70
70
|
@namespace_includes ||= {}
|
71
71
|
end
|
72
72
|
|
73
|
+
def namespace_extends
|
74
|
+
@namespaces_extends ||= {}
|
75
|
+
end
|
76
|
+
|
73
77
|
def superclasses
|
74
78
|
@superclasses ||= {}
|
75
79
|
end
|
@@ -304,11 +308,16 @@ module Solargraph
|
|
304
308
|
end
|
305
309
|
end
|
306
310
|
next
|
307
|
-
elsif c.type == :send and c.children[1] == :include
|
311
|
+
elsif c.type == :send and c.children[1] == :include
|
308
312
|
namespace_includes[fqn] ||= []
|
309
313
|
c.children[2..-1].each do |i|
|
310
314
|
namespace_includes[fqn].push unpack_name(i)
|
311
315
|
end
|
316
|
+
elsif c.type == :send and c.children[1] == :extend
|
317
|
+
namespace_extends[fqn] ||= []
|
318
|
+
c.children[2..-1].each do |i|
|
319
|
+
namespace_extends[fqn].push unpack_name(i)
|
320
|
+
end
|
312
321
|
elsif c.type == :send and [:attr_reader, :attr_writer, :attr_accessor].include?(c.children[1])
|
313
322
|
c.children[2..-1].each do |a|
|
314
323
|
if c.children[1] == :attr_reader or c.children[1] == :attr_accessor
|
@@ -49,7 +49,7 @@ module Solargraph
|
|
49
49
|
code_object_map[pin.path].docstring = pin.docstring unless pin.docstring.nil?
|
50
50
|
code_object_map[pin.path].files.push pin.source.filename
|
51
51
|
code_object_map[pin.path].parameters = pin.parameters.map do |p|
|
52
|
-
n = p.match(/^[a-z0-
|
52
|
+
n = p.match(/^[a-z0-9_]*:?/i)[0]
|
53
53
|
v = nil
|
54
54
|
if p.length > n.length
|
55
55
|
v = p[n.length..-1].gsub(/^ = /, '')
|
data/lib/solargraph/code_map.rb
CHANGED
@@ -224,15 +224,10 @@ module Solargraph
|
|
224
224
|
else
|
225
225
|
type = infer_literal_node_type(node_at(index - 2))
|
226
226
|
if type.nil?
|
227
|
-
parts = namespace.to_s.split('::')
|
228
227
|
result += get_snippets_at(index) if with_snippets
|
229
228
|
result += get_local_variables_and_methods_at(index)
|
230
229
|
result += ApiMap.get_keywords
|
231
|
-
|
232
|
-
ns = parts.join('::')
|
233
|
-
result += api_map.get_constants(ns, namespace)
|
234
|
-
parts.pop
|
235
|
-
end
|
230
|
+
result += api_map.get_constants('', namespace)
|
236
231
|
result += api_map.get_constants('')
|
237
232
|
result += api_map.get_instance_methods('Kernel', namespace)
|
238
233
|
result += api_map.get_methods('', namespace)
|
@@ -417,14 +412,23 @@ module Solargraph
|
|
417
412
|
remainder = parts[1..-1]
|
418
413
|
if start.start_with?('@@')
|
419
414
|
cv = api_map.get_class_variable_pins(ns_here).select{|s| s.name == start}.first
|
420
|
-
|
415
|
+
unless cv.nil?
|
416
|
+
vartype = (cv.return_type || api_map.infer_assignment_node_type(cv.node, cv.namespace))
|
417
|
+
return api_map.infer_signature_type(remainder.join('.'), vartype, scope: :instance)
|
418
|
+
end
|
421
419
|
elsif start.start_with?('@')
|
422
420
|
scope = (node.type == :def ? :instance : :class)
|
423
421
|
iv = api_map.get_instance_variable_pins(ns_here, scope).select{|s| s.name == start}.first
|
424
|
-
|
422
|
+
unless iv.nil?
|
423
|
+
vartype = (iv.return_type || api_map.infer_assignment_node_type(iv.node, iv.namespace))
|
424
|
+
return api_map.infer_signature_type(remainder.join('.'), vartype, scope: :instance)
|
425
|
+
end
|
425
426
|
elsif start.start_with?('$')
|
426
427
|
gv = api_map.get_global_variable_pins.select{|s| s.name == start}.first
|
427
|
-
|
428
|
+
unless gv.nil?
|
429
|
+
vartype = (gv.return_type || api_map.infer_assignment_node_type(gv.node, gv.namespace))
|
430
|
+
return api_map.infer_signature_type(remainder.join('.'), vartype, scope: :instance)
|
431
|
+
end
|
428
432
|
end
|
429
433
|
var = find_local_variable_node(start, node)
|
430
434
|
if var.nil?
|
data/lib/solargraph/server.rb
CHANGED
@@ -76,7 +76,7 @@ module Solargraph
|
|
76
76
|
code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map: api_map, cursor: [params['line'].to_i, params['column'].to_i])
|
77
77
|
offset = code_map.get_offset(params['line'].to_i, params['column'].to_i)
|
78
78
|
sugg = code_map.signatures_at(offset)
|
79
|
-
{ "status" => "ok", "suggestions" => sugg }.to_json
|
79
|
+
{ "status" => "ok", "suggestions" => sugg.map{|s| s.as_json(all: true)} }.to_json
|
80
80
|
rescue Exception => e
|
81
81
|
STDERR.puts e
|
82
82
|
STDERR.puts e.backtrace.join("\n")
|
data/lib/solargraph/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solargraph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.15.
|
4
|
+
version: 0.15.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fred Snyder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|