diff --git a/src/app/page.tsx b/src/app/page.tsx index 3eee014..3fd1ab6 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,101 +1,88 @@ -import Image from "next/image"; +"use client"; + +import { + toSocket, + WebSocketMessageReader, + WebSocketMessageWriter, +} from "vscode-ws-jsonrpc"; +import { useEffect } from "react"; +import dynamic from "next/dynamic"; +import normalizeUrl from "normalize-url"; +import { Skeleton } from "@/components/ui/skeleton"; + +const DynamicEditor = dynamic( + async () => { + const monaco = await import("monaco-editor"); + const { loader, Editor } = await import("@monaco-editor/react"); + + loader.config({ monaco }); + + return Editor; + }, + { ssr: false } +); export default function Home() { - return ( -
-
- Next.js logo -
    -
  1. - Get started by editing{" "} - - src/app/page.tsx - - . -
  2. -
  3. Save and see your changes instantly.
  4. -
+ useEffect(() => { + const url = normalizeUrl("ws://localhost:4594/clangd"); + const webSocket = new WebSocket(url); -
- - Vercel logomark - Deploy now - - - Read our docs - -
-
- + webSocket.onopen = async () => { + const socket = toSocket(webSocket); + const reader = new WebSocketMessageReader(socket); + const writer = new WebSocketMessageWriter(socket); + + const { MonacoLanguageClient } = await import("monaco-languageclient"); + const { ErrorAction, CloseAction } = await import( + "vscode-languageclient" + ); + + const languageClient = new MonacoLanguageClient({ + name: "C Language Client", + clientOptions: { + documentSelector: ["c"], + errorHandler: { + error: () => ({ action: ErrorAction.Continue }), + closed: () => ({ action: CloseAction.DoNotRestart }), + }, + }, + connectionProvider: { + get: () => Promise.resolve({ reader, writer }), + }, + }); + + languageClient.start(); + reader.onClose(() => languageClient.stop()); + }; + + webSocket.onerror = (event) => { + console.error("WebSocket error observed:", event); + }; + + webSocket.onclose = (event) => { + console.log("WebSocket closed:", event); + }; + + return () => { + webSocket.close(); + }; + }, []); + + return ( +
+ { + markers.forEach((marker) => + console.log("onValidate:", marker.message) + ); + }} + options={{ automaticLayout: true }} + loading={} + />
); }