tabby/clients/tabby-agent/src/postprocess/calculateReplaceRangeByBrac...

36 lines
1.3 KiB
TypeScript
Raw Normal View History

import { CompletionContext, CompletionResponse } from "../Agent";
import { isBlank, findUnpairedAutoClosingChars } from "../utils";
import { logger } from "./base";
export function calculateReplaceRangeByBracketStack(
response: CompletionResponse,
context: CompletionContext,
): CompletionResponse {
const { suffixLines } = context;
const suffixText = suffixLines[0]?.trimEnd() || "";
if (isBlank(suffixText)) {
return response;
}
for (const choice of response.choices) {
const completionText = choice.text.slice(context.position - choice.replaceRange.start);
const unpaired = findUnpairedAutoClosingChars(completionText);
if (isBlank(unpaired)) {
continue;
}
if (suffixText.startsWith(unpaired)) {
choice.replaceRange.end = context.position + unpaired.length;
logger.trace(
{ context, completion: choice.text, range: choice.replaceRange, unpaired },
"Adjust replace range by bracket stack",
);
} else if (unpaired.startsWith(suffixText)) {
choice.replaceRange.end = context.position + suffixText.length;
logger.trace(
{ context, completion: choice.text, range: choice.replaceRange, unpaired },
"Adjust replace range by bracket stack",
);
}
}
return response;
}