提交 262b2cd1 编写于 作者: J Johannes Rieken

validate ranges when asking for text in range, fixes #17424

上级 34031546
......@@ -162,6 +162,8 @@ class MirrorModel extends MirrorModel2 implements ICommonModel {
}
public getValueInRange(range: editorCommon.IRange): string {
range = this._validateRange(range);
if (range.startLineNumber === range.endLineNumber) {
return this._lines[range.startLineNumber - 1].substring(range.startColumn - 1, range.endColumn - 1);
}
......@@ -201,6 +203,27 @@ class MirrorModel extends MirrorModel2 implements ICommonModel {
};
}
private _validateRange(range: editorCommon.IRange): editorCommon.IRange {
const start = this._validatePosition({ lineNumber: range.startLineNumber, column: range.startColumn });
const end = this._validatePosition({ lineNumber: range.endLineNumber, column: range.endColumn });
if (start.lineNumber !== range.startLineNumber
|| start.column !== range.startColumn
|| end.lineNumber !== range.endLineNumber
|| end.column !== range.endColumn) {
return {
startLineNumber: start.lineNumber,
startColumn: start.column,
endLineNumber: end.lineNumber,
endColumn: end.column
};
}
return range;
}
private _validatePosition(position: editorCommon.IPosition): editorCommon.IPosition {
if (!Position.isIPosition(position)) {
throw new Error('bad position');
......
......@@ -130,4 +130,34 @@ suite('EditorSimpleWorker', () => {
assert.deepEqual(first.range, { startLineNumber: 2, startColumn: 3, endLineNumber: 2, endColumn: 4 });
});
});
test('MoreMinimal, issue #15385 newline changes and other', function () {
let model = worker.addModel([
'package main', // 1
'func foo() {', // 2
'}' // 3
]);
return worker.computeMoreMinimalEdits(model.uri.toString(), [{ text: '\n', range: new Range(3, 2, 4, 1000) }], []).then(edits => {
assert.equal(edits.length, 1);
const [first] = edits;
assert.equal(first.text, '\n');
assert.deepEqual(first.range, { startLineNumber: 3, startColumn: 2, endLineNumber: 3, endColumn: 2 });
});
});
test('ICommonModel#getValueInRange, issue #17424', function () {
let model = worker.addModel([
'package main', // 1
'func foo() {', // 2
'}' // 3
]);
const value = model.getValueInRange({ startLineNumber: 3, startColumn: 1, endLineNumber: 4, endColumn: 1 });
assert.equal(value, '}');
});
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册