feat(server): 实现 LSP 管理 REST API
- 新增 /api/lsp/servers 端点,列出所有语言服务器 - 新增 /api/lsp/servers/:id 端点,获取服务器详情 - 新增 /api/lsp/servers/:id/install 端点,安装服务器 - 新增 /api/lsp/servers/:id/start 端点,启动服务器 - 新增 /api/lsp/servers/:id/stop 端点,停止服务器 - 新增 /api/lsp/diagnostics 端点,获取诊断信息 - 新增 /api/lsp/running 端点,获取运行中服务器列表 - core/lsp 添加 stopServer, getRunningServers, isServerRunning 方法
This commit is contained in:
@@ -88,10 +88,38 @@ export type {
|
||||
} from './permission/index.js';
|
||||
|
||||
// LSP
|
||||
export { initLSP, shutdownLSP } from './lsp/index.js';
|
||||
export {
|
||||
initLSP,
|
||||
shutdownLSP,
|
||||
getLSPManager,
|
||||
touchFile,
|
||||
getDiagnostics,
|
||||
getFileDiagnostics,
|
||||
formatDiagnostics,
|
||||
getFormattedFileDiagnostics,
|
||||
stopServer,
|
||||
getRunningServers,
|
||||
isServerRunning,
|
||||
listServers,
|
||||
installServer,
|
||||
getLanguageId,
|
||||
isLanguageSupported,
|
||||
getSupportedExtensions,
|
||||
getServerConfig,
|
||||
hasServerConfig,
|
||||
getSupportedLanguages,
|
||||
getUniqueServers,
|
||||
} from './lsp/index.js';
|
||||
|
||||
export type {
|
||||
FileDiagnostic,
|
||||
ServerConfig,
|
||||
InstallConfig,
|
||||
ServerStatus,
|
||||
} from './lsp/index.js';
|
||||
|
||||
export {
|
||||
printServerList,
|
||||
installServer,
|
||||
installAllServers,
|
||||
showServerInfo,
|
||||
} from './lsp/cli.js';
|
||||
|
||||
@@ -411,4 +411,24 @@ export class LSPClientManager {
|
||||
getRunningServers(): LanguageId[] {
|
||||
return Array.from(this.clients.keys());
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止指定语言的服务器
|
||||
*/
|
||||
async stopServer(languageId: LanguageId): Promise<boolean> {
|
||||
const client = this.clients.get(languageId);
|
||||
if (!client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
client.connection.dispose();
|
||||
client.process.kill();
|
||||
this.clients.delete(languageId);
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error(`停止语言服务器失败 (${languageId}):`, error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,6 +115,36 @@ export async function getFormattedFileDiagnostics(filePath: string): Promise<str
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止指定语言的服务器
|
||||
*/
|
||||
export async function stopServer(languageId: string): Promise<boolean> {
|
||||
if (!lspManager) {
|
||||
return false;
|
||||
}
|
||||
return lspManager.stopServer(languageId as import('./language.js').LanguageId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取运行中的服务器列表
|
||||
*/
|
||||
export function getRunningServers(): string[] {
|
||||
if (!lspManager) {
|
||||
return [];
|
||||
}
|
||||
return lspManager.getRunningServers();
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查服务器是否运行中
|
||||
*/
|
||||
export function isServerRunning(languageId: string): boolean {
|
||||
if (!lspManager) {
|
||||
return false;
|
||||
}
|
||||
return lspManager.isServerRunning(languageId as import('./language.js').LanguageId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭 LSP 系统
|
||||
*/
|
||||
@@ -127,6 +157,17 @@ export async function shutdownLSP(): Promise<void> {
|
||||
|
||||
// 导出类型
|
||||
export type { FileDiagnostic } from './client.js';
|
||||
export type { ServerConfig, InstallConfig } from './server.js';
|
||||
export type { ServerStatus } from './cli.js';
|
||||
|
||||
// 从 language.js 导出
|
||||
export { getLanguageId, isLanguageSupported, getSupportedExtensions } from './language.js';
|
||||
export { getServerConfig, hasServerConfig, getSupportedLanguages } from './server.js';
|
||||
|
||||
// 从 server.js 导出
|
||||
export { getServerConfig, hasServerConfig, getSupportedLanguages, getUniqueServers } from './server.js';
|
||||
|
||||
// 从 client.js 导出
|
||||
export { LSPClientManager } from './client.js';
|
||||
|
||||
// 从 cli.js 导出
|
||||
export { listServers, installServer } from './cli.js';
|
||||
|
||||
Reference in New Issue
Block a user