refactor(problem-editor): modify LSP connection logic to manage WebSocket state

This commit is contained in:
cfngc4594 2025-03-23 23:51:58 +08:00
parent 1796d21a09
commit 09a8276d39

View File

@ -32,7 +32,7 @@ export function CodeEditor() {
hydrated, hydrated,
editor, editor,
setEditor, setEditor,
setMonacoLanguageClient, setWebSocket,
currentLang, currentLang,
currentPath, currentPath,
currentTheme, currentTheme,
@ -52,19 +52,19 @@ export function CodeEditor() {
if (monacoLanguageClientRef.current) { if (monacoLanguageClientRef.current) {
monacoLanguageClientRef.current.stop(); monacoLanguageClientRef.current.stop();
monacoLanguageClientRef.current = null; monacoLanguageClientRef.current = null;
setMonacoLanguageClient(null); setWebSocket(null);
} }
if (!currentEditorLanguageConfig || !currentLanguageServerConfig) return; if (!currentEditorLanguageConfig || !currentLanguageServerConfig) return;
// Create a new language client // Create a new language client
try { try {
const monacoLanguageClient = await connectToLanguageServer( const { client: monacoLanguageClient, webSocket } = await connectToLanguageServer(
currentEditorLanguageConfig, currentEditorLanguageConfig,
currentLanguageServerConfig currentLanguageServerConfig
); );
monacoLanguageClientRef.current = monacoLanguageClient; monacoLanguageClientRef.current = monacoLanguageClient;
setMonacoLanguageClient(monacoLanguageClient); setWebSocket(webSocket);
} catch (error) { } catch (error) {
console.error("Failed to connect to LSP:", error); console.error("Failed to connect to LSP:", error);
} }
@ -73,7 +73,7 @@ export function CodeEditor() {
currentLang, currentLang,
currentLanguageServerConfig, currentLanguageServerConfig,
editor, editor,
setMonacoLanguageClient, setWebSocket,
]); ]);
// Reconnect to the LSP whenever language or lspConfig changes // Reconnect to the LSP whenever language or lspConfig changes
@ -87,10 +87,10 @@ export function CodeEditor() {
if (monacoLanguageClientRef.current) { if (monacoLanguageClientRef.current) {
monacoLanguageClientRef.current.stop(); monacoLanguageClientRef.current.stop();
monacoLanguageClientRef.current = null; monacoLanguageClientRef.current = null;
setMonacoLanguageClient(null); setWebSocket(null);
} }
}; };
}, [setMonacoLanguageClient]); }, [setWebSocket]);
const handleEditorWillMount = useCallback((monaco: Monaco) => { const handleEditorWillMount = useCallback((monaco: Monaco) => {
shikiToMonaco(highlighter, monaco); shikiToMonaco(highlighter, monaco);