Skip to content

Commit 0325eaa

Browse files
hannesrudolphdaniel-lxs
authored andcommitted
feat: Add settings to control diagnostic messages (#5524)
- Add includeDiagnosticMessages toggle setting - Add maxDiagnosticMessages slider setting (1-100) - Update diagnostic processing to respect settings - Add UI controls in Context Management settings - Update all 17 language translations - Add comprehensive unit tests - Fix default value consistency
1 parent d720d35 commit 0325eaa

38 files changed

+802
-377
lines changed

packages/types/src/global-settings.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ export const globalSettingsSchema = z.object({
7272
autoCondenseContextPercent: z.number().optional(),
7373
maxConcurrentFileReads: z.number().optional(),
7474

75+
includeDiagnosticMessages: z.boolean().optional(),
76+
maxDiagnosticMessages: z.number().optional(),
77+
7578
browserToolEnabled: z.boolean().optional(),
7679
browserViewportSize: z.string().optional(),
7780
screenshotQuality: z.number().optional(),
@@ -261,6 +264,9 @@ export const EVALS_SETTINGS: RooCodeSettings = {
261264
showRooIgnoredFiles: true,
262265
maxReadFileLine: -1, // -1 to enable full file reading.
263266

267+
includeDiagnosticMessages: true,
268+
maxDiagnosticMessages: 50,
269+
264270
language: "en",
265271
telemetrySetting: "enabled",
266272

src/core/mentions/index.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ export async function parseMentions(
8080
fileContextTracker?: FileContextTracker,
8181
rooIgnoreController?: RooIgnoreController,
8282
showRooIgnoredFiles: boolean = true,
83+
includeDiagnosticMessages: boolean = true,
84+
maxDiagnosticMessages: number = 5,
8385
): Promise<string> {
8486
const mentions: Set<string> = new Set()
8587
let parsedText = text.replace(mentionRegexGlobal, (match, mention) => {
@@ -165,7 +167,7 @@ export async function parseMentions(
165167
}
166168
} else if (mention === "problems") {
167169
try {
168-
const problems = await getWorkspaceProblems(cwd)
170+
const problems = await getWorkspaceProblems(cwd, includeDiagnosticMessages, maxDiagnosticMessages)
169171
parsedText += `\n\n<workspace_diagnostics>\n${problems}\n</workspace_diagnostics>`
170172
} catch (error) {
171173
parsedText += `\n\n<workspace_diagnostics>\nError fetching diagnostics: ${error.message}\n</workspace_diagnostics>`
@@ -286,12 +288,18 @@ async function getFileOrFolderContent(
286288
}
287289
}
288290

289-
async function getWorkspaceProblems(cwd: string): Promise<string> {
291+
async function getWorkspaceProblems(
292+
cwd: string,
293+
includeDiagnosticMessages: boolean = true,
294+
maxDiagnosticMessages: number = 5,
295+
): Promise<string> {
290296
const diagnostics = vscode.languages.getDiagnostics()
291297
const result = await diagnosticsToProblemsString(
292298
diagnostics,
293299
[vscode.DiagnosticSeverity.Error, vscode.DiagnosticSeverity.Warning],
294300
cwd,
301+
includeDiagnosticMessages,
302+
maxDiagnosticMessages,
295303
)
296304
if (!result) {
297305
return "No errors or warnings detected."

src/core/mentions/processUserContentMentions.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,17 @@ export async function processUserContentMentions({
1313
fileContextTracker,
1414
rooIgnoreController,
1515
showRooIgnoredFiles = true,
16+
includeDiagnosticMessages = true,
17+
maxDiagnosticMessages = 5,
1618
}: {
1719
userContent: Anthropic.Messages.ContentBlockParam[]
1820
cwd: string
1921
urlContentFetcher: UrlContentFetcher
2022
fileContextTracker: FileContextTracker
2123
rooIgnoreController?: any
2224
showRooIgnoredFiles?: boolean
25+
includeDiagnosticMessages?: boolean
26+
maxDiagnosticMessages?: number
2327
}) {
2428
// Process userContent array, which contains various block types:
2529
// TextBlockParam, ImageBlockParam, ToolUseBlockParam, and ToolResultBlockParam.
@@ -46,6 +50,8 @@ export async function processUserContentMentions({
4650
fileContextTracker,
4751
rooIgnoreController,
4852
showRooIgnoredFiles,
53+
includeDiagnosticMessages,
54+
maxDiagnosticMessages,
4955
),
5056
}
5157
}
@@ -63,6 +69,8 @@ export async function processUserContentMentions({
6369
fileContextTracker,
6470
rooIgnoreController,
6571
showRooIgnoredFiles,
72+
includeDiagnosticMessages,
73+
maxDiagnosticMessages,
6674
),
6775
}
6876
}
@@ -81,6 +89,8 @@ export async function processUserContentMentions({
8189
fileContextTracker,
8290
rooIgnoreController,
8391
showRooIgnoredFiles,
92+
includeDiagnosticMessages,
93+
maxDiagnosticMessages,
8494
),
8595
}
8696
}

src/core/task/Task.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1225,7 +1225,11 @@ export class Task extends EventEmitter<ClineEvents> {
12251225
}),
12261226
)
12271227

1228-
const { showRooIgnoredFiles = true } = (await this.providerRef.deref()?.getState()) ?? {}
1228+
const {
1229+
showRooIgnoredFiles = true,
1230+
includeDiagnosticMessages = true,
1231+
maxDiagnosticMessages = 50,
1232+
} = (await this.providerRef.deref()?.getState()) ?? {}
12291233

12301234
const parsedUserContent = await processUserContentMentions({
12311235
userContent,
@@ -1234,6 +1238,8 @@ export class Task extends EventEmitter<ClineEvents> {
12341238
fileContextTracker: this.fileContextTracker,
12351239
rooIgnoreController: this.rooIgnoreController,
12361240
showRooIgnoredFiles,
1241+
includeDiagnosticMessages,
1242+
maxDiagnosticMessages,
12371243
})
12381244

12391245
const environmentDetails = await getEnvironmentDetails(this, includeFileDetails)

src/core/tools/__tests__/writeToFileTool.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ describe("writeToFileTool", () => {
157157
finalContent: "final content",
158158
}),
159159
scrollToFirstDiff: vi.fn(),
160+
updateDiagnosticSettings: vi.fn(),
160161
pushToolWriteResult: vi.fn().mockImplementation(async function (
161162
this: any,
162163
task: any,

src/core/tools/applyDiffTool.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,14 @@ export async function applyDiffToolLegacy(
142142
cline.consecutiveMistakeCount = 0
143143
cline.consecutiveMistakeCountForApplyDiff.delete(relPath)
144144

145+
// Get diagnostic settings from state
146+
const state = await cline.providerRef?.deref()?.getState()
147+
const includeDiagnosticMessages = state?.includeDiagnosticMessages ?? true
148+
const maxDiagnosticMessages = state?.maxDiagnosticMessages
149+
150+
// Update DiffViewProvider with diagnostic settings
151+
cline.diffViewProvider.updateDiagnosticSettings(includeDiagnosticMessages, maxDiagnosticMessages)
152+
145153
// Show diff view before asking for approval
146154
cline.diffViewProvider.editType = "modify"
147155
await cline.diffViewProvider.open(relPath)

src/core/tools/insertContentTool.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,15 @@ export async function insertContentTool(
9898

9999
cline.diffViewProvider.editType = fileExists ? "modify" : "create"
100100
cline.diffViewProvider.originalContent = fileContent
101+
102+
// Update diagnostic settings from global state
103+
const state = await cline.providerRef?.deref()?.getState()
104+
if (state) {
105+
cline.diffViewProvider.updateDiagnosticSettings(
106+
state.includeDiagnosticMessages ?? true,
107+
state.maxDiagnosticMessages ?? 5,
108+
)
109+
}
101110
const lines = fileExists ? fileContent.split("\n") : []
102111

103112
const updatedContent = insertGroups(lines, [

src/core/tools/searchAndReplaceTool.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,15 @@ export async function searchAndReplaceTool(
191191
cline.diffViewProvider.editType = "modify"
192192
cline.diffViewProvider.originalContent = fileContent
193193

194+
// Update diagnostic settings from global state
195+
const state = await cline.providerRef?.deref()?.getState()
196+
if (state) {
197+
cline.diffViewProvider.updateDiagnosticSettings(
198+
state.includeDiagnosticMessages ?? true,
199+
state.maxDiagnosticMessages ?? 5,
200+
)
201+
}
202+
194203
// Generate and validate diff
195204
const diff = formatResponse.createPrettyPatch(validRelPath, fileContent, newContent)
196205
if (!diff) {

src/core/tools/writeToFileTool.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@ export async function writeToFileTool(
9797
isProtected: isWriteProtected,
9898
}
9999

100+
// Get diagnostic settings from state
101+
const state = await cline.providerRef?.deref()?.getState()
102+
const includeDiagnosticMessages = state?.includeDiagnosticMessages ?? true
103+
const maxDiagnosticMessages = state?.maxDiagnosticMessages
104+
105+
// Update DiffViewProvider with diagnostic settings
106+
cline.diffViewProvider.updateDiagnosticSettings(includeDiagnosticMessages, maxDiagnosticMessages)
107+
100108
try {
101109
if (block.partial) {
102110
// update gui message

src/core/webview/ClineProvider.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1726,6 +1726,9 @@ export class ClineProvider
17261726
codebaseIndexSearchMinScore: stateValues.codebaseIndexConfig?.codebaseIndexSearchMinScore,
17271727
},
17281728
profileThresholds: stateValues.profileThresholds ?? {},
1729+
// Add diagnostic message settings
1730+
includeDiagnosticMessages: stateValues.includeDiagnosticMessages ?? true,
1731+
maxDiagnosticMessages: stateValues.maxDiagnosticMessages ?? 5,
17291732
}
17301733
}
17311734

0 commit comments

Comments
 (0)