solargraph 0.10.3 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7fca7cec06944baee613ea512c26052d002badf1
4
- data.tar.gz: 56b786723a5f0b33ae2612d110977f74f1d4bb7f
3
+ metadata.gz: c0d57ee417fd4007c31d34a555f76701a51a19be
4
+ data.tar.gz: 8b254f32899b99c3e2faa25361f043d05de235f2
5
5
  SHA512:
6
- metadata.gz: 3e8e40663cd4629b55a4436a33d8c8606b1087dbabbdd21d0180f1ca8b4cb26b563bd2f4f8076701ccf1fa7148513df4d01a063a04366bbd137df8b6cac5dcf9
7
- data.tar.gz: d7bf1113b69a08d74805319918a756f6894810c5397912f68340cf15fb050fac2e989a292b89efb8f7899f56fd5c5d2e502c8d3d35d7a4b042a905993b8dd7bf
6
+ metadata.gz: 764e250b3ba7f52b0d4dbaaf4b7180cf4094bfc8b7dabf6e4054ddf342c02f9587470823c2629b3b132c83627ace4e8c738c10755e76c373a922d192f4fd6e43
7
+ data.tar.gz: 0abe5016eb85276abc4d2fc44a8f66c166986630b7dd5ba04878b19062e16b4fc45c2b6f195032cd73792964d1ae5dec3b1f0ff5607b6fb47404c6f31c8c6b74
@@ -3,13 +3,24 @@ module Solargraph
3
3
  class Cache
4
4
  def initialize
5
5
  @signature_types = {}
6
+ @assignment_node_types = {}
6
7
  end
8
+
7
9
  def get_signature_type signature, namespace, scope
8
10
  @signature_types[[signature, namespace, scope]]
9
11
  end
12
+
10
13
  def set_signature_type signature, namespace, scope, value
11
14
  @signature_types[[signature, namespace, scope]] = value
12
15
  end
16
+
17
+ def get_assignment_node_type node, namespace
18
+ @assignment_node_types[[node, namespace]]
19
+ end
20
+
21
+ def set_assignment_node_type node, namespace, value
22
+ @assignment_node_types[[node, namespace]] = value
23
+ end
13
24
  end
14
25
  end
15
26
  end
@@ -1,3 +1,5 @@
1
+ require 'yaml'
2
+
1
3
  module Solargraph
2
4
  class ApiMap
3
5
  class Config
@@ -1,6 +1,5 @@
1
1
  require 'rubygems'
2
2
  require 'parser/current'
3
- require 'yaml'
4
3
 
5
4
  module Solargraph
6
5
  class ApiMap
@@ -29,7 +28,13 @@ module Solargraph
29
28
  include NodeMethods
30
29
  include YardMethods
31
30
 
31
+ # The root directory of the project. The ApiMap will search here for
32
+ # additional files to parse and analyze.
33
+ #
34
+ # @return [String]
32
35
  attr_reader :workspace
36
+
37
+ # @return [Array<String>]
33
38
  attr_reader :required
34
39
 
35
40
  # @param workspace [String]
@@ -46,28 +51,24 @@ module Solargraph
46
51
  end
47
52
  end
48
53
 
49
- def clear
50
- @file_source = {}
51
- @file_nodes = {}
52
- @file_comments = {}
53
- @parent_stack = {}
54
- @namespace_map = {}
55
- @namespace_tree = {}
56
- @required = []
57
- end
58
-
59
54
  # @return [Solargraph::YardMap]
60
55
  def yard_map
61
56
  @yard_map ||= YardMap.new(required: required, workspace: workspace)
62
57
  end
63
58
 
59
+ # Add a file to the map.
60
+ #
64
61
  # @param filename [String]
62
+ # @return [AST::Node]
65
63
  def append_file filename
66
64
  append_source File.read(filename), filename
67
65
  end
68
66
 
67
+ # Add a string of source code to the map.
68
+ #
69
69
  # @param text [String]
70
70
  # @param filename [String]
71
+ # @return [AST::Node]
71
72
  def append_source text, filename = nil
72
73
  @file_source[filename] = text
73
74
  begin
@@ -79,6 +80,9 @@ module Solargraph
79
80
  end
80
81
  end
81
82
 
83
+ # Add an AST node to the map.
84
+ #
85
+ # @return [AST::Node]
82
86
  def append_node node, comments, filename = nil
