mirror of
https://github.com/microsoft/vscode.git
synced 2026-07-10 16:58:55 -05:00
Fix create_file duplicating content when file deleted but doc in memory (#311500)
This commit is contained in:
@@ -21,7 +21,7 @@ import { extname } from '../../../util/vs/base/common/resources';
|
||||
import { count } from '../../../util/vs/base/common/strings';
|
||||
import { URI } from '../../../util/vs/base/common/uri';
|
||||
import { IInstantiationService } from '../../../util/vs/platform/instantiation/common/instantiation';
|
||||
import { Position as ExtPosition, LanguageModelPromptTsxPart, LanguageModelTextPart, LanguageModelToolResult, MarkdownString, TextEdit } from '../../../vscodeTypes';
|
||||
import { Position as ExtPosition, Range as ExtRange, LanguageModelPromptTsxPart, LanguageModelTextPart, LanguageModelToolResult, MarkdownString, TextEdit } from '../../../vscodeTypes';
|
||||
import { CodeBlockProcessor } from '../../codeBlocks/node/codeBlockProcessor';
|
||||
import { IBuildPromptContext } from '../../prompt/common/intents';
|
||||
import { renderPromptElementJSON } from '../../prompts/node/base/promptRenderer';
|
||||
@@ -114,7 +114,15 @@ export class CreateFileTool implements ICopilotTool<ICreateFileParams> {
|
||||
this.sendTelemetry(options.chatRequestId, modelId, fileExtension);
|
||||
} else {
|
||||
const content = removeLeadingFilepathComment(options.input.content, languageId, options.input.filePath);
|
||||
this._promptContext.stream.textEdit(uri, TextEdit.insert(new ExtPosition(0, 0), content));
|
||||
// When the file has been deleted from disk but VS Code still holds a stale
|
||||
// in-memory doc with content, use a full-document replace so the old buffer
|
||||
// is overwritten rather than prepended to (https://github.com/microsoft/vscode/issues/311043).
|
||||
if (!fileExists && doc && doc.getText().length > 0) {
|
||||
const lastLine = doc.lineCount - 1;
|
||||
this._promptContext.stream.textEdit(uri, TextEdit.replace(new ExtRange(0, 0, lastLine, doc.lineAt(lastLine).text.length), content));
|
||||
} else {
|
||||
this._promptContext.stream.textEdit(uri, TextEdit.insert(new ExtPosition(0, 0), content));
|
||||
}
|
||||
this._promptContext.stream.textEdit(uri, true);
|
||||
this.sendTelemetry(options.chatRequestId, modelId, fileExtension);
|
||||
return new LanguageModelToolResult([
|
||||
|
||||
Reference in New Issue
Block a user