♻️ refactor(cli): validate startup arguments

This commit is contained in:
csh
2026-07-11 18:07:22 +08:00
parent 9416d44d3d
commit 3642aa8b5b
7 changed files with 368 additions and 106 deletions
+37 -10
View File
@@ -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;
}