83
87
  @file_comments[filename] = associate_comments(node, comments)
84
88
  mapified = reduce(node, @file_comments[filename])
@@ -90,29 +94,21 @@ module Solargraph
90
94
  root
91
95
  end
92
96
 
97
+ # Get the docstring associated with a node.
98
+ #
99
+ # @param node [AST::Node]
100
+ # @return [YARD::Docstring]
93
101
  def get_comment_for node
94
102
  filename = get_filename_for(node)
95
103
  return nil if @file_comments[filename].nil?
96
104
  @file_comments[filename][node.loc]
97
105
  end
98
106
 
107
+ # @return [Array<Solargraph::Suggestion>]
99
108
  def self.get_keywords
100
- result = []
101
- keywords = KEYWORDS + ['attr_reader', 'attr_writer', 'attr_accessor', 'private', 'public', 'protected']
102
- keywords.each { |k|
103
- result.push Suggestion.new(k, kind: Suggestion::KEYWORD, detail: 'Keyword')
104
- }
105
- result
106
- end
107
-
108
- def process_maps
109
- @parent_stack = {}
110
- @namespace_map = {}
111
- @namespace_tree = {}
112
- @file_nodes.values.each { |f|
113
- map_parents f
114
- map_namespaces f
115
- }
109
+ @keyword_suggestions ||= (KEYWORDS + MAPPABLE_METHODS).map{ |s|
110
+ Suggestion.new(s.to_s, kind: Suggestion::KEYWORD, detail: 'Keyword')
111
+ }.freeze
116
112
  end
117
113
 
118
114
  def namespaces
@@ -237,18 +233,7 @@ module Solargraph
237
233
  break unless vn.nil?
238
234
  }
239
235
  end
240
- unless vn.nil?
241
- cmnt = get_comment_for(vn)
242
- unless cmnt.nil?
243
- tag = cmnt.tag(:type)
244
- result = tag.types[0] unless tag.nil? or tag.types.empty?
245
- end
246
- result = infer_literal_node_type(vn.children[1]) if result.nil?
247
- if result.nil?
248
- signature = resolve_node_signature(vn.children[1])
249
- result = infer_signature_type(signature, namespace)
250
- end
251
- end
236
+ result = infer_assignment_node_type(vn, namespace) unless vn.nil?
252
237
  result
253
238
  end
254
239
 
@@ -314,6 +299,32 @@ module Solargraph
314
299
  []
315
300
  end
316
301
 
302
+ def infer_assignment_node_type node, namespace
303
+ type = cache.get_assignment_node_type(node, namespace)
304
+ if type.nil?
305
+ cmnt = get_comment_for(node)
306
+ if cmnt.nil?
307
+ type = infer_literal_node_type(node.children[1])
308
+ if type.nil?
309
+ sig = resolve_node_signature(node.children[1])
310
+ # Avoid infinite loops from variable assignments that reference themselves
311
+ return nil if node.children[0].to_s == sig.split('.').first
312
+ type = infer_signature_type(sig, namespace)
313
+ end
314
+ else
315
+ t = cmnt.tag(:type)
316
+ if t.nil?
317
+ sig = resolve_node_signature(node.children[1])
318
+ type = infer_signature_type(sig, namespace)
319
+ else
320
+ type = t.types[0]
321
+ end
322
+ end
323
+ cache.set_assignment_node_type(node, namespace, type)
324
+ end
325
+ type
326
+ end
327
+
317
328
  def infer_signature_type signature, namespace, scope: :class
318
329
  cached = cache.get_signature_type(signature, namespace, scope)
319
330
  return cached unless cached.nil?
@@ -388,6 +399,7 @@ module Solargraph
388
399
  end
389
400
  end
390
401
 
402
+ # @return [Array<String>]
391
403
  def get_method_args node
392
404
  list = nil
393
405
  args = []
@@ -422,7 +434,7 @@ module Solargraph
422
434
  return get_methods(namespace.split('#').first, root, visibility: visibility)
423
435
  end
424
436
  meths = []
425
- meths += inner_get_instance_methods(namespace, root, []) #unless has_yardoc?
437
+ meths += inner_get_instance_methods(namespace, root, [], visibility) #unless has_yardoc?
426
438
  fqns = find_fully_qualified_namespace(namespace, root)
