solargraph 0.2.2 → 0.3.0
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 +2 -2
- data/lib/solargraph/code_map.rb +9 -14
- data/lib/solargraph/server.rb +45 -4
- data/lib/solargraph/shell.rb +2 -19
- data/lib/solargraph/version.rb +1 -1
- 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: a4d07f475a599b0f7f65563328f9154bbc4aad57
|
4
|
+
data.tar.gz: 2f5eeb896120355cd001ec31581f0cef5680fea1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2448dfeac5a8f5db6b65ad949d762edcfe02c6c5e7184447ebfbc4352d1fd681636dd57cbaec4ea43b2819cdb1bf10cbae17737a76797ee559d180da30374294
|
7
|
+
data.tar.gz: 062f9ba1b5efbd026c1019cfda465e19b9d60e5cb6adf689dc876888e1a03522ab8ad4818f4a455b573c9636d9a31212c454bc3d50c7c513bd23ab60e04b8284
|
data/lib/solargraph/api_map.rb
CHANGED
@@ -26,7 +26,7 @@ module Solargraph
|
|
26
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
|
-
append_file f
|
29
|
+
append_file f unless yardoc_has_file?(f)
|
30
30
|
}
|
31
31
|
end
|
32
32
|
end
|
@@ -47,7 +47,7 @@ module Solargraph
|
|
47
47
|
def yardoc_has_file?(filename)
|
48
48
|
return false unless has_yardoc?
|
49
49
|
return false if filename.nil?
|
50
|
-
if filename.start_with?(File.join(workspace, 'lib'), File.join(workspace, 'app'))
|
50
|
+
if filename.start_with?(File.join(workspace, 'lib/'), File.join(workspace, 'app/'))
|
51
51
|
return true
|
52
52
|
end
|
53
53
|
false
|
data/lib/solargraph/code_map.rb
CHANGED
@@ -7,7 +7,7 @@ module Solargraph
|
|
7
7
|
|
8
8
|
include NodeMethods
|
9
9
|
|
10
|
-
def initialize code: '', filename: nil, workspace: nil
|
10
|
+
def initialize code: '', filename: nil, workspace: nil, api_map: nil
|
11
11
|
unless workspace.nil?
|
12
12
|
workspace = workspace.gsub(File::ALT_SEPARATOR, File::SEPARATOR) unless File::ALT_SEPARATOR.nil?
|
13
13
|
end
|
@@ -15,16 +15,10 @@ module Solargraph
|
|
15
15
|
filename = filename.gsub(File::ALT_SEPARATOR, File::SEPARATOR) unless File::ALT_SEPARATOR.nil?
|
16
16
|
workspace = CodeMap.find_workspace(filename)
|
17
17
|
end
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
if File.exist?(ser_file)
|
23
|
-
begin
|
24
|
-
@api_map = Marshal.load(File.read(ser_file))
|
25
|
-
rescue Exception => e
|
26
|
-
@api_map = ApiMap.new(workspace)
|
27
|
-
end
|
18
|
+
@api_map = api_map
|
19
|
+
if @api_map.nil?
|
20
|
+
if workspace.nil?
|
21
|
+
@api_map = ApiMap.new(workspace)
|
28
22
|
else
|
29
23
|
@api_map = ApiMap.new(workspace)
|
30
24
|
end
|
@@ -228,14 +222,15 @@ module Solargraph
|
|
228
222
|
else
|
229
223
|
obj = infer(var.children[1])
|
230
224
|
while parts.length > 0
|
231
|
-
|
225
|
+
meth = parts.shift
|
226
|
+
obj = get_instance_method_return_value obj, ns_here, meth
|
232
227
|
end
|
233
228
|
return @api_map.get_instance_methods(obj) unless obj.nil?
|
234
229
|
end
|
235
230
|
end
|
236
231
|
|
237
232
|
def get_method_return_value namespace, root, method
|
238
|
-
meths = @api_map.get_methods(namespace, root).delete_if{ |m| m.
|
233
|
+
meths = @api_map.get_methods(namespace, root).delete_if{ |m| m.insert != method }
|
239
234
|
meths.each { |m|
|
240
235
|
unless m.documentation.nil?
|
241
236
|
match = m.documentation.all.match(/@return \[([a-z0-9:_]*)/i)
|
@@ -247,7 +242,7 @@ module Solargraph
|
|
247
242
|
end
|
248
243
|
|
249
244
|
def get_instance_method_return_value namespace, root, method
|
250
|
-
meths = @api_map.get_instance_methods(namespace, root).delete_if{ |m| m.
|
245
|
+
meths = @api_map.get_instance_methods(namespace, root).delete_if{ |m| m.insert != method }
|
251
246
|
meths.each { |m|
|
252
247
|
unless m.documentation.nil?
|
253
248
|
match = m.documentation.all.match(/@return \[([a-z0-9:_]*)/i)
|
data/lib/solargraph/server.rb
CHANGED
@@ -1,15 +1,28 @@
|
|
1
1
|
require 'sinatra/base'
|
2
|
+
require 'thread'
|
2
3
|
|
3
4
|
module Solargraph
|
4
5
|
class Server < Sinatra::Base
|
5
|
-
set :port,
|
6
|
+
set :port, 7657
|
7
|
+
|
8
|
+
@@api_hash = {}
|
9
|
+
@@semaphore = Mutex.new
|
10
|
+
|
11
|
+
post '/prepare' do
|
12
|
+
prepare_workspace params['directory']
|
13
|
+
end
|
6
14
|
|
7
15
|
post '/suggest' do
|
8
16
|
content_type :json
|
9
17
|
begin
|
10
|
-
|
11
|
-
|
12
|
-
|
18
|
+
sugg = []
|
19
|
+
workspace = params['workspace'] || CodeMap.find_workspace(params['filename'])
|
20
|
+
Server.prepare_workspace workspace unless @@api_hash.has_key?(workspace)
|
21
|
+
@@semaphore.synchronize {
|
22
|
+
code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map: @@api_hash[workspace])
|
23
|
+
offset = code_map.get_offset(params['line'].to_i, params['column'].to_i)
|
24
|
+
sugg = code_map.suggest_at(offset, with_snippets: true, filtered: true)
|
25
|
+
}
|
13
26
|
{ "status" => "ok", "suggestions" => sugg }.to_json
|
14
27
|
rescue Exception => e
|
15
28
|
STDERR.puts e
|
@@ -17,5 +30,33 @@ module Solargraph
|
|
17
30
|
{ "status" => "err", "message" => e.message + "\n" + e.backtrace.join("\n") }.to_json
|
18
31
|
end
|
19
32
|
end
|
33
|
+
|
34
|
+
class << self
|
35
|
+
def run!
|
36
|
+
constant_updates
|
37
|
+
super
|
38
|
+
end
|
39
|
+
|
40
|
+
def prepare_workspace directory
|
41
|
+
api_map = Solargraph::ApiMap.new(directory)
|
42
|
+
@@semaphore.synchronize {
|
43
|
+
@@api_hash[directory] = api_map
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
def constant_updates
|
48
|
+
Thread.new {
|
49
|
+
loop do
|
50
|
+
@@api_hash.keys.each { |k|
|
51
|
+
update = Solargraph::ApiMap.new(k)
|
52
|
+
@@semaphore.synchronize {
|
53
|
+
@@api_hash[k] = update
|
54
|
+
}
|
55
|
+
}
|
56
|
+
sleep 2
|
57
|
+
end
|
58
|
+
}
|
59
|
+
end
|
60
|
+
end
|
20
61
|
end
|
21
62
|
end
|
data/lib/solargraph/shell.rb
CHANGED
@@ -42,30 +42,13 @@ module Solargraph
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
desc 'bundled', 'Get a list of bundled gems'
|
46
|
-
def bundled
|
47
|
-
Bundler.load.specs.each { |s|
|
48
|
-
puts s.name
|
49
|
-
}
|
50
|
-
end
|
51
|
-
|
52
45
|
desc 'server', 'Start a Solargraph server'
|
46
|
+
option :port, type: :numeric, aliases: :p, desc: 'The server port', default: 7657
|
53
47
|
def server
|
48
|
+
Solargraph::Server.set :port, options[:port]
|
54
49
|
Solargraph::Server.run!
|
55
50
|
end
|
56
51
|
|
57
|
-
desc 'serialize DIRECTORY', 'Cache an API map of DIRECTORY'
|
58
|
-
def serialize directory
|
59
|
-
api_map = ApiMap.new directory
|
60
|
-
files = Dir[File.join directory, 'lib', '**', '*.rb'] + Dir[File.join directory, 'app', '**', '*.rb']
|
61
|
-
files.each { |f|
|
62
|
-
api_map.append_file f
|
63
|
-
}
|
64
|
-
File.open(File.join(directory, '.solargraph.ser'), 'wb') { |file|
|
65
|
-
file << Marshal.dump(api_map)
|
66
|
-
}
|
67
|
-
end
|
68
|
-
|
69
52
|
desc 'suggest', 'Get code suggestions for the provided input'
|
70
53
|
long_desc <<-LONGDESC
|
71
54
|
Analyze a Ruby file and output a list of code suggestions in JSON format.
|
data/lib/solargraph/version.rb
CHANGED
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.
|
4
|
+
version: 0.3.0
|
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-
|
11
|
+
date: 2017-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|