solargraph 0.2.1 → 0.2.2

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: 6c7aa0f4315160d35f462c40d61d8118022b9f94
4
- data.tar.gz: 7ee49c7852037b59c9652a37bfeb8c6622920e5a
3
+ metadata.gz: fb228dbd2c050d2937573b2e4a4249fb951da217
4
+ data.tar.gz: 1af21e85d38cc159b53fc69ba05aeb4011d41a4a
5
5
  SHA512:
6
- metadata.gz: 30406ab1d590dde9f8f0f425ac535e7773f1c8d651dbe904472ac11f04323a6e0ef6c1c1951e5f72b1e5d44a90393cc916a656c243f0131619a203048e28bec5
7
- data.tar.gz: 8df3a01fafa6cf010913794b0aaa9967bd7373efc8c4c5a041c7bebaf386690612648f05cb3cf0a45a79404efd5d947aaf80662d39903cd47b7579734e3d3e5f
6
+ metadata.gz: 8804b2ea16a1e6b5e1568a683af153a89da87f219ba00cd6b4338d4044c97f92486cfdc7c3f13009c6547b1750d98f1e5574a40f6f97c73435ab314368f6e48b
7
+ data.tar.gz: 45928e94fefe7fc5a78609b808666e6805e6a654dabe9b91a964b0c57155641544671848922e1c73434e63fac1e67418beefffebea1da59ec8f58c72efb80b6c
data/lib/solargraph.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'solargraph/version'
2
+ require 'rubygems/package'
2
3
 
3
4
  module Solargraph
4
5
  autoload :Analyzer, 'solargraph/analyzer'
@@ -21,7 +22,7 @@ cache_dir = File.join(Dir.home, '.solargraph', 'cache')
21
22
  version_dir = File.join(cache_dir, '2.0.0')
22
23
  unless File.exist?(version_dir)
23
24
  FileUtils.mkdir_p cache_dir
24
- FileUtils.cp File.join(Solargraph::YARDOC_PATH, '2.0.0.tar.gz')
25
+ FileUtils.cp File.join(Solargraph::YARDOC_PATH, '2.0.0.tar.gz'), cache_dir
25
26
  tar_extract = Gem::Package::TarReader.new(Zlib::GzipReader.open(File.join(cache_dir, '2.0.0.tar.gz')))
26
27
  tar_extract.rewind
27
28
  tar_extract.each do |entry|
@@ -35,5 +36,5 @@ unless File.exist?(version_dir)
35
36
  end
36
37
  end
37
38
  tar_extract.close
38
- FileUtils.rm File.join(cache_dir, '2.0.0.tar.gz')
39
+ #FileUtils.rm File.join(cache_dir, '2.0.0.tar.gz')
39
40
  end
@@ -24,7 +24,7 @@ module Solargraph
24
24
  @workspace = workspace
25
25
  clear
26
26
  unless @workspace.nil?
27
- files = Dir[File.join workspace, 'lib', '**', '*.rb'] + Dir[File.join workspace, 'app', '**', '*.rb']
27
+ files = Dir[File.join @workspace, 'lib', '**', '*.rb'] + Dir[File.join @workspace, 'app', '**', '*.rb']
28
28
  files.each { |f|
29
29
  append_file f
30
30
  }
@@ -44,6 +44,15 @@ module Solargraph
44
44
  workspace and File.exist?(File.join(workspace, '.yardoc'))
45
45
  end
46
46
 
47
+ def yardoc_has_file?(filename)
48
+ return false unless has_yardoc?
49
+ return false if filename.nil?
50
+ if filename.start_with?(File.join(workspace, 'lib'), File.join(workspace, 'app'))
51
+ return true
52
+ end
53
+ false
54
+ end
55
+
47
56
  def append_file filename
48
57
  append_source File.read(filename), filename
49
58
  end
@@ -136,6 +145,9 @@ module Solargraph
136
145
  else
137
146
  return result if skip.include?(fqns)
138
147
  skip.push fqns
148
+ nodes = get_namespace_nodes(fqns)
149
+ nodes.delete_if { |n| yardoc_has_file?(get_filename_for(n))}
150
+ return result if nodes.empty?
139
151
  cursor = @namespace_tree
140
152
  parts = fqns.split('::')
