solargraph 0.2.0 → 0.2.1

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: e99bdc143ca29ca298dc48668e2eab23a73fb338
4
- data.tar.gz: a2c8fc45842f2d30f30c964f427962992223315e
3
+ metadata.gz: 6c7aa0f4315160d35f462c40d61d8118022b9f94
4
+ data.tar.gz: 7ee49c7852037b59c9652a37bfeb8c6622920e5a
5
5
  SHA512:
6
- metadata.gz: e7eee90d32b54be8ed26faa90c55794c68981e90e6fae4dfafba8a226847bb06fe90485876a82be679d83bca3fac5eb33c63072d98a517418c6437ba91956873
7
- data.tar.gz: c8b992d21569e07e36db02c08c332c7309ee206daf81ff5489ce440a308b50d1e6cdabc337b728ecd37403e745f1f6fc4ffbb1562e3d486908f8372b2cafcd5d
6
+ metadata.gz: 30406ab1d590dde9f8f0f425ac535e7773f1c8d651dbe904472ac11f04323a6e0ef6c1c1951e5f72b1e5d44a90393cc916a656c243f0131619a203048e28bec5
7
+ data.tar.gz: 8df3a01fafa6cf010913794b0aaa9967bd7373efc8c4c5a041c7bebaf386690612648f05cb3cf0a45a79404efd5d947aaf80662d39903cd47b7579734e3d3e5f
@@ -23,7 +23,7 @@ module Solargraph
23
23
  def initialize workspace = nil
24
24
  @workspace = workspace
25
25
  clear
26
- unless @workspace.nil? #or has_yardoc?
26
+ unless @workspace.nil?
27
27
  files = Dir[File.join workspace, 'lib', '**', '*.rb'] + Dir[File.join workspace, 'app', '**', '*.rb']
28
28
  files.each { |f|
29
29
  append_file f
@@ -291,7 +291,8 @@ module Solargraph
291
291
  end
292
292
 
293
293
  def get_methods(namespace, root = '')
294
- meths = inner_get_methods(namespace, root, [])
294
+ meths = []
295
+ meths += inner_get_methods(namespace, root, []) #unless has_yardoc?
295
296
  yard = YardMap.new(required: @required, workspace: @workspace)
296
297
  meths += yard.get_methods(namespace, root)
297
298
  type = get_namespace_type(namespace, root)
@@ -302,39 +303,28 @@ module Solargraph
302
303
  end
303
304
  meths
304
305
  end
305
-
306
- def inner_get_methods(namespace, root = '', skip = [])
307
- meths = []
308
- return meths if skip.include?(namespace)
309
- skip.push namespace
310
- fqns = find_fully_qualified_namespace(namespace, root)
311
- return meths if fqns.nil?
312
- nodes = get_namespace_nodes(fqns)
313
- nodes.each { |n|
314
- if n.kind_of?(AST::Node)
315
- if n.type == :class and !n.children[1].nil?
316
- s = unpack_name(n.children[1])
317
- meths += inner_get_methods(s, root, skip)
318
- end
319
- n.children.each { |c|
320
- if c.kind_of?(AST::Node) and c.type == :defs
321
- docstring = get_comment_for(c)
322
- meths.push Suggestion.new(c.children[1], kind: Suggestion::METHOD, documentation: docstring) if c.children[1].to_s[0].match(/[a-z_]/i) and c.children[1] != :def
323
- elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :include
324
- # TODO This might not be right. Should we be getting singleton methods
325
- # from an include, or only from an extend?
326
- i = unpack_name(c.children[2])
327
- meths += inner_get_methods(i, root, skip) unless i == 'Kernel'
328
- end
329
- }
306
+
307
+ def get_method_args node
308
+ list = nil
309
+ args = []
310
+ node.children.each { |c|
311
+ if c.kind_of?(AST::Node) and c.type == :args
312
+ list = c
313
+ break
330
314
  end
331
315
  }
332
- meths.uniq
316
+ return args if list.nil?
317
+ list.children.each { |c|
318
+ if c.type == :arg
319
+ args.push c.children[0]
320
+ end
321
+ }
322
+ args
333
323
  end
334
-
324
+
335
325
  def get_instance_methods(namespace, root = '')
336
326
  meths = []
337
- meths += inner_get_instance_methods(namespace, root, []) unless has_yardoc?
327
+ meths += inner_get_instance_methods(namespace, root, []) #unless has_yardoc?
338
328
  yard = YardMap.new(required: @required, workspace: @workspace)
339
329
  yard_meths = yard.get_instance_methods(namespace, root)
340
330
  if yard_meths.any?
@@ -368,6 +358,60 @@ module Solargraph
368
358
  }
369
359
  return nil
370
360
  end
361
+
362
+ def self.current
363
+ if @current.nil?
364
+ @current = ApiMap.new
365
+ @current.merge(Parser::CurrentRuby.parse(File.read("#{Solargraph::STUB_PATH}/ruby/2.3.0/core.rb")))
366
+ end
367
+ @current
368
+ end
369
+
370
+ def get_include_strings_from *nodes
371
+ arr = []
372
+ nodes.each { |node|
373
+ next unless node.kind_of?(AST::Node)
374
+ arr.push unpack_name(node.children[2]) if (node.type == :send and node.children[1] == :include)
375
+ node.children.each { |n|
376
+ arr += get_include_strings_from(n) if n.kind_of?(AST::Node) and n.type != :class and n.type != :module
377
+ }
378
+ }
379
+ arr
380
+ end
381
+
382
+ private
383
+
384
+ def inner_get_methods(namespace, root = '', skip = [])
385
+ meths = []
386
+ return meths if skip.include?(namespace)
387
+ skip.push namespace
388
+ fqns = find_fully_qualified_namespace(namespace, root)
389
+ return meths if fqns.nil?
390
+ nodes = get_namespace_nodes(fqns)
391
+ 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'
409
+ end
410
+ }
411
+ end
412
+ }
413
+ meths.uniq
414
+ end
371
415
 
