solargraph 0.14.2 → 0.14.3

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.
@@ -1,13 +1,12 @@
1
1
  require 'sinatra/base'
2
2
  require 'thread'
3
3
  require 'yard'
4
- require 'puma'
5
4
 
6
5
  module Solargraph
7
6
  class Server < Sinatra::Base
8
7
 
9
8
  set :port, 7657
10
- set :server, :puma
9
+ set :server, :webrick
11
10
 
12
11
  @@api_hash = {}
13
12
  @@semaphore = Mutex.new
@@ -24,18 +23,30 @@ module Solargraph
24
23
  post '/prepare' do
25
24
  content_type :json
26
25
  STDERR.puts "Preparing #{params['workspace']}"
27
- Server.prepare_workspace params['workspace']
28
- { "status" => "ok"}.to_json
26
+ begin
27
+ Server.prepare_workspace params['workspace']
28
+ { "status" => "ok"}.to_json
29
+ rescue Exception => e
30
+ STDERR.puts e
31
+ STDERR.puts e.backtrace.join("\n")
32
+ { "status" => "err", "message" => e.message + "\n" + e.backtrace.join("\n") }.to_json
33
+ end
29
34
  end
30
35
 
31
36
  post '/update' do
32
37
  content_type :json
33
- # @type [Solargraph::ApiMap]
34
- api_map = @@api_hash[params['workspace']]
35
- unless api_map.nil?
36
- api_map.update params['filename']
38
+ begin
39
+ # @type [Solargraph::ApiMap]
40
+ api_map = get_api_map(params['workspace'])
41
+ unless api_map.nil?
42
+ api_map.update params['filename']
43
+ end
44
+ { "status" => "ok"}.to_json
45
+ rescue Exception => e
46
+ STDERR.puts e
47
+ STDERR.puts e.backtrace.join("\n")
48
+ { "status" => "err", "message" => e.message + "\n" + e.backtrace.join("\n") }.to_json
37
49
  end
38
- { "status" => "ok"}.to_json
39
50
  end
40
51
 
41
52
  post '/suggest' do
@@ -43,10 +54,7 @@ module Solargraph
43
54
  begin
44
55
  sugg = []
45
56
  workspace = params['workspace']
46
- api_map = nil
47
- @@semaphore.synchronize {
48
- api_map = @@api_hash[workspace]
49
- }
57
+ api_map = get_api_map(workspace)
50
58
  with_all = params['all'] == '1' ? true : false
51
59
  code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map: api_map, cursor: [params['line'].to_i, params['column'].to_i])
52
60
  offset = code_map.get_offset(params['line'].to_i, params['column'].to_i)
@@ -64,11 +72,10 @@ module Solargraph
64
72
  begin
65
73
  sugg = []
66
74
  workspace = params['workspace'] || nil
67
- @@semaphore.synchronize {
68
- code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map: @@api_hash[workspace], cursor: [params['line'].to_i, params['column'].to_i])
69
- offset = code_map.get_offset(params['line'].to_i, params['column'].to_i)
70
- sugg = code_map.signatures_at(offset)
71
- }
75
+ api_map = get_api_map(workspace)
76
+ code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map: api_map, cursor: [params['line'].to_i, params['column'].to_i])
77
+ offset = code_map.get_offset(params['line'].to_i, params['column'].to_i)
78
+ sugg = code_map.signatures_at(offset)
72
79
  { "status" => "ok", "suggestions" => sugg }.to_json
73
80
  rescue Exception => e
74
81
  STDERR.puts e
@@ -79,16 +86,20 @@ module Solargraph
79
86
 
80
87
  post '/resolve' do
81
88
  content_type :json
82
- workspace = params['workspace'] || nil
83
- result = []
84
- @@semaphore.synchronize {
85
- api_map = @@api_hash[workspace]
89
+ begin
90
+ workspace = params['workspace'] || nil
91
+ result = []
92
+ api_map = get_api_map(workspace)
86
93
  unless api_map.nil?
87
94
  # @todo Get suggestions that match the path
88
95
  result.concat api_map.get_path_suggestions(params['path'])
89
96
  end
90
- }
91
- { "status" => "ok", "suggestions" => result.map{|s| s.as_json(all: true)} }.to_json
97
+ { "status" => "ok", "suggestions" => result.map{|s| s.as_json(all: true)} }.to_json
98
+ rescue Exception => e
99
+ STDERR.puts e
100
+ STDERR.puts e.backtrace.join("\n")
101
+ { "status" => "err", "message" => e.message + "\n" + e.backtrace.join("\n") }.to_json
102
+ end
92
103
  end
93
104
 
94
105
  post '/hover' do
@@ -96,11 +107,10 @@ module Solargraph
96
107
  begin
97
108
  sugg = []
98
109
  workspace = params['workspace'] || nil