427
439
  yard_meths = yard_map.get_instance_methods(fqns, '', visibility: visibility)
428
440
  if yard_meths.any?
@@ -493,6 +505,27 @@ module Solargraph
493
505
 
494
506
  private
495
507
 
508
+ def clear
509
+ @file_source = {}
510
+ @file_nodes = {}
511
+ @file_comments = {}
512
+ @parent_stack = {}
513
+ @namespace_map = {}
514
+ @namespace_tree = {}
515
+ @required = []
516
+ end
517
+
518
+ def process_maps
519
+ @parent_stack = {}
520
+ @namespace_map = {}
521
+ @namespace_tree = {}
522
+ @file_nodes.values.each { |f|
523
+ map_parents f
524
+ map_namespaces f
525
+ }
526
+ end
527
+
528
+ # @return [Solargraph::ApiMap::Cache]
496
529
  def cache
497
530
  @cache ||= Cache.new
498
531
  end
@@ -568,12 +601,13 @@ module Solargraph
568
601
  meths
569
602
  end
570
603
 
571
- def inner_get_instance_methods(namespace, root, skip)
604
+ def inner_get_instance_methods(namespace, root, skip, visibility = [:public])
572
605
  fqns = find_fully_qualified_namespace(namespace, root)
573
606
  meths = []
574
607
  return meths if skip.include?(fqns)
575
608
  skip.push fqns
576
609
  nodes = get_namespace_nodes(fqns)
