Skip to content

Commit 544dc36

Browse files
committed
nes: refactor: more refactoring
1 parent 5332344 commit 544dc36

File tree

2 files changed

+26
-19
lines changed

2 files changed

+26
-19
lines changed

src/extension/xtab/node/xtabCurrentDocument.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { Position } from '../../../util/vs/editor/common/core/position';
7-
import { Lazy } from '../../../util/vs/base/common/lazy';
87
import { StringText } from '../../../util/vs/editor/common/core/text/abstractText';
8+
import { PositionOffsetTransformer } from '../../../util/vs/editor/common/core/text/positionToOffsetImpl';
99

1010
export class CurrentDocument {
1111

12-
public readonly lines: Lazy<string[]>;
12+
public readonly lines: string[];
1313
public readonly cursorOffset: number;
1414

15+
public readonly transformer: PositionOffsetTransformer;
16+
1517
/**
1618
* The 0-based line number of the cursor.
1719
*/
@@ -21,8 +23,9 @@ export class CurrentDocument {
2123
public readonly content: StringText,
2224
public readonly cursorPosition: Position,
2325
) {
24-
this.lines = new Lazy(() => content.getLines());
25-
this.cursorOffset = content.getTransformer().getOffset(cursorPosition);
26+
this.lines = content.getLines();
27+
this.transformer = content.getTransformer();
28+
this.cursorOffset = this.transformer.getOffset(cursorPosition);
2629
this.cursorLineOffset = this.cursorPosition.lineNumber - 1;
2730
}
2831
}

src/extension/xtab/node/xtabProvider.ts

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ import { editWouldDeleteWhatWasJustInserted } from '../../inlineEdits/common/ghN
5050
import { getOrDeduceSelectionFromLastEdit } from '../../inlineEdits/common/nearbyCursorInlineEditProvider';
5151
import { IgnoreImportChangesAspect } from '../../inlineEdits/node/importFiltering';
5252
import { createTaggedCurrentFileContentUsingPagedClipping, getUserPrompt, N_LINES_ABOVE, N_LINES_AS_CONTEXT, N_LINES_BELOW, nes41Miniv3SystemPrompt, PromptPieces, PromptTags, simplifiedPrompt, systemPromptTemplate, unifiedModelSystemPrompt, xtab275SystemPrompt } from '../common/promptCrafting';
53+
import { CurrentDocument } from './xtabCurrentDocument';
5354
import { XtabEndpoint } from './xtabEndpoint';
5455
import { linesWithBackticksRemoved, toLines } from './xtabUtils';
55-
import { CurrentDocument } from './xtabCurrentDocument';
5656