99
- @@semaphore.synchronize {
100
- code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map: @@api_hash[workspace], cursor: [params['line'].to_i, params['column'].to_i])
101
- offset = code_map.get_offset(params['line'].to_i, params['column'].to_i)
102
- sugg = code_map.resolve_object_at(offset)
103
- }
110
+ api_map = get_api_map(workspace)
111
+ code_map = CodeMap.new(code: params['text'], filename: params['filename'], api_map: @@api_hash[workspace], cursor: [params['line'].to_i, params['column'].to_i])
112
+ offset = code_map.get_offset(params['line'].to_i, params['column'].to_i)
113
+ sugg = code_map.resolve_object_at(offset)
104
114
  { "status" => "ok", "suggestions" => sugg }.to_json
105
115
  rescue Exception => e
106
116
  STDERR.puts e
@@ -111,7 +121,7 @@ module Solargraph
111
121
 
112
122
  get '/search' do
113
123
  workspace = params['workspace']
114
- api_map = @@api_hash[workspace]
124
+ api_map = get_api_map(workspace)
115
125
  required = []
116
126
  unless api_map.nil?
117
127
  required.concat api_map.required
@@ -123,7 +133,7 @@ module Solargraph
123
133
 
124
134
  get '/document' do
125
135
  workspace = params['workspace']
126
- api_map = @@api_hash[workspace]
136
+ api_map = get_api_map(workspace)
127
137
  required = []
128
138
  unless api_map.nil?
129
139
  required.concat api_map.required
@@ -137,6 +147,20 @@ module Solargraph
137
147
  exit
138
148
  end
139
149
 
150
+ # @return [Solargraph::ApiMap]
151
+ def self.get_api_map workspace
152
+ api_map = nil
153
+ @@semaphore.synchronize {
154
+ api_map = @@api_hash[workspace]
155
+ }
156
+ api_map
157
+ end
158
+
159
+ # @return [Solargraph::ApiMap]
160
+ def get_api_map workspace
161
+ Server.get_api_map workspace
162
+ end
163
+
140
164
  def htmlify text
141
165
  rdoc_to_html text
142
166
  end
@@ -154,9 +178,9 @@ module Solargraph
154
178
  class << self
155
179
  def prepare_workspace directory
156
180
  Thread.new do
181
+ api_map = Solargraph::ApiMap.new(directory)
182
+ api_map.yard_map
157
183
  @@semaphore.synchronize do
158
- api_map = Solargraph::ApiMap.new(directory)
159
- api_map.yard_map
160
184
  @@api_hash[directory] = api_map
161
185
  end
162
186
  end
@@ -56,13 +56,15 @@ module Solargraph
56
56
  option :files, type: :string, aliases: :f, desc: 'The public files directory', default: nil
57
57
  def server
58
58
  port = options[:port]
59
- port = available_port if port.zero?
59
+ # This line should not be necessary with WEBrick
60
+ #port = available_port if port.zero?
60
61
  Solargraph::Server.set :port, port
61
62
  Solargraph::Server.set :views, options[:views] unless options[:views].nil?
62
63
  Solargraph::Server.set :public_folder, options[:files] unless options[:files].nil?
63
64
  my_pid = nil
64
65
  Solargraph::Server.run! do
65
- STDERR.puts "Solargraph server pid=#{Process.pid} port=#{port}"
66
+ # This line should not be necessary with WEBrick
67
+ #STDERR.puts "Solargraph server pid=#{Process.pid} port=#{port}"
66
68
  my_pid = Process.pid
67
69
  Signal.trap("INT") do
68
70
  Solargraph::Server.stop!
@@ -121,7 +121,7 @@ module Solargraph
121
121
 
122
122
  # @param pin [Solargraph::Pin::Base]
123
123
  def self.pull pin, return_type = nil
124
- Suggestion.new(pin.name, insert: pin.name.gsub(/=/, ' = '), kind: pin.kind, docstring: pin.docstring, detail: pin.namespace, arguments: pin.parameters, path: pin.path, return_type: return_type, location: pin.location)
124
+ Suggestion.new(pin.name, insert: pin.name.gsub(/=/, ' = '), kind: pin.kind, docstring: pin.docstring, detail: pin.namespace, arguments: pin.parameters, path: pin.path, return_type: return_type || pin.return_type, location: pin.location)
125
125
  end
126
126
  end
127
127
 
@@ -1,3 +1,3 @@
1
1
  module Solargraph
2
- VERSION = '0.14.2'
2
+ VERSION = '0.14.3'
3
3
  end
@@ -20,9 +20,9 @@ module Solargraph
20
20
  used = []
21
21
  @required = required
22
22
  @namespace_yardocs = {}
23
- if @required.include?('bundler/setup')
24
- yardocs.concat bundled_gem_yardocs
25
- else
23
+ #if @required.include?('bundler/setup') or @required.include?('bundler/require')
24
+ # yardocs.concat bundled_gem_yardocs
25
+ #else
26
26
  @required.each do |r|
27
27
  if workspace.nil? or !File.exist?(File.join workspace, 'lib', "#{r}.rb")
28
28
  g = r.split('/').first