141
153
  parts.each { |p|
@@ -223,12 +235,15 @@ module Solargraph
223
235
  end
224
236
 
225
237
  def get_root_for(node)
226
- @parent_stack[node].last unless @parent_stack[node].nil?
238
+ s = @parent_stack[node]
239
+ return nil if s.nil?
240
+ return node if s.empty?
241
+ s.last
227
242
  end
228
243
 
229
244
  def get_filename_for(node)
230
245
  root = get_root_for(node)
231
- root.children[0]
246
+ root.nil? ? nil : root.children[0]
232
247
  end
233
248
 
234
249
  def inner_get_instance_variables(node, scope)
@@ -294,14 +309,18 @@ module Solargraph
294
309
  meths = []
295
310
  meths += inner_get_methods(namespace, root, []) #unless has_yardoc?
296
311
  yard = YardMap.new(required: @required, workspace: @workspace)
297
- meths += yard.get_methods(namespace, root)
298
- type = get_namespace_type(namespace, root)
299
- if type == :class
300
- meths += yard.get_instance_methods('Class')
301
- elsif type == :module
302
- meths += yard.get_methods('Module')
312
+ yard_meths = yard.get_methods(namespace, root)
313
+ if yard_meths.any?
314
+ meths.concat yard_meths
315
+ else
316
+ type = get_namespace_type(namespace, root)
317
+ if type == :class
318
+ meths += yard.get_instance_methods('Class')
319
+ elsif type == :module
320
+ meths += yard.get_methods('Module')
321
+ end
322
+ meths
303
323
  end
304
- meths
305
324
  end
306
325
 
307
326
  def get_method_args node
@@ -389,25 +408,27 @@ module Solargraph
389
408
  return meths if fqns.nil?
390
409
  nodes = get_namespace_nodes(fqns)
391
410
  nodes.each { |n|
392
- if n.kind_of?(AST::Node)
393
- if n.type == :class and !n.children[1].nil?
394
- s = unpack_name(n.children[1])
395
- meths += inner_get_methods(s, root, skip)
396
- end
397
- n.children.each { |c|
398
- if c.kind_of?(AST::Node) and c.type == :defs
399
- docstring = get_comment_for(c)
400
- label = "#{c.children[1]}"
401
- args = get_method_args(c)
402
- label += " #{args.join(', ')}" unless args.empty?
403
- meths.push Suggestion.new(label, insert: c.children[1].to_s, kind: Suggestion::METHOD, detail: 'Method', documentation: docstring) if c.children[1].to_s[0].match(/[a-z_]/i) and c.children[1] != :def
404
- elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :include
405
- # TODO: This might not be right. Should we be getting singleton methods
406
- # from an include, or only from an extend?
407
- i = unpack_name(c.children[2])
408
- meths += inner_get_methods(i, root, skip) unless i == 'Kernel'
411
+ unless yardoc_has_file?(get_filename_for(n))
412
+ if n.kind_of?(AST::Node)
413
+ if n.type == :class and !n.children[1].nil?
414
+ s = unpack_name(n.children[1])
415
+ meths += inner_get_methods(s, root, skip)
409
416
  end
410
- }
417
+ n.children.each { |c|
418
+ if c.kind_of?(AST::Node) and c.type == :defs
419
+ docstring = get_comment_for(c)
420
+ label = "#{c.children[1]}"
421
+ args = get_method_args(c)
422
+ label += " #{args.join(', ')}" unless args.empty?
423
+ meths.push Suggestion.new(label, insert: c.children[1].to_s, kind: Suggestion::METHOD, detail: 'Method', documentation: docstring) if c.children[1].to_s[0].match(/[a-z_]/i) and c.children[1] != :def
424
+ elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :include
425
+ # TODO: This might not be right. Should we be getting singleton methods
426
+ # from an include, or only from an extend?
427
+ i = unpack_name(c.children[2])
428
+ meths += inner_get_methods(i, root, skip) unless i == 'Kernel'
429
+ end
430
+ }
431
+ end
411
432
  end
412
433
  }
413
434
  meths.uniq
@@ -420,43 +441,45 @@ module Solargraph
420
441
  skip.push fqns
421
442
  nodes = get_namespace_nodes(fqns)
422
443
  nodes.each { |n|
423
- if n.kind_of?(AST::Node)
424
- if n.type == :class and !n.children[1].nil?
425
- s = unpack_name(n.children[1])
426
- meths += inner_get_instance_methods(s, namespace, skip)
427
- end
428
- current_scope = :public
429
- n.children.each { |c|
430
- if c.kind_of?(AST::Node) and c.type == :send and [:public, :protected, :private].include?(c.children[1])
431
- # TODO: Determine the current scope so we can decide whether to
432
- # exclude protected or private methods. Right now we're just
433
- # assuming public only
434
- elsif current_scope == :public
435
- if c.kind_of?(AST::Node) and c.type == :def
436
- cmnt = get_comment_for(c)
437
- label = "#{c.children[0]}"
438
- args = get_method_args(c)
439
- label += " #{args.join(', ')}" unless args.empty?
440
- meths.push Suggestion.new(label, insert: c.children[0].to_s, kind: Suggestion::METHOD, documentation: cmnt, detail: fqns) if c.children[0].to_s[0].match(/[a-z]/i)
441
- elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :attr_reader
442
- c.children[2..-1].each { |x|
443
- meths.push Suggestion.new(x.children[0], kind: Suggestion::METHOD) if x.type == :sym
444
- }
445
- elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :attr_writer
446
- c.children[2..-1].each { |x|
447
- meths.push Suggestion.new("#{x.children[0]}=", kind: Suggestion::METHOD) if x.type == :sym
448
- }
449
- elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :attr_accessor
450
- c.children[2..-1].each { |x|
451
- meths.push Suggestion.new(x.children[0], kind: Suggestion::METHOD) if x.type == :sym
452
- meths.push Suggestion.new("#{x.children[0]}=", kind: Suggestion::METHOD) if x.type == :sym
453
- }
454
- end
444
+ unless yardoc_has_file?(get_filename_for(n))
445
+ if n.kind_of?(AST::Node)
446
+ if n.type == :class and !n.children[1].nil?
447
+ s = unpack_name(n.children[1])
448
+ meths += inner_get_instance_methods(s, namespace, skip)
455
449
  end
456
- get_include_strings_from(n).each { |i|
457
- meths += inner_get_instance_methods(i, fqns, skip)
450
+ current_scope = :public
451
+ n.children.each { |c|
452
+ if c.kind_of?(AST::Node) and c.type == :send and [:public, :protected, :private].include?(c.children[1])
453
+ # TODO: Determine the current scope so we can decide whether to
454
+ # exclude protected or private methods. Right now we're just
455
+ # assuming public only
456
+ elsif current_scope == :public
457
+ if c.kind_of?(AST::Node) and c.type == :def
458
+ cmnt = get_comment_for(c)
459
+ label = "#{c.children[0]}"
460
+ args = get_method_args(c)
461
+ label += " #{args.join(', ')}" unless args.empty?
462
+ meths.push Suggestion.new(label, insert: c.children[0].to_s, kind: Suggestion::METHOD, documentation: cmnt, detail: fqns) if c.children[0].to_s[0].match(/[a-z]/i)
463
+ elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :attr_reader
464
+ c.children[2..-1].each { |x|
465
+ meths.push Suggestion.new(x.children[0], kind: Suggestion::METHOD) if x.type == :sym
466
+ }
467
+ elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :attr_writer
468
+ c.children[2..-1].each { |x|
469
+ meths.push Suggestion.new("#{x.children[0]}=", kind: Suggestion::METHOD) if x.type == :sym
470
+ }
471
+ elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :attr_accessor
472
+ c.children[2..-1].each { |x|
473
+ meths.push Suggestion.new(x.children[0], kind: Suggestion::METHOD) if x.type == :sym
474
+ meths.push Suggestion.new("#{x.children[0]}=", kind: Suggestion::METHOD) if x.type == :sym
475
+ }
476
+ end
477
+ end
478
+ get_include_strings_from(n).each { |i|
479
+ meths += inner_get_instance_methods(i, fqns, skip)
480
+ }
458
481
  }
459
- }
482
+ end
460
483
  end
461
484
  }
462
485
  meths.uniq
@@ -8,6 +8,9 @@ module Solargraph
8
8
  include NodeMethods
9
9
 
10
10
  def initialize code: '', filename: nil, workspace: nil
11
+ unless workspace.nil?
12
+ workspace = workspace.gsub(File::ALT_SEPARATOR, File::SEPARATOR) unless File::ALT_SEPARATOR.nil?
13
+ end
11
14
  if workspace.nil? and !filename.nil?
12
15
  filename = filename.gsub(File::ALT_SEPARATOR, File::SEPARATOR) unless File::ALT_SEPARATOR.nil?
13
16
  workspace = CodeMap.find_workspace(filename)
@@ -1,3 +1,3 @@
1
1
  module Solargraph
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.2'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solargraph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Snyder