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.
Files changed (177) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +6 -0
  5. data/.travis.yml +25 -0
  6. data/EXAMPLES.md +76 -0
  7. data/Gemfile +3 -0
  8. data/LANGUAGE_SERVER.md +51 -0
  9. data/LICENSE +21 -0
  10. data/OVERVIEW.md +37 -0
  11. data/README.md +106 -0
  12. data/Rakefile +14 -0
  13. data/SERVER.md +95 -0
  14. data/bin/solargraph +0 -0
  15. data/bin/solargraph-runtime +5 -5
  16. data/lib/solargraph.rb +54 -54
  17. data/lib/solargraph/api_map.rb +659 -659
  18. data/lib/solargraph/api_map/cache.rb +49 -49
  19. data/lib/solargraph/api_map/source_to_yard.rb +67 -67
  20. data/lib/solargraph/api_map/store.rb +201 -201
  21. data/lib/solargraph/bundle.rb +24 -24
  22. data/lib/solargraph/complex_type.rb +150 -150
  23. data/lib/solargraph/complex_type/type_methods.rb +124 -124
  24. data/lib/solargraph/complex_type/unique_type.rb +44 -44
  25. data/lib/solargraph/core_fills.rb +37 -37
  26. data/lib/solargraph/diagnostics.rb +52 -52
  27. data/lib/solargraph/diagnostics/base.rb +20 -20
  28. data/lib/solargraph/diagnostics/require_not_found.rb +28 -28
  29. data/lib/solargraph/diagnostics/rubocop.rb +98 -98
  30. data/lib/solargraph/diagnostics/rubocop_helpers.rb +46 -46
  31. data/lib/solargraph/diagnostics/type_not_defined.rb +108 -108
  32. data/lib/solargraph/diagnostics/update_errors.rb +38 -38
  33. data/lib/solargraph/language_server/completion_item_kinds.rb +33 -33
  34. data/lib/solargraph/language_server/error_codes.rb +18 -18
  35. data/lib/solargraph/language_server/host.rb +684 -681
  36. data/lib/solargraph/language_server/host/cataloger.rb +54 -79
  37. data/lib/solargraph/language_server/host/diagnoser.rb +80 -80
  38. data/lib/solargraph/language_server/host/dispatch.rb +112 -113
  39. data/lib/solargraph/language_server/host/sources.rb +138 -138
  40. data/lib/solargraph/language_server/message.rb +90 -90
  41. data/lib/solargraph/language_server/message/base.rb +83 -83
  42. data/lib/solargraph/language_server/message/completion_item/resolve.rb +40 -40
  43. data/lib/solargraph/language_server/message/exit_notification.rb +11 -11
  44. data/lib/solargraph/language_server/message/extended.rb +19 -19
  45. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +86 -86
  46. data/lib/solargraph/language_server/message/extended/document.rb +18 -18
  47. data/lib/solargraph/language_server/message/extended/document_gems.rb +30 -30
  48. data/lib/solargraph/language_server/message/extended/environment.rb +20 -20
  49. data/lib/solargraph/language_server/message/extended/search.rb +18 -18
  50. data/lib/solargraph/language_server/message/initialize.rb +141 -141
  51. data/lib/solargraph/language_server/message/initialized.rb +23 -23
  52. data/lib/solargraph/language_server/message/shutdown.rb +11 -11
  53. data/lib/solargraph/language_server/message/text_document.rb +25 -25
  54. data/lib/solargraph/language_server/message/text_document/completion.rb +51 -51
  55. data/lib/solargraph/language_server/message/text_document/definition.rb +18 -18
  56. data/lib/solargraph/language_server/message/text_document/did_change.rb +13 -13
  57. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +21 -21
  58. data/lib/solargraph/language_server/message/text_document/folding_range.rb +24 -24
  59. data/lib/solargraph/language_server/message/text_document/formatting.rb +50 -50
  60. data/lib/solargraph/language_server/message/text_document/hover.rb +31 -31
  61. data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +32 -32
  62. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +9 -9
  63. data/lib/solargraph/language_server/message/text_document/references.rb +14 -14
  64. data/lib/solargraph/language_server/message/text_document/rename.rb +17 -17
  65. data/lib/solargraph/language_server/message/text_document/signature_help.rb +19 -19
  66. data/lib/solargraph/language_server/message/workspace.rb +12 -12
  67. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +29 -29
  68. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +29 -27
  69. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
  70. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +21 -21
  71. data/lib/solargraph/language_server/request.rb +22 -22
  72. data/lib/solargraph/language_server/symbol_kinds.rb +34 -34
  73. data/lib/solargraph/language_server/transport.rb +11 -11
  74. data/lib/solargraph/language_server/transport/adapter.rb +60 -60
  75. data/lib/solargraph/language_server/transport/data_reader.rb +66 -66
  76. data/lib/solargraph/language_server/uri_helpers.rb +25 -25
  77. data/lib/solargraph/library.rb +421 -419
  78. data/lib/solargraph/live_map.rb +126 -126
  79. data/lib/solargraph/live_map/cache.rb +38 -38
  80. data/lib/solargraph/location.rb +31 -31
  81. data/lib/solargraph/logging.rb +25 -25
  82. data/lib/solargraph/page.rb +68 -68
  83. data/lib/solargraph/pin.rb +50 -50
  84. data/lib/solargraph/pin/attribute.rb +41 -41
  85. data/lib/solargraph/pin/base.rb +280 -280
  86. data/lib/solargraph/pin/base_method.rb +76 -76
  87. data/lib/solargraph/pin/base_variable.rb +72 -72
  88. data/lib/solargraph/pin/block.rb +32 -32
  89. data/lib/solargraph/pin/block_parameter.rb +103 -103
  90. data/lib/solargraph/pin/class_variable.rb +9 -9
  91. data/lib/solargraph/pin/constant.rb +30 -30
  92. data/lib/solargraph/pin/conversions.rb +79 -79
  93. data/lib/solargraph/pin/documenting.rb +41 -41
  94. data/lib/solargraph/pin/duck_method.rb +14 -14
  95. data/lib/solargraph/pin/global_variable.rb +9 -9
  96. data/lib/solargraph/pin/instance_variable.rb +9 -9
  97. data/lib/solargraph/pin/keyword.rb +17 -17
  98. data/lib/solargraph/pin/local_variable.rb +23 -23
  99. data/lib/solargraph/pin/localized.rb +22 -22
  100. data/lib/solargraph/pin/method.rb +126 -126
  101. data/lib/solargraph/pin/method_alias.rb +30 -30
  102. data/lib/solargraph/pin/method_parameter.rb +40 -40
  103. data/lib/solargraph/pin/namespace.rb +54 -54
  104. data/lib/solargraph/pin/plugin/method.rb +25 -25
  105. data/lib/solargraph/pin/proxy_type.rb +35 -35
  106. data/lib/solargraph/pin/reference.rb +22 -22
  107. data/lib/solargraph/pin/reference/extend.rb +11 -11
  108. data/lib/solargraph/pin/reference/include.rb +11 -11
  109. data/lib/solargraph/pin/reference/require.rb +15 -15
  110. data/lib/solargraph/pin/reference/superclass.rb +11 -11
  111. data/lib/solargraph/pin/symbol.rb +44 -44
  112. data/lib/solargraph/pin/yard_pin.rb +10 -10
  113. data/lib/solargraph/pin/yard_pin/constant.rb +14 -14
  114. data/lib/solargraph/pin/yard_pin/method.rb +35 -35
  115. data/lib/solargraph/pin/yard_pin/namespace.rb +19 -19
  116. data/lib/solargraph/pin/yard_pin/yard_mixin.rb +14 -14
  117. data/lib/solargraph/plugin.rb +8 -8
  118. data/lib/solargraph/plugin/base.rb +41 -41
  119. data/lib/solargraph/plugin/canceler.rb +11 -11
  120. data/lib/solargraph/plugin/process.rb +172 -172
  121. data/lib/solargraph/plugin/runtime.rb +134 -134
  122. data/lib/solargraph/position.rb +110 -110
  123. data/lib/solargraph/range.rb +83 -83
  124. data/lib/solargraph/server_methods.rb +14 -14
  125. data/lib/solargraph/shell.rb +102 -102
  126. data/lib/solargraph/source.rb +521 -521
  127. data/lib/solargraph/source/chain.rb +120 -120
  128. data/lib/solargraph/source/chain/call.rb +107 -107
  129. data/lib/solargraph/source/chain/class_variable.rb +11 -11
  130. data/lib/solargraph/source/chain/constant.rb +30 -30
  131. data/lib/solargraph/source/chain/global_variable.rb +11 -11
  132. data/lib/solargraph/source/chain/head.rb +33 -33
  133. data/lib/solargraph/source/chain/instance_variable.rb +11 -11
  134. data/lib/solargraph/source/chain/link.rb +33 -33
  135. data/lib/solargraph/source/chain/literal.rb +21 -21
  136. data/lib/solargraph/source/chain/variable.rb +11 -11
  137. data/lib/solargraph/source/change.rb +77 -77
  138. data/lib/solargraph/source/cursor.rb +157 -157
  139. data/lib/solargraph/source/node_chainer.rb +96 -96
  140. data/lib/solargraph/source/node_methods.rb +225 -225
  141. data/lib/solargraph/source/source_chainer.rb +183 -183
  142. data/lib/solargraph/source_map.rb +169 -169
  143. data/lib/solargraph/source_map/clip.rb +145 -145
  144. data/lib/solargraph/source_map/completion.rb +21 -21
  145. data/lib/solargraph/source_map/mapper.rb +149 -149
  146. data/lib/solargraph/source_map/node_processor.rb +78 -78
  147. data/lib/solargraph/source_map/node_processor/alias_node.rb +19 -19
  148. data/lib/solargraph/source_map/node_processor/args_node.rb +28 -28
  149. data/lib/solargraph/source_map/node_processor/base.rb +68 -68
  150. data/lib/solargraph/source_map/node_processor/begin_node.rb +11 -11
  151. data/lib/solargraph/source_map/node_processor/block_node.rb +14 -14
  152. data/lib/solargraph/source_map/node_processor/casgn_node.rb +14 -14
  153. data/lib/solargraph/source_map/node_processor/cvasgn_node.rb +14 -14
  154. data/lib/solargraph/source_map/node_processor/def_node.rb +54 -54
  155. data/lib/solargraph/source_map/node_processor/defs_node.rb +21 -21
  156. data/lib/solargraph/source_map/node_processor/gvasgn_node.rb +12 -12
  157. data/lib/solargraph/source_map/node_processor/ivasgn_node.rb +18 -18
  158. data/lib/solargraph/source_map/node_processor/lvasgn_node.rb +16 -16
  159. data/lib/solargraph/source_map/node_processor/namespace_node.rb +26 -26
  160. data/lib/solargraph/source_map/node_processor/orasgn_node.rb +12 -12
  161. data/lib/solargraph/source_map/node_processor/sclass_node.rb +11 -11
  162. data/lib/solargraph/source_map/node_processor/send_node.rb +162 -162
  163. data/lib/solargraph/source_map/node_processor/sym_node.rb +11 -11
  164. data/lib/solargraph/source_map/region.rb +58 -58
  165. data/lib/solargraph/version.rb +3 -3
  166. data/lib/solargraph/views/environment.erb +53 -53
  167. data/lib/solargraph/workspace.rb +183 -183
  168. data/lib/solargraph/workspace/config.rb +170 -170
  169. data/lib/solargraph/yard_map.rb +298 -298
  170. data/lib/solargraph/yard_map/cache.rb +17 -17
  171. data/lib/solargraph/yard_map/core_docs.rb +163 -163
  172. data/lib/solargraph/yard_map/core_gen.rb +76 -76
  173. data/lib/yard-coregen.rb +16 -16
  174. data/lib/yard-solargraph.rb +18 -18
  175. data/solargraph.gemspec +37 -0
  176. data/travis-bundler.rb +10 -0
  177. 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
@@ -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