module LanguageServer
Constants
- VERSION
Attributes
options[RW]
Public Class Methods
adhoc_enabled?()
click to toggle source
# File lib/language_server.rb, line 66 def adhoc_enabled? options[:experimental_features_enabled] end
logger()
click to toggle source
# File lib/language_server/logger.rb, line 5 def logger @logger ||= ::Logger.new(STDERR, formatter: Formatter.new) end
on(method, &callback)
click to toggle source
# File lib/language_server.rb, line 74 def on(method, &callback) subscribers[method] = callback end
rubocop_enabled?()
click to toggle source
# File lib/language_server.rb, line 62 def rubocop_enabled? options[:experimental_features_enabled] end
run(options)
click to toggle source
# File lib/language_server.rb, line 17 def run(options) self.options = options writer = Protocol::Transport::Stdio::Writer.new reader = Protocol::Transport::Stdio::Reader.new variables = {} class << writer def respond(id:, result:) write(id: id, result: result) LanguageServer.logger.debug("Respond: id: #{id}, result: #{JSON.pretty_generate(result)}") end def notify(method:, params: {}) write(method: method, params: params) LanguageServer.logger.debug("Notify: method: #{method}, params: #{JSON.pretty_generate(params)}") end end reader.read do |request| logger.debug("Receive: #{JSON.pretty_generate(request)}") method = request[:method].to_sym subscriber = subscribers[method] if subscriber keys = subscriber.parameters.map(&:last) result = subscriber.call( { request: request, notifier: writer.method(:notify), variables: variables }.merge(variables).select { |k, _| keys.include?(k) }, ) if request[:id] writer.respond(id: request[:id], result: result) end else logger.debug("Ignore: #{method}") end end end
subscribers()
click to toggle source
# File lib/language_server.rb, line 70 def subscribers @subscribers ||= {} end