372
416
  def inner_get_instance_methods(namespace, root, skip)
373
417
  fqns = find_fully_qualified_namespace(namespace, root)
@@ -390,7 +434,10 @@ module Solargraph
390
434
  elsif current_scope == :public
391
435
  if c.kind_of?(AST::Node) and c.type == :def
392
436
  cmnt = get_comment_for(c)
393
- meths.push Suggestion.new(c.children[0], kind: Suggestion::METHOD, documentation: cmnt, detail: fqns) if c.children[0].to_s[0].match(/[a-z]/i)
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)
394
441
  elsif c.kind_of?(AST::Node) and c.type == :send and c.children[1] == :attr_reader
395
442
  c.children[2..-1].each { |x|
396
443
  meths.push Suggestion.new(x.children[0], kind: Suggestion::METHOD) if x.type == :sym
@@ -414,29 +461,7 @@ module Solargraph
414
461
  }
415
462
  meths.uniq
416
463
  end
417
-
418
- def self.current
419
- if @current.nil?
420
- @current = ApiMap.new
421
- @current.merge(Parser::CurrentRuby.parse(File.read("#{Solargraph::STUB_PATH}/ruby/2.3.0/core.rb")))
422
- end
423
- @current
424
- end
425
-
426
- def get_include_strings_from *nodes
427
- arr = []
428
- nodes.each { |node|
429
- next unless node.kind_of?(AST::Node)
430
- arr.push unpack_name(node.children[2]) if (node.type == :send and node.children[1] == :include)
431
- node.children.each { |n|
432
- arr += get_include_strings_from(n) if n.kind_of?(AST::Node) and n.type != :class and n.type != :module
433
- }
434
- }
435
- arr
436
- end
437
-
438
- private
439
-
464
+
440
465
  def mappable?(node)
441
466
  # TODO Add node.type :casgn (constant assignment)
442
467
  if node.kind_of?(AST::Node) and (node.type == :class or node.type == :module or node.type == :def or node.type == :defs or node.type == :ivasgn or node.type == :gvasgn or node.type == :or_asgn)
