solargraph 0.20.0 → 0.21.0
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.rb +2 -3
- data/lib/solargraph/api_map.rb +6 -6
- data/lib/solargraph/api_map/source_to_yard.rb +1 -1
- data/lib/solargraph/language_server/host.rb +69 -10
- data/lib/solargraph/language_server/message.rb +1 -2
- data/lib/solargraph/language_server/message/initialize.rb +83 -15
- data/lib/solargraph/language_server/message/initialized.rb +7 -0
- data/lib/solargraph/language_server/message/text_document/formatting.rb +4 -1
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +20 -19
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +19 -1
- data/lib/solargraph/language_server/request.rb +1 -1
- data/lib/solargraph/language_server/transport.rb +1 -0
- data/lib/solargraph/language_server/transport/data_reader.rb +66 -0
- data/lib/solargraph/language_server/transport/socket.rb +8 -32
- data/lib/solargraph/library.rb +11 -6
- data/lib/solargraph/page.rb +1 -1
- data/lib/solargraph/pin/base.rb +8 -7
- data/lib/solargraph/pin/method_parameter.rb +2 -15
- data/lib/solargraph/pin/yard_object.rb +1 -1
- data/lib/solargraph/plugin/runtime.rb +0 -2
- data/lib/solargraph/shell.rb +0 -24
- data/lib/solargraph/source.rb +5 -169
- data/lib/solargraph/source/mapper.rb +8 -3
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace.rb +3 -3
- data/lib/solargraph/workspace/config.rb +7 -9
- data/lib/solargraph/yard_map.rb +9 -48
- metadata +17 -74
- data/lib/solargraph/server.rb +0 -212
- data/lib/solargraph/suggestion.rb +0 -178
@@ -249,9 +249,14 @@ module Solargraph
|
|
249
249
|
end
|
250
250
|
else
|
251
251
|
c.children.each do |u|
|
252
|
-
here = get_node_start_position(c)
|
253
|
-
blk = get_block_pin(here)
|
254
|
-
@locals.push Solargraph::Pin::MethodParameter.new(get_node_location(u), fqn || '', "#{u.children[0]}", docstring_for(c), blk)
|
252
|
+
# here = get_node_start_position(c)
|
253
|
+
# blk = get_block_pin(here)
|
254
|
+
# @locals.push Solargraph::Pin::MethodParameter.new(get_node_location(u), fqn || '', "#{u.children[0]}", docstring_for(c), blk)
|
255
|
+
here = get_node_start_position(u)
|
256
|
+
context = get_named_path_pin(here)
|
257
|
+
block = get_block_pin(here)
|
258
|
+
presence = Source::Range.new(here, block.location.range.ending)
|
259
|
+
@locals.push Solargraph::Pin::MethodParameter.new(get_node_location(u), fqn, u.children[0].to_s, docstring_for(c), resolve_node_signature(u.children[1]), infer_literal_node_type(u.children[1]), context, block, presence)
|
255
260
|
end
|
256
261
|
end
|
257
262
|
elsif c.type == :block
|
data/lib/solargraph/version.rb
CHANGED
data/lib/solargraph/workspace.rb
CHANGED
@@ -121,10 +121,10 @@ module Solargraph
|
|
121
121
|
source_hash.clear
|
122
122
|
unless directory.nil?
|
123
123
|
size = config.calculated.length
|
124
|
-
raise WorkspaceTooLargeError.new(size) if size >
|
124
|
+
raise WorkspaceTooLargeError.new(size) if config.max_files > 0 and size > config.max_files
|
125
|
+
|
125
126
|
config.calculated.each do |filename|
|
126
|
-
|
127
|
-
source_hash[filename] = src
|
127
|
+
source_hash[filename] = Solargraph::Source.load(filename)
|
128
128
|
end
|
129
129
|
end
|
130
130
|
@stime = Time.now
|
@@ -13,7 +13,7 @@ module Solargraph
|
|
13
13
|
def initialize workspace = nil
|
14
14
|
@workspace = workspace
|
15
15
|
include_globs = ['**/*.rb']
|
16
|
-
exclude_globs = ['spec/**/*', 'test/**/*']
|
16
|
+
exclude_globs = ['spec/**/*', 'test/**/*', 'vendor/**/*']
|
17
17
|
unless @workspace.nil?
|
18
18
|
sfile = File.join(@workspace, '.solargraph.yml')
|
19
19
|
if File.file?(sfile)
|
@@ -26,10 +26,11 @@ module Solargraph
|
|
26
26
|
@raw_data ||= {}
|
27
27
|
@raw_data['include'] ||= include_globs
|
28
28
|
@raw_data['exclude'] ||= exclude_globs
|
29
|
-
@raw_data['
|
29
|
+
@raw_data['require'] ||= []
|
30
30
|
@raw_data['domains'] ||= []
|
31
|
-
@raw_data['
|
31
|
+
@raw_data['reporters'] ||= %w[rubocop require_not_found]
|
32
32
|
@raw_data['plugins'] ||= []
|
33
|
+
@raw_data['max_files'] ||= Workspace::MAX_WORKSPACE_SIZE
|
33
34
|
included
|
34
35
|
excluded
|
35
36
|
end
|
@@ -63,7 +64,7 @@ module Solargraph
|
|
63
64
|
end
|
64
65
|
|
65
66
|
def required
|
66
|
-
raw_data['
|
67
|
+
raw_data['require']
|
67
68
|
end
|
68
69
|
|
69
70
|
def plugins
|
@@ -74,8 +75,8 @@ module Solargraph
|
|
74
75
|
raw_data['reporters']
|
75
76
|
end
|
76
77
|
|
77
|
-
def
|
78
|
-
|
78
|
+
def max_files
|
79
|
+
raw_data['max_files']
|
79
80
|
end
|
80
81
|
|
81
82
|
private
|
@@ -110,9 +111,6 @@ module Solargraph
|
|
110
111
|
def glob_to_directory glob
|
111
112
|
glob.gsub(/(\/\*|\/\*\*\/\*\*?)$/, '')
|
112
113
|
end
|
113
|
-
|
114
|
-
def generate_require_paths
|
115
|
-
end
|
116
114
|
end
|
117
115
|
end
|
118
116
|
end
|
data/lib/solargraph/yard_map.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'yard'
|
2
|
-
require 'bundler'
|
3
2
|
|
4
3
|
module Solargraph
|
5
4
|
class YardMap
|
@@ -26,7 +25,7 @@ module Solargraph
|
|
26
25
|
@required = required.clone
|
27
26
|
@namespace_yardocs = {}
|
28
27
|
@gem_paths = {}
|
29
|
-
|
28
|
+
process_requires
|
30
29
|
yardocs.push CoreDocs.yardoc_file
|
31
30
|
yardocs.uniq!
|
32
31
|
yardocs.delete_if{ |y| y.start_with? workspace.directory } unless workspace.nil? or workspace.directory.nil?
|
@@ -92,7 +91,7 @@ module Solargraph
|
|
92
91
|
found
|
93
92
|
end
|
94
93
|
|
95
|
-
# @return [Array<
|
94
|
+
# @return [Array<Solargraph::Pin::Base>]
|
96
95
|
def get_constants namespace , scope = ''
|
97
96
|
cached = cache.get_constants(namespace, scope)
|
98
97
|
return cached unless cached.nil?
|
@@ -113,26 +112,22 @@ module Solargraph
|
|
113
112
|
return_type = nil
|
114
113
|
if c.kind_of?(YARD::CodeObjects::ClassObject)
|
115
114
|
detail = 'Class'
|
116
|
-
kind = Suggestion::CLASS
|
117
115
|
return_type = "Class<#{c.to_s}>"
|
118
116
|
elsif c.kind_of?(YARD::CodeObjects::ModuleObject)
|
119
117
|
detail = 'Module'
|
120
|
-
kind = Suggestion::MODULE
|
121
118
|
return_type = "Module<#{c.to_s}>"
|
122
119
|
elsif c.kind_of?(YARD::CodeObjects::ConstantObject)
|
123
120
|
detail = 'Constant'
|
124
|
-
kind = Suggestion::CONSTANT
|
125
121
|
else
|
126
122
|
next
|
127
123
|
end
|
128
|
-
# 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))
|
129
124
|
result.push Pin::YardObject.new(c, object_location(c))
|
130
125
|
}
|
131
126
|
cache.set_constants(namespace, scope, result)
|
132
127
|
result
|
133
128
|
end
|
134
129
|
|
135
|
-
# @return [Array<
|
130
|
+
# @return [Array<Solargraph::Pin::Base>]
|
136
131
|
def get_methods namespace, scope = '', visibility: [:public]
|
137
132
|
return [] if namespace == '' and scope == ''
|
138
133
|
cached = cache.get_methods(namespace, scope, visibility)
|
@@ -160,7 +155,7 @@ module Solargraph
|
|
160
155
|
meths
|
161
156
|
end
|
162
157
|
|
163
|
-
# @return [Array<
|
158
|
+
# @return [Array<Solargraph::Pin::Base>]
|
164
159
|
def get_instance_methods namespace, scope = '', visibility: [:public]
|
165
160
|
return [] if namespace == '' and scope == ''
|
166
161
|
cached = cache.get_instance_methods(namespace, scope, visibility)
|
@@ -173,14 +168,14 @@ module Solargraph
|
|
173
168
|
ns = nil
|
174
169
|
ns = find_first_resolved_object(yard, namespace, scope)
|
175
170
|
unless ns.nil?
|
176
|
-
ns.meths(scope: :instance, visibility: visibility).each
|
171
|
+
ns.meths(scope: :instance, visibility: visibility).each do |m|
|
177
172
|
n = m.to_s.split(/[\.#]/).last
|
178
173
|
# HACK: Special treatment for #initialize
|
179
174
|
next if n == 'initialize' and !visibility.include?(:private)
|
180
175
|
if (namespace == 'Kernel' or !m.to_s.start_with?('Kernel#')) and !m.docstring.to_s.include?(':nodoc:')
|
181
176
|
meths.push Pin::YardObject.new(m, object_location(m))
|
182
177
|
end
|
183
|
-
|
178
|
+
end
|
184
179
|
if ns.kind_of?(YARD::CodeObjects::ClassObject) and namespace != 'Object'
|
185
180
|
unless ns.nil?
|
186
181
|
meths += get_instance_methods(ns.superclass.to_s)
|
@@ -267,52 +262,22 @@ module Solargraph
|
|
267
262
|
get_constants '', ''
|
268
263
|
end
|
269
264
|
|
270
|
-
def process_gem_paths
|
271
|
-
if !has_bundle? or workspace.nil? or ENV['BUNDLE_GEMFILE'] == File.join(workspace.directory, 'Gemfile')
|
272
|
-
# Trust the current environment if Bundler is not being used or the
|
273
|
-
# workspace's Gemfile was loaded
|
274
|
-
process_requires
|
275
|
-
else
|
276
|
-
# Temporarily load the workspace in a clean environment to identify
|
277
|
-
# its gems
|
278
|
-
processed = false
|
279
|
-
Bundler.with_clean_env do
|
280
|
-
Bundler.environment.chdir(workspace.directory) do
|
281
|
-
begin
|
282
|
-
Bundler.reset!
|
283
|
-
process_requires
|
284
|
-
processed = true
|
285
|
-
rescue Exception => e
|
286
|
-
STDERR.puts "#{e.class}: #{e.message}"
|
287
|
-
end
|
288
|
-
end
|
289
|
-
end
|
290
|
-
Bundler.reset!
|
291
|
-
process_requires unless processed
|
292
|
-
end
|
293
|
-
end
|
294
|
-
|
295
265
|
def process_requires
|
296
266
|
tried = []
|
297
267
|
unresolved_requires.clear
|
298
268
|
required.each do |r|
|
299
|
-
next if !workspace.nil? and workspace.would_require?(r)
|
300
269
|
begin
|
301
|
-
|
302
|
-
next if name.nil?
|
303
|
-
spec = Gem::Specification.find_by_name(name)
|
304
|
-
if spec.nil?
|
305
|
-
unresolved_requires.push r
|
306
|
-
next
|
307
|
-
end
|
270
|
+
spec = Gem::Specification.find_by_path(r) || Gem::Specification.find_by_name(r.split('/').first)
|
308
271
|
ver = spec.version.to_s
|
309
272
|
ver = ">= 0" if ver.empty?
|
310
273
|
add_gem_dependencies spec
|
274
|
+
next if !workspace.nil? and workspace.would_require?(r)
|
311
275
|
yd = YARD::Registry.yardoc_file_for_gem(spec.name, ver)
|
312
276
|
@gem_paths[spec.name] = spec.full_gem_path
|
313
277
|
unresolved_requires.push r if yd.nil?
|
314
278
|
yardocs.unshift yd unless yd.nil? or yardocs.include?(yd)
|
315
279
|
rescue Gem::LoadError => e
|
280
|
+
next if !workspace.nil? and workspace.would_require?(r)
|
316
281
|
unresolved_requires.push r
|
317
282
|
end
|
318
283
|
end
|
@@ -364,9 +329,5 @@ module Solargraph
|
|
364
329
|
end
|
365
330
|
nil
|
366
331
|
end
|
367
|
-
|
368
|
-
def has_bundle?
|
369
|
-
!workspace.nil? and !workspace.directory.nil? and File.exist?(File.join workspace.directory, 'Gemfile')
|
370
|
-
end
|
371
332
|
end
|
372
333
|
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.
|
4
|
+
version: 0.21.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: 2018-
|
11
|
+
date: 2018-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -44,20 +44,6 @@ dependencies:
|
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 0.19.4
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: sinatra
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "~>"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '2'
|
54
|
-
type: :runtime
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - "~>"
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '2'
|
61
47
|
- !ruby/object:Gem::Dependency
|
62
48
|
name: yard
|
63
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,20 +58,6 @@ dependencies:
|
|
72
58
|
- - "~>"
|
73
59
|
- !ruby/object:Gem::Version
|
74
60
|
version: '0.9'
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: bundler
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - "~>"
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '1.14'
|
82
|
-
type: :runtime
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "~>"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '1.14'
|
89
61
|
- !ruby/object:Gem::Dependency
|
90
62
|
name: eventmachine
|
91
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -189,39 +161,39 @@ dependencies:
|
|
189
161
|
- !ruby/object:Gem::Version
|
190
162
|
version: '0.52'
|
191
163
|
- !ruby/object:Gem::Dependency
|
192
|
-
name:
|
164
|
+
name: tilt
|
193
165
|
requirement: !ruby/object:Gem::Requirement
|
194
166
|
requirements:
|
195
167
|
- - "~>"
|
196
168
|
- !ruby/object:Gem::Version
|
197
|
-
version: '
|
198
|
-
|
199
|
-
- !ruby/object:Gem::Version
|
200
|
-
version: 3.5.0
|
201
|
-
type: :development
|
169
|
+
version: '2.0'
|
170
|
+
type: :runtime
|
202
171
|
prerelease: false
|
203
172
|
version_requirements: !ruby/object:Gem::Requirement
|
204
173
|
requirements:
|
205
174
|
- - "~>"
|
206
175
|
- !ruby/object:Gem::Version
|
207
|
-
version: '
|
208
|
-
- - ">="
|
209
|
-
- !ruby/object:Gem::Version
|
210
|
-
version: 3.5.0
|
176
|
+
version: '2.0'
|
211
177
|
- !ruby/object:Gem::Dependency
|
212
|
-
name:
|
178
|
+
name: rspec
|
213
179
|
requirement: !ruby/object:Gem::Requirement
|
214
180
|
requirements:
|
215
181
|
- - "~>"
|
216
182
|
- !ruby/object:Gem::Version
|
217
|
-
version: '
|
183
|
+
version: '3.5'
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: 3.5.0
|
218
187
|
type: :development
|
219
188
|
prerelease: false
|
220
189
|
version_requirements: !ruby/object:Gem::Requirement
|
221
190
|
requirements:
|
222
191
|
- - "~>"
|
223
192
|
- !ruby/object:Gem::Version
|
224
|
-
version: '
|
193
|
+
version: '3.5'
|
194
|
+
- - ">="
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: 3.5.0
|
225
197
|
- !ruby/object:Gem::Dependency
|
226
198
|
name: simplecov
|
227
199
|
requirement: !ruby/object:Gem::Requirement
|
@@ -236,34 +208,6 @@ dependencies:
|
|
236
208
|
- - "~>"
|
237
209
|
- !ruby/object:Gem::Version
|
238
210
|
version: '0.14'
|
239
|
-
- !ruby/object:Gem::Dependency
|
240
|
-
name: debase
|
241
|
-
requirement: !ruby/object:Gem::Requirement
|
242
|
-
requirements:
|
243
|
-
- - "~>"
|
244
|
-
- !ruby/object:Gem::Version
|
245
|
-
version: '0.2'
|
246
|
-
type: :development
|
247
|
-
prerelease: false
|
248
|
-
version_requirements: !ruby/object:Gem::Requirement
|
249
|
-
requirements:
|
250
|
-
- - "~>"
|
251
|
-
- !ruby/object:Gem::Version
|
252
|
-
version: '0.2'
|
253
|
-
- !ruby/object:Gem::Dependency
|
254
|
-
name: ruby-debug-ide
|
255
|
-
requirement: !ruby/object:Gem::Requirement
|
256
|
-
requirements:
|
257
|
-
- - "~>"
|
258
|
-
- !ruby/object:Gem::Version
|
259
|
-
version: '0.6'
|
260
|
-
type: :development
|
261
|
-
prerelease: false
|
262
|
-
version_requirements: !ruby/object:Gem::Requirement
|
263
|
-
requirements:
|
264
|
-
- - "~>"
|
265
|
-
- !ruby/object:Gem::Version
|
266
|
-
version: '0.6'
|
267
211
|
description: IDE tools for code completion and inline documentation
|
268
212
|
email: admin@castwide.com
|
269
213
|
executables:
|
@@ -331,6 +275,7 @@ files:
|
|
331
275
|
- lib/solargraph/language_server/request.rb
|
332
276
|
- lib/solargraph/language_server/symbol_kinds.rb
|
333
277
|
- lib/solargraph/language_server/transport.rb
|
278
|
+
- lib/solargraph/language_server/transport/data_reader.rb
|
334
279
|
- lib/solargraph/language_server/transport/socket.rb
|
335
280
|
- lib/solargraph/language_server/uri_helpers.rb
|
336
281
|
- lib/solargraph/library.rb
|
@@ -366,7 +311,6 @@ files:
|
|
366
311
|
- lib/solargraph/plugin/canceler.rb
|
367
312
|
- lib/solargraph/plugin/process.rb
|
368
313
|
- lib/solargraph/plugin/runtime.rb
|
369
|
-
- lib/solargraph/server.rb
|
370
314
|
- lib/solargraph/server_methods.rb
|
371
315
|
- lib/solargraph/shell.rb
|
372
316
|
- lib/solargraph/source.rb
|
@@ -378,7 +322,6 @@ files:
|
|
378
322
|
- lib/solargraph/source/position.rb
|
379
323
|
- lib/solargraph/source/range.rb
|
380
324
|
- lib/solargraph/source/updater.rb
|
381
|
-
- lib/solargraph/suggestion.rb
|
382
325
|
- lib/solargraph/version.rb
|
383
326
|
- lib/solargraph/views/_method.erb
|
384
327
|
- lib/solargraph/views/_name_type_tag.erb
|
@@ -405,7 +348,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
405
348
|
requirements:
|
406
349
|
- - ">="
|
407
350
|
- !ruby/object:Gem::Version
|
408
|
-
version: 2.
|
351
|
+
version: '2.1'
|
409
352
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
410
353
|
requirements:
|
411
354
|
- - ">="
|
data/lib/solargraph/server.rb
DELETED
@@ -1,212 +0,0 @@
|
|
1
|
-
require 'sinatra/base'
|
2
|
-
require 'thread'
|
3
|
-
require 'yard'
|
4
|
-
require 'open3'
|
5
|
-
require 'shellwords'
|
6
|
-
|
7
|
-
module Solargraph
|
8
|
-
class Server < Sinatra::Base
|
9
|
-
|
10
|
-
set :port, 7657
|
11
|
-
set :server, :webrick
|
12
|
-
|
13
|
-
# @@api_hash = {}
|
14
|
-
@@semaphore = Mutex.new
|
15
|
-
|
16
|
-
@@library = Solargraph::Library.new
|
17
|
-
|
18
|
-
after do
|
19
|
-
GC.start
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.wait
|
23
|
-
@@semaphore.lock
|
24
|
-
@@semaphore.unlock
|
25
|
-
end
|
26
|
-
|
27
|
-
post '/diagnostics' do
|
28
|
-
content_type :json
|
29
|
-
severities = {
|
30
|
-
'refactor' => 4,
|
31
|
-
'convention' => 3,
|
32
|
-
'warning' => 2,
|
33
|
-
'error' => 1,
|
34
|
-
'fatal' => 1
|
35
|
-
}
|
36
|
-
begin
|
37
|
-
filename = params['filename']
|
38
|
-
text = params['text']
|
39
|
-
o, e, s = Open3.capture3("bundle exec rubocop -f j -s #{Shellwords.escape(filename)}", stdin_data: text)
|
40
|
-
STDERR.puts e unless e.nil? or e.empty?
|
41
|
-
resp = JSON.parse(o)
|
42
|
-
diagnostics = []
|
43
|
-
if resp['summary']['offense_count'] > 0
|
44
|
-
resp['files'].each do |file|
|
45
|
-
file['offenses'].each do |off|
|
46
|
-
diag = {
|
47
|
-
range: {
|
48
|
-
start: {
|
49
|
-
line: off['location']['start_line'] - 1,
|
50
|
-
character: off['location']['start_column'] - 1
|
51
|
-
},
|
52
|
-
end: {
|
53
|
-
line: off['location']['last_line'] - 1,
|
54
|
-
character: off['location']['last_column']
|
55
|
-
}
|
56
|
-
},
|
57
|
-
# 1 = Error, 2 = Warning, 3 = Information, 4 = Hint
|
58
|
-
severity: severities[off['severity']],
|
59
|
-
source: off['cop_name'],
|
60
|
-
message: off['message'].gsub(/^#{off['cop_name']}\:/, '')
|
61
|
-
}
|
62
|
-
diagnostics.push diag
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
{ "status" => "ok", "data" => diagnostics }.to_json
|
67
|
-
rescue Exception => e
|
68
|
-
send_exception e
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
post '/prepare' do
|
73
|
-
content_type :json
|
74
|
-
begin
|
75
|
-
workspace = params['workspace'].to_s.gsub(/\\/, '/')
|
76
|
-
STDERR.puts "Preparing #{workspace}"
|
77
|
-
@@library = Solargraph::Library.load(workspace) unless workspace.empty?
|
78
|
-
{ "status" => "ok"}.to_json
|
79
|
-
rescue Exception => e
|
80
|
-
send_exception e
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
post '/update' do
|
85
|
-
content_type :json
|
86
|
-
begin
|
87
|
-
filename = params['filename'].to_s.gsub(/\\/, '/')
|
88
|
-
@@library.open filename, File.read(filename), 0
|
89
|
-
{ "status" => "ok"}.to_json
|
90
|
-
rescue Exception => e
|
91
|
-
send_exception e
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
post '/suggest' do
|
96
|
-
content_type :json
|
97
|
-
begin
|
98
|
-
filename = params['filename'].to_s.gsub(/\\/, '/')
|
99
|
-
@@library.open filename, params['text'], 0
|
100
|
-
@@library.checkout filename
|
101
|
-
@@library.refresh
|
102
|
-
with_all = params['all'] == '1' ? true : false
|
103
|
-
completion = @@library.completions_at(filename, params['line'].to_i, params['column'].to_i)
|
104
|
-
JSON.generate({ "status" => "ok", "suggestions" => completion.pins.map{|s| Suggestion.pull(s).as_json(all: with_all)} })
|
105
|
-
rescue Exception => e
|
106
|
-
send_exception e
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
post '/signify' do
|
111
|
-
content_type :json
|
112
|
-
begin
|
113
|
-
filename = params['filename'].to_s.gsub(/\\/, '/')
|
114
|
-
@@library.open filename, params['text'], 0
|
115
|
-
@@library.checkout filename
|
116
|
-
@@library.refresh
|
117
|
-
sugg = @@library.signatures_at(filename, params['line'].to_i, params['column'].to_i)
|
118
|
-
{ "status" => "ok", "suggestions" => sugg.map{|s| Suggestion.pull(s).as_json(all: true)} }.to_json
|
119
|
-
rescue Exception => e
|
120
|
-
send_exception e
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
post '/resolve' do
|
125
|
-
content_type :json
|
126
|
-
begin
|
127
|
-
result = @@library.get_path_pins(params['path'])
|
128
|
-
{ "status" => "ok", "suggestions" => result.map{|s| Suggestion.pull(s).as_json(all: true)} }.to_json
|
129
|
-
rescue Exception => e
|
130
|
-
send_exception e
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
post '/define' do
|
135
|
-
content_type :json
|
136
|
-
begin
|
137
|
-
filename = params['filename'].to_s.gsub(/\\/, '/')
|
138
|
-
@@library.open filename, params['text'], 0
|
139
|
-
@@library.checkout filename
|
140
|
-
sugg = @@library.definitions_at(filename, params['line'].to_i, params['column'].to_i)
|
141
|
-
{ "status" => "ok", "suggestions" => sugg.map{|s| Suggestion.pull(s).as_json(all: true)} }.to_json
|
142
|
-
rescue Exception => e
|
143
|
-
send_exception e
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
# @deprecated Use /define instead.
|
148
|
-
post '/hover' do
|
149
|
-
content_type :json
|
150
|
-
begin
|
151
|
-
filename = params['filename'].to_s.gsub(/\\/, '/')
|
152
|
-
@@library.open filename, params['text'], 0
|
153
|
-
@@library.refresh
|
154
|
-
@@library.checkout filename
|
155
|
-
sugg = @@library.definitions_at(filename, params['line'].to_i, params['column'].to_i)
|
156
|
-
{ "status" => "ok", "suggestions" => sugg.map{|s| Suggestion.pull(s).as_json(all: true)} }.to_json
|
157
|
-
rescue Exception => e
|
158
|
-
send_exception e
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
get '/search' do
|
163
|
-
@results = @@library.search(params['query'])
|
164
|
-
erb :search, locals: { query: params['query'], results: @results }
|
165
|
-
end
|
166
|
-
|
167
|
-
get '/document' do
|
168
|
-
@objects = @@library.document(params['query'])
|
169
|
-
erb :document, locals: { objects: @objects }
|
170
|
-
end
|
171
|
-
|
172
|
-
def htmlify text
|
173
|
-
rdoc_to_html text
|
174
|
-
end
|
175
|
-
|
176
|
-
def rdoc_to_html text
|
177
|
-
h = Helpers.new
|
178
|
-
h.html_markup_rdoc(text)
|
179
|
-
end
|
180
|
-
|
181
|
-
def ruby_to_html code
|
182
|
-
h = Helpers.new
|
183
|
-
h.html_markup_ruby(code)
|
184
|
-
end
|
185
|
-
|
186
|
-
def send_exception e
|
187
|
-
STDERR.puts e
|
188
|
-
STDERR.puts e.backtrace.join("\n")
|
189
|
-
{ "status" => "err", "message" => e.message + "\n" + e.backtrace.join("\n") }.to_json
|
190
|
-
end
|
191
|
-
|
192
|
-
class Helpers
|
193
|
-
include YARD::Templates::Helpers::HtmlHelper
|
194
|
-
|
195
|
-
attr_accessor :object
|
196
|
-
attr_accessor :serializer
|
197
|
-
|
198
|
-
def url_for(object)
|
199
|
-
'.'
|
200
|
-
end
|
201
|
-
|
202
|
-
def options
|
203
|
-
@options ||= YARD::Templates::TemplateOptions.new
|
204
|
-
end
|
205
|
-
|
206
|
-
# HACK: The linkify method just returns the arguments as plain text
|
207
|
-
def linkify *args
|
208
|
-
args.join(', ')
|
209
|
-
end
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|