class RuboCop::Server::Core
The core of server process. It starts TCP server and perform socket communication. @api private
Constants
- JSON_FORMATS
Public Class Methods
token()
click to toggle source
# File lib/rubocop/server/core.rb, line 22 def self.token @token ||= SecureRandom.hex(4) end
Public Instance Methods
start(host, port)
click to toggle source
# File lib/rubocop/server/core.rb, line 30 def start(host, port) $PROGRAM_NAME = "rubocop --server #{Cache.project_dir}" require 'rubocop' start_server(host, port) demonize if server_mode? end
token()
click to toggle source
# File lib/rubocop/server/core.rb, line 26 def token self.class.token end
Private Instance Methods
demonize()
click to toggle source
# File lib/rubocop/server/core.rb, line 41 def demonize Cache.write_port_and_token_files(port: @server.addr[1], token: token) pid = fork do Process.daemon(true) $stderr.reopen(Cache.stderr_path, 'w') Cache.write_pid_file do read_socket(@server.accept) until @server.closed? end end Process.waitpid(pid) end
read_socket(socket)
click to toggle source
# File lib/rubocop/server/core.rb, line 70 def read_socket(socket) SocketReader.new(socket).read! rescue InvalidTokenError socket.puts 'token is not valid.' rescue ServerStopRequest @server.close rescue UnknownServerCommandError => e socket.puts e.message rescue Errno::EPIPE => e warn e.inspect rescue StandardError => e socket.puts e.full_message ensure socket.close end
server_mode?()
click to toggle source
# File lib/rubocop/server/core.rb, line 55 def server_mode? true end
start_server(host, port)
click to toggle source
# File lib/rubocop/server/core.rb, line 59 def start_server(host, port) @server = TCPServer.open(host, port) # JSON format does not expected output message when IDE integration with server mode. # See: https://github.com/rubocop/rubocop/issues/11164 return if use_json_format? output_stream = ARGV.include?('--stderr') ? $stderr : $stdout output_stream.puts "RuboCop server starting on #{@server.addr[3]}:#{@server.addr[1]}." end
use_json_format?()
click to toggle source
# File lib/rubocop/server/core.rb, line 86 def use_json_format? return true if ARGV.include?('--format=json') || ARGV.include?('--format=j') return false unless (index = ARGV.index('--format')) format = ARGV[index + 1] JSON_FORMATS.include?(format) end