@@ -39,7 +39,7 @@ module Solargraph
39
39
  end
40
40
  end
41
41
  end
42
- end
42
+ #end
43
43
  yardocs.push File.join(Dir.home, '.solargraph', 'cache', '2.0.0', 'yardoc')
44
44
  #yardocs.push File.join(Dir.home, '.solargraph', 'cache', '2.0.0', 'yardoc-stdlib')
45
45
  yardocs.uniq!
@@ -122,19 +122,22 @@ module Solargraph
122
122
  consts.each { |c|
123
123
  detail = nil
124
124
  kind = nil
125
+ return_type = nil
125
126
  if c.kind_of?(YARD::CodeObjects::ClassObject)
126
127
  detail = 'Class'
127
128
  kind = Suggestion::CLASS
129
+ return_type = "Class<#{c.to_s}>"
128
130
  elsif c.kind_of?(YARD::CodeObjects::ModuleObject)
129
131
  detail = 'Module'
130
132
  kind = Suggestion::MODULE
133
+ return_type = "Module<#{c.to_s}>"
131
134
  elsif c.kind_of?(YARD::CodeObjects::ConstantObject)
132
135
  detail = 'Constant'
133
136
  kind = Suggestion::CONSTANT
134
137
  else
135
138
  next
136
139
  end
137
- result.push Suggestion.new(c.to_s.split('::').last, detail: detail, kind: kind, docstring: c.docstring)
140
+ result.push Suggestion.new(c.to_s.split('::').last, detail: c.to_s, kind: kind, docstring: c.docstring, return_type: return_type)
138
141
  }
139
142
  cache.set_constants(namespace, scope, result)
140
143
  result
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.14.2
4
+ version: 0.14.3
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-11-26 00:00:00.000000000 Z
11
+ date: 2017-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -86,20 +86,6 @@ dependencies:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
88
  version: '1.14'
89
- - !ruby/object:Gem::Dependency
90
- name: puma
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '3.8'
96
- type: :runtime
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '3.8'
103
89
  - !ruby/object:Gem::Dependency
104
90
  name: rspec
105
91
  requirement: !ruby/object:Gem::Requirement
@@ -208,6 +194,7 @@ files:
208
194
  - lib/solargraph/pin/instance_variable.rb
209
195
  - lib/solargraph/pin/local_variable.rb
210
196
  - lib/solargraph/pin/method.rb
197
+ - lib/solargraph/pin/namespace.rb
211
198
  - lib/solargraph/pin/plugin/method.rb
212
199
  - lib/solargraph/pin/symbol.rb
213
200
  - lib/solargraph/plugin.rb
@@ -228,7 +215,6 @@ files:
228
215
  - lib/solargraph/views/search.erb
229
216
  - lib/solargraph/yard_map.rb
230
217
  - lib/solargraph/yard_map/cache.rb
231
- - lib/solargraph/yard_methods.rb
232
218
  - lib/yard-solargraph.rb
233
219
  - yardoc/2.0.0.tar.gz
234
220
  homepage: http://solargraph.org
@@ -1,56 +0,0 @@
1
- module Solargraph
2
- module YardMethods
3
- def yard_options
4
- if @yard_options.nil?
5
- @yard_options = {
6
- include: [],
7
- exclude: [],
8
- flags: []
9
- }
10
- unless workspace.nil?
11
- yardopts_file = File.join(workspace, '.yardopts')
12
- if File.exist?(yardopts_file)
13
- yardopts = File.read(yardopts_file)
14
- yardopts.lines.each { |line|
15
- arg = line.strip
16
- if arg.start_with?('--exclude')
17
- @yard_options[:exclude].concat arg.split(/[\s]+/)[1..-1]
18
- elsif arg.start_with?('-')
19
- @yard_options[:flags].push arg
20
- else
21
- @yard_options[:include].push arg
22
- end
23
- }
24
- end
25
- end
26
- @yard_options[:include].concat ['app/**/*.rb', 'lib/**/*.rb'] if @yard_options[:include].empty?
27
- end
28
- @yard_options
29
- end
30
-
31
- def yard_files
32
- if @yard_files.nil?
33
- @yard_files = []
34
- yard_options[:include].each do |glob|
35
- if File.file?(glob)
36
- @yard_files.push File.realpath(glob)
37
- elsif File.directory?(glob)
38
- @yard_files.concat Dir["#{glob}/**/*"].map{ |f| File.realpath(f) }
39
- else
40
- @yard_files.concat Dir[glob].map{ |f| File.realpath(f) }
41
- end
42
- end
43
- yard_options[:exclude].each do |glob|
44
- if File.file?(glob)
45
- @yard_files.delete File.realpath(glob)
46
- elsif File.directory?(glob)
47
- @yard_files -= Dir["#{glob}/**/*"].map{ |f| File.realpath(f) }
48
- else
49
- @yard_files -= Dir[glob].map{ |f| File.realpath(f) }
50
- end
51
- end
52
- end
53
- @yard_files
54
- end
55
- end
56
- end