solargraph 0.17.0 → 0.17.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f0eee03f14aa3abbcaad7015b94ad8c33df50acc
4
- data.tar.gz: b4485de9e9cf36aa8df184687cd9e5476e6b627d
3
+ metadata.gz: 9e75af30aa57a99e118082d7c337d889f7aa6151
4
+ data.tar.gz: 2937ed78501b758858b304127987eb822540163f
5
5
  SHA512:
6
- metadata.gz: 3845660c58589e9d5222d9800fb3a48aa3970aa548468f643363d653b28b6b086c2d3b5c7d38afb322e6f45271292096acec3af7be24088d726957de7cbcbd1b
7
- data.tar.gz: 3040f8716959d1378a2478dd23d76c8232f0451669860267f5cbb07b7be6ed2bda987039912d6501665e3cf7d3af6ff1d9e71e01792cdca949bfdf45c09f42b6
6
+ metadata.gz: 110b41dcd353afc575f30a096e9e83d311ff8d664e37847097d4618ab8bfe76f7d4825ff730838f971ba3af503015cde7b156e7a1d8afef504dfa3b1515dc13e
7
+ data.tar.gz: 5e0bc35e2d8c06a73e452451ddb3167f06f00fc8e52add97f9ea4152387e14ea366d4e2b715491697f65194d601feb0d04d23c2b09d5bef31ec5136d29dc3b50
@@ -104,7 +104,7 @@ module Solargraph
104
104
  true
105
105
  end
106
106
  end
107
- if filename.nil? or filename.end_with?('.rb')
107
+ if filename.nil? or filename.end_with?('.rb') or filename.end_with?('.erb')
108
108
  eliminate @virtual_filename unless @virtual_source.nil? or @virtual_filename == filename or workspace_files.include?(@virtual_filename)
109
109
  @virtual_filename = filename
110
110
  @virtual_source = Source.fix(code, filename, cursor)
@@ -208,16 +208,22 @@ module Solargraph
208
208
  result = []
209
209
  skip = []
210
210
  fqns = find_fully_qualified_namespace(namespace, root)
211
+ return [] if fqns.nil?
211
212
  if fqns.empty?
212
- result.concat inner_get_constants('', skip, false, :public)
213
+ result.concat inner_get_constants('', skip, false, [:public])
213
214
  else
214
215
  parts = fqns.split('::')
215
- resolved = find_namespace_pins(parts.join('::'))
216
- resolved.each do |pin|
217
- visi = :public
218
- visi = :private if namespace == '' and root != '' and pin.path == fqns
219
- result.concat inner_get_constants(pin.path, skip, true, visi)
216
+ while parts.length > 0
217
+ resolved = find_namespace_pins(parts.join('::'))
218
+ resolved.each do |pin|
219
+ visi = :public
220
+ visi = :private if namespace == '' and root != '' and pin.path == fqns
221
+ result.concat inner_get_constants(pin.path, skip, true, visi)
222
+ end
223
+ parts.pop
224
+ break unless namespace.empty?
220
225
  end
226
+ result.concat inner_get_constants('', [], false) if namespace.empty?
221
227
  end
222
228
  result.concat yard_map.get_constants(fqns)
223
229
  result
@@ -832,7 +838,9 @@ module Solargraph
832
838
  unless sc.nil?
833
839
  sc_visi = [:public]
834
840
  sc_visi.push :protected if root == fqns
835
- meths.concat get_methods(sc, fqns, visibility: sc_visi)
841
+ nfqns = find_fully_qualified_namespace(sc, fqns)
842
+ meths.concat inner_get_methods('', nfqns, skip, sc_visi)
843
+ meths.concat yard_map.get_methods(nfqns, '', visibility: sc_visi)
836
844
  end
837
845
  end
838
846
  em = @namespace_extends[fqns]
@@ -866,13 +874,16 @@ module Solargraph
866
874
  unless sc.nil?
867
875
  sc_visi = [:public]
868
876
  sc_visi.push :protected if sc == fqns
869
- meths.concat get_instance_methods(sc, fqns, visibility: sc_visi)
877
+ nfqns = find_fully_qualified_namespace(sc, fqns)
878
+ meths.concat inner_get_instance_methods('', nfqns, skip, sc_visi)
879
+ meths.concat yard_map.get_instance_methods(nfqns, '', visibility: sc_visi)
870
880
  end
871
881
  end
872
882
  im = @namespace_includes[fqns]
873
883
  unless im.nil?
874
884
  im.each do |i|
