From f1e4bc8a22cefddbc49608be6492e61976f8c1af Mon Sep 17 00:00:00 2001 From: Alex Brodsky Date: Thu, 12 Mar 2026 16:19:09 -0500 Subject: [PATCH] fix: parse launch.json as jsonc --- mcp-server/package-lock.json | 7 +++++++ mcp-server/package.json | 1 + .../src/toolProviders/debug/getConfigurations.ts | 16 +++++++++++++--- package-lock.json | 4 ++-- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/mcp-server/package-lock.json b/mcp-server/package-lock.json index 18e6d25..a9fd068 100644 --- a/mcp-server/package-lock.json +++ b/mcp-server/package-lock.json @@ -12,6 +12,7 @@ "@modelcontextprotocol/sdk": "^1.9.0", "@types/express": "^5.0.1", "express": "^5.1.0", + "jsonc-parser": "^3.3.1", "pino": "^9.6.0", "uuid": "^11.1.0" }, @@ -1879,6 +1880,12 @@ "dev": true, "license": "MIT" }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", diff --git a/mcp-server/package.json b/mcp-server/package.json index 0cd3856..e9ed656 100644 --- a/mcp-server/package.json +++ b/mcp-server/package.json @@ -29,6 +29,7 @@ "@modelcontextprotocol/sdk": "^1.9.0", "@types/express": "^5.0.1", "express": "^5.1.0", + "jsonc-parser": "^3.3.1", "pino": "^9.6.0", "uuid": "^11.1.0" } diff --git a/mcp-server/src/toolProviders/debug/getConfigurations.ts b/mcp-server/src/toolProviders/debug/getConfigurations.ts index 5bd7b92..e639a0d 100644 --- a/mcp-server/src/toolProviders/debug/getConfigurations.ts +++ b/mcp-server/src/toolProviders/debug/getConfigurations.ts @@ -1,5 +1,6 @@ import * as fs from 'fs/promises'; import * as path from 'path'; +import { parse, ParseError, printParseErrorCode } from 'jsonc-parser'; import { z } from 'zod'; import * as Constants from '../../constants'; import { logger } from '../../config'; // 导入 logger @@ -60,8 +61,17 @@ export const getDebuggerConfigurationsTool = { const fileContent = await fs.readFile(launchJsonPath, 'utf-8'); try { - const jsonStringWithoutComments = fileContent.replace(/\/\/.*|\/\*[\s\S]*?\*\//g, ''); - const parsedJson: unknown = JSON.parse(jsonStringWithoutComments); + const parseErrors: ParseError[] = []; + const parsedJson: unknown = parse(fileContent, parseErrors, { + allowTrailingComma: true, + }); + + if (parseErrors.length > 0) { + const firstParseError = parseErrors[0]; + const errorMsg = `launch.json file format error: ${printParseErrorCode(firstParseError.error)} at offset ${firstParseError.offset}`; + logger.error(`[MCP Tool - ${toolName}] Error parsing launch.json: ${errorMsg}`); // 使用 logger + return { status: Constants.IPC_STATUS_ERROR, message: errorMsg }; + } if ( typeof parsedJson === 'object' && @@ -106,4 +116,4 @@ export const getDebuggerConfigurationsTool = { return { status: Constants.IPC_STATUS_ERROR, message: errorMsg }; } } -}; \ No newline at end of file +}; diff --git a/package-lock.json b/package-lock.json index f07f41e..435b209 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-debugger-mcp", - "version": "0.0.1", + "version": "1.0.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-debugger-mcp", - "version": "0.0.1", + "version": "1.0.5", "dependencies": { "eventsource": "^2.0.2" },