Merge from vscode 4636be2b71c87bfb0bfe3c94278b447a5efcc1f1 (#8722)

* Merge from vscode 4636be2b71c87bfb0bfe3c94278b447a5efcc1f1

* remove tests that aren't working
This commit is contained in:
Anthony Dresser
2019-12-18 00:14:28 -08:00
committed by GitHub
parent 0fd870d156
commit 30d9e9c141
289 changed files with 5537 additions and 3039 deletions

View File

@@ -5,7 +5,7 @@
@font-face {
font-family: "codicon";
src: url("./codicon.ttf?7ed98366b9684aff02478216decd2fe9") format("truetype");
src: url("./codicon.ttf?072cd8445a025297c265f9d008123381") format("truetype");
}
.codicon[class*='codicon-'] {
@@ -408,4 +408,5 @@
.codicon-call-incoming:before { content: "\eb92" }
.codicon-call-outgoing:before { content: "\eb93" }
.codicon-menu:before { content: "\eb94" }
.codicon-expand-all:before { content: "\eb95" }
.codicon-debug-alt:before { content: "\f101" }

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
/** Dialog: Modal Block */
.monaco-workbench .dialog-modal-block {
.monaco-dialog-modal-block {
position: fixed;
height: 100%;
width: 100%;
@@ -15,12 +15,12 @@
align-items: center;
}
.monaco-workbench .dialog-modal-block.dimmed {
.monaco-dialog-modal-block.dimmed {
background: rgba(0, 0, 0, 0.3);
}
/** Dialog: Container */
.monaco-workbench .dialog-box {
.monaco-dialog-box {
display: flex;
flex-direction: column-reverse;
width: min-content;
@@ -32,11 +32,11 @@
}
/** Dialog: Title Actions Row */
.monaco-workbench .dialog-box .dialog-toolbar-row {
.monaco-dialog-box .dialog-toolbar-row {
padding-bottom: 4px;
}
.monaco-workbench .dialog-box .action-label {
.monaco-dialog-box .action-label {
height: 16px;
min-width: 16px;
background-size: 16px;
@@ -48,14 +48,14 @@
/** Dialog: Message Row */
.monaco-workbench .dialog-box .dialog-message-row {
.monaco-dialog-box .dialog-message-row {
display: flex;
flex-grow: 1;
align-items: center;
padding: 0 10px;
}
.monaco-workbench .dialog-box .dialog-message-row > .codicon {
.monaco-dialog-box .dialog-message-row > .codicon {
flex: 0 0 48px;
height: 48px;
align-self: baseline;
@@ -63,7 +63,7 @@
}
/** Dialog: Message Container */
.monaco-workbench .dialog-box .dialog-message-row .dialog-message-container {
.monaco-dialog-box .dialog-message-row .dialog-message-container {
display: flex;
flex-direction: column;
overflow: hidden;
@@ -77,7 +77,7 @@
}
/** Dialog: Message */
.monaco-workbench .dialog-box .dialog-message-row .dialog-message-container .dialog-message {
.monaco-dialog-box .dialog-message-row .dialog-message-container .dialog-message {
line-height: 22px;
font-size: 18px;
flex: 1; /* let the message always grow */
@@ -90,23 +90,23 @@
}
/** Dialog: Details */
.monaco-workbench .dialog-box .dialog-message-row .dialog-message-container .dialog-message-detail {
.monaco-dialog-box .dialog-message-row .dialog-message-container .dialog-message-detail {
line-height: 22px;
flex: 1; /* let the message always grow */
opacity: .9;
}
.monaco-workbench .dialog-box .dialog-message-row .dialog-message-container .dialog-message a:focus {
.monaco-dialog-box .dialog-message-row .dialog-message-container .dialog-message a:focus {
outline-width: 1px;
outline-style: solid;
}
.monaco-workbench .dialog-box .dialog-message-row .dialog-message-container .dialog-checkbox-row {
.monaco-dialog-box .dialog-message-row .dialog-message-container .dialog-checkbox-row {
padding: 15px 0px 0px;
display: flex;
}
.monaco-workbench .dialog-box .dialog-message-row .dialog-message-container .dialog-checkbox-row .dialog-checkbox-message {
.monaco-dialog-box .dialog-message-row .dialog-message-container .dialog-checkbox-row .dialog-checkbox-message {
cursor: pointer;
user-select: none;
-webkit-user-select: none;
@@ -114,7 +114,7 @@
}
/** Dialog: Buttons Row */
.monaco-workbench .dialog-box > .dialog-buttons-row {
.monaco-dialog-box > .dialog-buttons-row {
display: flex;
align-items: center;
justify-content: flex-end;
@@ -122,19 +122,19 @@
overflow: hidden; /* buttons row should never overflow */
}
.monaco-workbench .dialog-box > .dialog-buttons-row {
.monaco-dialog-box > .dialog-buttons-row {
display: flex;
white-space: nowrap;
padding: 20px 10px 10px;
}
/** Dialog: Buttons */
.monaco-workbench .dialog-box > .dialog-buttons-row > .dialog-buttons {
.monaco-dialog-box > .dialog-buttons-row > .dialog-buttons {
display: flex;
overflow: hidden;
}
.monaco-workbench .dialog-box > .dialog-buttons-row > .dialog-buttons > .monaco-button {
.monaco-dialog-box > .dialog-buttons-row > .dialog-buttons > .monaco-button {
width: fit-content;
width: -moz-fit-content;
padding: 5px 10px;

View File

@@ -61,9 +61,9 @@ export class Dialog extends Disposable {
constructor(private container: HTMLElement, private message: string, buttons: string[], private options: IDialogOptions) {
super();
this.modal = this.container.appendChild($(`.dialog-modal-block${options.type === 'pending' ? '.dimmed' : ''}`));
this.modal = this.container.appendChild($(`.monaco-dialog-modal-block${options.type === 'pending' ? '.dimmed' : ''}`));
this.shadowElement = this.modal.appendChild($('.dialog-shadow'));
this.element = this.shadowElement.appendChild($('.dialog-box'));
this.element = this.shadowElement.appendChild($('.monaco-dialog-box'));
hide(this.element);
// If no button is provided, default to OK

View File

@@ -129,6 +129,8 @@ export abstract class CachedListVirtualDelegate<T extends object> implements ILi
abstract getTemplateId(element: T): string;
setDynamicHeight(element: T, height: number): void {
this.cache.set(element, height);
if (height > 0) {
this.cache.set(element, height);
}
}
}

View File

@@ -54,7 +54,7 @@
}
.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon {
font-size: 16px;
font-size: 16px !important;
display: flex;
align-items: center;
}

View File

@@ -308,8 +308,9 @@ export class MenuBar extends Disposable {
}
createOverflowMenu(): void {
const label = this.options.compactMode !== undefined ? nls.localize('mAppMenu', 'Application Menu') : nls.localize('mMore', "...");
const buttonElement = $('div.menubar-menu-button', { 'role': 'menuitem', 'tabindex': -1, 'aria-label': label, 'title': label, 'aria-haspopup': true });
const label = this.options.compactMode !== undefined ? nls.localize('mAppMenu', 'Application Menu') : nls.localize('mMore', 'More');
const title = this.options.compactMode !== undefined ? label : undefined;
const buttonElement = $('div.menubar-menu-button', { 'role': 'menuitem', 'tabindex': -1, 'aria-label': label, 'title': title, 'aria-haspopup': true });
const titleElement = $('div.menubar-menu-title.toolbar-toggle-more.codicon.codicon-more', { 'role': 'none', 'aria-hidden': true });
buttonElement.appendChild(titleElement);
@@ -910,7 +911,7 @@ export class MenuBar extends Disposable {
return;
}
const menuHolder = $('div.menubar-menu-items-holder');
const menuHolder = $('div.menubar-menu-items-holder', { 'title': '' });
DOM.addClass(customMenu.buttonElement, 'open');

View File

@@ -34,7 +34,7 @@ export function createCancelablePromise<T>(callback: (token: CancellationToken)
});
});
return new class implements CancelablePromise<T> {
return <CancelablePromise<T>>new class {
cancel() {
source.cancel();
}

View File

@@ -5,7 +5,7 @@
import { equals } from 'vs/base/common/arrays';
import { UriComponents } from 'vs/base/common/uri';
import { escapeCodicons, markdownUnescapeCodicons } from 'vs/base/common/codicons';
import { escapeCodicons } from 'vs/base/common/codicons';
export interface IMarkdownString {
readonly value: string;
@@ -39,10 +39,9 @@ export class MarkdownString implements IMarkdownString {
appendText(value: string): MarkdownString {
// escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
value = value
this._value += (this._supportThemeIcons ? escapeCodicons(value) : value)
.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&')
.replace('\n', '\n\n');
this._value += this.supportThemeIcons ? markdownUnescapeCodicons(value) : value;
return this;
}
@@ -61,10 +60,6 @@ export class MarkdownString implements IMarkdownString {
this._value += '\n```\n';
return this;
}
static escapeThemeIcons(value: string): string {
return escapeCodicons(value);
}
}
export function isEmptyMarkdownString(oneOrMany: IMarkdownString | IMarkdownString[] | null | undefined): boolean {

View File

@@ -526,6 +526,14 @@ export class LinkedMap<K, V> {
return this._size;
}
get first(): V | undefined {
return this._head?.value;
}
get last(): V | undefined {
return this._tail?.value;
}
has(key: K): boolean {
return this._map.has(key);
}

View File

@@ -15,7 +15,7 @@ import { CharCode } from 'vs/base/common/charCode';
* - forEach() over the result to get the lines
*/
export class LineDecoder {
private stringDecoder: sd.NodeStringDecoder;
private stringDecoder: sd.StringDecoder;
private remaining: string | null;
constructor(encoding: string = 'utf8') {

View File

@@ -54,34 +54,26 @@ suite('MarkdownRenderer', () => {
test('render appendText', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendText('$(zap) $(dont match me)');
mds.appendText('$(zap) $(not a theme icon) $(add)');
let result: HTMLElement = renderMarkdown(mds);
assert.strictEqual(result.innerHTML, `<p><span class="codicon codicon-zap"></span> $(dont match me)</p>`);
});
test('render appendText escaped', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendText(MarkdownString.escapeThemeIcons('$(zap) $(dont match me)'));
let result: HTMLElement = renderMarkdown(mds);
assert.strictEqual(result.innerHTML, `<p>$(zap) $(dont match me)</p>`);
assert.strictEqual(result.innerHTML, `<p>$(zap) $(not a theme icon) $(add)</p>`);
});
test('render appendMarkdown', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendMarkdown('$(zap) $(dont match me)');
mds.appendMarkdown('$(zap) $(not a theme icon) $(add)');
let result: HTMLElement = renderMarkdown(mds);
assert.strictEqual(result.innerHTML, `<p><span class="codicon codicon-zap"></span> $(dont match me)</p>`);
assert.strictEqual(result.innerHTML, `<p><span class="codicon codicon-zap"></span> $(not a theme icon) <span class="codicon codicon-add"></span></p>`);
});
test('render appendMarkdown escaped', () => {
test('render appendMarkdown with escaped icon', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendMarkdown(MarkdownString.escapeThemeIcons('$(zap) $(dont match me)'));
mds.appendMarkdown('\\$(zap) $(not a theme icon) $(add)');
let result: HTMLElement = renderMarkdown(mds);
assert.strictEqual(result.innerHTML, `<p>$(zap) $(dont match me)</p>`);
assert.strictEqual(result.innerHTML, `<p>$(zap) $(not a theme icon) <span class="codicon codicon-add"></span></p>`);
});
});
@@ -90,18 +82,18 @@ suite('MarkdownRenderer', () => {
test('render appendText', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: false });
mds.appendText('$(zap) $(dont match me)');
mds.appendText('$(zap) $(not a theme icon) $(add)');
let result: HTMLElement = renderMarkdown(mds);
assert.strictEqual(result.innerHTML, `<p>$(zap) $(dont match me)</p>`);
assert.strictEqual(result.innerHTML, `<p>$(zap) $(not a theme icon) $(add)</p>`);
});
test('render appendMarkdown', () => {
test('render appendMarkdown with escaped icon', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: false });
mds.appendMarkdown('$(zap) $(dont match me)');
mds.appendMarkdown('\\$(zap) $(not a theme icon) $(add)');
let result: HTMLElement = renderMarkdown(mds);
assert.strictEqual(result.innerHTML, `<p>$(zap) $(dont match me)</p>`);
assert.strictEqual(result.innerHTML, `<p>$(zap) $(not a theme icon) $(add)</p>`);
});
});

View File

@@ -16,6 +16,8 @@ suite('Map', () => {
map.set('bk', 'bv');
assert.deepStrictEqual(map.keys(), ['ak', 'bk']);
assert.deepStrictEqual(map.values(), ['av', 'bv']);
assert.equal(map.first, 'av');
assert.equal(map.last, 'bv');
});
test('LinkedMap - Touch Old one', () => {

View File

@@ -8,10 +8,9 @@ import { MarkdownString } from 'vs/base/common/htmlContent';
suite('MarkdownString', () => {
test('escape', () => {
test('appendText', () => {
const mds = new MarkdownString();
mds.appendText('# foo\n*bar*');
assert.equal(mds.value, '\\# foo\n\n\\*bar\\*');
@@ -19,59 +18,54 @@ suite('MarkdownString', () => {
suite('ThemeIcons', () => {
test('escapeThemeIcons', () => {
assert.equal(
MarkdownString.escapeThemeIcons('$(zap) $(not an icon) foo$(bar)'),
'\\$(zap) $(not an icon) foo\\$(bar)'
);
});
suite('Support On', () => {
test('appendText', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendText('$(zap)');
mds.appendText('$(zap) $(not a theme icon) $(add)');
assert.equal(mds.value, '$(zap)');
});
test('appendText escaped', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendText(MarkdownString.escapeThemeIcons('$(zap)'));
assert.equal(mds.value, '\\\\$\\(zap\\)');
assert.equal(mds.value, '\\\\$\\(zap\\) $\\(not a theme icon\\) \\\\$\\(add\\)');
});
test('appendMarkdown', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendMarkdown('$(zap)');
mds.appendMarkdown('$(zap) $(not a theme icon) $(add)');
assert.equal(mds.value, '$(zap)');
assert.equal(mds.value, '$(zap) $(not a theme icon) $(add)');
});
test('appendMarkdown escaped', () => {
test('appendMarkdown with escaped icon', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendMarkdown(MarkdownString.escapeThemeIcons('$(zap)'));
mds.appendMarkdown('\\$(zap) $(not a theme icon) $(add)');
assert.equal(mds.value, '\\$(zap)');
assert.equal(mds.value, '\\$(zap) $(not a theme icon) $(add)');
});
});
suite('Support Off', () => {
test('appendText', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: false });
mds.appendText('$(zap)');
mds.appendText('$(zap) $(not a theme icon) $(add)');
assert.equal(mds.value, '$\\(zap\\)');
assert.equal(mds.value, '$\\(zap\\) $\\(not a theme icon\\) $\\(add\\)');
});
test('appendMarkdown', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: false });
mds.appendMarkdown('$(zap)');
mds.appendMarkdown('$(zap) $(not a theme icon) $(add)');
assert.equal(mds.value, '$(zap)');
assert.equal(mds.value, '$(zap) $(not a theme icon) $(add)');
});
test('appendMarkdown with escaped icon', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendMarkdown('\\$(zap) $(not a theme icon) $(add)');
assert.equal(mds.value, '\\$(zap) $(not a theme icon) $(add)');
});
});
});

View File

@@ -15,7 +15,6 @@ import { getPathFromAmdModule } from 'vs/base/common/amd';
import { isWindows, isLinux } from 'vs/base/common/platform';
import { canNormalize } from 'vs/base/common/normalization';
import { VSBuffer } from 'vs/base/common/buffer';
import { join } from 'path';
const chunkSize = 64 * 1024;
const readError = 'Error while reading';
@@ -379,12 +378,12 @@ suite('PFS', function () {
if (canNormalize && typeof process.versions['electron'] !== 'undefined' /* needs electron */) {
const id = uuid.generateUuid();
const parentDir = path.join(os.tmpdir(), 'vsctests', id);
const testDir = join(parentDir, 'pfs', id);
const testDir = path.join(parentDir, 'pfs', id);
const newDir = path.join(testDir, 'öäü');
await pfs.mkdirp(newDir, 493);
await pfs.writeFile(join(testDir, 'somefile.txt'), 'contents');
await pfs.writeFile(path.join(testDir, 'somefile.txt'), 'contents');
assert.ok(fs.existsSync(newDir));