875
- meths.concat inner_get_instance_methods(i, fqns, skip, visibility)
885
+ nfqns = find_fully_qualified_namespace(i, fqns)
886
+ meths.concat inner_get_instance_methods('', nfqns, skip, visibility)
876
887
  end
877
888
  end
878
889
  meths.uniq
@@ -949,7 +960,7 @@ module Solargraph
949
960
  type
950
961
  end
951
962
 
952
- def inner_get_constants here, skip = [], deep = true, visibility
963
+ def inner_get_constants here, skip = [], deep = true, visibility = [:public]
953
964
  return [] if skip.include?(here)
954
965
  skip.push here
955
966
  result = []
@@ -2,8 +2,6 @@ module Solargraph
2
2
  class ApiMap
3
3
  module SourceToYard
4
4
 
5
- private
6
-
7
5
  # Get the YARD CodeObject at the specified path.
8
6
  #
9
7
  # @return [YARD::CodeObjects::Base]
@@ -15,14 +13,6 @@ module Solargraph
15
13
  code_object_map.keys
16
14
  end
17
15
 
18
- def code_object_map
19
- @code_object_map ||= {}
20
- end
21
-
22
- def root_code_object
23
- @root_code_object ||= YARD::CodeObjects::RootObject.new(nil, 'root')
24
- end
25
-
26
16
  # @param sources [Array<Solargraph::ApiMap::Source>] Sources for code objects
27
17
  def rake_yard sources
28
18
  code_object_map.clear
@@ -37,7 +27,9 @@ module Solargraph
37
27
  code_object_map[pin.path].files.push pin.source.filename
38
28
  end
39
29
  s.namespace_includes.each_pair do |n, i|
40
- code_object_map[n].mixins.push code_object_map[i] unless code_object_map[i].nil?
30
+ i.each do |inc|
31
+ code_object_map[n].instance_mixins.push code_object_map[inc] unless code_object_map[inc].nil?
32
+ end
41
33
  end
42
34
  s.attribute_pins.each do |pin|
43
35
  code_object_map[pin.path] ||= YARD::CodeObjects::MethodObject.new(code_object_at(pin.namespace), pin.name, :instance)
@@ -60,6 +52,16 @@ module Solargraph
60
52
  end
61
53
  end
62
54
  end
55
+
56
+ private
57
+
58
+ def code_object_map
59
+ @code_object_map ||= {}
60
+ end
61
+
62
+ def root_code_object
63
+ @root_code_object ||= YARD::CodeObjects::RootObject.new(nil, 'root')
64
+ end
63
65
  end
64
66
  end
65
67
  end
@@ -2,8 +2,6 @@ require 'parser/current'
2
2
 
3
3
  module Solargraph
4
4
  class CodeMap
5
- autoload :Statement, 'solargraph/code_map/statement'
6
-
7
5
  # The root node of the parsed code.
8
6
  #
9
7
  # @return [Parser::AST::Node]
@@ -32,7 +30,11 @@ module Solargraph
32
30
  filename = filename.gsub(File::ALT_SEPARATOR, File::SEPARATOR) unless filename.nil? or File::ALT_SEPARATOR.nil?
33
31
  @filename = filename
34
32
  @api_map = api_map
35
- @source = self.api_map.virtualize code, filename, cursor
33
+ if !filename.nil? and filename.end_with?('.erb')
34
+ @source = self.api_map.virtualize(convert_erb(code), filename, cursor)
35
+ else
36
+ @source = self.api_map.virtualize(code, filename, cursor)
37
+ end
36
38
  @node = @source.node
37
39
  @code = @source.code
38
40
  @comments = @source.comments
@@ -813,5 +815,46 @@ module Solargraph
813
815
  return [] if match.nil?
814
816
  match[1].split(',').map(&:strip)
815
817
  end
818
+
819
+ # @param template [String]
820
+ def convert_erb template
821
+ result = ''
822
+ i = 0
823
+ in_code = false
824
+ if template.start_with?('<%=')
825
+ i += 3
826
+ result += ';;;'
827
+ in_code = true
828
+ elsif template.start_with? '<%'
829
+ i += 2
830
+ result += ';;'
831
+ in_code = true
832
+ end
833
+ while i < template.length
834
+ if in_code
835
+ if template[i, 2] == '%>'
836
+ i += 2
837
+ result += ';;'
838
+ in_code = false
839
+ else
840
+ result += template[i]
841
+ end
842
+ else
843
+ if template[i, 3] == '<%='
844
+ i += 2
845
+ result += ';;;'
846
+ in_code = true
847
+ elsif template[i, 2] == '<%'
848
+ i += 1
849
+ result += ';;'
850
+ in_code = true
851
+ else
852
+ result += template[i].sub(/[^\s]/, ' ')
853
+ end
854
+ end
855
+ i += 1
856
+ end
857
+ result
858
+ end
816
859
  end
