Browse Source

Only show warning if truncation comment is in new content

Saoud Rizwan 1 year ago
parent
commit
717d83b5cb
2 changed files with 15 additions and 11 deletions
  1. 1 2
      src/core/Cline.ts
  2. 14 9
      src/integrations/editor/detect-omission.ts

+ 1 - 2
src/core/Cline.ts

@@ -1075,8 +1075,7 @@ export class Cline {
 								await this.diffViewProvider.update(newContent, true)
 								await this.diffViewProvider.update(newContent, true)
 								await delay(300) // wait for diff view to update
 								await delay(300) // wait for diff view to update
 								this.diffViewProvider.scrollToFirstDiff()
 								this.diffViewProvider.scrollToFirstDiff()
-
-								showOmissionWarning(newContent)
+								showOmissionWarning(this.diffViewProvider.originalContent || "", newContent)
 
 
 								const completeMessage = JSON.stringify({
 								const completeMessage = JSON.stringify({
 									...sharedMessageProps,
 									...sharedMessageProps,

+ 14 - 9
src/integrations/editor/detect-omission.ts

@@ -2,12 +2,14 @@ import * as vscode from "vscode"
 
 
 /**
 /**
  * Detects potential AI-generated code omissions in the given file content.
  * Detects potential AI-generated code omissions in the given file content.
- * @param fileContent The content of the file to check.
+ * @param originalFileContent The original content of the file.
+ * @param newFileContent The new content of the file to check.
  * @returns True if a potential omission is detected, false otherwise.
  * @returns True if a potential omission is detected, false otherwise.
  */
  */
-function detectCodeOmission(fileContent: string): boolean {
-	const lines = fileContent.split("\n")
-	const omissionKeywords = ["remain", "remains", "unchanged", "rest", "previous", "..."]
+function detectCodeOmission(originalFileContent: string, newFileContent: string): boolean {
+	const originalLines = originalFileContent.split("\n")
+	const newLines = newFileContent.split("\n")
+	const omissionKeywords = ["remain", "remains", "unchanged", "rest", "previous", "existing", "..."]
 
 
 	const commentPatterns = [
 	const commentPatterns = [
 		/^\s*\/\//, // Single-line comment for most languages
 		/^\s*\/\//, // Single-line comment for most languages
@@ -16,11 +18,13 @@ function detectCodeOmission(fileContent: string): boolean {
 		/^\s*<!--/, // HTML comment opening
 		/^\s*<!--/, // HTML comment opening
 	]
 	]
 
 
-	for (const line of lines) {
+	for (const line of newLines) {
 		if (commentPatterns.some((pattern) => pattern.test(line))) {
 		if (commentPatterns.some((pattern) => pattern.test(line))) {
 			const words = line.toLowerCase().split(/\s+/)
 			const words = line.toLowerCase().split(/\s+/)
 			if (omissionKeywords.some((keyword) => words.includes(keyword))) {
 			if (omissionKeywords.some((keyword) => words.includes(keyword))) {
-				return true
+				if (!originalLines.includes(line)) {
+					return true
+				}
 			}
 			}
 		}
 		}
 	}
 	}
@@ -30,10 +34,11 @@ function detectCodeOmission(fileContent: string): boolean {
 
 
 /**
 /**
  * Shows a warning in VSCode if a potential code omission is detected.
  * Shows a warning in VSCode if a potential code omission is detected.
- * @param fileContent The content of the file to check.
+ * @param originalFileContent The original content of the file.
+ * @param newFileContent The new content of the file to check.
  */
  */
-export function showOmissionWarning(fileContent: string): void {
-	if (detectCodeOmission(fileContent)) {
+export function showOmissionWarning(originalFileContent: string, newFileContent: string): void {
+	if (detectCodeOmission(originalFileContent, newFileContent)) {
 		vscode.window
 		vscode.window
 			.showWarningMessage(
 			.showWarningMessage(
 				"Potential code truncation detected. This happens when the AI reaches its max output limit.",
 				"Potential code truncation detected. This happens when the AI reaches its max output limit.",