solargraph 0.32.1 → 0.32.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/.gitignore +9 -0
- data/.rspec +2 -0
- data/.rubocop.yml +6 -0
- data/.travis.yml +25 -0
- data/EXAMPLES.md +76 -0
- data/Gemfile +3 -0
- data/LANGUAGE_SERVER.md +51 -0
- data/LICENSE +21 -0
- data/OVERVIEW.md +37 -0
- data/README.md +106 -0
- data/Rakefile +14 -0
- data/SERVER.md +95 -0
- data/bin/solargraph +0 -0
- data/bin/solargraph-runtime +5 -5
- data/lib/solargraph.rb +54 -54
- data/lib/solargraph/api_map.rb +659 -659
- data/lib/solargraph/api_map/cache.rb +49 -49
- data/lib/solargraph/api_map/source_to_yard.rb +67 -67
- data/lib/solargraph/api_map/store.rb +201 -201
- data/lib/solargraph/bundle.rb +24 -24
- data/lib/solargraph/complex_type.rb +150 -150
- data/lib/solargraph/complex_type/type_methods.rb +124 -124
- data/lib/solargraph/complex_type/unique_type.rb +44 -44
- data/lib/solargraph/core_fills.rb +37 -37
- data/lib/solargraph/diagnostics.rb +52 -52
- data/lib/solargraph/diagnostics/base.rb +20 -20
- data/lib/solargraph/diagnostics/require_not_found.rb +28 -28
- data/lib/solargraph/diagnostics/rubocop.rb +98 -98
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +46 -46
- data/lib/solargraph/diagnostics/type_not_defined.rb +108 -108
- data/lib/solargraph/diagnostics/update_errors.rb +38 -38
- data/lib/solargraph/language_server/completion_item_kinds.rb +33 -33
- data/lib/solargraph/language_server/error_codes.rb +18 -18
- data/lib/solargraph/language_server/host.rb +684 -681
- data/lib/solargraph/language_server/host/cataloger.rb +54 -79
- data/lib/solargraph/language_server/host/diagnoser.rb +80 -80
- data/lib/solargraph/language_server/host/dispatch.rb +112 -113
- data/lib/solargraph/language_server/host/sources.rb +138 -138
- data/lib/solargraph/language_server/message.rb +90 -90
- data/lib/solargraph/language_server/message/base.rb +83 -83
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +40 -40
- data/lib/solargraph/language_server/message/exit_notification.rb +11 -11
- data/lib/solargraph/language_server/message/extended.rb +19 -19
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +86 -86
- data/lib/solargraph/language_server/message/extended/document.rb +18 -18
- data/lib/solargraph/language_server/message/extended/document_gems.rb +30 -30
- data/lib/solargraph/language_server/message/extended/environment.rb +20 -20
- data/lib/solargraph/language_server/message/extended/search.rb +18 -18
- data/lib/solargraph/language_server/message/initialize.rb +141 -141
- data/lib/solargraph/language_server/message/initialized.rb +23 -23
- data/lib/solargraph/language_server/message/shutdown.rb +11 -11
- data/lib/solargraph/language_server/message/text_document.rb +25 -25
- data/lib/solargraph/language_server/message/text_document/completion.rb +51 -51
- data/lib/solargraph/language_server/message/text_document/definition.rb +18 -18
- data/lib/solargraph/language_server/message/text_document/did_change.rb +13 -13
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +21 -21
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +24 -24
- data/lib/solargraph/language_server/message/text_document/formatting.rb +50 -50
- data/lib/solargraph/language_server/message/text_document/hover.rb +31 -31
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +32 -32
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +9 -9
- data/lib/solargraph/language_server/message/text_document/references.rb +14 -14
- data/lib/solargraph/language_server/message/text_document/rename.rb +17 -17
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +19 -19
- data/lib/solargraph/language_server/message/workspace.rb +12 -12
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +29 -29
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +29 -27
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +21 -21
- data/lib/solargraph/language_server/request.rb +22 -22
- data/lib/solargraph/language_server/symbol_kinds.rb +34 -34
- data/lib/solargraph/language_server/transport.rb +11 -11
- data/lib/solargraph/language_server/transport/adapter.rb +60 -60
- data/lib/solargraph/language_server/transport/data_reader.rb +66 -66
- data/lib/solargraph/language_server/uri_helpers.rb +25 -25
- data/lib/solargraph/library.rb +421 -419
- data/lib/solargraph/live_map.rb +126 -126
- data/lib/solargraph/live_map/cache.rb +38 -38
- data/lib/solargraph/location.rb +31 -31
- data/lib/solargraph/logging.rb +25 -25
- data/lib/solargraph/page.rb +68 -68
- data/lib/solargraph/pin.rb +50 -50
- data/lib/solargraph/pin/attribute.rb +41 -41
- data/lib/solargraph/pin/base.rb +280 -280
- data/lib/solargraph/pin/base_method.rb +76 -76
- data/lib/solargraph/pin/base_variable.rb +72 -72
- data/lib/solargraph/pin/block.rb +32 -32
- data/lib/solargraph/pin/block_parameter.rb +103 -103
- data/lib/solargraph/pin/class_variable.rb +9 -9
- data/lib/solargraph/pin/constant.rb +30 -30
- data/lib/solargraph/pin/conversions.rb +79 -79
- data/lib/solargraph/pin/documenting.rb +41 -41
- data/lib/solargraph/pin/duck_method.rb +14 -14
- data/lib/solargraph/pin/global_variable.rb +9 -9
- data/lib/solargraph/pin/instance_variable.rb +9 -9
- data/lib/solargraph/pin/keyword.rb +17 -17
- data/lib/solargraph/pin/local_variable.rb +23 -23
- data/lib/solargraph/pin/localized.rb +22 -22
- data/lib/solargraph/pin/method.rb +126 -126
- data/lib/solargraph/pin/method_alias.rb +30 -30
- data/lib/solargraph/pin/method_parameter.rb +40 -40
- data/lib/solargraph/pin/namespace.rb +54 -54
- data/lib/solargraph/pin/plugin/method.rb +25 -25
- data/lib/solargraph/pin/proxy_type.rb +35 -35
- data/lib/solargraph/pin/reference.rb +22 -22
- data/lib/solargraph/pin/reference/extend.rb +11 -11
- data/lib/solargraph/pin/reference/include.rb +11 -11
- data/lib/solargraph/pin/reference/require.rb +15 -15
- data/lib/solargraph/pin/reference/superclass.rb +11 -11
- data/lib/solargraph/pin/symbol.rb +44 -44
- data/lib/solargraph/pin/yard_pin.rb +10 -10
- data/lib/solargraph/pin/yard_pin/constant.rb +14 -14
- data/lib/solargraph/pin/yard_pin/method.rb +35 -35
- data/lib/solargraph/pin/yard_pin/namespace.rb +19 -19
- data/lib/solargraph/pin/yard_pin/yard_mixin.rb +14 -14
- data/lib/solargraph/plugin.rb +8 -8
- data/lib/solargraph/plugin/base.rb +41 -41
- data/lib/solargraph/plugin/canceler.rb +11 -11
- data/lib/solargraph/plugin/process.rb +172 -172
- data/lib/solargraph/plugin/runtime.rb +134 -134
- data/lib/solargraph/position.rb +110 -110
- data/lib/solargraph/range.rb +83 -83
- data/lib/solargraph/server_methods.rb +14 -14
- data/lib/solargraph/shell.rb +102 -102
- data/lib/solargraph/source.rb +521 -521
- data/lib/solargraph/source/chain.rb +120 -120
- data/lib/solargraph/source/chain/call.rb +107 -107
- data/lib/solargraph/source/chain/class_variable.rb +11 -11
- data/lib/solargraph/source/chain/constant.rb +30 -30
- data/lib/solargraph/source/chain/global_variable.rb +11 -11
- data/lib/solargraph/source/chain/head.rb +33 -33
- data/lib/solargraph/source/chain/instance_variable.rb +11 -11
- data/lib/solargraph/source/chain/link.rb +33 -33
- data/lib/solargraph/source/chain/literal.rb +21 -21
- data/lib/solargraph/source/chain/variable.rb +11 -11
- data/lib/solargraph/source/change.rb +77 -77
- data/lib/solargraph/source/cursor.rb +157 -157
- data/lib/solargraph/source/node_chainer.rb +96 -96
- data/lib/solargraph/source/node_methods.rb +225 -225
- data/lib/solargraph/source/source_chainer.rb +183 -183
- data/lib/solargraph/source_map.rb +169 -169
- data/lib/solargraph/source_map/clip.rb +145 -145
- data/lib/solargraph/source_map/completion.rb +21 -21
- data/lib/solargraph/source_map/mapper.rb +149 -149
- data/lib/solargraph/source_map/node_processor.rb +78 -78
- data/lib/solargraph/source_map/node_processor/alias_node.rb +19 -19
- data/lib/solargraph/source_map/node_processor/args_node.rb +28 -28
- data/lib/solargraph/source_map/node_processor/base.rb +68 -68
- data/lib/solargraph/source_map/node_processor/begin_node.rb +11 -11
- data/lib/solargraph/source_map/node_processor/block_node.rb +14 -14
- data/lib/solargraph/source_map/node_processor/casgn_node.rb +14 -14
- data/lib/solargraph/source_map/node_processor/cvasgn_node.rb +14 -14
- data/lib/solargraph/source_map/node_processor/def_node.rb +54 -54
- data/lib/solargraph/source_map/node_processor/defs_node.rb +21 -21
- data/lib/solargraph/source_map/node_processor/gvasgn_node.rb +12 -12
- data/lib/solargraph/source_map/node_processor/ivasgn_node.rb +18 -18
- data/lib/solargraph/source_map/node_processor/lvasgn_node.rb +16 -16
- data/lib/solargraph/source_map/node_processor/namespace_node.rb +26 -26
- data/lib/solargraph/source_map/node_processor/orasgn_node.rb +12 -12
- data/lib/solargraph/source_map/node_processor/sclass_node.rb +11 -11
- data/lib/solargraph/source_map/node_processor/send_node.rb +162 -162
- data/lib/solargraph/source_map/node_processor/sym_node.rb +11 -11
- data/lib/solargraph/source_map/region.rb +58 -58
- data/lib/solargraph/version.rb +3 -3
- data/lib/solargraph/views/environment.erb +53 -53
- data/lib/solargraph/workspace.rb +183 -183
- data/lib/solargraph/workspace/config.rb +170 -170
- data/lib/solargraph/yard_map.rb +298 -298
- data/lib/solargraph/yard_map/cache.rb +17 -17
- data/lib/solargraph/yard_map/core_docs.rb +163 -163
- data/lib/solargraph/yard_map/core_gen.rb +76 -76
- data/lib/yard-coregen.rb +16 -16
- data/lib/yard-solargraph.rb +18 -18
- data/solargraph.gemspec +37 -0
- data/travis-bundler.rb +10 -0
- metadata +19 -6
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
module Pin
|
|
3
|
-
module YardPin
|
|
4
|
-
class Namespace < Pin::Namespace
|
|
5
|
-
include YardMixin
|
|
6
|
-
|
|
7
|
-
def initialize code_object, location
|
|
8
|
-
super(location, code_object.namespace.to_s, code_object.name.to_s, comments_from(code_object), namespace_type(code_object), code_object.visibility)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
private
|
|
12
|
-
|
|
13
|
-
def namespace_type code_object
|
|
14
|
-
code_object.is_a?(YARD::CodeObjects::ClassObject) ? :class : :module
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
1
|
+
module Solargraph
|
|
2
|
+
module Pin
|
|
3
|
+
module YardPin
|
|
4
|
+
class Namespace < Pin::Namespace
|
|
5
|
+
include YardMixin
|
|
6
|
+
|
|
7
|
+
def initialize code_object, location
|
|
8
|
+
super(location, code_object.namespace.to_s, code_object.name.to_s, comments_from(code_object), namespace_type(code_object), code_object.visibility)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def namespace_type code_object
|
|
14
|
+
code_object.is_a?(YARD::CodeObjects::ClassObject) ? :class : :module
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
module Pin
|
|
3
|
-
module YardPin
|
|
4
|
-
module YardMixin
|
|
5
|
-
private
|
|
6
|
-
|
|
7
|
-
def comments_from code_object
|
|
8
|
-
return nil if code_object.docstring.nil?
|
|
9
|
-
code_object.docstring.all
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
1
|
+
module Solargraph
|
|
2
|
+
module Pin
|
|
3
|
+
module YardPin
|
|
4
|
+
module YardMixin
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
def comments_from code_object
|
|
8
|
+
return nil if code_object.docstring.nil?
|
|
9
|
+
code_object.docstring.all
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
data/lib/solargraph/plugin.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
module Plugin
|
|
3
|
-
autoload :Base, 'solargraph/plugin/base'
|
|
4
|
-
autoload :Runtime, 'solargraph/plugin/runtime'
|
|
5
|
-
autoload :Canceler, 'solargraph/plugin/canceler'
|
|
6
|
-
autoload :Process, 'solargraph/plugin/process'
|
|
7
|
-
end
|
|
8
|
-
end
|
|
1
|
+
module Solargraph
|
|
2
|
+
module Plugin
|
|
3
|
+
autoload :Base, 'solargraph/plugin/base'
|
|
4
|
+
autoload :Runtime, 'solargraph/plugin/runtime'
|
|
5
|
+
autoload :Canceler, 'solargraph/plugin/canceler'
|
|
6
|
+
autoload :Process, 'solargraph/plugin/process'
|
|
7
|
+
end
|
|
8
|
+
end
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
module Plugin
|
|
3
|
-
class Base
|
|
4
|
-
# @return [Solargraph::ApiMap]
|
|
5
|
-
attr_reader :api_map
|
|
6
|
-
|
|
7
|
-
def initialize api_map
|
|
8
|
-
@api_map = api_map
|
|
9
|
-
post_initialize
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def post_initialize
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# @return [Array<String>]
|
|
16
|
-
def get_methods namespace:, root:, scope:, with_private: false
|
|
17
|
-
[]
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# @return [Array<String>]
|
|
21
|
-
def get_constants namespace, root
|
|
22
|
-
[]
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# @return [String]
|
|
26
|
-
def get_fqns namespace, root
|
|
27
|
-
nil
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# @return [Boolean]
|
|
31
|
-
def refresh
|
|
32
|
-
false
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# @return [Boolean]
|
|
36
|
-
def runtime?
|
|
37
|
-
false
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
1
|
+
module Solargraph
|
|
2
|
+
module Plugin
|
|
3
|
+
class Base
|
|
4
|
+
# @return [Solargraph::ApiMap]
|
|
5
|
+
attr_reader :api_map
|
|
6
|
+
|
|
7
|
+
def initialize api_map
|
|
8
|
+
@api_map = api_map
|
|
9
|
+
post_initialize
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def post_initialize
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @return [Array<String>]
|
|
16
|
+
def get_methods namespace:, root:, scope:, with_private: false
|
|
17
|
+
[]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @return [Array<String>]
|
|
21
|
+
def get_constants namespace, root
|
|
22
|
+
[]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @return [String]
|
|
26
|
+
def get_fqns namespace, root
|
|
27
|
+
nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @return [Boolean]
|
|
31
|
+
def refresh
|
|
32
|
+
false
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# @return [Boolean]
|
|
36
|
+
def runtime?
|
|
37
|
+
false
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
module Plugin
|
|
3
|
-
# A placeholder plugin for disabling the default Runtime plugin.
|
|
4
|
-
#
|
|
5
|
-
class Canceler < Base
|
|
6
|
-
def runtime?
|
|
7
|
-
true
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
1
|
+
module Solargraph
|
|
2
|
+
module Plugin
|
|
3
|
+
# A placeholder plugin for disabling the default Runtime plugin.
|
|
4
|
+
#
|
|
5
|
+
class Canceler < Base
|
|
6
|
+
def runtime?
|
|
7
|
+
true
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -1,172 +1,172 @@
|
|
|
1
|
-
require 'json'
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Plugin
|
|
5
|
-
class Process
|
|
6
|
-
def initialize
|
|
7
|
-
@required = []
|
|
8
|
-
post_initialize
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def post_initialize
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def run
|
|
15
|
-
until STDIN.closed?
|
|
16
|
-
input = gets
|
|
17
|
-
break if input.nil?
|
|
18
|
-
args = nil
|
|
19
|
-
begin
|
|
20
|
-
args = JSON.parse(input)
|
|
21
|
-
case args['command']
|
|
22
|
-
when 'require'
|
|
23
|
-
STDOUT.puts do_require args['paths']
|
|
24
|
-
when 'methods'
|
|
25
|
-
STDOUT.puts get_methods args['params']
|
|
26
|
-
when 'constants'
|
|
27
|
-
STDOUT.puts get_constants args['params']
|
|
28
|
-
when 'fqns'
|
|
29
|
-
STDOUT.puts get_fqns args['params']
|
|
30
|
-
else
|
|
31
|
-
STDOUT.puts respond_err "Unrecognized command #{args['command']}"
|
|
32
|
-
end
|
|
33
|
-
rescue JSON::ParserError => e
|
|
34
|
-
STDOUT.puts respond_err "Error parsing input: #{e.message}"
|
|
35
|
-
rescue Exception => e
|
|
36
|
-
STDOUT.puts respond_err "Error processing input: #{e.message}\n#{e.backtrace}"
|
|
37
|
-
end
|
|
38
|
-
STDOUT.flush
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
private
|
|
43
|
-
|
|
44
|
-
def do_require paths
|
|
45
|
-
errors = []
|
|
46
|
-
paths.each do |p|
|
|
47
|
-
begin
|
|
48
|
-
require p
|
|
49
|
-
@required.push p
|
|
50
|
-
rescue Exception => e
|
|
51
|
-
Solargraph::Logging.logger.info "Failed to require #{p}: #{e.message}"
|
|
52
|
-
errors.push "Failed to require #{p}: #{e.class} #{e.message}"
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
if errors.empty?
|
|
56
|
-
respond_ok
|
|
57
|
-
else
|
|
58
|
-
respond_err errors.join('; ')
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def get_methods args
|
|
63
|
-
result = []
|
|
64
|
-
# @type [Class]
|
|
65
|
-
con = find_constant(args['namespace'], args['root'])
|
|
66
|
-
unless con.nil?
|
|
67
|
-
if (args['scope'] == 'class')
|
|
68
|
-
result.concat con.methods if args['with_private']
|
|
69
|
-
result.concat con.public_methods
|
|
70
|
-
elsif (args['scope'] == 'instance')
|
|
71
|
-
result.concat con.instance_methods if args['with_private']
|
|
72
|
-
result.concat con.public_instance_methods
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
result.keep_if{|m| m.to_s.match(/^[a-z_]/i)}
|
|
76
|
-
respond_ok (result.uniq.sort.map do |name|
|
|
77
|
-
# @type [Method]
|
|
78
|
-
meth = args['scope'] == 'class' ? con.method(name) : con.instance_method(name)
|
|
79
|
-
{
|
|
80
|
-
name: name,
|
|
81
|
-
parameters: build_parameter_array(meth.parameters)
|
|
82
|
-
}
|
|
83
|
-
end)
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def get_constants args
|
|
87
|
-
result = []
|
|
88
|
-
con = find_constant(args['namespace'], args['root'])
|
|
89
|
-
unless con.nil?
|
|
90
|
-
#result.concat con.constants
|
|
91
|
-
con.constants.each do |c|
|
|
92
|
-
next if c == :Solargraph and !@required.include?('solargraph')
|
|
93
|
-
here = con.const_get(c)
|
|
94
|
-
item = { namespace: con.to_s, name: c.to_s }
|
|
95
|
-
item[:class] = here.class.to_s
|
|
96
|
-
result.push item
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
respond_ok result
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def get_fqns args
|
|
103
|
-
con = find_constant(args['namespace'], args['root'])
|
|
104
|
-
respond_ok (con.nil? ? nil : con.to_s)
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def find_constant(namespace, root)
|
|
108
|
-
result = nil
|
|
109
|
-
unless root.empty?
|
|
110
|
-
parts = root.split('::')
|
|
111
|
-
until parts.empty?
|
|
112
|
-
result = inner_find_constant("#{parts.join('::')}::#{namespace}")
|
|
113
|
-
parts.pop
|
|
114
|
-
break unless result.nil?
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
result = inner_find_constant(namespace) if result.nil?
|
|
118
|
-
result
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
def inner_find_constant(namespace)
|
|
122
|
-
cursor = Object
|
|
123
|
-
parts = namespace.split('::')
|
|
124
|
-
until parts.empty?
|
|
125
|
-
here = parts.shift
|
|
126
|
-
begin
|
|
127
|
-
cursor = cursor.const_get(here)
|
|
128
|
-
rescue NameError
|
|
129
|
-
return nil
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
cursor
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
def respond_ok data = []
|
|
136
|
-
{
|
|
137
|
-
status: 'ok',
|
|
138
|
-
message: nil,
|
|
139
|
-
data: data
|
|
140
|
-
}.to_json
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
def respond_err msg
|
|
144
|
-
{
|
|
145
|
-
status: 'err',
|
|
146
|
-
message: msg,
|
|
147
|
-
data: []
|
|
148
|
-
}.to_json
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
def build_parameter_array parameters
|
|
152
|
-
an = 1
|
|
153
|
-
parameters.map do |p|
|
|
154
|
-
if p[0] == :rest
|
|
155
|
-
str = (p[1] ? "*#{p[1]}" : "*args")
|
|
156
|
-
else
|
|
157
|
-
str = (p[1] ? p[1].to_s : "arg#{an}")
|
|
158
|
-
if p[0] == :opt
|
|
159
|
-
str += ' = ?'
|
|
160
|
-
elsif p[0] == :key
|
|
161
|
-
str += ':'
|
|
162
|
-
elsif p[0] == :keyreq
|
|
163
|
-
str += ': ?'
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
an += 1
|
|
167
|
-
str
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
end
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Plugin
|
|
5
|
+
class Process
|
|
6
|
+
def initialize
|
|
7
|
+
@required = []
|
|
8
|
+
post_initialize
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def post_initialize
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def run
|
|
15
|
+
until STDIN.closed?
|
|
16
|
+
input = gets
|
|
17
|
+
break if input.nil?
|
|
18
|
+
args = nil
|
|
19
|
+
begin
|
|
20
|
+
args = JSON.parse(input)
|
|
21
|
+
case args['command']
|
|
22
|
+
when 'require'
|
|
23
|
+
STDOUT.puts do_require args['paths']
|
|
24
|
+
when 'methods'
|
|
25
|
+
STDOUT.puts get_methods args['params']
|
|
26
|
+
when 'constants'
|
|
27
|
+
STDOUT.puts get_constants args['params']
|
|
28
|
+
when 'fqns'
|
|
29
|
+
STDOUT.puts get_fqns args['params']
|
|
30
|
+
else
|
|
31
|
+
STDOUT.puts respond_err "Unrecognized command #{args['command']}"
|
|
32
|
+
end
|
|
33
|
+
rescue JSON::ParserError => e
|
|
34
|
+
STDOUT.puts respond_err "Error parsing input: #{e.message}"
|
|
35
|
+
rescue Exception => e
|
|
36
|
+
STDOUT.puts respond_err "Error processing input: #{e.message}\n#{e.backtrace}"
|
|
37
|
+
end
|
|
38
|
+
STDOUT.flush
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def do_require paths
|
|
45
|
+
errors = []
|
|
46
|
+
paths.each do |p|
|
|
47
|
+
begin
|
|
48
|
+
require p
|
|
49
|
+
@required.push p
|
|
50
|
+
rescue Exception => e
|
|
51
|
+
Solargraph::Logging.logger.info "Failed to require #{p}: #{e.message}"
|
|
52
|
+
errors.push "Failed to require #{p}: #{e.class} #{e.message}"
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
if errors.empty?
|
|
56
|
+
respond_ok
|
|
57
|
+
else
|
|
58
|
+
respond_err errors.join('; ')
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def get_methods args
|
|
63
|
+
result = []
|
|
64
|
+
# @type [Class]
|
|
65
|
+
con = find_constant(args['namespace'], args['root'])
|
|
66
|
+
unless con.nil?
|
|
67
|
+
if (args['scope'] == 'class')
|
|
68
|
+
result.concat con.methods if args['with_private']
|
|
69
|
+
result.concat con.public_methods
|
|
70
|
+
elsif (args['scope'] == 'instance')
|
|
71
|
+
result.concat con.instance_methods if args['with_private']
|
|
72
|
+
result.concat con.public_instance_methods
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
result.keep_if{|m| m.to_s.match(/^[a-z_]/i)}
|
|
76
|
+
respond_ok (result.uniq.sort.map do |name|
|
|
77
|
+
# @type [Method]
|
|
78
|
+
meth = args['scope'] == 'class' ? con.method(name) : con.instance_method(name)
|
|
79
|
+
{
|
|
80
|
+
name: name,
|
|
81
|
+
parameters: build_parameter_array(meth.parameters)
|
|
82
|
+
}
|
|
83
|
+
end)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def get_constants args
|
|
87
|
+
result = []
|
|
88
|
+
con = find_constant(args['namespace'], args['root'])
|
|
89
|
+
unless con.nil?
|
|
90
|
+
#result.concat con.constants
|
|
91
|
+
con.constants.each do |c|
|
|
92
|
+
next if c == :Solargraph and !@required.include?('solargraph')
|
|
93
|
+
here = con.const_get(c)
|
|
94
|
+
item = { namespace: con.to_s, name: c.to_s }
|
|
95
|
+
item[:class] = here.class.to_s
|
|
96
|
+
result.push item
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
respond_ok result
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def get_fqns args
|
|
103
|
+
con = find_constant(args['namespace'], args['root'])
|
|
104
|
+
respond_ok (con.nil? ? nil : con.to_s)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def find_constant(namespace, root)
|
|
108
|
+
result = nil
|
|
109
|
+
unless root.empty?
|
|
110
|
+
parts = root.split('::')
|
|
111
|
+
until parts.empty?
|
|
112
|
+
result = inner_find_constant("#{parts.join('::')}::#{namespace}")
|
|
113
|
+
parts.pop
|
|
114
|
+
break unless result.nil?
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
result = inner_find_constant(namespace) if result.nil?
|
|
118
|
+
result
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def inner_find_constant(namespace)
|
|
122
|
+
cursor = Object
|
|
123
|
+
parts = namespace.split('::')
|
|
124
|
+
until parts.empty?
|
|
125
|
+
here = parts.shift
|
|
126
|
+
begin
|
|
127
|
+
cursor = cursor.const_get(here)
|
|
128
|
+
rescue NameError
|
|
129
|
+
return nil
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
cursor
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def respond_ok data = []
|
|
136
|
+
{
|
|
137
|
+
status: 'ok',
|
|
138
|
+
message: nil,
|
|
139
|
+
data: data
|
|
140
|
+
}.to_json
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def respond_err msg
|
|
144
|
+
{
|
|
145
|
+
status: 'err',
|
|
146
|
+
message: msg,
|
|
147
|
+
data: []
|
|
148
|
+
}.to_json
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def build_parameter_array parameters
|
|
152
|
+
an = 1
|
|
153
|
+
parameters.map do |p|
|
|
154
|
+
if p[0] == :rest
|
|
155
|
+
str = (p[1] ? "*#{p[1]}" : "*args")
|
|
156
|
+
else
|
|
157
|
+
str = (p[1] ? p[1].to_s : "arg#{an}")
|
|
158
|
+
if p[0] == :opt
|
|
159
|
+
str += ' = ?'
|
|
160
|
+
elsif p[0] == :key
|
|
161
|
+
str += ':'
|
|
162
|
+
elsif p[0] == :keyreq
|
|
163
|
+
str += ': ?'
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
an += 1
|
|
167
|
+
str
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|