未验证 提交 4ed6a47f 编写于 作者: A Alex Dima

Fixes #50163: Prefer end view position instead of next line's start view...

Fixes #50163: Prefer end view position instead of next line's start view position when converting single-line model ranges
上级 215fa337
......@@ -129,9 +129,7 @@ export class CoordinatesConverter implements ICoordinatesConverter {
}
public convertModelRangeToViewRange(modelRange: Range): Range {
let start = this._lines.convertModelPositionToViewPosition(modelRange.startLineNumber, modelRange.startColumn);
let end = this._lines.convertModelPositionToViewPosition(modelRange.endLineNumber, modelRange.endColumn);
return new Range(start.lineNumber, start.column, end.lineNumber, end.column);
return this._lines.convertModelRangeToViewRange(modelRange);
}
public modelPositionIsVisible(modelPosition: Position): boolean {
......@@ -737,9 +735,9 @@ export class SplitLinesCollection implements IViewModelLinesCollection {
public convertModelPositionToViewPosition(_modelLineNumber: number, _modelColumn: number): Position {
this._ensureValidState();
let validPosition = this.model.validatePosition(new Position(_modelLineNumber, _modelColumn));
let inputLineNumber = validPosition.lineNumber;
let inputColumn = validPosition.column;
const validPosition = this.model.validatePosition(new Position(_modelLineNumber, _modelColumn));
const inputLineNumber = validPosition.lineNumber;
const inputColumn = validPosition.column;
let lineIndex = inputLineNumber - 1, lineIndexChanged = false;
while (lineIndex > 0 && !this.lines[lineIndex].isVisible()) {
......@@ -751,7 +749,7 @@ export class SplitLinesCollection implements IViewModelLinesCollection {
// console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + 1 + ',' + 1);
return new Position(1, 1);
}
let deltaLineNumber = 1 + (lineIndex === 0 ? 0 : this.prefixSumComputer.getAccumulatedValue(lineIndex - 1));
const deltaLineNumber = 1 + (lineIndex === 0 ? 0 : this.prefixSumComputer.getAccumulatedValue(lineIndex - 1));
let r: Position;
if (lineIndexChanged) {
......@@ -764,6 +762,19 @@ export class SplitLinesCollection implements IViewModelLinesCollection {
return r;
}
public convertModelRangeToViewRange(modelRange: Range): Range {
let start = this.convertModelPositionToViewPosition(modelRange.startLineNumber, modelRange.startColumn);
let end = this.convertModelPositionToViewPosition(modelRange.endLineNumber, modelRange.endColumn);
if (modelRange.startLineNumber === modelRange.endLineNumber && start.lineNumber !== end.lineNumber) {
// This is a single line range that ends up taking more lines due to wrapping
if (end.column === this.getViewLineMinColumn(end.lineNumber)) {
// the end column lands on the first column of the next line
return new Range(start.lineNumber, start.column, end.lineNumber - 1, this.getViewLineMaxColumn(end.lineNumber - 1));
}
}
return new Range(start.lineNumber, start.column, end.lineNumber, end.column);
}
private _getViewLineNumberForModelPosition(inputLineNumber: number, inputColumn: number): number {
let lineIndex = inputLineNumber - 1;
if (this.lines[lineIndex].isVisible()) {
......
......@@ -103,16 +103,6 @@ suite('ViewModelDecorations', () => {
// view line 2: (1,14 -> 1,24)
assert.deepEqual(inlineDecorations1, [
{
range: new Range(1, 2, 2, 1),
inlineClassName: 'i-dec2',
type: InlineDecorationType.Regular
},
{
range: new Range(2, 1, 2, 1),
inlineClassName: 'a-dec2',
type: InlineDecorationType.After
},
{
range: new Range(1, 2, 2, 2),
inlineClassName: 'i-dec3',
......@@ -124,7 +114,7 @@ suite('ViewModelDecorations', () => {
type: InlineDecorationType.After
},
{
range: new Range(1, 2, 4, 1),
range: new Range(1, 2, 3, 13),
inlineClassName: 'i-dec4',
type: InlineDecorationType.Regular
},
......@@ -164,7 +154,7 @@ suite('ViewModelDecorations', () => {
type: InlineDecorationType.After
},
{
range: new Range(2, 1, 4, 1),
range: new Range(2, 1, 3, 13),
inlineClassName: 'i-dec8',
type: InlineDecorationType.Regular
},
......@@ -199,7 +189,7 @@ suite('ViewModelDecorations', () => {
type: InlineDecorationType.After
},
{
range: new Range(2, 3, 4, 1),
range: new Range(2, 3, 3, 13),
inlineClassName: 'i-dec11',
type: InlineDecorationType.Regular
},
......@@ -228,30 +218,45 @@ suite('ViewModelDecorations', () => {
// view line 3 (24 -> 36)
assert.deepEqual(inlineDecorations2, [
{
range: new Range(1, 2, 4, 1),
range: new Range(1, 2, 3, 13),
inlineClassName: 'i-dec4',
type: InlineDecorationType.Regular
},
{
range: new Range(3, 13, 3, 13),
inlineClassName: 'a-dec4',
type: InlineDecorationType.After
},
{
range: new Range(1, 2, 5, 8),
inlineClassName: 'i-dec5',
type: InlineDecorationType.Regular
},
{
range: new Range(2, 1, 4, 1),
range: new Range(2, 1, 3, 13),
inlineClassName: 'i-dec8',
type: InlineDecorationType.Regular
},
{
range: new Range(3, 13, 3, 13),
inlineClassName: 'a-dec8',
type: InlineDecorationType.After
},
{
range: new Range(2, 1, 5, 8),
inlineClassName: 'i-dec9',
type: InlineDecorationType.Regular
},
{
range: new Range(2, 3, 4, 1),
range: new Range(2, 3, 3, 13),
inlineClassName: 'i-dec11',
type: InlineDecorationType.Regular
},
{
range: new Range(3, 13, 3, 13),
inlineClassName: 'a-dec11',
type: InlineDecorationType.After
},
{
range: new Range(2, 3, 5, 8),
inlineClassName: 'i-dec12',
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册