@@ -31,7 +31,6 @@ module Solargraph
31
31
  tries = 0
32
32
  # Hide incomplete code to avoid syntax errors
33
33
  tmp = "#{@code}\nX".gsub(/[\.@]([\s])/, '#\1').gsub(/([\A\s]?)def([\s]*?[\n\Z])/, '\1#ef\2')
34
- #tmp = code
35
34
  begin
36
35
  @node, comments = Parser::CurrentRuby.parse_with_comments(tmp)
37
36
  @api_map.append_node(@node, comments, filename)
@@ -213,7 +212,12 @@ module Solargraph
213
212
  if parts.length == 0
214
213
  return @api_map.get_methods(first, ns_here)
215
214
  end
216
- obj = get_method_return_value first, ns_here, parts.shift
215
+ meth = parts.shift
216
+ if meth == 'new'
217
+ obj = first
218
+ else
219
+ obj = get_method_return_value first, ns_here, meth
220
+ end
217
221
  while parts.length > 0
218
222
  obj = get_instance_method_return_value obj, ns_here, parts.shift
219
223
  end
@@ -263,7 +267,7 @@ module Solargraph
263
267
  parens = 0
264
268
  signature = ''
265
269
  index -=1
266
- while index > 0
270
+ while index >= 0
267
271
  break if brackets > 0 or parens > 0 or squares > 0
268
272
  char = @code[index, 1]
269
273
  if char == ')'
@@ -1,3 +1,3 @@
1
1
  module Solargraph
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
@@ -96,7 +96,10 @@ module Solargraph
96
96
  unless ns.nil?
97
97
  ns.meths(scope: :class, visibility: [:public]).each { |m|
98
98
  n = m.to_s.split('.').last
99
- meths.push Suggestion.new("#{n}", kind: Suggestion::METHOD, detail: "#{ns}") if n.to_s.match(/^[a-z]/i)
99
+ label = "#{n}"
100
+ args = get_method_args(m)
101
+ label += " #{args.join(', ')}" unless args.empty?
102
+ meths.push Suggestion.new(label, insert: "#{n}", kind: Suggestion::METHOD, detail: "#{ns}") if n.to_s.match(/^[a-z]/i)
100
103
  }
101
104
  if ns.kind_of?(YARD::CodeObjects::ClassObject) and namespace != 'Class'
102
105
  meths += get_instance_methods('Class')
@@ -122,7 +125,10 @@ module Solargraph
122
125
  ns.meths(scope: :instance, visibility: [:public]).each { |m|
123
126
  n = m.to_s.split('#').last
124
127
  if n.to_s.match(/^[a-z]/i) and !m.to_s.start_with?('Kernel#') and !m.docstring.to_s.include?(':nodoc:')
125
- meths.push Suggestion.new("#{n}", kind: Suggestion::METHOD, documentation: m.docstring, code_object: m, detail: "#{ns}", location: "#{m.file}:#{m.line}")
128
+ label = "#{n}"
129
+ args = get_method_args(m)
130
+ label += " #{args.join(', ')}" unless args.empty?
131
+ meths.push Suggestion.new(label, insert: "#{n}", kind: Suggestion::METHOD, documentation: m.docstring, code_object: m, detail: "#{ns}", location: "#{m.file}:#{m.line}")
126
132
  end
127
133
  }
128
134
  if ns.kind_of?(YARD::CodeObjects::ClassObject) and namespace != 'Object'
@@ -133,6 +139,16 @@ module Solargraph
133
139
  }
134
140
  meths
135
141
  end
142
+
143
+ private
144
+
145
+ def get_method_args meth
146
+ args = []
147
+ meth.parameters.each { |a|
148
+ args.push a[0]
149
+ }
150
+ args
151
+ end
136
152
  end
137
153
 
138
154
  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.2.0
4
+ version: 0.2.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: 2017-03-19 00:00:00.000000000 Z
11
+ date: 2017-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser