Fix duplicate LOC counting due to diff_stat being passed in multiple places (#7483)

This commit is contained in:
Bryan Morgan
2025-08-31 07:41:28 -04:00
committed by GitHub
parent 18bb04c80a
commit 17044876f6
9 changed files with 52 additions and 124 deletions
+27 -25
View File
@@ -24,16 +24,16 @@ import { ApprovalMode } from '../config/config.js';
import { ensureCorrectEdit } from '../utils/editCorrector.js';
import { DEFAULT_DIFF_OPTIONS, getDiffStat } from './diffOptions.js';
import { ReadFileTool } from './read-file.js';
import { logFileOperation } from '../telemetry/loggers.js';
import { FileOperationEvent } from '../telemetry/types.js';
import { FileOperation } from '../telemetry/metrics.js';
import { getSpecificMimeType } from '../utils/fileUtils.js';
import { getLanguageFromFilePath } from '../utils/language-detection.js';
import type {
ModifiableDeclarativeTool,
ModifyContext,
} from './modifiable-tool.js';
import { IDEConnectionStatus } from '../ide/ide-client.js';
import { FileOperation } from '../telemetry/metrics.js';
import { logFileOperation } from '../telemetry/loggers.js';
import { FileOperationEvent } from '../telemetry/types.js';
import { getProgrammingLanguage } from '../telemetry/telemetry-utils.js';
import { getSpecificMimeType } from '../utils/fileUtils.js';
export function applyReplacement(
currentContent: string | null,
@@ -395,6 +395,28 @@ class EditToolInvocation implements ToolInvocation<EditToolParams, ToolResult> {
};
}
// Log file operation for telemetry (without diff_stat to avoid double-counting)
const mimetype = getSpecificMimeType(this.params.file_path);
const programmingLanguage = getLanguageFromFilePath(
this.params.file_path,
);
const extension = path.extname(this.params.file_path);
const operation = editData.isNewFile
? FileOperation.CREATE
: FileOperation.UPDATE;
logFileOperation(
this.config,
new FileOperationEvent(
EditTool.Name,
operation,
editData.newContent.split('\n').length,
mimetype,
extension,
programmingLanguage,
),
);
const llmSuccessMessageParts = [
editData.isNewFile
? `Created new file: ${this.params.file_path} with provided content.`
@@ -406,26 +428,6 @@ class EditToolInvocation implements ToolInvocation<EditToolParams, ToolResult> {
);
}
const lines = editData.newContent.split('\n').length;
const mimetype = getSpecificMimeType(this.params.file_path);
const extension = path.extname(this.params.file_path);
const programming_language = getProgrammingLanguage({
file_path: this.params.file_path,
});
logFileOperation(
this.config,
new FileOperationEvent(
EditTool.Name,
editData.isNewFile ? FileOperation.CREATE : FileOperation.UPDATE,
lines,
mimetype,
extension,
diffStat,
programming_language,
),
);
return {
llmContent: llmSuccessMessageParts.join(' '),
returnDisplay: displayResult,
-1
View File
@@ -117,7 +117,6 @@ ${result.llmContent}`;
lines,
mimetype,
path.extname(this.params.absolute_path),
undefined,
programming_language,
),
);
@@ -443,7 +443,6 @@ ${finalExclusionPatternsForDescription
lines,
mimetype,
path.extname(filePath),
undefined,
programming_language,
),
);
+21 -35
View File
@@ -35,12 +35,12 @@ import type {
ModifiableDeclarativeTool,
ModifyContext,
} from './modifiable-tool.js';
import { getSpecificMimeType } from '../utils/fileUtils.js';
import { FileOperation } from '../telemetry/metrics.js';
import { IDEConnectionStatus } from '../ide/ide-client.js';
import { getProgrammingLanguage } from '../telemetry/telemetry-utils.js';
import { logFileOperation } from '../telemetry/loggers.js';
import { FileOperationEvent } from '../telemetry/types.js';
import { FileOperation } from '../telemetry/metrics.js';
import { getSpecificMimeType } from '../utils/fileUtils.js';
import { getLanguageFromFilePath } from '../utils/language-detection.js';
/**
* Parameters for the WriteFile tool
@@ -309,6 +309,24 @@ class WriteFileToolInvocation extends BaseToolInvocation<
);
}
// Log file operation for telemetry (without diff_stat to avoid double-counting)
const mimetype = getSpecificMimeType(file_path);
const programmingLanguage = getLanguageFromFilePath(file_path);
const extension = path.extname(file_path);
const operation = isNewFile ? FileOperation.CREATE : FileOperation.UPDATE;
logFileOperation(
this.config,
new FileOperationEvent(
WriteFileTool.Name,
operation,
fileContent.split('\n').length,
mimetype,
extension,
programmingLanguage,
),
);
const displayResult: FileDiff = {
fileDiff,
fileName,
@@ -317,38 +335,6 @@ class WriteFileToolInvocation extends BaseToolInvocation<
diffStat,
};
const lines = fileContent.split('\n').length;
const mimetype = getSpecificMimeType(file_path);
const extension = path.extname(file_path); // Get extension
const programming_language = getProgrammingLanguage({ file_path });
if (isNewFile) {
logFileOperation(
this.config,
new FileOperationEvent(
WriteFileTool.Name,
FileOperation.CREATE,
lines,
mimetype,
extension,
diffStat,
programming_language,
),
);
} else {
logFileOperation(
this.config,
new FileOperationEvent(
WriteFileTool.Name,
FileOperation.UPDATE,
lines,
mimetype,
extension,
diffStat,
programming_language,
),
);
}
return {
llmContent: llmSuccessMessageParts.join(' '),
returnDisplay: displayResult,