817
860
  end
@@ -1,3 +1,3 @@
1
1
  module Solargraph
2
- VERSION = '0.17.0'
2
+ VERSION = '0.17.1'
3
3
  end
@@ -22,6 +22,8 @@ module Solargraph
22
22
  # HACK: YardMap needs its own copy of this array
23
23
  @required = required.clone
24
24
  @namespace_yardocs = {}
25
+ @gem_paths = {}
26
+ process_gem_paths
25
27
  if !workspace.nil? and File.exist?(File.join workspace, 'Gemfile')
26
28
  Bundler.with_clean_env do
27
29
  Bundler.environment.chdir(workspace) do
@@ -246,7 +248,7 @@ module Solargraph
246
248
  meths = obj.meths(scope: [:instance]).keep_if{|m| m.name.to_s == parts[1]}
247
249
  meths.each do |m|
248
250
  args = get_method_args(m)
249
- result.push Solargraph::Suggestion.new(m.name, kind: 'Method', detail: m.path, code_object: m, arguments: args)
251
+ result.push Solargraph::Suggestion.new(m.name, kind: 'Method', detail: m.path, code_object: m, arguments: args, location: object_location(m))
250
252
  end
251
253
  end
252
254
  else
@@ -254,7 +256,7 @@ module Solargraph
254
256
  args = []
255
257
  args = get_method_args(obj) if obj.kind_of?(YARD::CodeObjects::MethodObject)
256
258
  kind = kind_of_object(obj)
257
- result.push Solargraph::Suggestion.new(obj.name, kind: kind, detail: obj.path, code_object: obj, arguments: args)
259
+ result.push Solargraph::Suggestion.new(obj.name, kind: kind, detail: obj.path, code_object: obj, arguments: args, location: object_location(obj))
258
260
  end
259
261
  end
260
262
  end
@@ -374,6 +376,37 @@ module Solargraph
374
376
  end
375
377
  end
376
378
 
379
+ def process_gem_paths
380
+ if !has_bundle?
381
+ required.each do |r|
382
+ spec = Gem::Specification.find_by_path(r)
383
+ if spec.nil?
384
+ STDERR.puts "Required path not found: #{r}"
385
+ else
386
+ @gem_paths[spec.name] = spec.full_gem_path
387
+ end
388
+ end
389
+ else
390
+ Bundler.with_clean_env do
391
+ Bundler.environment.chdir(workspace) do
392
+ Bundler.environment.gems.to_a.each do |g|
393
+ @gem_paths[g.name] = g.full_gem_path
394
+ end
395
+ end
396
+ #Bundler.environment.chdir(workspace) do
397
+ # required.each do |r|
398
+ # spec = Bundler.rubygems.gem_from_path(r)
399
+ # if spec.nil?
400
+ # STDERR.puts "Required path not found: #{r}"
401
+ # else
402
+ # @gem_paths[spec.name] = spec.full_gem_path
403
+ # end
404
+ # end
405
+ #end
406
+ end
407
+ end
408
+ end
409
+
377
410
  def find_yardoc path
378
411
  result = nil
379
412
  spec = Gem::Specification.find_by_path(path)
@@ -441,11 +474,18 @@ module Solargraph
441
474
 
442
475
  # @param obj [YARD::CodeObjects::Base]
443
476
  def object_location obj
444
- # @todo Locations from YardMaps are temporarily disabled pending a
445
- # method for resolving the source file's absolute path.
446
- return nil
447
477
  return nil if obj.file.nil? or obj.line.nil?
448
- "#{obj.file}:#{obj.line - 1}:0"
478
+ @gem_paths.values.each do |path|
479
+ file = File.join(path, obj.file)
480
+ if File.exist?(file)
481
+ return "#{file}:#{obj.line - 1}:0"
482
+ end
483
+ end
484
+ nil
485
+ end
486
+
487
+ def has_bundle?
488
+ !workspace.nil? and File.exist?(File.join workspace, 'Gemfile')
449
489
  end
450
490
  end
451
491
  end
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.17.0
4
+ version: 0.17.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Snyder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-02 00:00:00.000000000 Z
11
+ date: 2018-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser