solargraph 0.17.1 → 0.17.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/solargraph/api_map.rb +6 -6
- data/lib/solargraph/code_map.rb +7 -0
- data/lib/solargraph/core_fills.rb +4 -0
- data/lib/solargraph/server.rb +6 -6
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/yard_map.rb +27 -118
- 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: 70caa0a1b8b30a5d8c276ef9ec3dd54e36df6786
|
4
|
+
data.tar.gz: 346775f0ce4f6b0dd62f2240ab0ad523c845075a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 415327acf2fc2f9779aa53a01a0a5bd4dd9e14f39cdc879f4ce51fdd9533eb3786a4c129fc0e365e080ddf8f4a2e5de0cb8464c7443ca2cbc1bb4d8a0fb4a6cf
|
7
|
+
data.tar.gz: 77954b8598a0b098d50b4080169f952dbdb008381c7471bebcd97fe6ebd4a737d23a768e5f5cb6bda05689dd6e3a6543cf62146590c01c53431151d62b68b324
|
data/lib/solargraph/api_map.rb
CHANGED
@@ -216,8 +216,8 @@ module Solargraph
|
|
216
216
|
while parts.length > 0
|
217
217
|
resolved = find_namespace_pins(parts.join('::'))
|
218
218
|
resolved.each do |pin|
|
219
|
-
visi = :public
|
220
|
-
visi
|
219
|
+
visi = [:public]
|
220
|
+
visi.push :private if namespace == '' and root != '' and pin.path == fqns
|
221
221
|
result.concat inner_get_constants(pin.path, skip, true, visi)
|
222
222
|
end
|
223
223
|
parts.pop
|
@@ -967,24 +967,24 @@ module Solargraph
|
|
967
967
|
cp = @const_pins[here]
|
968
968
|
unless cp.nil?
|
969
969
|
cp.each do |pin|
|
970
|
-
result.push pin_to_suggestion(pin) if pin.visibility == :public or visibility
|
970
|
+
result.push pin_to_suggestion(pin) if pin.visibility == :public or visibility.include?(:private)
|
971
971
|
end
|
972
972
|
end
|
973
973
|
np = @namespace_pins[here]
|
974
974
|
unless np.nil?
|
975
975
|
np.each do |pin|
|
976
|
-
if pin.visibility == :public || visibility
|
976
|
+
if pin.visibility == :public || visibility.include?(:private)
|
977
977
|
result.push pin_to_suggestion(pin)
|
978
978
|
if deep
|
979
979
|
get_include_strings_from(pin.node).each do |i|
|
980
|
-
result.concat inner_get_constants(i, skip, false, :public)
|
980
|
+
result.concat inner_get_constants(i, skip, false, [:public])
|
981
981
|
end
|
982
982
|
end
|
983
983
|
end
|
984
984
|
end
|
985
985
|
end
|
986
986
|
get_include_strings_from(*get_namespace_nodes(here)).each do |i|
|
987
|
-
result.concat inner_get_constants(i, skip, false, :public)
|
987
|
+
result.concat inner_get_constants(i, skip, false, [:public])
|
988
988
|
end
|
989
989
|
result
|
990
990
|
end
|
data/lib/solargraph/code_map.rb
CHANGED
@@ -102,11 +102,17 @@ module Solargraph
|
|
102
102
|
#
|
103
103
|
# @return [Boolean]
|
104
104
|
def comment_at?(index)
|
105
|
+
return false if string_at?(index)
|
105
106
|
line, col = Solargraph::ApiMap::Source.get_position_at(source.code, index)
|
106
107
|
return false if source.stubbed_lines.include?(line)
|
107
108
|
@comments.each do |c|
|
108
109
|
return true if index > c.location.expression.begin_pos and index <= c.location.expression.end_pos
|
109
110
|
end
|
111
|
+
# Extra test due to some comments not getting tracked
|
112
|
+
while (index > 0 and @code[index] != "\n")
|
113
|
+
return true if @code[index] == '#'
|
114
|
+
index -= 1
|
115
|
+
end
|
110
116
|
false
|
111
117
|
end
|
112
118
|
|
@@ -540,6 +546,7 @@ module Solargraph
|
|
540
546
|
index -=1
|
541
547
|
in_whitespace = false
|
542
548
|
while index >= 0
|
549
|
+
break if index > 0 and comment_at?(index - 1)
|
543
550
|
unless !in_whitespace and string_at?(index)
|
544
551
|
break if brackets > 0 or parens > 0 or squares > 0
|
545
552
|
char = @code[index, 1]
|
data/lib/solargraph/server.rb
CHANGED
@@ -22,7 +22,6 @@ module Solargraph
|
|
22
22
|
|
23
23
|
post '/prepare' do
|
24
24
|
content_type :json
|
25
|
-
STDERR.puts "Preparing #{params['workspace']}"
|
26
25
|
begin
|
27
26
|
Server.prepare_workspace params['workspace']
|
28
27
|
{ "status" => "ok"}.to_json
|
@@ -99,7 +98,7 @@ module Solargraph
|
|
99
98
|
sugg = []
|
100
99
|
workspace = find_local_workspace(params['filename'], params['workspace'])
|
101
100
|
api_map = get_api_map(workspace)
|
102
|
-
code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map:
|
101
|
+
code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map: api_map, cursor: [params['line'].to_i, params['column'].to_i])
|
103
102
|
offset = code_map.get_offset(params['line'].to_i, params['column'].to_i)
|
104
103
|
sugg = code_map.define_symbol_at(offset)
|
105
104
|
{ "status" => "ok", "suggestions" => sugg }.to_json
|
@@ -174,6 +173,7 @@ module Solargraph
|
|
174
173
|
end
|
175
174
|
|
176
175
|
def find_local_workspace file, workspace
|
176
|
+
return nil if workspace.nil? or workspace.empty?
|
177
177
|
workspace.gsub!(/\\/, '/') unless workspace.nil?
|
178
178
|
unless file.nil? or workspace.nil?
|
179
179
|
file.gsub!(/\\/, '/') unless file.nil?
|
@@ -190,8 +190,9 @@ module Solargraph
|
|
190
190
|
class << self
|
191
191
|
def prepare_workspace directory
|
192
192
|
return if directory.nil?
|
193
|
-
Thread.new do
|
194
|
-
directory.gsub!(/\\/, '/')
|
193
|
+
#Thread.new do
|
194
|
+
directory.gsub!(/\\/, '/')
|
195
|
+
STDERR.puts "Preparing #{directory}"
|
195
196
|
configs = Dir[File.join(directory, '**', '.solargraph.yml')]
|
196
197
|
resolved = []
|
197
198
|
configs.each do |cf|
|
@@ -200,12 +201,11 @@ module Solargraph
|
|
200
201
|
resolved.push dir
|
201
202
|
end
|
202
203
|
generate_api_map directory unless resolved.include?(directory)
|
203
|
-
end
|
204
|
+
#end
|
204
205
|
end
|
205
206
|
|
206
207
|
def generate_api_map(directory)
|
207
208
|
api_map = Solargraph::ApiMap.new(directory)
|
208
|
-
api_map.yard_map
|
209
209
|
@@semaphore.synchronize do
|
210
210
|
@@api_hash[directory] = api_map
|
211
211
|
end
|
data/lib/solargraph/version.rb
CHANGED
data/lib/solargraph/yard_map.rb
CHANGED
@@ -24,15 +24,6 @@ module Solargraph
|
|
24
24
|
@namespace_yardocs = {}
|
25
25
|
@gem_paths = {}
|
26
26
|
process_gem_paths
|
27
|
-
if !workspace.nil? and File.exist?(File.join workspace, 'Gemfile')
|
28
|
-
Bundler.with_clean_env do
|
29
|
-
Bundler.environment.chdir(workspace) do
|
30
|
-
process_requires
|
31
|
-
end
|
32
|
-
end
|
33
|
-
else
|
34
|
-
process_requires
|
35
|
-
end
|
36
27
|
yardocs.push CoreDocs.yardoc_file
|
37
28
|
yardocs.uniq!
|
38
29
|
yardocs.each do |y|
|
@@ -45,11 +36,6 @@ module Solargraph
|
|
45
36
|
cache_core
|
46
37
|
end
|
47
38
|
|
48
|
-
# @return [Solargraph::LiveMap]
|
49
|
-
def live_map
|
50
|
-
@live_map ||= Solargraph::LiveMap.new
|
51
|
-
end
|
52
|
-
|
53
39
|
# @return [Array<String>]
|
54
40
|
def yardocs
|
55
41
|
@yardocs ||= []
|
@@ -131,7 +117,7 @@ module Solargraph
|
|
131
117
|
else
|
132
118
|
next
|
133
119
|
end
|
134
|
-
result.push Suggestion.new(c.to_s.split('::').last, detail: c.to_s, kind: kind, docstring: c.docstring, return_type: return_type)
|
120
|
+
result.push Suggestion.new(c.to_s.split('::').last, detail: c.to_s, kind: kind, docstring: c.docstring, return_type: return_type, location: object_location(c))
|
135
121
|
}
|
136
122
|
cache.set_constants(namespace, scope, result)
|
137
123
|
result
|
@@ -199,7 +185,11 @@ module Solargraph
|
|
199
185
|
label = "#{n}"
|
200
186
|
args = get_method_args(m)
|
201
187
|
kind = (m.is_attribute? ? Suggestion::FIELD : Suggestion::METHOD)
|
202
|
-
|
188
|
+
rt = nil
|
189
|
+
if Solargraph::CoreFills::CUSTOM_RETURN_TYPES.has_key?(m.path)
|
190
|
+
rt = Solargraph::CoreFills::CUSTOM_RETURN_TYPES[m.path]
|
191
|
+
end
|
192
|
+
meths.push Suggestion.new(label, insert: "#{n.gsub(/=$/, ' = ')}", kind: kind, docstring: m.docstring, code_object: m, detail: m.namespace, location: object_location(m), arguments: args, return_type: rt)
|
203
193
|
end
|
204
194
|
}
|
205
195
|
if ns.kind_of?(YARD::CodeObjects::ClassObject) and namespace != 'Object'
|
@@ -218,10 +208,6 @@ module Solargraph
|
|
218
208
|
meths
|
219
209
|
end
|
220
210
|
|
221
|
-
def gem_names
|
222
|
-
Gem::Specification.map{ |s| s.name }.uniq
|
223
|
-
end
|
224
|
-
|
225
211
|
def find_fully_qualified_namespace namespace, scope
|
226
212
|
unless scope.nil? or scope.empty?
|
227
213
|
parts = scope.split('::')
|
@@ -280,38 +266,6 @@ module Solargraph
|
|
280
266
|
nil
|
281
267
|
end
|
282
268
|
|
283
|
-
def bundled_gem_yardocs
|
284
|
-
result = []
|
285
|
-
unless workspace.nil?
|
286
|
-
Bundler.with_clean_env do
|
287
|
-
Bundler.environment.chdir(workspace) do
|
288
|
-
glfn = File.join(workspace, 'Gemfile.lock')
|
289
|
-
spec_versions = {}
|
290
|
-
if File.file?(glfn)
|
291
|
-
lockfile = Bundler::LockfileParser.new(Bundler.read_file(glfn))
|
292
|
-
lockfile.specs.each do |s|
|
293
|
-
spec_versions[s.name] = s.version.to_s
|
294
|
-
end
|
295
|
-
end
|
296
|
-
Bundler.environment.dependencies.each do |s|
|
297
|
-
if s.type == :runtime
|
298
|
-
ver = spec_versions[s.name]
|
299
|
-
y = YARD::Registry.yardoc_file_for_gem(s.name, ver)
|
300
|
-
if y.nil?
|
301
|
-
STDERR.puts "Bundled gem not found: #{s.name}, #{ver}"
|
302
|
-
else
|
303
|
-
#STDERR.puts "Adding #{y}"
|
304
|
-
result.push y
|
305
|
-
add_gem_dependencies(s.name)
|
306
|
-
end
|
307
|
-
end
|
308
|
-
end
|
309
|
-
end
|
310
|
-
end
|
311
|
-
end
|
312
|
-
result.uniq
|
313
|
-
end
|
314
|
-
|
315
269
|
private
|
316
270
|
|
317
271
|
def cache
|
@@ -359,86 +313,41 @@ module Solargraph
|
|
359
313
|
end
|
360
314
|
end
|
361
315
|
|
362
|
-
def process_requires
|
363
|
-
used = []
|
364
|
-
@required.each do |r|
|
365
|
-
if workspace.nil? or !File.exist?(File.join workspace, 'lib', "#{r}.rb")
|
366
|
-
unless used.include?(r)
|
367
|
-
used.push r
|
368
|
-
result = find_yardoc(r)
|
369
|
-
if result.nil?
|
370
|
-
STDERR.puts "Required path not found: #{r}"
|
371
|
-
else
|
372
|
-
yardocs.unshift result unless yardocs.include?(result)
|
373
|
-
end
|
374
|
-
end
|
375
|
-
end
|
376
|
-
end
|
377
|
-
end
|
378
|
-
|
379
316
|
def process_gem_paths
|
380
317
|
if !has_bundle?
|
381
|
-
|
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
|
318
|
+
process_requires
|
389
319
|
else
|
390
320
|
Bundler.with_clean_env do
|
391
321
|
Bundler.environment.chdir(workspace) do
|
392
|
-
Bundler.environment.gems.to_a.each do |g|
|
393
|
-
|
394
|
-
end
|
322
|
+
#Bundler.environment.gems.to_a.each do |g|
|
323
|
+
# @gem_paths[g.name] = g.full_gem_path
|
324
|
+
#end
|
325
|
+
process_requires
|
395
326
|
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
327
|
end
|
407
328
|
end
|
408
329
|
end
|
409
330
|
|
410
|
-
def
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
end
|
426
|
-
yp = File.join(File.dirname(base), '.yardoc')
|
427
|
-
if File.exist?(yp)
|
428
|
-
result = yp
|
429
|
-
break
|
430
|
-
else
|
431
|
-
# @todo Keep trying?
|
432
|
-
end
|
433
|
-
break
|
434
|
-
end
|
331
|
+
def process_requires
|
332
|
+
required.each do |r|
|
333
|
+
spec = Gem::Specification.find_by_path(r)
|
334
|
+
begin
|
335
|
+
spec = Gem::Specification.find_by_name(r) if spec.nil?
|
336
|
+
rescue Gem::MissingSpecError => e
|
337
|
+
# @todo How to handle this?
|
338
|
+
end
|
339
|
+
if spec.nil?
|
340
|
+
STDERR.puts "Required path not found (pgp): #{r}"
|
341
|
+
else
|
342
|
+
@gem_paths[spec.name] = spec.full_gem_path
|
343
|
+
add_gem_dependencies spec
|
344
|
+
result = YARD::Registry.yardoc_file_for_gem(spec.name)
|
345
|
+
yardocs.unshift result unless result.nil? or yardocs.include?(result)
|
435
346
|
end
|
436
347
|
end
|
437
|
-
result
|
438
348
|
end
|
439
349
|
|
440
|
-
def add_gem_dependencies
|
441
|
-
spec = Gem::Specification.find_by_name(gem_name)
|
350
|
+
def add_gem_dependencies spec
|
442
351
|
(spec.dependencies - spec.development_dependencies).each do |dep|
|
443
352
|
gy = YARD::Registry.yardoc_file_for_gem(dep.name)
|
444
353
|
if gy.nil?
|
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.
|
4
|
+
version: 0.17.2
|
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-
|
11
|
+
date: 2018-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|