Class: ThemeCheck::LanguageServer::Bridge
- Inherits:
-
Object
- Object
- ThemeCheck::LanguageServer::Bridge
- Defined in:
- lib/theme_check/language_server/bridge.rb
Instance Attribute Summary collapse
-
#supports_work_done_progress ⇒ Object
writeonly
Sets the attribute supports_work_done_progress.
Instance Method Summary collapse
-
#initialize(messenger) ⇒ Bridge
constructor
A new instance of Bridge.
- #log(message) ⇒ Object
- #read_message ⇒ Object
- #receive_response(id, result) ⇒ Object
- #send_create_work_done_progress_request(token) ⇒ Object
- #send_internal_error(id, e) ⇒ Object
- #send_message(message_hash) ⇒ Object
- #send_notification(method, params) ⇒ Object
- #send_progress(token, value) ⇒ Object
- #send_request(method, params = nil) ⇒ Object
- #send_response(id, result = nil, error = nil) ⇒ Object
- #send_work_done_progress_begin(token, title) ⇒ Object
- #send_work_done_progress_end(token, message) ⇒ Object
- #send_work_done_progress_report(token, message, percentage) ⇒ Object
- #supports_work_done_progress? ⇒ Boolean
Constructor Details
#initialize(messenger) ⇒ Bridge
Returns a new instance of Bridge.
25 26 27 28 29 30 31 32 |
# File 'lib/theme_check/language_server/bridge.rb', line 25 def initialize(messenger) # The messenger is responsible for IO. # Could be STDIO or WebSockets or Mock. @messenger = messenger # Whether the client supports work done progress notifications @supports_work_done_progress = false end |
Instance Attribute Details
#supports_work_done_progress=(value) ⇒ Object (writeonly)
Sets the attribute supports_work_done_progress
23 24 25 |
# File 'lib/theme_check/language_server/bridge.rb', line 23 def supports_work_done_progress=(value) @supports_work_done_progress = value end |
Instance Method Details
#log(message) ⇒ Object
34 35 36 |
# File 'lib/theme_check/language_server/bridge.rb', line 34 def log() @messenger.log() end |
#read_message ⇒ Object
38 39 40 41 42 43 |
# File 'lib/theme_check/language_server/bridge.rb', line 38 def = @messenger. = JSON.parse(, symbolize_names: true) @messenger.log(JSON.pretty_generate()) if ThemeCheck.debug? end |
#receive_response(id, result) ⇒ Object
64 65 66 |
# File 'lib/theme_check/language_server/bridge.rb', line 64 def receive_response(id, result) Channel.by_id(id) << result end |
#send_create_work_done_progress_request(token) ⇒ Object
106 107 108 109 110 111 |
# File 'lib/theme_check/language_server/bridge.rb', line 106 def send_create_work_done_progress_request(token) return unless supports_work_done_progress? send_request("window/workDoneProgress/create", { token: token, }) end |
#send_internal_error(id, e) ⇒ Object
80 81 82 83 84 85 86 87 88 |
# File 'lib/theme_check/language_server/bridge.rb', line 80 def send_internal_error(id, e) send_response(id, nil, { code: ErrorCodes::INTERNAL_ERROR, message: <<~EOS, #{e.class}: #{e.} #{e.backtrace.join("\n ")} EOS }) end |
#send_message(message_hash) ⇒ Object
45 46 47 48 49 50 |
# File 'lib/theme_check/language_server/bridge.rb', line 45 def () [:jsonrpc] = '2.0' = JSON.dump() @messenger.log(JSON.pretty_generate()) if ThemeCheck.debug? @messenger.() end |
#send_notification(method, params) ⇒ Object
91 92 93 94 95 |
# File 'lib/theme_check/language_server/bridge.rb', line 91 def send_notification(method, params) = { method: method } [:params] = params () end |
#send_progress(token, value) ⇒ Object
98 99 100 |
# File 'lib/theme_check/language_server/bridge.rb', line 98 def send_progress(token, value) send_notification("$/progress", token: token, value: value) end |
#send_request(method, params = nil) ⇒ Object
53 54 55 56 57 58 59 60 61 62 |
# File 'lib/theme_check/language_server/bridge.rb', line 53 def send_request(method, params = nil) channel = Channel.create = { id: channel.id } [:method] = method [:params] = params if params () channel.pop ensure channel.close end |
#send_response(id, result = nil, error = nil) ⇒ Object
69 70 71 72 73 74 75 76 77 |
# File 'lib/theme_check/language_server/bridge.rb', line 69 def send_response(id, result = nil, error = nil) = { id: id } if error [:error] = error else [:result] = result end () end |
#send_work_done_progress_begin(token, title) ⇒ Object
113 114 115 116 117 118 119 120 121 |
# File 'lib/theme_check/language_server/bridge.rb', line 113 def send_work_done_progress_begin(token, title) return unless supports_work_done_progress? send_progress(token, { kind: 'begin', title: title, cancellable: false, percentage: 0, }) end |
#send_work_done_progress_end(token, message) ⇒ Object
133 134 135 136 137 138 139 |
# File 'lib/theme_check/language_server/bridge.rb', line 133 def send_work_done_progress_end(token, ) return unless supports_work_done_progress? send_progress(token, { kind: 'end', message: , }) end |
#send_work_done_progress_report(token, message, percentage) ⇒ Object
123 124 125 126 127 128 129 130 131 |
# File 'lib/theme_check/language_server/bridge.rb', line 123 def send_work_done_progress_report(token, , percentage) return unless supports_work_done_progress? send_progress(token, { kind: 'report', message: , cancellable: false, percentage: percentage, }) end |
#supports_work_done_progress? ⇒ Boolean
102 103 104 |
# File 'lib/theme_check/language_server/bridge.rb', line 102 def supports_work_done_progress? @supports_work_done_progress end |