solargraph 0.17.1 → 0.17.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 +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
|