♻️ refactor(cli): validate startup arguments
This commit is contained in:
@@ -8,18 +8,43 @@ import std;
|
||||
import lsp.core.server;
|
||||
import lsp.utils.args_parser;
|
||||
|
||||
namespace
|
||||
{
|
||||
void SetupLogger(const lsp::utils::ServerConfig& config)
|
||||
{
|
||||
spdlog::set_pattern("%Y-%m-%d %H:%M:%S.%e [%t] [%^%l%$] %v");
|
||||
auto logger = config.log_file.empty() ? spdlog::stderr_logger_mt("console_logger") : spdlog::basic_logger_mt("file_logger", config.log_file);
|
||||
logger->set_level(config.log_level);
|
||||
spdlog::set_default_logger(logger);
|
||||
spdlog::set_level(config.log_level);
|
||||
}
|
||||
}
|
||||
|
||||
export int Run(int argc, char* argv[])
|
||||
{
|
||||
lsp::utils::ArgsParser& args_parser = lsp::utils::ArgsParser::Instance();
|
||||
auto& config = args_parser.Parse(argc, argv);
|
||||
|
||||
if (config.show_help)
|
||||
auto parsed = lsp::utils::ParseArgs(argc, argv);
|
||||
if (!parsed)
|
||||
{
|
||||
lsp::utils::ArgsParser::PrintHelp(argv[0]);
|
||||
std::cerr << "[TSL-LSP] Argument error: " << parsed.error() << '\n';
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (parsed->action == lsp::utils::ParseAction::kShowHelp)
|
||||
{
|
||||
lsp::utils::PrintHelp(std::cout, argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
lsp::utils::ArgsParser::SetupLogger(config);
|
||||
const auto& config = parsed->config;
|
||||
try
|
||||
{
|
||||
SetupLogger(config);
|
||||
}
|
||||
catch (const std::exception& error)
|
||||
{
|
||||
std::cerr << "[TSL-LSP] Failed to initialize logger: " << error.what() << '\n';
|
||||
return 1;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
@@ -27,16 +52,18 @@ export int Run(int argc, char* argv[])
|
||||
lsp::core::LspServer server(config.thread_count, config.interpreter_path);
|
||||
server.Run();
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
catch (const std::exception& error)
|
||||
{
|
||||
std::cerr << "[TSL-LSP] Server fatal error: " << e.what() << std::endl;
|
||||
spdlog::error("Server fatal error: {}", e.what());
|
||||
std::cerr << "[TSL-LSP] Server fatal error: " << error.what() << '\n';
|
||||
spdlog::error("Server fatal error: {}", error.what());
|
||||
spdlog::shutdown();
|
||||
return 1;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
std::cerr << "[TSL-LSP] Server unknown fatal error" << std::endl;
|
||||
std::cerr << "[TSL-LSP] Server unknown fatal error\n";
|
||||
spdlog::error("Server unknown fatal error");
|
||||
spdlog::shutdown();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user