From 85d00b64416e753c39ffd3faef5dc43d0755596c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=93=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8F=D0=B9=D0=BA=D0=B8=D0=BD?= Date: Tue, 19 May 2026 22:59:55 +0300 Subject: [PATCH] Include diagnostic ranges in VS Code MCP code checker --- .../out/tools/code_checker.js | 27 ++++++++++++++++- .../src/tools/code_checker.ts | 29 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/mcp-servers/mcp-server-vscode/out/tools/code_checker.js b/mcp-servers/mcp-server-vscode/out/tools/code_checker.js index e3674b16f..b7da5a2a1 100644 --- a/mcp-servers/mcp-server-vscode/out/tools/code_checker.js +++ b/mcp-servers/mcp-server-vscode/out/tools/code_checker.js @@ -1,4 +1,19 @@ import { DiagnosticSeverity, languages } from 'vscode'; +const serializeRange = (range) => ({ + startLineNumber: range.start.line + 1, + startColumn: range.start.character + 1, + endLineNumber: range.end.line + 1, + endColumn: range.end.character + 1, +}); +const serializeCode = (code) => { + if (typeof code === 'object' && code !== null) { + return { + value: code.value, + target: code.target.toString(), + }; + } + return code; +}; export const codeCheckerTool = (severityLevel = DiagnosticSeverity.Warning) => { const diagnosticsByFile = languages.getDiagnostics(); const aggregated = diagnosticsByFile @@ -11,6 +26,16 @@ export const codeCheckerTool = (severityLevel = DiagnosticSeverity.Warning) => { severity: DiagnosticSeverity[diag.severity], message: diag.message, source: diag.source || '', + code: serializeCode(diag.code), + range: serializeRange(diag.range), + tags: diag.tags, + relatedInformation: diag.relatedInformation?.map((info) => ({ + message: info.message, + location: { + uri: info.location.uri.toString(), + range: serializeRange(info.location.range), + }, + })), })), })); if (aggregated.length === 0) { @@ -18,4 +43,4 @@ export const codeCheckerTool = (severityLevel = DiagnosticSeverity.Warning) => { } return { content: [{ type: 'text', text: JSON.stringify(aggregated, null, 2) }], isError: false }; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZV9jaGVja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rvb2xzL2NvZGVfY2hlY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBT3ZELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLGdCQUFvQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsRUFBRTtJQUU5RixNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUdyRCxNQUFNLFVBQVUsR0FBRyxpQkFBaUI7U0FDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFDLENBQUM7U0FDL0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1FBQ2hCLFdBQVcsRUFBRSxLQUFLO2FBQ2IsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLGFBQWEsQ0FBQzthQUNoRCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDWixRQUFRLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMzQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRTtTQUM1QixDQUFDLENBQUM7S0FDVixDQUFDLENBQUMsQ0FBQztJQUVSLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUUxQixPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3JGLENBQUM7SUFHRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN0RyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWFnbm9zdGljU2V2ZXJpdHksIGxhbmd1YWdlcyB9IGZyb20gJ3ZzY29kZSc7XG5cbi8qKlxuICogUmV0cmlldmUgZGlhZ25vc3RpY3MgZm9yIHRoZSBhY3RpdmUgd29ya3NwYWNlLCB3aXRoIGZpbHRlcmluZyBieSBzZXZlcml0eSBsZXZlbC5cbiAqXG4gKiBAcGFyYW0gJ1dhcm5pbmcnIC0gTWluaW11bSBzZXZlcml0eSBsZXZlbCB0byBpbmNsdWRlIChkZWZhdWx0IGlzIFdhcm5pbmcpLlxuICovXG5leHBvcnQgY29uc3QgY29kZUNoZWNrZXJUb29sID0gKHNldmVyaXR5TGV2ZWw6IERpYWdub3N0aWNTZXZlcml0eSA9IERpYWdub3N0aWNTZXZlcml0eS5XYXJuaW5nKSA9PiB7XG4gICAgLy8gUmV0cmlldmUgZGlhZ25vc3RpY3MgZnJvbSBhbGwgZmlsZXNcbiAgICBjb25zdCBkaWFnbm9zdGljc0J5RmlsZSA9IGxhbmd1YWdlcy5nZXREaWFnbm9zdGljcygpO1xuXG4gICAgLy8gRmlsdGVyIGRpYWdub3N0aWNzIGJhc2VkIG9uIHRoZSB0YXJnZXQgc2V2ZXJpdHlcbiAgICBjb25zdCBhZ2dyZWdhdGVkID0gZGlhZ25vc3RpY3NCeUZpbGVcbiAgICAgICAgLmZpbHRlcigoW191cmksIGRpYWdzXSkgPT4gZGlhZ3Muc29tZSgoZGlhZykgPT4gZGlhZy5zZXZlcml0eSA8PSBzZXZlcml0eUxldmVsKSlcbiAgICAgICAgLm1hcCgoW3VyaSwgZGlhZ3NdKSA9PiAoe1xuICAgICAgICAgICAgZmlsZTogdXJpLmZzUGF0aCxcbiAgICAgICAgICAgIGRpYWdub3N0aWNzOiBkaWFnc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGRpYWcpID0+IGRpYWcuc2V2ZXJpdHkgPD0gc2V2ZXJpdHlMZXZlbClcbiAgICAgICAgICAgICAgICAubWFwKChkaWFnKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogRGlhZ25vc3RpY1NldmVyaXR5W2RpYWcuc2V2ZXJpdHldLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkaWFnLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZGlhZy5zb3VyY2UgfHwgJycsXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICB9KSk7XG5cbiAgICBpZiAoYWdncmVnYXRlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gSWYgbm8gZGlhZ25vc3RpY3MgZm91bmQsIHJldHVybiBhbiBlbXB0eSByZXN1bHRcbiAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiAnTm8gaXNzdWVzIGZvdW5kLicgfV0sIGlzRXJyb3I6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIGFnZ3JlZ2F0ZWQgZGlhZ25vc3RpY3MgYXMgZm9ybWF0dGVkIEpTT05cbiAgICByZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IEpTT04uc3RyaW5naWZ5KGFnZ3JlZ2F0ZWQsIG51bGwsIDIpIH1dLCBpc0Vycm9yOiBmYWxzZSB9O1xufTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZV9jaGVja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rvb2xzL2NvZGVfY2hlY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBR3ZELE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLGVBQWUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ3JDLFdBQVcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDO0lBQ3RDLGFBQWEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ2pDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDO0NBQ3JDLENBQUMsQ0FBQztBQUVILE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBd0IsRUFBRSxFQUFFO0lBQy9DLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM1QyxPQUFPO1lBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtTQUNqQyxDQUFDO0lBQ04sQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQU9GLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLGdCQUFvQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsRUFBRTtJQUU5RixNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUdyRCxNQUFNLFVBQVUsR0FBRyxpQkFBaUI7U0FDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFDLENBQUM7U0FDL0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1FBQ2hCLFdBQVcsRUFBRSxLQUFLO2FBQ2IsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLGFBQWEsQ0FBQzthQUNoRCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDWixRQUFRLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMzQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRTtZQUN6QixJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDOUIsS0FBSyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hELE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsUUFBUSxFQUFFO29CQUNOLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7b0JBQ2pDLEtBQUssRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7aUJBQzdDO2FBQ0osQ0FBQyxDQUFDO1NBQ04sQ0FBQyxDQUFDO0tBQ1YsQ0FBQyxDQUFDLENBQUM7SUFFUixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFFMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNyRixDQUFDO0lBR0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDdEcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlhZ25vc3RpY1NldmVyaXR5LCBsYW5ndWFnZXMgfSBmcm9tICd2c2NvZGUnO1xuaW1wb3J0IHR5cGUgeyBEaWFnbm9zdGljLCBSYW5nZSB9IGZyb20gJ3ZzY29kZSc7XG5cbmNvbnN0IHNlcmlhbGl6ZVJhbmdlID0gKHJhbmdlOiBSYW5nZSkgPT4gKHtcbiAgICBzdGFydExpbmVOdW1iZXI6IHJhbmdlLnN0YXJ0LmxpbmUgKyAxLFxuICAgIHN0YXJ0Q29sdW1uOiByYW5nZS5zdGFydC5jaGFyYWN0ZXIgKyAxLFxuICAgIGVuZExpbmVOdW1iZXI6IHJhbmdlLmVuZC5saW5lICsgMSxcbiAgICBlbmRDb2x1bW46IHJhbmdlLmVuZC5jaGFyYWN0ZXIgKyAxLFxufSk7XG5cbmNvbnN0IHNlcmlhbGl6ZUNvZGUgPSAoY29kZTogRGlhZ25vc3RpY1snY29kZSddKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBjb2RlID09PSAnb2JqZWN0JyAmJiBjb2RlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogY29kZS52YWx1ZSxcbiAgICAgICAgICAgIHRhcmdldDogY29kZS50YXJnZXQudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29kZTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgZGlhZ25vc3RpY3MgZm9yIHRoZSBhY3RpdmUgd29ya3NwYWNlLCB3aXRoIGZpbHRlcmluZyBieSBzZXZlcml0eSBsZXZlbC5cbiAqXG4gKiBAcGFyYW0gJ1dhcm5pbmcnIC0gTWluaW11bSBzZXZlcml0eSBsZXZlbCB0byBpbmNsdWRlIChkZWZhdWx0IGlzIFdhcm5pbmcpLlxuICovXG5leHBvcnQgY29uc3QgY29kZUNoZWNrZXJUb29sID0gKHNldmVyaXR5TGV2ZWw6IERpYWdub3N0aWNTZXZlcml0eSA9IERpYWdub3N0aWNTZXZlcml0eS5XYXJuaW5nKSA9PiB7XG4gICAgLy8gUmV0cmlldmUgZGlhZ25vc3RpY3MgZnJvbSBhbGwgZmlsZXNcbiAgICBjb25zdCBkaWFnbm9zdGljc0J5RmlsZSA9IGxhbmd1YWdlcy5nZXREaWFnbm9zdGljcygpO1xuXG4gICAgLy8gRmlsdGVyIGRpYWdub3N0aWNzIGJhc2VkIG9uIHRoZSB0YXJnZXQgc2V2ZXJpdHlcbiAgICBjb25zdCBhZ2dyZWdhdGVkID0gZGlhZ25vc3RpY3NCeUZpbGVcbiAgICAgICAgLmZpbHRlcigoW191cmksIGRpYWdzXSkgPT4gZGlhZ3Muc29tZSgoZGlhZykgPT4gZGlhZy5zZXZlcml0eSA8PSBzZXZlcml0eUxldmVsKSlcbiAgICAgICAgLm1hcCgoW3VyaSwgZGlhZ3NdKSA9PiAoe1xuICAgICAgICAgICAgZmlsZTogdXJpLmZzUGF0aCxcbiAgICAgICAgICAgIGRpYWdub3N0aWNzOiBkaWFnc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGRpYWcpID0+IGRpYWcuc2V2ZXJpdHkgPD0gc2V2ZXJpdHlMZXZlbClcbiAgICAgICAgICAgICAgICAubWFwKChkaWFnKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogRGlhZ25vc3RpY1NldmVyaXR5W2RpYWcuc2V2ZXJpdHldLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkaWFnLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZGlhZy5zb3VyY2UgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHNlcmlhbGl6ZUNvZGUoZGlhZy5jb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IHNlcmlhbGl6ZVJhbmdlKGRpYWcucmFuZ2UpLFxuICAgICAgICAgICAgICAgICAgICB0YWdzOiBkaWFnLnRhZ3MsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRJbmZvcm1hdGlvbjogZGlhZy5yZWxhdGVkSW5mb3JtYXRpb24/Lm1hcCgoaW5mbykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGluZm8ubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpOiBpbmZvLmxvY2F0aW9uLnVyaS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBzZXJpYWxpemVSYW5nZShpbmZvLmxvY2F0aW9uLnJhbmdlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgIH0pKTtcblxuICAgIGlmIChhZ2dyZWdhdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBJZiBubyBkaWFnbm9zdGljcyBmb3VuZCwgcmV0dXJuIGFuIGVtcHR5IHJlc3VsdFxuICAgICAgICByZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6ICdObyBpc3N1ZXMgZm91bmQuJyB9XSwgaXNFcnJvcjogZmFsc2UgfTtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIHJldHVybiB0aGUgYWdncmVnYXRlZCBkaWFnbm9zdGljcyBhcyBmb3JtYXR0ZWQgSlNPTlxuICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogSlNPTi5zdHJpbmdpZnkoYWdncmVnYXRlZCwgbnVsbCwgMikgfV0sIGlzRXJyb3I6IGZhbHNlIH07XG59O1xuIl19 \ No newline at end of file diff --git a/mcp-servers/mcp-server-vscode/src/tools/code_checker.ts b/mcp-servers/mcp-server-vscode/src/tools/code_checker.ts index c2f4becc0..8d45b44a9 100644 --- a/mcp-servers/mcp-server-vscode/src/tools/code_checker.ts +++ b/mcp-servers/mcp-server-vscode/src/tools/code_checker.ts @@ -1,4 +1,23 @@ import { DiagnosticSeverity, languages } from 'vscode'; +import type { Diagnostic, Range } from 'vscode'; + +const serializeRange = (range: Range) => ({ + startLineNumber: range.start.line + 1, + startColumn: range.start.character + 1, + endLineNumber: range.end.line + 1, + endColumn: range.end.character + 1, +}); + +const serializeCode = (code: Diagnostic['code']) => { + if (typeof code === 'object' && code !== null) { + return { + value: code.value, + target: code.target.toString(), + }; + } + + return code; +}; /** * Retrieve diagnostics for the active workspace, with filtering by severity level. @@ -20,6 +39,16 @@ export const codeCheckerTool = (severityLevel: DiagnosticSeverity = DiagnosticSe severity: DiagnosticSeverity[diag.severity], message: diag.message, source: diag.source || '', + code: serializeCode(diag.code), + range: serializeRange(diag.range), + tags: diag.tags, + relatedInformation: diag.relatedInformation?.map((info) => ({ + message: info.message, + location: { + uri: info.location.uri.toString(), + range: serializeRange(info.location.range), + }, + })), })), }));