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,138 +1,138 @@
1
- require 'observer'
2
-
3
- module Solargraph
4
- module LanguageServer
5
- class Host
6
- # A Host class for managing sources.
7
- #
8
- class Sources
9
- include Observable
10
- include UriHelpers
11
-
12
- def initialize
13
- @stopped = true
14
- end
15
-
16
- def stopped?
17
- @stopped
18
- end
19
-
20
- # @return [void]
21
- def start
22
- return unless @stopped
23
- @stopped = false
24
- Thread.new do
25
- until stopped?
26
- tick
27
- sleep 0.25 if queue.empty?
28
- end
29
- end
30
- end
31
-
32
- # @return [void]
33
- def tick
34
- return if queue.empty?
35
- uri = mutex.synchronize { queue.shift }
36
- return if queue.include?(uri)
37
- mutex.synchronize do
38
- nxt = open_source_hash[uri].finish_synchronize
39
- open_source_hash[uri] = nxt
40
- changed
41
- notify_observers uri
42
- end
43
- end
44
-
45
- # @return [void]
46
- def stop
47
- @stopped = true
48
- end
49
-
50
- # Open a source.
51
- #
52
- # @param uri [String]
53
- # @param text [String]
54
- # @param version [Integer]
55
- # @return [Source]
56
- def open uri, text, version
57
- filename = uri_to_file(uri)
58
- source = Solargraph::Source.new(text, filename, version)
59
- open_source_hash[uri] = source
60
- end
61
-
62
- # Update an existing source.
63
- #
64
- # @raise [FileNotFoundError] if the URI does not match an open source.
65
- #
66
- # @param uri [String]
67
- # @param updater [Source::Updater]
68
- # @return [Source]
69
- def update uri, updater
70
- src = find(uri)
71
- mutex.synchronize { open_source_hash[uri] = src.synchronize(updater) }
72
- changed
73
- notify_observers uri
74
- end
75
-
76
- # @param uri [String]
77
- # @param updater [Source::Updater]
78
- # @return [Thread]
79
- def async_update uri, updater
80
- src = find(uri)
81
- mutex.synchronize { open_source_hash[uri] = src.start_synchronize(updater) }
82
- mutex.synchronize { queue.push uri }
83
- changed
84
- notify_observers uri
85
- end
86
-
87
- # Find the source with the given URI.
88
- #
89
- # @raise [FileNotFoundError] if the URI does not match an open source.
90
- #
91
- # @param uri [String]
92
- # @return [Source]
93
- def find uri
94
- open_source_hash[uri] || raise(Solargraph::FileNotFoundError, "Host could not find #{uri}")
95
- end
96
-
97
- # Close the source with the given URI.
98
- #
99
- # @param uri [String]
100
- # @return [void]
101
- def close uri
102
- open_source_hash.delete uri
103
- end
104
-
105
- # True if a source with given URI is currently open.
106
- # @param uri [String]
107
- # @return [Boolean]
108
- def include? uri
109
- open_source_hash.key? uri
110
- end
111
-
112
- # @return [void]
113
- def clear
114
- open_source_hash.clear
115
- end
116
-
117
- private
118
-
119
- # @return [Array<Source>]
120
- def open_source_hash
121
- @open_source_hash ||= {}
122
- end
123
-
124
- # @return [Mutex]
125
- def mutex
126
- @mutex ||= Mutex.new
127
- end
128
-
129
- # An array of source URIs that are waiting to finish synchronizing.
130
- #
131
- # @return [Array<String>]
132
- def queue
133
- @queue ||= []
134
- end
135
- end
136
- end
137
- end
138
- end
1
+ require 'observer'
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ class Host
6
+ # A Host class for managing sources.
7
+ #
8
+ class Sources
9
+ include Observable
10
+ include UriHelpers
11
+
12
+ def initialize
13
+ @stopped = true
14
+ end
15
+
16
+ def stopped?
17
+ @stopped
18
+ end
19
+
20
+ # @return [void]
21
+ def start
22
+ return unless @stopped
23
+ @stopped = false
24
+ Thread.new do
25
+ until stopped?
26
+ tick
27
+ sleep 0.25 if queue.empty?
28
+ end
29
+ end
30
+ end
31
+
32
+ # @return [void]
33
+ def tick
34
+ return if queue.empty?
35
+ uri = mutex.synchronize { queue.shift }
36
+ return if queue.include?(uri)
37
+ mutex.synchronize do
38
+ nxt = open_source_hash[uri].finish_synchronize
39
+ open_source_hash[uri] = nxt
40
+ changed
41
+ notify_observers uri
42
+ end
43
+ end
44
+
45
+ # @return [void]
46
+ def stop
47
+ @stopped = true
48
+ end
49
+
50
+ # Open a source.
51
+ #
52
+ # @param uri [String]
53
+ # @param text [String]
54
+ # @param version [Integer]
55
+ # @return [Source]
56
+ def open uri, text, version
57
+ filename = uri_to_file(uri)
58
+ source = Solargraph::Source.new(text, filename, version)
59
+ open_source_hash[uri] = source
60
+ end
61
+
62
+ # Update an existing source.
63
+ #
64
+ # @raise [FileNotFoundError] if the URI does not match an open source.
65
+ #
66
+ # @param uri [String]
67
+ # @param updater [Source::Updater]
68
+ # @return [Source]
69
+ def update uri, updater
70
+ src = find(uri)
71
+ mutex.synchronize { open_source_hash[uri] = src.synchronize(updater) }
72
+ changed
73
+ notify_observers uri
74
+ end
75
+
76
+ # @param uri [String]
77
+ # @param updater [Source::Updater]
78
+ # @return [Thread]
79
+ def async_update uri, updater
80
+ src = find(uri)
81
+ mutex.synchronize { open_source_hash[uri] = src.start_synchronize(updater) }
82
+ mutex.synchronize { queue.push uri }
83
+ changed
84
+ notify_observers uri
85
+ end
86
+
87
+ # Find the source with the given URI.
88
+ #
89
+ # @raise [FileNotFoundError] if the URI does not match an open source.
90
+ #
91
+ # @param uri [String]
92
+ # @return [Source]
93
+ def find uri
94
+ open_source_hash[uri] || raise(Solargraph::FileNotFoundError, "Host could not find #{uri}")
95
+ end
96
+
97
+ # Close the source with the given URI.
98
+ #
99
+ # @param uri [String]
100
+ # @return [void]
101
+ def close uri
102
+ open_source_hash.delete uri
103
+ end
104
+
105
+ # True if a source with given URI is currently open.
106
+ # @param uri [String]
107
+ # @return [Boolean]
108
+ def include? uri
109
+ open_source_hash.key? uri
110
+ end
111
+
112
+ # @return [void]
113
+ def clear
114
+ open_source_hash.clear
115
+ end
116
+
117
+ private
118
+
119
+ # @return [Array<Source>]
120
+ def open_source_hash
121
+ @open_source_hash ||= {}
122
+ end
123
+
124
+ # @return [Mutex]
125
+ def mutex
126
+ @mutex ||= Mutex.new
127
+ end
128
+
129
+ # An array of source URIs that are waiting to finish synchronizing.
130
+ #
131
+ # @return [Array<String>]
132
+ def queue
133
+ @queue ||= []
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
@@ -1,90 +1,90 @@
1
- require 'solargraph'
2
- require 'uri'
3
-
4
- module Solargraph
5
- module LanguageServer
6
- # The Message namespace contains classes that implement language server
7
- # protocol methods.
8
- #
9
- module Message
10
- autoload :Base, 'solargraph/language_server/message/base'
11
- autoload :Initialize, 'solargraph/language_server/message/initialize'
12
- autoload :Initialized, 'solargraph/language_server/message/initialized'
13
- autoload :TextDocument, 'solargraph/language_server/message/text_document'
14
- autoload :CompletionItem, 'solargraph/language_server/message/completion_item'
15
- autoload :CancelRequest, 'solargraph/language_server/message/cancel_request'
16
- autoload :MethodNotFound, 'solargraph/language_server/message/method_not_found'
17
- autoload :MethodNotImplemented, 'solargraph/language_server/message/method_not_implemented'
18
- autoload :Extended, 'solargraph/language_server/message/extended'
19
- autoload :Shutdown, 'solargraph/language_server/message/shutdown'
20
- autoload :ExitNotification, 'solargraph/language_server/message/exit_notification'
21
- autoload :Workspace, 'solargraph/language_server/message/workspace'
22
-
23
- class << self
24
- # Register a method name and message for handling by the language
25
- # server.
26
- #
27
- # @example
28
- # Message.register 'initialize', Solargraph::Message::Initialize
29
- #
30
- # @param path [String] The method name
31
- # @param message_class [Class<Message::Base>] The message class
32
- # @return [void]
33
- def register path, message_class
34
- method_map[path] = message_class
35
- end
36
-
37
- # @param path [String]
38
- # @return [Class<Solargraph::LanguageServer::Message::Base>]
39
- def select path
40
- if method_map.has_key?(path)
41
- method_map[path]
42
- elsif path.start_with?('$/')
43
- MethodNotImplemented
44
- else
45
- MethodNotFound
46
- end
47
- end
48
-
49
- private
50
-
51
- # @return [Hash{String => Class<Message::Base>}]
52
- def method_map
53
- @method_map ||= {}
54
- end
55
- end
56
-
57
- register 'initialize', Initialize
58
- register 'initialized', Initialized
59
- register 'textDocument/completion', TextDocument::Completion
60
- register 'completionItem/resolve', CompletionItem::Resolve
61
- register 'textDocument/signatureHelp', TextDocument::SignatureHelp
62
- register 'textDocument/didOpen', TextDocument::DidOpen
63
- register 'textDocument/didChange', TextDocument::DidChange
64
- register 'textDocument/didSave', TextDocument::DidSave
65
- register 'textDocument/didClose', TextDocument::DidClose
66
- register 'textDocument/hover', TextDocument::Hover
67
- register 'textDocument/definition', TextDocument::Definition
68
- register 'textDocument/formatting', TextDocument::Formatting
69
- register 'textDocument/onTypeFormatting', TextDocument::OnTypeFormatting
70
- register 'textDocument/documentSymbol', TextDocument::DocumentSymbol
71
- register 'textDocument/references', TextDocument::References
72
- register 'textDocument/rename', TextDocument::Rename
73
- register 'textDocument/prepareRename', TextDocument::PrepareRename
74
- register 'textDocument/foldingRange', TextDocument::FoldingRange
75
- register 'workspace/didChangeWatchedFiles', Workspace::DidChangeWatchedFiles
76
- register 'workspace/didChangeConfiguration', Workspace::DidChangeConfiguration
77
- register 'workspace/didChangeWorkspaceFolders', Workspace::DidChangeWorkspaceFolders
78
- register 'workspace/symbol', Workspace::WorkspaceSymbol
79
- register '$/cancelRequest', CancelRequest
80
- register '$/solargraph/document', Extended::Document
81
- register '$/solargraph/search', Extended::Search
82
- register '$/solargraph/checkGemVersion', Extended::CheckGemVersion
83
- register '$/solargraph/documentGems', Extended::DocumentGems
84
- register '$/solargraph/downloadCore', Extended::DownloadCore
85
- register '$/solargraph/environment', Extended::Environment
86
- register 'shutdown', Shutdown
87
- register 'exit', ExitNotification
88
- end
89
- end
90
- end
1
+ require 'solargraph'
2
+ require 'uri'
3
+
4
+ module Solargraph
5
+ module LanguageServer
6
+ # The Message namespace contains classes that implement language server
7
+ # protocol methods.
8
+ #
9
+ module Message
10
+ autoload :Base, 'solargraph/language_server/message/base'
11
+ autoload :Initialize, 'solargraph/language_server/message/initialize'
12
+ autoload :Initialized, 'solargraph/language_server/message/initialized'
13
+ autoload :TextDocument, 'solargraph/language_server/message/text_document'
14
+ autoload :CompletionItem, 'solargraph/language_server/message/completion_item'
15
+ autoload :CancelRequest, 'solargraph/language_server/message/cancel_request'
16
+ autoload :MethodNotFound, 'solargraph/language_server/message/method_not_found'
17
+ autoload :MethodNotImplemented, 'solargraph/language_server/message/method_not_implemented'
18
+ autoload :Extended, 'solargraph/language_server/message/extended'
19
+ autoload :Shutdown, 'solargraph/language_server/message/shutdown'
20
+ autoload :ExitNotification, 'solargraph/language_server/message/exit_notification'
21
+ autoload :Workspace, 'solargraph/language_server/message/workspace'
22
+
23
+ class << self
24
+ # Register a method name and message for handling by the language
25
+ # server.
26
+ #
27
+ # @example
28
+ # Message.register 'initialize', Solargraph::Message::Initialize
29
+ #
30
+ # @param path [String] The method name
31
+ # @param message_class [Class<Message::Base>] The message class
32
+ # @return [void]
33
+ def register path, message_class
34
+ method_map[path] = message_class
35
+ end
36
+
37
+ # @param path [String]
38
+ # @return [Class<Solargraph::LanguageServer::Message::Base>]
39
+ def select path
40
+ if method_map.has_key?(path)
41
+ method_map[path]
42
+ elsif path.start_with?('$/')
43
+ MethodNotImplemented
44
+ else
45
+ MethodNotFound
46
+ end
47
+ end
48
+
49
+ private
50
+
51
+ # @return [Hash{String => Class<Message::Base>}]
52
+ def method_map
53
+ @method_map ||= {}
54
+ end
55
+ end
56
+
57
+ register 'initialize', Initialize
58
+ register 'initialized', Initialized
59
+ register 'textDocument/completion', TextDocument::Completion
60
+ register 'completionItem/resolve', CompletionItem::Resolve
61
+ register 'textDocument/signatureHelp', TextDocument::SignatureHelp
62
+ register 'textDocument/didOpen', TextDocument::DidOpen
63
+ register 'textDocument/didChange', TextDocument::DidChange
64
+ register 'textDocument/didSave', TextDocument::DidSave
65
+ register 'textDocument/didClose', TextDocument::DidClose
66
+ register 'textDocument/hover', TextDocument::Hover
67
+ register 'textDocument/definition', TextDocument::Definition
68
+ register 'textDocument/formatting', TextDocument::Formatting
69
+ register 'textDocument/onTypeFormatting', TextDocument::OnTypeFormatting
70
+ register 'textDocument/documentSymbol', TextDocument::DocumentSymbol
71
+ register 'textDocument/references', TextDocument::References
72
+ register 'textDocument/rename', TextDocument::Rename
73
+ register 'textDocument/prepareRename', TextDocument::PrepareRename
74
+ register 'textDocument/foldingRange', TextDocument::FoldingRange
75
+ register 'workspace/didChangeWatchedFiles', Workspace::DidChangeWatchedFiles
76
+ register 'workspace/didChangeConfiguration', Workspace::DidChangeConfiguration
77
+ register 'workspace/didChangeWorkspaceFolders', Workspace::DidChangeWorkspaceFolders
78
+ register 'workspace/symbol', Workspace::WorkspaceSymbol
79
+ register '$/cancelRequest', CancelRequest
80
+ register '$/solargraph/document', Extended::Document
81
+ register '$/solargraph/search', Extended::Search
82
+ register '$/solargraph/checkGemVersion', Extended::CheckGemVersion
83
+ register '$/solargraph/documentGems', Extended::DocumentGems
84
+ register '$/solargraph/downloadCore', Extended::DownloadCore
85
+ register '$/solargraph/environment', Extended::Environment
86
+ register 'shutdown', Shutdown
87
+ register 'exit', ExitNotification
88
+ end
89
+ end
90
+ end