610
+ current_scope = :public
577
611
  nodes.each { |n|
578
612
  f = get_filename_for(n)
579
613
  unless yardoc_has_file?(get_filename_for(n))
@@ -582,23 +616,22 @@ module Solargraph
582
616
  s = unpack_name(n.children[1])
583
617
  # @todo This skip might not work properly. We might need to get a
584
618
  # fully qualified namespace from it first
585
- meths += get_instance_methods(s, namespace) unless skip.include?(s)
619
+ meths += get_instance_methods(s, namespace, visibility: visibility - [:private]) unless skip.include?(s)
586
620
  end
587
- current_scope = :public
588
621
  n.children.each { |c|
589
622
  if c.kind_of?(AST::Node) and c.type == :send and [:public, :protected, :private].include?(c.children[1])
590
- # TODO: Determine the current scope so we can decide whether to
591
- # exclude protected or private methods. Right now we're just
592
- # assuming public only
623
+ current_scope = c.children[1]
593
624
  elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :include
594
625
  fqmod = find_fully_qualified_namespace(const_from(c.children[2]), root)
595
626
  meths += get_instance_methods(fqmod) unless fqmod.nil? or skip.include?(fqmod)
596
- elsif current_scope == :public
627
+ else
597
628
  if c.kind_of?(AST::Node) and c.type == :def
598
- cmnt = get_comment_for(c)
599
- label = "#{c.children[0]}"
600
- args = get_method_args(c)
601
- meths.push Suggestion.new(label, insert: c.children[0].to_s.gsub(/=/, ' = '), kind: Suggestion::METHOD, documentation: cmnt, detail: fqns, arguments: args) if c.children[0].to_s[0].match(/[a-z]/i)
629
+ if visibility.include?(current_scope)
630
+ cmnt = get_comment_for(c)
631
+ label = "#{c.children[0]}"
632
+ args = get_method_args(c)
633
+ meths.push Suggestion.new(label, insert: c.children[0].to_s.gsub(/=/, ' = '), kind: Suggestion::METHOD, documentation: cmnt, detail: fqns, arguments: args) if c.children[0].to_s[0].match(/[a-z]/i)
634
+ end
602
635
  elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :attr_reader
603
636
  c.children[2..-1].each { |x|
604
637
  meths.push Suggestion.new(x.children[0], kind: Suggestion::FIELD) if x.type == :sym
@@ -610,7 +643,7 @@ module Solargraph
610
643
  elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :attr_accessor
611
644
  c.children[2..-1].each { |x|
612
645
  meths.push Suggestion.new(x.children[0], kind: Suggestion::FIELD) if x.type == :sym
613
- meths.push Suggestion.new("#{x.children[0]}=", kind: Suggestion::FIELD) if x.type == :sym
646
+ meths.push Suggestion.new("#{x.children[0]}=", insert: "#{x.children[0]} = ", kind: Suggestion::FIELD) if x.type == :sym
614
647
  }
615
648
  end
616
649
  end
@@ -619,7 +652,7 @@ module Solargraph
619
652
  end
620
653
  # This is necessary to get included modules from workspace definitions
621
654
  get_include_strings_from(n).each { |i|
622
- meths += inner_get_instance_methods(i, fqns, skip)
655
+ meths += inner_get_instance_methods(i, fqns, skip, visibility)
623
656
  }
624
657
  }
625
658
  meths.uniq
@@ -671,21 +704,8 @@ module Solargraph
671
704
  if c.kind_of?(AST::Node)
672
705
  is_inst = !find_parent(c, :def).nil?
673
706
  if c.type == :ivasgn and c.children[0] and ( (scope == :instance and is_inst) or (scope != :instance and !is_inst) )
674
- type = nil
675
- cmnt = get_comment_for(c)
676
- if cmnt.nil?
677
- sig = resolve_node_signature(c.children[1])
678
- type = infer_signature_type(sig, namespace)
679
- else
680
- t = cmnt.tag(:type)
681
- if t.nil?
682
- sig = resolve_node_signature(c.children[1])
683
- type = infer_signature_type(sig, namespace)
684
- else
685
- type = t.types[0]
686
- end
687
- end
688
- arr.push Suggestion.new(c.children[0], kind: Suggestion::VARIABLE, documentation: cmnt, return_type: type)
707
+ type = infer_assignment_node_type(c, namespace)
708
+ arr.push Suggestion.new(c.children[0], kind: Suggestion::VARIABLE, documentation: get_comment_for(c), return_type: type)
689
709
  end
690
710
  arr += inner_get_instance_variables(c, namespace, scope) unless [:class, :module].include?(c.type)
691
711
  end
@@ -700,21 +720,8 @@ module Solargraph
700
720
  node.children.each { |c|
701
721
  next unless c.kind_of?(AST::Node)
702
722
  if c.type == :cvasgn
703
- type = nil
704
- cmnt = get_comment_for(c)
705
- if cmnt.nil?
706
- sig = resolve_node_signature(c.children[1])
707
- type = infer_signature_type(sig, namespace)
708
- else
709
- t = cmnt.tag(:type)
710
- if t.nil?
711
- sig = resolve_node_signature(c.children[1])
712
- type = infer_signature_type(sig, namespace)
713
- else
714
- type = t.types[0]
715
- end
716
- end
717
- arr.push Suggestion.new(c.children[0], kind: Suggestion::VARIABLE, documentation: cmnt, return_type: type)
723
+ type = infer_assignment_node_type(c, namespace)
724
+ arr.push Suggestion.new(c.children[0], kind: Suggestion::VARIABLE, documentation: get_comment_for(c), return_type: type)
718
725
  end
719
726
  arr += inner_get_class_variables(c, namespace) unless [:class, :module].include?(c.type)
720
727
  }
@@ -729,6 +736,7 @@ module Solargraph
729
736
  # @return [String] The fully qualified namespace for the signature's type
730
737
  # or nil if a type could not be determined
731
738
  def inner_infer_signature_type signature, namespace, scope: :instance
739
+ namespace = clean_namespace_string(namespace)
732
740
  return nil if signature.nil?
733
741
  signature.gsub!(/\.$/, '')
734
742
  if signature.nil? or signature.empty?
@@ -749,7 +757,13 @@ module Solargraph
749
757
  p = parts.shift
750
758
  next if p.empty?
751
759
  if top and scope == :class
752
- #next if p == 'new'
760
+ if p == 'self'
761
+ top = false
762
+ return "Class<#{type}>" if parts.empty?
763
+ sub = inner_infer_signature_type(parts.join('.'), type, scope: :class)
764
+ return sub unless sub.to_s == ''
765
+ next
766
+ end
753
767
  if p == 'new'
754
768
  scope = :instance
755
769
  type = namespace
@@ -758,12 +772,19 @@ module Solargraph
758
772
  end
759
773
  first_class = find_fully_qualified_namespace(p, namespace)
760
774
  sub = nil
761
- sub = infer_signature_type(parts.join('.'), first_class, scope: :class) unless first_class.nil?
775
+ sub = inner_infer_signature_type(parts.join('.'), first_class, scope: :class) unless first_class.nil?
776
+ return sub unless sub.to_s == ''
777
+ end
778
+ if top and scope == :instance and p == 'self'
779
+ return type if parts.empty?
780
+ sub = infer_signature_type(parts.join('.'), type, scope: :instance)
762
781
  return sub unless sub.to_s == ''
763
782
  end
764
783
  unless p == 'new' and scope != :instance
765
784
  if scope == :instance
766
- meths = get_instance_methods(type)
785
+ visibility = [:public]
786
+ visibility.push :private, :protected if top
787
+ meths = get_instance_methods(type, visibility: visibility)
767
788
  meths += get_methods('') if top or type.to_s == ''
768
789
  else
769
790
  meths = get_methods(type)
@@ -772,7 +793,14 @@ module Solargraph
772
793
  return nil if meths.empty?
773
794
  type = nil
774
795
  match = meths[0].return_type
775
- type = find_fully_qualified_namespace(match) unless match.nil?
796
+ unless match.nil?
797
+ cleaned = clean_namespace_string(match)
798
+ if cleaned.end_with?('#class')
799
+ return inner_infer_signature_type(parts.join('.'), cleaned.split('#').first, scope: :class)
800
+ else
801
+ type = find_fully_qualified_namespace(cleaned)
802
+ end
803
+ end
776
804
  end
777
805
  scope = :instance
778
806
  top = false
@@ -855,7 +883,7 @@ module Solargraph
855
883
  result = node.updated(type, children)
856
884
  result
857
885
  end
858
-
886
+
859
887
  def local_path? path
860
888
  return false if workspace.nil?
861
889
  return true if File.exist?(File.join workspace, 'lib', path)
@@ -908,7 +936,12 @@ module Solargraph
908
936
  end
909
937
 
910
938
  def clean_namespace_string namespace
911
- namespace.to_s.gsub(/<.*$/, '')
939
+ result = namespace.to_s.gsub(/<.*$/, '')
940
+ if result == 'Class' and namespace.include?('<')
941
+ subtype = namespace.match(/<([a-z0-9:_]*)/i)[1]
942
+ result = "#{subtype}#class"
943
+ end
944
+ result
912
945
  end
913
946
  end
914
947
  end
@@ -2,10 +2,32 @@ require 'parser/current'
2
2
 
3
3
  module Solargraph
4
4
  class CodeMap
5
+
6
+ # The root node of the parsed code.
7
+ #
8
+ # @return [AST::Node]
5
9
  attr_accessor :node
10
+
11
+ # The source code being analyzed.
12
+ #
13
+ # @return [String]
6
14
  attr_reader :code
15
+
16
+ # The source code after modification to fix syntax errors during parsing.
17
+ # This string will match #code if no modifications were made.
18
+ #
19
+ # @return [String]
7
20
  attr_reader :parsed
21
+
22
+ # The filename for the source code.
23
+ #
24
+ # @return [String]
8
25
  attr_reader :filename
26
+
27
+ # The root directory of the project. The ApiMap will search here for
28
+ # additional files to parse and analyze.
29
+ #
30
+ # @return [String]
9
31
  attr_reader :workspace
10
32
 
11
33
  include NodeMethods
@@ -39,7 +61,11 @@ module Solargraph
39
61
  if !fixed_cursor and !cursor.nil? and e.message.include?('token $end') and cursor >= 2
40
62
  fixed_cursor = true
41
63
  spot = cursor - 2
42
- repl = '_'
64
+ if tmp[cursor - 1] == '.'
65
+ repl = ';'
66
+ else
67
+ repl = '#'
68
+ end
43
69
  else
44
70
  spot = e.diagnostic.location.begin_pos
45
71
  repl = '_'
@@ -402,7 +428,7 @@ module Solargraph
402
428
  return api_map.infer_signature_type(remainder.join('.'), type, scope: :instance)
403
429
  elsif start.start_with?('@')
404
430
  scope = (node.type == :def ? :instance : :scope)
405
- type = api_map.infer_instance_variable(start, ns_here, scope: :instance)
431
+ type = api_map.infer_instance_variable(start, ns_here, scope)
406
432
  return nil if type.nil?
407
433
  return type if remainder.empty?
408
434
  return api_map.infer_signature_type(remainder.join('.'), type, scope: :instance)
@@ -438,13 +464,6 @@ module Solargraph
438
464
  inferred
439
465
  end
440
466
 
441
- def suggest_for_signature_at index
442
- result = []
443
- type = infer_signature_at(index)
444
- result.concat api_map.get_instance_methods(type) unless type.nil?
445
- result
446
- end
447
-
448
467
  def get_type_comment node
449
468
  obj = nil
450
469
  cmnt = api_map.get_comment_for(node)
@@ -502,21 +521,6 @@ module Solargraph
502
521
  signature
503
522
  end
504
523
 
505
- # Build a signature from the specified node. This method returns the node
506
- # as an array of strings.
507
- #
508
- # @return [Array<String>]
509
- def build_signature(node, parts)
510
- if node.kind_of?(AST::Node)
511
- if node.type == :send
512
- parts.unshift node.children[1].to_s
513
- elsif node.type == :const
514
- parts.unshift unpack_name(node)
515
- end
516
- build_signature(node.children[0], parts)
517
- end
518
- end
519
-
520
524
  def get_snippets_at(index)
521
525
  result = []
522
526
  Snippets.definitions.each_pair { |name, detail|
@@ -637,7 +641,8 @@ module Solargraph
637
641
  node.children.each { |c|
638
642
  if c.kind_of?(AST::Node)
639
643
  if c.type == :lvasgn
640
- arr.push Suggestion.new(c.children[0], kind: Suggestion::VARIABLE, documentation: api_map.get_comment_for(c))
644
+ type = api_map.infer_assignment_node_type(c, namespace_from(c))
645
+ arr.push Suggestion.new(c.children[0], kind: Suggestion::VARIABLE, documentation: api_map.get_comment_for(c), return_type: type)
641
646
  else
642
647
  arr += get_local_variables_from(c) unless [:class, :module, :def, :defs].include?(c.type)
643
648
  end
@@ -40,6 +40,7 @@ module Solargraph
40
40
  end
41
41
 
42
42
  def infer_literal_node_type node
43
+ return nil unless node.kind_of?(AST::Node)
43
44
  if node.type == :str
44
45
  return 'String'
45
46
  elsif node.type == :array
@@ -27,7 +27,7 @@ module Solargraph
27
27
  workspace = params['workspace']
28
28
  Server.prepare_workspace workspace unless @@api_hash.has_key?(workspace)
29
29
  @@semaphore.synchronize {
30
- code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map: @@api_hash[workspace])
30
+ code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map: @@api_hash[workspace], cursor: [params['line'].to_i, params['column'].to_i])
31
31
  offset = code_map.get_offset(params['line'].to_i, params['column'].to_i)
32
32
  sugg = code_map.suggest_at(offset, with_snippets: params['with_snippets'] == '1' ? true : false, filtered: (params['filtered'] || false))
33
33
  }
@@ -46,7 +46,7 @@ module Solargraph
46
46
  workspace = params['workspace'] || nil
47
47
  Server.prepare_workspace workspace unless @@api_hash.has_key?(workspace)
48
48
  @@semaphore.synchronize {
49
- code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map: @@api_hash[workspace])
49
+ code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map: @@api_hash[workspace], cursor: [params['line'].to_i, params['column'].to_i])
50
50
  offset = code_map.get_offset(params['line'].to_i, params['column'].to_i)
51
51
  sugg = code_map.signatures_at(offset)
52
52
  }
