Merge VS Code 1.21 source code (#1067)

* Initial VS Code 1.21 file copy with patches

* A few more merges

* Post npm install

* Fix batch of build breaks

* Fix more build breaks

* Fix more build errors

* Fix more build breaks

* Runtime fixes 1

* Get connection dialog working with some todos

* Fix a few packaging issues

* Copy several node_modules to package build to fix loader issues

* Fix breaks from master

* A few more fixes

* Make tests pass

* First pass of license header updates

* Second pass of license header updates

* Fix restore dialog issues

* Remove add additional themes menu items

* fix select box issues where the list doesn't show up

* formatting

* Fix editor dispose issue

* Copy over node modules to correct location on all platforms
This commit is contained in:
Karl Burtram
2018-04-04 15:27:51 -07:00
committed by GitHub
parent 5fba3e31b4
commit dafb780987
9412 changed files with 141255 additions and 98813 deletions

View File

@@ -6,27 +6,32 @@
import * as assert from 'assert';
import { renderViewLine2 as renderViewLine, RenderLineInput, CharacterMapping } from 'vs/editor/common/viewLayout/viewLineRenderer';
import { ViewLineToken } from 'vs/editor/common/core/viewLineToken';
import { ViewLineToken, ViewLineTokens } from 'vs/editor/test/common/core/viewLineToken';
import { CharCode } from 'vs/base/common/charCode';
import { MetadataConsts } from 'vs/editor/common/modes';
import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations';
import { InlineDecorationType } from 'vs/editor/common/viewModel/viewModel';
import { IViewLineTokens } from 'vs/editor/common/core/lineTokens';
function createViewLineTokens(viewLineTokens: ViewLineToken[]): IViewLineTokens {
return new ViewLineTokens(viewLineTokens);
}
function createPart(endIndex: number, foreground: number): ViewLineToken {
return new ViewLineToken(endIndex, (
foreground << MetadataConsts.FOREGROUND_OFFSET
) >>> 0);
}
suite('viewLineRenderer.renderLine', () => {
function createPart(endIndex: number, foreground: number): ViewLineToken {
return new ViewLineToken(endIndex, (
foreground << MetadataConsts.FOREGROUND_OFFSET
) >>> 0);
}
function assertCharacterReplacement(lineContent: string, tabSize: number, expected: string, expectedCharOffsetInPart: number[][], expectedPartLengts: number[]): void {
let _actual = renderViewLine(new RenderLineInput(
false,
lineContent,
false,
0,
[new ViewLineToken(lineContent.length, 0)],
createViewLineTokens([new ViewLineToken(lineContent.length, 0)]),
[],
tabSize,
0,
@@ -72,7 +77,7 @@ suite('viewLineRenderer.renderLine', () => {
lineContent,
false,
0,
parts,
createViewLineTokens(parts),
[],
tabSize,
0,
@@ -108,7 +113,7 @@ suite('viewLineRenderer.renderLine', () => {
'Hello world!',
false,
0,
[
createViewLineTokens([
createPart(1, 0),
createPart(2, 1),
createPart(3, 2),
@@ -121,7 +126,7 @@ suite('viewLineRenderer.renderLine', () => {
createPart(10, 9),
createPart(11, 10),
createPart(12, 11),
],
]),
[],
4,
10,
@@ -157,7 +162,7 @@ suite('viewLineRenderer.renderLine', () => {
test('typical line', () => {
let lineText = '\t export class Game { // http://test.com ';
let lineParts = [
let lineParts = createViewLineTokens([
createPart(5, 1),
createPart(11, 2),
createPart(12, 3),
@@ -170,7 +175,7 @@ suite('viewLineRenderer.renderLine', () => {
createPart(28, 10),
createPart(43, 11),
createPart(48, 12),
];
]);
let expectedOutput = [
'<span class="vs-whitespace" style="width:40px">\u2192\u00a0\u00a0\u00a0</span>',
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
@@ -226,7 +231,7 @@ suite('viewLineRenderer.renderLine', () => {
test('issue #2255: Weird line rendering part 1', () => {
let lineText = '\t\t\tcursorStyle:\t\t\t\t\t\t(prevOpts.cursorStyle !== newOpts.cursorStyle),';
let lineParts = [
let lineParts = createViewLineTokens([
createPart(3, 1), // 3 chars
createPart(15, 2), // 12 chars
createPart(21, 3), // 6 chars
@@ -237,7 +242,7 @@ suite('viewLineRenderer.renderLine', () => {
createPart(66, 8), // 20 chars
createPart(67, 9), // 1 char
createPart(68, 10), // 2 chars
];
]);
let expectedOutput = [
'<span class="mtk1">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0</span>',
'<span class="mtk2">cursorStyle:</span>',
@@ -285,7 +290,7 @@ suite('viewLineRenderer.renderLine', () => {
test('issue #2255: Weird line rendering part 2', () => {
let lineText = ' \t\t\tcursorStyle:\t\t\t\t\t\t(prevOpts.cursorStyle !== newOpts.cursorStyle),';
let lineParts = [
let lineParts = createViewLineTokens([
createPart(4, 1), // 4 chars
createPart(16, 2), // 12 chars
createPart(22, 3), // 6 chars
@@ -296,7 +301,7 @@ suite('viewLineRenderer.renderLine', () => {
createPart(67, 8), // 20 chars
createPart(68, 9), // 1 char
createPart(69, 10), // 2 chars
];
]);
let expectedOutput = [
'<span class="mtk1">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0</span>',
'<span class="mtk2">cursorStyle:</span>',
@@ -344,12 +349,12 @@ suite('viewLineRenderer.renderLine', () => {
test('issue Microsoft/monaco-editor#280: Improved source code rendering for RTL languages', () => {
let lineText = 'var קודמות = \"מיותר קודמות צ\'ט של, אם לשון העברית שינויים ויש, אם\";';
let lineParts = [
let lineParts = createViewLineTokens([
createPart(3, 6),
createPart(13, 1),
createPart(66, 20),
createPart(67, 1),
];
]);
let expectedOutput = [
'<span class="mtk6" dir="ltr">var</span>',
@@ -384,7 +389,7 @@ suite('viewLineRenderer.renderLine', () => {
let _lineText = 'This is just a long line that contains very interesting text. This is just a long line that contains very interesting text.';
function assertSplitsTokens(message: string, lineText: string, expectedOutput: string[]): void {
let lineParts = [createPart(lineText.length, 1)];
let lineParts = createViewLineTokens([createPart(lineText.length, 1)]);
let actual = renderViewLine(new RenderLineInput(
false,
lineText,
@@ -481,7 +486,7 @@ suite('viewLineRenderer.renderLine', () => {
let _lineText = 'This is just a long line that contains very interesting text. This is just a long line that contains very interesting text.';
function assertSplitsTokens(message: string, lineText: string, expectedOutput: string[]): void {
let lineParts = [createPart(lineText.length, 1)];
let lineParts = createViewLineTokens([createPart(lineText.length, 1)]);
let actual = renderViewLine(new RenderLineInput(
false,
lineText,
@@ -514,7 +519,7 @@ suite('viewLineRenderer.renderLine', () => {
test('issue #20624: Unaligned surrogate pairs are corrupted at multiples of 50 columns', () => {
let lineText = 'a𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷𠮷';
let lineParts = [createPart(lineText.length, 1)];
let lineParts = createViewLineTokens([createPart(lineText.length, 1)]);
let actual = renderViewLine(new RenderLineInput(
false,
lineText,
@@ -541,7 +546,7 @@ suite('viewLineRenderer.renderLine', () => {
test('issue #6885: Does not split large tokens in RTL text', () => {
let lineText = 'את גרמנית בהתייחסות שמו, שנתי המשפט אל חפש, אם כתב אחרים ולחבר. של התוכן אודות בויקיפדיה כלל, של עזרה כימיה היא. על עמוד יוצרים מיתולוגיה סדר, אם שכל שתפו לעברית שינויים, אם שאלות אנגלית עזה. שמות בקלות מה סדר.';
let lineParts = [createPart(lineText.length, 1)];
let lineParts = createViewLineTokens([createPart(lineText.length, 1)]);
let expectedOutput = [
'<span class="mtk1" dir="ltr">את\u00a0גרמנית\u00a0בהתייחסות\u00a0שמו,\u00a0שנתי\u00a0המשפט\u00a0אל\u00a0חפש,\u00a0אם\u00a0כתב\u00a0אחרים\u00a0ולחבר.\u00a0של\u00a0התוכן\u00a0אודות\u00a0בויקיפדיה\u00a0כלל,\u00a0של\u00a0עזרה\u00a0כימיה\u00a0היא.\u00a0על\u00a0עמוד\u00a0יוצרים\u00a0מיתולוגיה\u00a0סדר,\u00a0אם\u00a0שכל\u00a0שתפו\u00a0לעברית\u00a0שינויים,\u00a0אם\u00a0שאלות\u00a0אנגלית\u00a0עזה.\u00a0שמות\u00a0בקלות\u00a0מה\u00a0סדר.</span>'
];
@@ -566,7 +571,7 @@ suite('viewLineRenderer.renderLine', () => {
test('issue #19673: Monokai Theme bad-highlighting in line wrap', () => {
let lineText = ' MongoCallback<string>): void {';
let lineParts = [
let lineParts = createViewLineTokens([
createPart(17, 1),
createPart(18, 2),
createPart(24, 3),
@@ -575,7 +580,7 @@ suite('viewLineRenderer.renderLine', () => {
createPart(28, 6),
createPart(32, 7),
createPart(34, 8),
];
]);
let expectedOutput = [
'<span class="">\u00a0\u00a0\u00a0\u00a0</span>',
'<span class="mtk1">MongoCallback</span>',
@@ -666,11 +671,6 @@ suite('viewLineRenderer.renderLine', () => {
});
suite('viewLineRenderer.renderLine 2', () => {
function createPart(endIndex: number, foreground: number): ViewLineToken {
return new ViewLineToken(endIndex, (
foreground << MetadataConsts.FOREGROUND_OFFSET
) >>> 0);
}
function testCreateLineParts(fontIsMonospace: boolean, lineContent: string, tokens: ViewLineToken[], fauxIndentLength: number, renderWhitespace: 'none' | 'boundary' | 'all', expected: string): void {
let actual = renderViewLine(new RenderLineInput(
@@ -678,7 +678,7 @@ suite('viewLineRenderer.renderLine 2', () => {
lineContent,
false,
fauxIndentLength,
tokens,
createViewLineTokens(tokens),
[],
4,
10,
@@ -700,7 +700,7 @@ suite('viewLineRenderer.renderLine 2', () => {
lineContent,
false,
0,
[createPart(21, 3)],
createViewLineTokens([createPart(21, 3)]),
[new LineDecoration(1, 22, 'link', InlineDecorationType.Regular)],
4,
10,
@@ -728,13 +728,13 @@ suite('viewLineRenderer.renderLine 2', () => {
lineContent,
false,
0,
[
createViewLineTokens([
createPart(49, 6),
createPart(51, 4),
createPart(72, 6),
createPart(74, 4),
createPart(84, 6),
],
]),
[
new LineDecoration(13, 51, 'detected-link', InlineDecorationType.Regular)
],
@@ -992,7 +992,7 @@ suite('viewLineRenderer.renderLine 2', () => {
'Hello world',
false,
0,
[createPart(11, 0)],
createViewLineTokens([createPart(11, 0)]),
[
new LineDecoration(5, 7, 'a', InlineDecorationType.Regular),
new LineDecoration(1, 3, 'b', InlineDecorationType.Regular),
@@ -1033,7 +1033,7 @@ suite('viewLineRenderer.renderLine 2', () => {
lineContent,
false,
0,
[createPart(4, 3)],
createViewLineTokens([createPart(4, 3)]),
[new LineDecoration(1, 2, 'before', InlineDecorationType.Before)],
4,
10,
@@ -1062,7 +1062,7 @@ suite('viewLineRenderer.renderLine 2', () => {
lineContent,
false,
0,
[createPart(4, 3)],
createViewLineTokens([createPart(4, 3)]),
[new LineDecoration(2, 3, 'before', InlineDecorationType.Before)],
4,
10,
@@ -1092,7 +1092,7 @@ suite('viewLineRenderer.renderLine 2', () => {
lineContent,
false,
0,
[createPart(0, 3)],
createViewLineTokens([createPart(0, 3)]),
[new LineDecoration(1, 2, 'before', InlineDecorationType.Before)],
4,
10,
@@ -1118,7 +1118,7 @@ suite('viewLineRenderer.renderLine 2', () => {
' 1. 🙏',
false,
0,
[createPart(7, 3)],
createViewLineTokens([createPart(7, 3)]),
[new LineDecoration(7, 8, 'inline-folded', InlineDecorationType.After)],
2,
10,
@@ -1145,7 +1145,7 @@ suite('viewLineRenderer.renderLine 2', () => {
'',
false,
0,
[createPart(0, 3)],
createViewLineTokens([createPart(0, 3)]),
[
new LineDecoration(1, 2, 'before', InlineDecorationType.Before),
new LineDecoration(0, 1, 'after', InlineDecorationType.After),
@@ -1174,7 +1174,7 @@ suite('viewLineRenderer.renderLine 2', () => {
'\t}',
false,
0,
[createPart(2, 3)],
createViewLineTokens([createPart(2, 3)]),
[
new LineDecoration(3, 3, 'ced-TextEditorDecorationType2-5e9b9b3f-3 ced-TextEditorDecorationType2-3', InlineDecorationType.Before),
new LineDecoration(3, 3, 'ced-TextEditorDecorationType2-5e9b9b3f-4 ced-TextEditorDecorationType2-4', InlineDecorationType.After),
@@ -1197,13 +1197,71 @@ suite('viewLineRenderer.renderLine 2', () => {
assert.deepEqual(actual.html, expected);
});
test('issue #22832: Consider fullwidth characters when rendering tabs', () => {
let actual = renderViewLine(new RenderLineInput(
true,
'asd = "擦"\t\t#asd',
false,
0,
createViewLineTokens([createPart(15, 3)]),
[],
4,
10,
10000,
'none',
false,
false
));
let expected = [
'<span>',
'<span class="mtk3">asd\u00a0=\u00a0"擦"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0#asd</span>',
'</span>'
].join('');
assert.deepEqual(actual.html, expected);
});
test('issue #22832: Consider fullwidth characters when rendering tabs (render whitespace)', () => {
let actual = renderViewLine(new RenderLineInput(
true,
'asd = "擦"\t\t#asd',
false,
0,
createViewLineTokens([createPart(15, 3)]),
[],
4,
10,
10000,
'all',
false,
false
));
let expected = [
'<span>',
'<span class="mtk3">asd</span>',
'<span class="vs-whitespace">\u00b7</span>',
'<span class="mtk3">=</span>',
'<span class="vs-whitespace">\u00b7</span>',
'<span class="mtk3">"擦"</span>',
'<span class="vs-whitespace">\u2192\u00a0\u2192\u00a0\u00a0\u00a0</span>',
'<span class="mtk3">#asd</span>',
'</span>'
].join('');
assert.deepEqual(actual.html, expected);
});
function createTestGetColumnOfLinePartOffset(lineContent: string, tabSize: number, parts: ViewLineToken[], expectedPartLengths: number[]): (partIndex: number, partLength: number, offset: number, expected: number) => void {
let renderLineOutput = renderViewLine(new RenderLineInput(
false,
lineContent,
false,
0,
parts,
createViewLineTokens(parts),
[],
tabSize,
10,