Merge from vscode f5d3ffa6a0d655c87e1eb0e1e90773df58f7ff25 (#7929)

* Merge from vscode f5d3ffa6a0d655c87e1eb0e1e90773df58f7ff25

* fix launch script

* add missing files
This commit is contained in:
Anthony Dresser
2019-10-22 21:49:55 -07:00
committed by GitHub
parent 4a68ab4659
commit a94cbb528e
189 changed files with 1976 additions and 1541 deletions

View File

@@ -895,11 +895,9 @@ export class TextModel extends Disposable implements model.ITextModel {
}
if (strict) {
if (column > 1) {
const charCodeBefore = this._buffer.getLineCharCode(lineNumber, column - 2);
if (strings.isHighSurrogate(charCodeBefore)) {
return false;
}
const [charStartOffset,] = strings.getCharContainingOffset(this._buffer.getLineContent(lineNumber), column - 1);
if (column !== charStartOffset + 1) {
return false;
}
}
@@ -932,12 +930,9 @@ export class TextModel extends Disposable implements model.ITextModel {
}
if (strict) {
// If the position would end up in the middle of a high-low surrogate pair,
// we move it to before the pair
// !!At this point, column > 1
const charCodeBefore = this._buffer.getLineCharCode(lineNumber, column - 2);
if (strings.isHighSurrogate(charCodeBefore)) {
return new Position(lineNumber, column - 1);
const [charStartOffset,] = strings.getCharContainingOffset(this._buffer.getLineContent(lineNumber), column - 1);
if (column !== charStartOffset + 1) {
return new Position(lineNumber, charStartOffset + 1);
}
}
@@ -974,17 +969,23 @@ export class TextModel extends Disposable implements model.ITextModel {
}
if (strict) {
const charCodeBeforeStart = (startColumn > 1 ? this._buffer.getLineCharCode(startLineNumber, startColumn - 2) : 0);
const charCodeBeforeEnd = (endColumn > 1 && endColumn <= this._buffer.getLineLength(endLineNumber) ? this._buffer.getLineCharCode(endLineNumber, endColumn - 2) : 0);
const startInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeStart);
const endInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeEnd);
if (!startInsideSurrogatePair && !endInsideSurrogatePair) {
return true;
const startLineContent = this._buffer.getLineContent(startLineNumber);
if (startColumn < startLineContent.length + 1) {
const [charStartOffset,] = strings.getCharContainingOffset(startLineContent, startColumn - 1);
if (startColumn !== charStartOffset + 1) {
return false;
}
}
return false;
if (endColumn >= 2) {
const endLineContent = (endLineNumber === startLineNumber ? startLineContent : this._buffer.getLineContent(endLineNumber));
const [, charEndOffset] = strings.getCharContainingOffset(endLineContent, endColumn - 2);
if (endColumn !== charEndOffset + 1) {
return false;
}
}
return true;
}
return true;
@@ -1004,37 +1005,32 @@ export class TextModel extends Disposable implements model.ITextModel {
const end = this._validatePosition(_range.endLineNumber, _range.endColumn, false);
const startLineNumber = start.lineNumber;
const startColumn = start.column;
let startColumn = start.column;
const endLineNumber = end.lineNumber;
const endColumn = end.column;
let endColumn = end.column;
const isEmpty = (startLineNumber === endLineNumber && startColumn === endColumn);
const charCodeBeforeStart = (startColumn > 1 ? this._buffer.getLineCharCode(startLineNumber, startColumn - 2) : 0);
const charCodeBeforeEnd = (endColumn > 1 && endColumn <= this._buffer.getLineLength(endLineNumber) ? this._buffer.getLineCharCode(endLineNumber, endColumn - 2) : 0);
const startInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeStart);
const endInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeEnd);
if (!startInsideSurrogatePair && !endInsideSurrogatePair) {
return new Range(startLineNumber, startColumn, endLineNumber, endColumn);
const startLineContent = this._buffer.getLineContent(startLineNumber);
if (startColumn < startLineContent.length + 1) {
const [charStartOffset,] = strings.getCharContainingOffset(startLineContent, startColumn - 1);
if (startColumn !== charStartOffset + 1) {
if (isEmpty) {
// do not expand a collapsed range, simply move it to a valid location
return new Range(startLineNumber, charStartOffset + 1, startLineNumber, charStartOffset + 1);
}
startColumn = charStartOffset + 1;
}
}
if (startLineNumber === endLineNumber && startColumn === endColumn) {
// do not expand a collapsed range, simply move it to a valid location
return new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn - 1);
if (endColumn >= 2) {
const endLineContent = (endLineNumber === startLineNumber ? startLineContent : this._buffer.getLineContent(endLineNumber));
const [, charEndOffset] = strings.getCharContainingOffset(endLineContent, endColumn - 2);
if (endColumn !== charEndOffset + 1) {
endColumn = charEndOffset + 1;
}
}
if (startInsideSurrogatePair && endInsideSurrogatePair) {
// expand range at both ends
return new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn + 1);
}
if (startInsideSurrogatePair) {
// only expand range at the start
return new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn);
}
// only expand range at the end
return new Range(startLineNumber, startColumn, endLineNumber, endColumn + 1);
return new Range(startLineNumber, startColumn, endLineNumber, endColumn);
}
public modifyPosition(rawPosition: IPosition, offset: number): Position {