@@ -1,3 +1,3 @@
1
1
  module Solargraph
2
- VERSION = '0.10.3'
2
+ VERSION = '0.11.0'
3
3
  end
@@ -10,24 +10,25 @@ module Solargraph
10
10
  @constants[[namespace, scope]] = suggestions
11
11
  end
12
12
 
13
- def set_methods namespace, scope, visibility, suggestions
14
- @methods[[namespace, scope, visibility]] = suggestions
13
+ def get_constants namespace, scope
14
+ @constants[[namespace, scope]]
15
15
  end
16
16
 
17
- def set_instance_methods namespace, scope, visibility, suggestions
18
- @instance_methods[[namespace, scope, visibility]] = suggestions
17
+ def set_methods namespace, scope, visibility, suggestions
18
+ @methods[[namespace, scope, visibility]] = suggestions
19
19
  end
20
20
 
21
21
  def get_methods namespace, scope, visibility
22
22
  @methods[[namespace, scope, visibility]]
23
23
  end
24
24
 
25
+ def set_instance_methods namespace, scope, visibility, suggestions
26
+ @instance_methods[[namespace, scope, visibility]] = suggestions
27
+ end
28
+
25
29
  def get_instance_methods namespace, scope, visibility
26
30
  @instance_methods[[namespace, scope, visibility]]
