Merge from vscode c58aaab8a1cc22a7139b761166a0d4f37d41e998 (#7880)

* Merge from vscode c58aaab8a1cc22a7139b761166a0d4f37d41e998

* fix pipelines

* fix strict-null-checks

* add missing files
This commit is contained in:
Anthony Dresser
2019-10-21 22:12:22 -07:00
committed by GitHub
parent 7c9be74970
commit 1e22f47304
913 changed files with 18898 additions and 16536 deletions

View File

@@ -25,8 +25,8 @@ suite('TextModelWithTokens', () => {
}
return {
range: a.range.toString(),
open: a.open,
close: a.close,
open: a.open[0],
close: a.close[0],
isOpen: a.isOpen
};
}
@@ -57,8 +57,8 @@ suite('TextModelWithTokens', () => {
let ch = lineText.charAt(charIndex);
if (charIsBracket[ch]) {
expectedBrackets.push({
open: openForChar[ch],
close: closeForChar[ch],
open: [openForChar[ch]],
close: [closeForChar[ch]],
isOpen: charIsOpenBracket[ch],
range: new Range(lineIndex + 1, charIndex + 1, lineIndex + 1, charIndex + 2)
});
@@ -145,18 +145,18 @@ suite('TextModelWithTokens', () => {
});
});
function assertIsNotBracket(model: TextModel, lineNumber: number, column: number) {
const match = model.matchBracket(new Position(lineNumber, column));
assert.equal(match, null, 'is not matching brackets at ' + lineNumber + ', ' + column);
}
function assertIsBracket(model: TextModel, testPosition: Position, expected: [Range, Range]): void {
const actual = model.matchBracket(testPosition);
assert.deepEqual(actual, expected, 'matches brackets at ' + testPosition);
}
suite('TextModelWithTokens - bracket matching', () => {
function isNotABracket(model: TextModel, lineNumber: number, column: number) {
let match = model.matchBracket(new Position(lineNumber, column));
assert.equal(match, null, 'is not matching brackets at ' + lineNumber + ', ' + column);
}
function isBracket2(model: TextModel, testPosition: Position, expected: [Range, Range]): void {
let actual = model.matchBracket(testPosition);
assert.deepEqual(actual, expected, 'matches brackets at ' + testPosition);
}
const languageIdentifier = new LanguageIdentifier('bracketMode1', LanguageId.PlainText);
let registration: IDisposable;
@@ -180,21 +180,21 @@ suite('TextModelWithTokens - bracket matching', () => {
')]}{[(';
let model = TextModel.createFromString(text, undefined, languageIdentifier);
isNotABracket(model, 1, 1);
isNotABracket(model, 1, 2);
isNotABracket(model, 1, 3);
isBracket2(model, new Position(1, 4), [new Range(1, 4, 1, 5), new Range(2, 3, 2, 4)]);
isBracket2(model, new Position(1, 5), [new Range(1, 5, 1, 6), new Range(2, 2, 2, 3)]);
isBracket2(model, new Position(1, 6), [new Range(1, 6, 1, 7), new Range(2, 1, 2, 2)]);
isBracket2(model, new Position(1, 7), [new Range(1, 6, 1, 7), new Range(2, 1, 2, 2)]);
assertIsNotBracket(model, 1, 1);
assertIsNotBracket(model, 1, 2);
assertIsNotBracket(model, 1, 3);
assertIsBracket(model, new Position(1, 4), [new Range(1, 4, 1, 5), new Range(2, 3, 2, 4)]);
assertIsBracket(model, new Position(1, 5), [new Range(1, 5, 1, 6), new Range(2, 2, 2, 3)]);
assertIsBracket(model, new Position(1, 6), [new Range(1, 6, 1, 7), new Range(2, 1, 2, 2)]);
assertIsBracket(model, new Position(1, 7), [new Range(1, 6, 1, 7), new Range(2, 1, 2, 2)]);
isBracket2(model, new Position(2, 1), [new Range(2, 1, 2, 2), new Range(1, 6, 1, 7)]);
isBracket2(model, new Position(2, 2), [new Range(2, 2, 2, 3), new Range(1, 5, 1, 6)]);
isBracket2(model, new Position(2, 3), [new Range(2, 3, 2, 4), new Range(1, 4, 1, 5)]);
isBracket2(model, new Position(2, 4), [new Range(2, 3, 2, 4), new Range(1, 4, 1, 5)]);
isNotABracket(model, 2, 5);
isNotABracket(model, 2, 6);
isNotABracket(model, 2, 7);
assertIsBracket(model, new Position(2, 1), [new Range(2, 1, 2, 2), new Range(1, 6, 1, 7)]);
assertIsBracket(model, new Position(2, 2), [new Range(2, 2, 2, 3), new Range(1, 5, 1, 6)]);
assertIsBracket(model, new Position(2, 3), [new Range(2, 3, 2, 4), new Range(1, 4, 1, 5)]);
assertIsBracket(model, new Position(2, 4), [new Range(2, 3, 2, 4), new Range(1, 4, 1, 5)]);
assertIsNotBracket(model, 2, 5);
assertIsNotBracket(model, 2, 6);
assertIsNotBracket(model, 2, 7);
model.dispose();
});
@@ -238,7 +238,7 @@ suite('TextModelWithTokens - bracket matching', () => {
let isABracket: { [lineNumber: number]: { [col: number]: boolean; }; } = { 1: {}, 2: {}, 3: {}, 4: {}, 5: {} };
for (let i = 0, len = brackets.length; i < len; i++) {
let [testPos, b1, b2] = brackets[i];
isBracket2(model, testPos, [b1, b2]);
assertIsBracket(model, testPos, [b1, b2]);
isABracket[testPos.lineNumber][testPos.column] = true;
}
@@ -246,7 +246,7 @@ suite('TextModelWithTokens - bracket matching', () => {
let line = model.getLineContent(i);
for (let j = 1, lenJ = line.length + 1; j <= lenJ; j++) {
if (!isABracket[i].hasOwnProperty(<any>j)) {
isNotABracket(model, i, j);
assertIsNotBracket(model, i, j);
}
}
}
@@ -255,6 +255,88 @@ suite('TextModelWithTokens - bracket matching', () => {
});
});
suite('TextModelWithTokens', () => {
test('bracket matching 3', () => {
const languageIdentifier = new LanguageIdentifier('bracketMode2', LanguageId.PlainText);
const registration = LanguageConfigurationRegistry.register(languageIdentifier, {
brackets: [
['if', 'end if'],
['loop', 'end loop'],
['begin', 'end']
],
});
const text = [
'begin',
' loop',
' if then',
' end if;',
' end loop;',
'end;',
'',
'begin',
' loop',
' if then',
' end ifa;',
' end loop;',
'end;',
].join('\n');
const model = TextModel.createFromString(text, undefined, languageIdentifier);
// <if> ... <end ifa> is not matched
assertIsNotBracket(model, 10, 9);
// <if> ... <end if> is matched
assertIsBracket(model, new Position(3, 9), [new Range(3, 9, 3, 11), new Range(4, 9, 4, 15)]);
assertIsBracket(model, new Position(4, 9), [new Range(4, 9, 4, 15), new Range(3, 9, 3, 11)]);
// <loop> ... <end loop> is matched
assertIsBracket(model, new Position(2, 5), [new Range(2, 5, 2, 9), new Range(5, 5, 5, 13)]);
assertIsBracket(model, new Position(5, 5), [new Range(5, 5, 5, 13), new Range(2, 5, 2, 9)]);
// <begin> ... <end> is matched
assertIsBracket(model, new Position(1, 1), [new Range(1, 1, 1, 6), new Range(6, 1, 6, 4)]);
assertIsBracket(model, new Position(6, 1), [new Range(6, 1, 6, 4), new Range(1, 1, 1, 6)]);
model.dispose();
registration.dispose();
});
test('bracket matching 4', () => {
const languageIdentifier = new LanguageIdentifier('bracketMode2', LanguageId.PlainText);
const registration = LanguageConfigurationRegistry.register(languageIdentifier, {
brackets: [
['recordbegin', 'endrecord'],
['simplerecordbegin', 'endrecord'],
],
});
const text = [
'recordbegin',
' simplerecordbegin',
' endrecord',
'endrecord',
].join('\n');
const model = TextModel.createFromString(text, undefined, languageIdentifier);
// <recordbegin> ... <endrecord> is matched
assertIsBracket(model, new Position(1, 1), [new Range(1, 1, 1, 12), new Range(4, 1, 4, 10)]);
assertIsBracket(model, new Position(4, 1), [new Range(4, 1, 4, 10), new Range(1, 1, 1, 12)]);
// <simplerecordbegin> ... <endrecord> is matched
assertIsBracket(model, new Position(2, 3), [new Range(2, 3, 2, 20), new Range(3, 3, 3, 12)]);
assertIsBracket(model, new Position(3, 3), [new Range(3, 3, 3, 12), new Range(2, 3, 2, 20)]);
model.dispose();
registration.dispose();
});
});
suite('TextModelWithTokens regression tests', () => {