From 44ef62c03ae074e5c8945dd776f237c7d573e9c3 Mon Sep 17 00:00:00 2001 From: ngc2207 Date: Sun, 5 Jan 2025 08:26:13 +0800 Subject: [PATCH] fix(playground): enhance language server connection handling with support for LSP_SUPPORTED_LANGUAGES --- src/app/playground/page.tsx | 28 +++++++++++++++++----------- src/lib/lsp.ts | 2 +- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/app/playground/page.tsx b/src/app/playground/page.tsx index 0014690..05c964e 100644 --- a/src/app/playground/page.tsx +++ b/src/app/playground/page.tsx @@ -1,13 +1,13 @@ "use client"; import * as monaco from "monaco-editor"; -import { connectToLanguageServer } from "@/lib/lsp"; import { useEffect, useRef, useState } from "react"; import { Editor, loader } from "@monaco-editor/react"; import { MonacoLanguageClient } from "monaco-languageclient"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; import { COriginal, CplusplusOriginal, JavaOriginal } from "devicons-react"; +import { connectToLanguageServer, LSP_SUPPORTED_LANGUAGES } from "@/lib/lsp"; const files: { [key: string]: { name: string; language: string; value: string }; @@ -62,26 +62,32 @@ export default function PlaygroundPage() { column: lastLineLength + 1, }); editorRef.current.focus(); - if (languageClientRef.current) { + if ( + languageClientRef.current && + language in LSP_SUPPORTED_LANGUAGES + ) { await languageClientRef.current.stop(); languageClientRef.current = null; } if ( webSocketRef.current && webSocketRef.current.readyState !== WebSocket.CLOSED && - webSocketRef.current.readyState !== WebSocket.CLOSING + webSocketRef.current.readyState !== WebSocket.CLOSING && + language in LSP_SUPPORTED_LANGUAGES ) { webSocketRef.current.close(); webSocketRef.current = null; } - try { - const languageClient = await connectToLanguageServer( - language, - webSocketRef - ); - languageClientRef.current = languageClient; - } catch (error) { - console.error("Failed to connect to language server:", error); + if(language in LSP_SUPPORTED_LANGUAGES){ + try { + const languageClient = await connectToLanguageServer( + language, + webSocketRef + ); + languageClientRef.current = languageClient; + } catch (error) { + console.error("Failed to connect to language server:", error); + } } } } diff --git a/src/lib/lsp.ts b/src/lib/lsp.ts index f2f2a90..d6d22c6 100644 --- a/src/lib/lsp.ts +++ b/src/lib/lsp.ts @@ -12,7 +12,7 @@ import { RefObject } from "react"; import normalizeUrl from "normalize-url"; import { MonacoLanguageClient } from "monaco-languageclient"; -const LSP_SUPPORTED_LANGUAGES: { +export const LSP_SUPPORTED_LANGUAGES: { [key: string]: { hostname: string; port: number; path: string }; } = { c: {