lib/ruby_lsp/utils.rb in ruby-lsp-0.14.6 vs lib/ruby_lsp/utils.rb in ruby-lsp-0.15.0
- old
+ new
@@ -1,11 +1,16 @@
# typed: strict
# frozen_string_literal: true
module RubyLsp
+ # rubocop:disable RubyLsp/UseLanguageServerAliases
+ Interface = LanguageServer::Protocol::Interface
+ Constant = LanguageServer::Protocol::Constant
+ Transport = LanguageServer::Protocol::Transport
+ # rubocop:enable RubyLsp/UseLanguageServerAliases
+
# Used to indicate that a request shouldn't return a response
- VOID = T.let(Object.new.freeze, Object)
BUNDLE_PATH = T.let(
begin
Bundler.bundle_path.to_s
rescue Bundler::GemfileNotFound
nil
@@ -24,78 +29,108 @@
# A notification to be sent to the client
class Message
extend T::Sig
extend T::Helpers
- abstract!
-
sig { returns(String) }
- attr_reader :message
+ attr_reader :method
sig { returns(Object) }
attr_reader :params
- sig { params(message: String, params: Object).void }
- def initialize(message:, params:)
- @message = message
+ abstract!
+
+ sig { params(method: String, params: Object).void }
+ def initialize(method:, params:)
+ @method = method
@params = params
end
+
+ sig { abstract.returns(T::Hash[Symbol, T.untyped]) }
+ def to_hash; end
end
class Notification < Message
class << self
extend T::Sig
sig { params(message: String).returns(Notification) }
def window_show_error(message)
new(
- message: "window/showMessage",
+ method: "window/showMessage",
params: Interface::ShowMessageParams.new(
type: Constant::MessageType::ERROR,
message: message,
),
)
end
end
- end
- class Request < Message; end
-
- # The final result of running a request before its IO is finalized
- class Result
extend T::Sig
- sig { returns(T.untyped) }
- attr_reader :response
+ sig { override.returns(T::Hash[Symbol, T.untyped]) }
+ def to_hash
+ { method: @method, params: T.unsafe(@params).to_hash }
+ end
+ end
- sig { returns(T.nilable(Exception)) }
- attr_reader :error
+ class Request < Message
+ extend T::Sig
- sig { params(response: T.untyped, error: T.nilable(Exception)).void }
- def initialize(response:, error: nil)
- @response = response
- @error = error
+ sig { params(id: Integer, method: String, params: Object).void }
+ def initialize(id:, method:, params:)
+ @id = id
+ super(method: method, params: params)
end
+
+ sig { override.returns(T::Hash[Symbol, T.untyped]) }
+ def to_hash
+ { id: @id, method: @method, params: T.unsafe(@params).to_hash }
+ end
end
- # A request that will sit in the queue until it's executed
- class Job
+ class Error
extend T::Sig
+ sig { returns(String) }
+ attr_reader :message
+
+ sig { params(id: Integer, code: Integer, message: String, data: T.nilable(T::Hash[Symbol, T.untyped])).void }
+ def initialize(id:, code:, message:, data: nil)
+ @id = id
+ @code = code
+ @message = message
+ @data = data
+ end
+
sig { returns(T::Hash[Symbol, T.untyped]) }
- attr_reader :request
+ def to_hash
+ {
+ id: @id,
+ error: {
+ code: @code,
+ message: @message,
+ data: @data,
+ },
+ }
+ end
+ end
- sig { returns(T::Boolean) }
- attr_reader :cancelled
+ # The final result of running a request before its IO is finalized
+ class Result
+ extend T::Sig
- sig { params(request: T::Hash[Symbol, T.untyped], cancelled: T::Boolean).void }
- def initialize(request:, cancelled:)
- @request = request
- @cancelled = cancelled
+ sig { returns(T.untyped) }
+ attr_reader :response
+
+ sig { params(id: Integer, response: T.untyped).void }
+ def initialize(id:, response:)
+ @id = id
+ @response = response
end
- sig { void }
- def cancel
- @cancelled = true
+ sig { returns(T::Hash[Symbol, T.untyped]) }
+ def to_hash
+ { id: @id, result: @response }
end
end
# A request configuration, to turn on/off features
class RequestConfig