summaryrefslogtreecommitdiffhomepage
path: root/js/src/tool/diagnostics.ts
blob: 3610c7781d9a71e50ca385497eb929b23ae072c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { z } from "zod";
import { Tool } from "./tool";
import path from "node:path";
import { LSP } from "../lsp";
import { App } from "../app";

export const DiagnosticsTool = Tool.define({
  name: "diagnostics",
  description: `Get diagnostics for a file and/or project.

WHEN TO USE THIS TOOL:
- Use when you need to check for errors or warnings in your code
- Helpful for debugging and ensuring code quality
- Good for getting a quick overview of issues in a file or project

HOW TO USE:
- Provide a path to a file to get diagnostics for that file
- Results are displayed in a structured format with severity levels

FEATURES:
- Displays errors, warnings, and hints
- Groups diagnostics by severity
- Provides detailed information about each diagnostic

LIMITATIONS:
- Results are limited to the diagnostics provided by the LSP clients
- May not cover all possible issues in the code
- Does not provide suggestions for fixing issues

TIPS:
- Use in conjunction with other tools for a comprehensive code review
- Combine with the LSP client for real-time diagnostics`,
  parameters: z.object({
    path: z.string().describe("The path to the file to get diagnostics."),
  }),
  execute: async (args) => {
    const app = await App.use();
    const normalized = path.isAbsolute(args.path)
      ? args.path
      : path.join(app.root, args.path);
    await LSP.file(normalized);
    const diagnostics = await LSP.diagnostics();
    const file = diagnostics[normalized];
    return {
      metadata: {
        diagnostics,
      },
      output: file?.length
        ? file.map(LSP.Diagnostic.pretty).join("\n")
        : "No errors found",
    };
  },
});