27
31
  end
28
32
 
29
- def get_constants namespace, scope
30
- @constants[[namespace, scope]]
31
- end
32
33
  end
33
34
  end
@@ -139,31 +139,6 @@ module Solargraph
139
139
  result
140
140
  end
141
141
 
142
- # @param signature [String]
143
- def at signature
144
- yardocs.each { |y|
145
- yard = load_yardoc(y)
146
- unless yard.nil?
147
- obj = yard.at(signature)
148
- return obj unless obj.nil?
149
- end
150
- }
151
- nil
152
- end
153
-
154
- # @param signature [String]
155
- # @param scope [String]
156
- def resolve signature, scope
157
- yardocs.each { |y|
158
- yard = load_yardoc(y)
159
- unless yard.nil?
160
- obj = yard.resolve(P(scope), signature)
161
- return obj unless obj.nil?
162
- end
163
- }
164
- nil
165
- end
166
-
167
142
  # @return [Array<Suggestion>]
168
143
  def get_methods namespace, scope = '', visibility: [:public]
169
144
  cached = cache.get_methods(namespace, scope, visibility)
data/lib/solargraph.rb CHANGED
@@ -11,7 +11,6 @@ module Solargraph
11
11
  autoload :NodeMethods, 'solargraph/node_methods'
12
12
  autoload :Suggestion, 'solargraph/suggestion'
