Merge pull request #206055 from microsoft/aiday/doingChecksOnLineNumberAndLength

Doing checks on length and line number in the `inlineCompletionsModel` file
This commit is contained in:
Aiday Marlen Kyzy 2024-02-23 11:53:58 +01:00 committed by GitHub
commit ba8645668e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { mapFindFirst } from 'vs/base/common/arraysFind';
import { BugIndicatingError, onUnexpectedExternalError } from 'vs/base/common/errors';
import { BugIndicatingError, onUnexpectedError, onUnexpectedExternalError } from 'vs/base/common/errors';
import { Disposable } from 'vs/base/common/lifecycle';
import { IObservable, IReader, ITransaction, autorun, derived, derivedHandleChanges, derivedOpts, recomputeInitiallyAndOnChange, observableSignal, observableValue, subtransaction, transaction } from 'vs/base/common/observable';
import { commonPrefixLength, splitLinesIncludeSeparators } from 'vs/base/common/strings';
@ -470,6 +470,10 @@ export class InlineCompletionsModel extends Disposable {
}
export function getSecondaryEdits(textModel: ITextModel, positions: readonly Position[], primaryEdit: SingleTextEdit): SingleTextEdit[] {
if (positions.length === 1) {
// No secondary cursor positions
return [];
}
const primaryPosition = positions[0];
const secondaryPositions = positions.slice(1);
const primaryEditStartPosition = primaryEdit.range.getStartPosition();
@ -478,6 +482,13 @@ export function getSecondaryEdits(textModel: ITextModel, positions: readonly Pos
Range.fromPositions(primaryPosition, primaryEditEndPosition)
);
const positionWithinTextEdit = subtractPositions(primaryPosition, primaryEditStartPosition);
if (positionWithinTextEdit.lineNumber < 1) {
onUnexpectedError(new BugIndicatingError(
`positionWithinTextEdit line number should be bigger than 0.
Invalid subtraction between ${primaryPosition.toString()} and ${primaryEditStartPosition.toString()}`
));
return [];
}
const secondaryEditText = substringPos(primaryEdit.text, positionWithinTextEdit);
return secondaryPositions.map(pos => {
const posEnd = addPositions(subtractPositions(pos, primaryEditStartPosition), primaryEditEndPosition);