5757
namespace ResponseTags {
5858
export const NO_CHANGE = {
@@ -232,22 +232,22 @@ export class XtabProvider implements IStatelessNextEditProvider {
232232

233233
const currentDocument = new CurrentDocument(activeDocument.documentAfterEdits, cursorPosition);
234234

235-
const cursorLine = currentDocument.lines.value[currentDocument.cursorLineOffset];
235+
const cursorLine = currentDocument.lines[currentDocument.cursorLineOffset];
236236
const isCursorAtEndOfLine = cursorPosition.column === cursorLine.trimEnd().length;
237237
if (isCursorAtEndOfLine) {
238238
delaySession.setExtraDebounce(this.configService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsExtraDebounceEndOfLine, this.expService));
239239
}
240240
telemetryBuilder.setIsCursorAtLineEnd(isCursorAtEndOfLine);
241241

242-
const areaAroundEditWindowLinesRange = this.computeAreaAroundEditWindowLinesRange(currentDocument.lines.value, currentDocument.cursorLineOffset);
242+
const areaAroundEditWindowLinesRange = this.computeAreaAroundEditWindowLinesRange(currentDocument);
243243

244-
const editWindowLinesRange = this.computeEditWindowLinesRange(currentDocument.lines.value, currentDocument.cursorLineOffset, request, retryState);
244+
const editWindowLinesRange = this.computeEditWindowLinesRange(currentDocument, request, retryState);
245245

246246
const cursorOriginalLinesOffset = Math.max(0, currentDocument.cursorLineOffset - editWindowLinesRange.start);
247-
const editWindowLastLineLength = activeDocument.documentAfterEdits.getTransformer().getLineLength(editWindowLinesRange.endExclusive);
248-
const editWindow = activeDocument.documentAfterEdits.getTransformer().getOffsetRange(new Range(editWindowLinesRange.start + 1, 1, editWindowLinesRange.endExclusive, editWindowLastLineLength + 1));
247+
const editWindowLastLineLength = currentDocument.transformer.getLineLength(editWindowLinesRange.endExclusive);
248+
const editWindow = currentDocument.transformer.getOffsetRange(new Range(editWindowLinesRange.start + 1, 1, editWindowLinesRange.endExclusive, editWindowLastLineLength + 1));
249249

250-
const editWindowLines = currentDocument.lines.value.slice(editWindowLinesRange.start, editWindowLinesRange.endExclusive);
250+
const editWindowLines = currentDocument.lines.slice(editWindowLinesRange.start, editWindowLinesRange.endExclusive);
251251

252252
// Expected: editWindow.substring(activeDocument.documentAfterEdits.value) === editWindowLines.join('\n')
253253

@@ -390,8 +390,8 @@ export class XtabProvider implements IStatelessNextEditProvider {
390390
].join('\n');
391391

392392
const currentFileContentLines = opts.includeLineNumbers
393-
? addLineNumbers(currentDocument.lines.value)
394-
: currentDocument.lines.value;
393+
? addLineNumbers(currentDocument.lines)
394+
: currentDocument.lines;
395395

396396
let areaAroundCodeToEditForCurrentFile: string;
397397
if (promptOptions.currentFile.includeTags) {
@@ -816,14 +816,18 @@ export class XtabProvider implements IStatelessNextEditProvider {
816816
return;
817817
}
818818

819-
private computeAreaAroundEditWindowLinesRange(currentDocLines: string[], cursorLine: number): OffsetRange {
819+
private computeAreaAroundEditWindowLinesRange(currentDocument: CurrentDocument): OffsetRange {
820+
const cursorLine = currentDocument.cursorLineOffset;
820821
const areaAroundStart = Math.max(0, cursorLine - N_LINES_AS_CONTEXT);
821-
const areaAroundEndExcl = Math.min(currentDocLines.length, cursorLine + N_LINES_AS_CONTEXT + 1);
822+
const areaAroundEndExcl = Math.min(currentDocument.lines.length, cursorLine + N_LINES_AS_CONTEXT + 1);
822823

823824
return new OffsetRange(areaAroundStart, areaAroundEndExcl);
824825
}
825826

826-
private computeEditWindowLinesRange(currentDocLines: string[], cursorLine: number, request: StatelessNextEditRequest, retryState: RetryState): OffsetRange {
827+
private computeEditWindowLinesRange(currentDocument: CurrentDocument, request: StatelessNextEditRequest, retryState: RetryState): OffsetRange {
828+
const currentDocLines = currentDocument.lines;
829+
const cursorLineOffset = currentDocument.cursorLineOffset;
830+
827831
let nLinesAbove: number;
828832
{
829833
const useVaryingLinesAbove = this.configService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsXtabProviderUseVaryingLinesAbove, this.expService);
@@ -832,7 +836,7 @@ export class XtabProvider implements IStatelessNextEditProvider {
832836
nLinesAbove = 0; // default
833837

834838
for (let i = 0; i < 8; ++i) {
835-
const lineIdx = cursorLine - i;
839+
const lineIdx = cursorLineOffset - i;
836840
if (lineIdx < 0) {
837841
break;
838842
}
@@ -867,8 +871,8 @@ export class XtabProvider implements IStatelessNextEditProvider {
867871
nLinesBelow += this.configService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsXtabProviderRetryWithNMoreLinesBelow, this.expService) ?? 0;
868872
}
869873

870-
let codeToEditStart = Math.max(0, cursorLine - nLinesAbove);
871-
let codeToEditEndExcl = Math.min(currentDocLines.length, cursorLine + nLinesBelow + 1);
874+
let codeToEditStart = Math.max(0, cursorLineOffset - nLinesAbove);
875+
let codeToEditEndExcl = Math.min(currentDocLines.length, cursorLineOffset + nLinesBelow + 1);
872876

873877
const maxMergeConflictLines = this.configService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsXtabMaxMergeConflictLines, this.expService);
874878
if (maxMergeConflictLines) {

0 commit comments

Comments
 (0)