13
13
  autoload :Snippets, 'solargraph/snippets'
14
- autoload :Mapper, 'solargraph/mapper'
15
14
  autoload :Server, 'solargraph/server'
16
15
  autoload :YardMap, 'solargraph/yard_map'
17
16
  autoload :YardMethods, 'solargraph/yard_methods'
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.10.3
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Snyder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-13 00:00:00.000000000 Z
11
+ date: 2017-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '1.4'
53
+ version: '2'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '1.4'
60
+ version: '2'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: yard
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -98,14 +98,14 @@ dependencies:
98
98
  requirements:
99
99
  - - "~>"
100
100
  - !ruby/object:Gem::Version
101
- version: '0'
101
+ version: '0.7'
102
102
  type: :development
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  requirements:
106
106
  - - "~>"
107
107
  - !ruby/object:Gem::Version
108
- version: '0'
108
+ version: '0.7'
109
109
  - !ruby/object:Gem::Dependency
110
110
  name: simplecov
111
111
  requirement: !ruby/object:Gem::Requirement
@@ -133,7 +133,6 @@ files:
133
133
  - lib/solargraph/api_map/cache.rb
134
134
  - lib/solargraph/api_map/config.rb
135
135
  - lib/solargraph/code_map.rb
136
- - lib/solargraph/mapper.rb
137
136
  - lib/solargraph/node_methods.rb
138
137
  - lib/solargraph/server.rb
139
138
  - lib/solargraph/shell.rb
@@ -162,7 +161,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
162
161
  requirements:
163
162
  - - ">="
164
163
  - !ruby/object:Gem::Version
165
- version: '2.1'
164
+ version: 2.2.2
166
165
  required_rubygems_version: !ruby/object:Gem::Requirement
167
166
  requirements:
168
167
  - - ">="
@@ -1,31 +0,0 @@
1
- module Solargraph
2
- class Mapper
3
- def initialize
4
- @default_api_map = Solargraph::ApiMap.new
5
- stub = Parser::CurrentRuby.parse(Solargraph::LiveParser.parse(nil))
6
- @default_api_map.merge(stub)
7
- @default_api_map.freeze
8
- @require_nodes = {}
9
- end
10
-
11
- def get filename, text
12
- workspace = find_workspace(filename)
13
- CodeMap.new(text, api_map: @default_api_map, workspace: workspace, require_nodes: @require_nodes)
14
- end
15
-
16
- def find_workspace filename
17
- dirname = filename
18
- lastname = nil
19
- result = nil
20
- until dirname == lastname
21
- if File.file?("#{dirname}/Gemfile")
22
- result = dirname
23
- break
24
- end
25
- lastname = dirname
26
- dirname = File.dirname(dirname)
27
- end
28
- result || File.dirname(filename)
29
- end
30
- end
31
- end