mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-19 09:33:53 +00:00
66 lines
1.4 KiB
TypeScript
66 lines
1.4 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import * as Diff from 'diff';
|
|
import { DiffStat } from './tools.js';
|
|
|
|
export const DEFAULT_DIFF_OPTIONS: Diff.PatchOptions = {
|
|
context: 3,
|
|
ignoreWhitespace: true,
|
|
};
|
|
|
|
export function getDiffStat(
|
|
fileName: string,
|
|
oldStr: string,
|
|
aiStr: string,
|
|
userStr: string,
|
|
): DiffStat {
|
|
const countLines = (patch: Diff.ParsedDiff) => {
|
|
let added = 0;
|
|
let removed = 0;
|
|
patch.hunks.forEach((hunk: Diff.Hunk) => {
|
|
hunk.lines.forEach((line: string) => {
|
|
if (line.startsWith('+')) {
|
|
added++;
|
|
} else if (line.startsWith('-')) {
|
|
removed++;
|
|
}
|
|
});
|
|
});
|
|
return { added, removed };
|
|
};
|
|
|
|
const patch = Diff.structuredPatch(
|
|
fileName,
|
|
fileName,
|
|
oldStr,
|
|
aiStr,
|
|
'Current',
|
|
'Proposed',
|
|
DEFAULT_DIFF_OPTIONS,
|
|
);
|
|
const { added: aiAddedLines, removed: aiRemovedLines } = countLines(patch);
|
|
|
|
const userPatch = Diff.structuredPatch(
|
|
fileName,
|
|
fileName,
|
|
aiStr,
|
|
userStr,
|
|
'Proposed',
|
|
'User',
|
|
DEFAULT_DIFF_OPTIONS,
|
|
);
|
|
const { added: userAddedLines, removed: userRemovedLines } =
|
|
countLines(userPatch);
|
|
|
|
return {
|
|
ai_added_lines: aiAddedLines,
|
|
ai_removed_lines: aiRemovedLines,
|
|
user_added_lines: userAddedLines,
|
|
user_removed_lines: userRemovedLines,
|
|
};
|
|
}
|