This commit is contained in:
Alex Ross 2019-10-23 10:15:41 +02:00
commit 384464411c
211 changed files with 3131 additions and 1648 deletions

104
.github/workflows/ci.yml vendored Normal file
View file

@ -0,0 +1,104 @@
name: CI
on: [push, pull_request]
jobs:
linux:
runs-on: ubuntu-latest
env:
CHILD_CONCURRENCY: "1"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v1
# TODO: rename azure-pipelines/linux/xvfb.init to github-actions
- run: |
sudo apt-get update
sudo apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb libgtk-3-0
sudo cp build/azure-pipelines/linux/xvfb.init /etc/init.d/xvfb
sudo chmod +x /etc/init.d/xvfb
sudo update-rc.d xvfb defaults
sudo service xvfb start
name: Setup Build Environment
- uses: actions/setup-node@v1
with:
node-version: 10
# TODO: cache node modules
- run: yarn --frozen-lockfile
name: Install Dependencies
- run: yarn electron x64
name: Download Electron
- run: yarn gulp hygiene --skip-tslint
name: Run Hygiene Checks
- run: yarn gulp tslint
name: Run TSLint Checks
- run: yarn monaco-compile-check
name: Run Monaco Editor Checks
- run: yarn compile
name: Compile Sources
- run: yarn download-builtin-extensions
name: Download Built-in Extensions
- run: DISPLAY=:10 ./scripts/test.sh --tfs "Unit Tests"
name: Run Unit Tests
- run: DISPLAY=:10 ./scripts/test-integration.sh --tfs "Integration Tests"
name: Run Integration Tests
windows:
runs-on: windows-2016
env:
CHILD_CONCURRENCY: "1"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with:
node-version: 10
- uses: actions/setup-python@v1
with:
python-version: '2.x'
- run: yarn --frozen-lockfile
name: Install Dependencies
- run: yarn electron
name: Download Electron
- run: yarn gulp hygiene --skip-tslint
name: Run Hygiene Checks
- run: yarn gulp tslint
name: Run TSLint Checks
- run: yarn monaco-compile-check
name: Run Monaco Editor Checks
- run: yarn compile
name: Compile Sources
- run: yarn download-builtin-extensions
name: Download Built-in Extensions
- run: .\scripts\test.bat --tfs "Unit Tests"
name: Run Unit Tests
- run: .\scripts\test-integration.bat --tfs "Integration Tests"
name: Run Integration Tests
darwin:
runs-on: macos-latest
env:
CHILD_CONCURRENCY: "1"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with:
node-version: 10
- run: yarn --frozen-lockfile
name: Install Dependencies
- run: yarn electron x64
name: Download Electron
- run: yarn gulp hygiene --skip-tslint
name: Run Hygiene Checks
- run: yarn gulp tslint
name: Run TSLint Checks
- run: yarn monaco-compile-check
name: Run Monaco Editor Checks
- run: yarn compile
name: Compile Sources
- run: yarn download-builtin-extensions
name: Download Built-in Extensions
- run: ./scripts/test.sh --tfs "Unit Tests"
name: Run Unit Tests
- run: ./scripts/test-integration.sh --tfs "Integration Tests"
name: Run Integration Tests

View file

@ -11,7 +11,7 @@ steps:
inputs:
versionSpec: "1.x"
- script: |
yarn --frozen-lockfile
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
displayName: Install Dependencies
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1

View file

@ -19,7 +19,7 @@ steps:
inputs:
versionSpec: "1.x"
- script: |
yarn --frozen-lockfile
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
displayName: Install Dependencies
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1

View file

@ -16,6 +16,8 @@ steps:
vstsFeed: '$(ArtifactFeed)'
- powershell: |
yarn --frozen-lockfile
env:
CHILD_CONCURRENCY: "1"
displayName: Install Dependencies
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1

View file

@ -3,16 +3,14 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as path from 'path';
import * as fs from 'fs';
import * as path from 'path';
import { commands, CompletionItem, CompletionItemKind, ExtensionContext, languages, Position, Range, SnippetString, TextEdit, window, workspace } from 'vscode';
import { Disposable, LanguageClient, LanguageClientOptions, ServerOptions, TransportKind } from 'vscode-languageclient';
import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
import { getCustomDataPathsFromAllExtensions, getCustomDataPathsInAllWorkspaces } from './customData';
import { languages, window, commands, ExtensionContext, Range, Position, CompletionItem, CompletionItemKind, TextEdit, SnippetString, workspace, CompletionItemTag } from 'vscode';
import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, Disposable } from 'vscode-languageclient';
import { getCustomDataPathsInAllWorkspaces, getCustomDataPathsFromAllExtensions } from './customData';
import { isArray } from 'util';
const localize = nls.loadMessageBundle();
// this method is called when vs code is activated
export function activate(context: ExtensionContext) {
@ -45,32 +43,6 @@ export function activate(context: ExtensionContext) {
},
initializationOptions: {
dataPaths
},
middleware: {
async provideCompletionItem(document, position, context, token, next) {
const result = await next(document, position, context, token);
if (result) {
if (isArray(result)) {
return result.map(r => {
return {
...r,
tags: (r as any).deprecated ? [CompletionItemTag.Deprecated] : undefined
};
});
} else {
return {
isIncomplete: result.isIncomplete,
items: result.items.map(r => {
return {
...r,
tags: (r as any).deprecated ? [CompletionItemTag.Deprecated] : undefined
};
})
};
}
}
return result;
}
}
};

View file

@ -533,6 +533,17 @@
],
"default": "ignore",
"description": "%scss.lint.idSelector.desc%"
},
"scss.lint.unknownAtRules": {
"type": "string",
"scope": "resource",
"enum": [
"ignore",
"warning",
"error"
],
"default": "warning",
"description": "%scss.lint.unknownAtRules.desc%"
}
}
},
@ -767,6 +778,17 @@
],
"default": "ignore",
"description": "%less.lint.idSelector.desc%"
},
"less.lint.unknownAtRules": {
"type": "string",
"scope": "resource",
"enum": [
"ignore",
"warning",
"error"
],
"default": "warning",
"description": "%less.lint.unknownAtRules.desc%"
}
}
}

View file

@ -45,6 +45,7 @@
"less.lint.importStatement.desc": "Import statements do not load in parallel.",
"less.lint.propertyIgnoredDueToDisplay.desc": "Property is ignored due to the display. E.g. with `display: inline`, the `width`, `height`, `margin-top`, `margin-bottom`, and `float` properties have no effect.",
"less.lint.universalSelector.desc": "The universal selector (`*`) is known to be slow.",
"less.lint.unknownAtRules.desc": "Unknown at-rule.",
"less.lint.unknownProperties.desc": "Unknown property.",
"less.lint.validProperties.desc": "A list of properties that are not validated against the `unknownProperties` rule.",
"less.lint.unknownVendorSpecificProperties.desc": "Unknown vendor specific property.",
@ -69,6 +70,7 @@
"scss.lint.importStatement.desc": "Import statements do not load in parallel.",
"scss.lint.propertyIgnoredDueToDisplay.desc": "Property is ignored due to the display. E.g. with `display: inline`, the `width`, `height`, `margin-top`, `margin-bottom`, and `float` properties have no effect.",
"scss.lint.universalSelector.desc": "The universal selector (`*`) is known to be slow.",
"scss.lint.unknownAtRules.desc": "Unknown at-rule.",
"scss.lint.unknownProperties.desc": "Unknown property.",
"scss.lint.validProperties.desc": "A list of properties that are not validated against the `unknownProperties` rule.",
"scss.lint.unknownVendorSpecificProperties.desc": "Unknown vendor specific property.",

View file

@ -9,7 +9,7 @@
},
"main": "./out/cssServerMain",
"dependencies": {
"vscode-css-languageservice": "^4.0.3-next.11",
"vscode-css-languageservice": "^4.0.3-next.14",
"vscode-languageserver": "^6.0.0-next.1"
},
"devDependencies": {

View file

@ -781,10 +781,10 @@ supports-color@^5.3.0:
dependencies:
has-flag "^3.0.0"
vscode-css-languageservice@^4.0.3-next.11:
version "4.0.3-next.11"
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-4.0.3-next.11.tgz#b353ae30551c052e7133f6640d5f4d4755c27fb0"
integrity sha512-6rdruqzWkAbGkTw56WTMS7SmhOYIZ4Dnrs3Wc64cn/saF1f+ib76EUvISiYLZnc+S9FsZu2lnlzPeeJ3LItm2A==
vscode-css-languageservice@^4.0.3-next.14:
version "4.0.3-next.14"
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-4.0.3-next.14.tgz#dcdbaec144c948c3f1f3640147f0102e0b964468"
integrity sha512-moBCof4SxK196tZ0cZe7U96goNvYKei8xptX/35Ka+N3aIeBjB8BDa2rxsa+KcdwmXhrlgWFbkx32dBRqNZ+6Q==
dependencies:
vscode-languageserver-types "^3.15.0-next.5"
vscode-nls "^4.1.1"

View file

@ -9,7 +9,7 @@
},
"main": "./out/htmlServerMain",
"dependencies": {
"vscode-css-languageservice": "^4.0.3-next.11",
"vscode-css-languageservice": "^4.0.3-next.14",
"vscode-html-languageservice": "^3.0.4-next.6",
"vscode-languageserver": "^6.0.0-next.1",
"vscode-languageserver-types": "3.15.0-next.5",

View file

@ -611,10 +611,10 @@ supports-color@^5.3.0:
dependencies:
has-flag "^3.0.0"
vscode-css-languageservice@^4.0.3-next.11:
version "4.0.3-next.11"
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-4.0.3-next.11.tgz#b353ae30551c052e7133f6640d5f4d4755c27fb0"
integrity sha512-6rdruqzWkAbGkTw56WTMS7SmhOYIZ4Dnrs3Wc64cn/saF1f+ib76EUvISiYLZnc+S9FsZu2lnlzPeeJ3LItm2A==
vscode-css-languageservice@^4.0.3-next.14:
version "4.0.3-next.14"
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-4.0.3-next.14.tgz#dcdbaec144c948c3f1f3640147f0102e0b964468"
integrity sha512-moBCof4SxK196tZ0cZe7U96goNvYKei8xptX/35Ka+N3aIeBjB8BDa2rxsa+KcdwmXhrlgWFbkx32dBRqNZ+6Q==
dependencies:
vscode-languageserver-types "^3.15.0-next.5"
vscode-nls "^4.1.1"

View file

@ -138,6 +138,34 @@
updateScale(scale);
}
function zoomIn() {
if (scale === 'fit') {
firstZoom();
}
let i = 0;
for (; i < zoomLevels.length; ++i) {
if (zoomLevels[i] > scale) {
break;
}
}
updateScale(zoomLevels[i] || MAX_SCALE);
}
function zoomOut() {
if (scale === 'fit') {
firstZoom();
}
let i = zoomLevels.length - 1;
for (; i >= 0; --i) {
if (zoomLevels[i] < scale) {
break;
}
}
updateScale(zoomLevels[i] || MIN_SCALE);
}
window.addEventListener('keydown', (/** @type {KeyboardEvent} */ e) => {
if (!image || !hasLoadedImage) {
return;
@ -204,21 +232,9 @@
}
if (!(isMac ? altPressed : ctrlPressed)) { // zoom in
let i = 0;
for (; i < zoomLevels.length; ++i) {
if (zoomLevels[i] > scale) {
break;
}
}
updateScale(zoomLevels[i] || MAX_SCALE);
zoomIn();
} else {
let i = zoomLevels.length - 1;
for (; i >= 0; --i) {
if (zoomLevels[i] < scale) {
break;
}
}
updateScale(zoomLevels[i] || MIN_SCALE);
zoomOut();
}
});
@ -232,9 +248,6 @@
return;
}
e.preventDefault();
e.stopPropagation();
if (scale === 'fit') {
firstZoom();
}
@ -290,9 +303,18 @@
case 'setScale':
updateScale(e.data.scale);
break;
case 'setActive':
changeActive(e.data.value);
break;
case 'zoomIn':
zoomIn();
break;
case 'zoomOut':
zoomOut();
break;
}
});
}());

View file

@ -17,7 +17,9 @@
"Other"
],
"activationEvents": [
"onWebviewEditor:imagePreview.previewEditor"
"onWebviewEditor:imagePreview.previewEditor",
"onCommand:imagePreview.zoomIn",
"onCommand:imagePreview.zoomOut"
],
"contributes": {
"webviewEditors": [
@ -32,7 +34,33 @@
}
]
}
]
],
"commands": [
{
"command": "imagePreview.zoomIn",
"title": "%command.zoomIn%",
"category": "Image Preview"
},
{
"command": "imagePreview.zoomOut",
"title": "%command.zoomOut%",
"category": "Image Preview"
}
],
"menus": {
"commandPalette": [
{
"command": "imagePreview.zoomIn",
"when": "imagePreviewFocus",
"group": "1_imagePreview"
},
{
"command": "imagePreview.zoomOut",
"when": "imagePreviewFocus",
"group": "1_imagePreview"
}
]
}
},
"scripts": {
"compile": "gulp compile-extension:image-preview",

View file

@ -1,5 +1,7 @@
{
"displayName": "Image Preview",
"description": "Provides VS Code's built-in image preview",
"webviewEditors.displayName": "Image Preview"
"webviewEditors.displayName": "Image Preview",
"command.zoomIn": "Zoom in",
"command.zoomOut": "Zoom out"
}

View file

@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
import { Preview } from './preview';
import { PreviewManager } from './preview';
import { SizeStatusBarEntry } from './sizeStatusBarEntry';
import { ZoomStatusBarEntry } from './zoomStatusBarEntry';
@ -17,12 +17,22 @@ export function activate(context: vscode.ExtensionContext) {
const zoomStatusBarEntry = new ZoomStatusBarEntry();
context.subscriptions.push(zoomStatusBarEntry);
const previewManager = new PreviewManager(extensionRoot, sizeStatusBarEntry, zoomStatusBarEntry);
context.subscriptions.push(vscode.window.registerWebviewEditorProvider(
Preview.viewType,
PreviewManager.viewType,
{
async resolveWebviewEditor(resource: vscode.Uri, editor: vscode.WebviewEditor): Promise<void> {
// tslint:disable-next-line: no-unused-expression
new Preview(extensionRoot, resource, editor, sizeStatusBarEntry, zoomStatusBarEntry);
previewManager.resolve(resource, editor);
}
}));
}
context.subscriptions.push(vscode.commands.registerCommand('imagePreview.zoomIn', () => {
previewManager.activePreview?.zoomIn();
}));
context.subscriptions.push(vscode.commands.registerCommand('imagePreview.zoomOut', () => {
previewManager.activePreview?.zoomOut();
}));
}

View file

@ -11,15 +11,58 @@ import { Scale, ZoomStatusBarEntry } from './zoomStatusBarEntry';
const localize = nls.loadMessageBundle();
export class PreviewManager {
public static readonly viewType = 'imagePreview.previewEditor';
private readonly _previews = new Set<Preview>();
private _activePreview: Preview | undefined;
constructor(
private readonly extensionRoot: vscode.Uri,
private readonly sizeStatusBarEntry: SizeStatusBarEntry,
private readonly zoomStatusBarEntry: ZoomStatusBarEntry,
) { }
public resolve(
resource: vscode.Uri,
webviewEditor: vscode.WebviewEditor,
) {
const preview = new Preview(this.extensionRoot, resource, webviewEditor, this.sizeStatusBarEntry, this.zoomStatusBarEntry);
this._previews.add(preview);
this.setActivePreview(preview);
webviewEditor.onDidDispose(() => { this._previews.delete(preview); });
webviewEditor.onDidChangeViewState(() => {
if (webviewEditor.active) {
this.setActivePreview(preview);
} else if (this._activePreview === preview && !webviewEditor.active) {
this.setActivePreview(undefined);
}
});
}
public get activePreview() { return this._activePreview; }
private setActivePreview(value: Preview | undefined): void {
this._activePreview = value;
this.setPreviewActiveContext(!!value);
}
private setPreviewActiveContext(value: boolean) {
vscode.commands.executeCommand('setContext', 'imagePreviewFocus', value);
}
}
const enum PreviewState {
Disposed,
Visible,
Active,
}
export class Preview extends Disposable {
public static readonly viewType = 'imagePreview.previewEditor';
class Preview extends Disposable {
private readonly id: string = `${Date.now()}-${Math.random().toString()}`;
@ -98,6 +141,18 @@ export class Preview extends Disposable {
this.update();
}
public zoomIn() {
if (this._previewState === PreviewState.Active) {
this.webviewEditor.webview.postMessage({ type: 'zoomIn' });
}
}
public zoomOut() {
if (this._previewState === PreviewState.Active) {
this.webviewEditor.webview.postMessage({ type: 'zoomOut' });
}
}
private render() {
if (this._previewState !== PreviewState.Disposed) {
this.webviewEditor.webview.html = this.getWebiewContents();

View file

@ -5,7 +5,7 @@
import * as path from 'path';
import {
Event, EventEmitter, ExtensionContext, Task,
Event, EventEmitter, ExtensionContext, Task2 as Task,
TextDocument, ThemeIcon, TreeDataProvider, TreeItem, TreeItemCollapsibleState, Uri,
WorkspaceFolder, commands, window, workspace, tasks, Selection, TaskGroup
} from 'vscode';
@ -108,6 +108,9 @@ class NpmScript extends TreeItem {
dark: context.asAbsolutePath(path.join('resources', 'dark', 'script.svg'))
};
}
if (task.detail) {
this.tooltip = task.detail;
}
}
getFolder(): WorkspaceFolder {
@ -206,7 +209,7 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
if (!uri) {
return;
}
let task = createTask('install', 'install', selection.folder.workspaceFolder, uri, []);
let task = createTask('install', 'install', selection.folder.workspaceFolder, uri, undefined, []);
tasks.executeTask(task);
}

View file

@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import {
TaskDefinition, Task, TaskGroup, WorkspaceFolder, RelativePattern, ShellExecution, Uri, workspace,
TaskDefinition, Task2 as Task, TaskGroup, WorkspaceFolder, RelativePattern, ShellExecution, Uri, workspace,
DebugConfiguration, debug, TaskProvider, TextDocument, tasks, TaskScope, QuickPickItem
} from 'vscode';
import * as path from 'path';
@ -237,7 +237,7 @@ async function provideNpmScriptsForFolder(packageJsonUri: Uri): Promise<Task[]>
const prePostScripts = getPrePostScripts(scripts);
Object.keys(scripts).forEach(each => {
const task = createTask(each, `run ${each}`, folder!, packageJsonUri);
const task = createTask(each, `run ${each}`, folder!, packageJsonUri, scripts![each]);
const lowerCaseTaskName = each.toLowerCase();
if (isBuildTask(lowerCaseTaskName)) {
task.group = TaskGroup.Build;
@ -253,7 +253,7 @@ async function provideNpmScriptsForFolder(packageJsonUri: Uri): Promise<Task[]>
result.push(task);
});
// always add npm install (without a problem matcher)
result.push(createTask('install', 'install', folder, packageJsonUri, []));
result.push(createTask('install', 'install', folder, packageJsonUri, undefined, []));
return result;
}
@ -264,7 +264,7 @@ export function getTaskName(script: string, relativePath: string | undefined) {
return script;
}
export function createTask(script: NpmTaskDefinition | string, cmd: string, folder: WorkspaceFolder, packageJsonUri: Uri, matcher?: any): Task {
export function createTask(script: NpmTaskDefinition | string, cmd: string, folder: WorkspaceFolder, packageJsonUri: Uri, detail?: string, matcher?: any): Task {
let kind: NpmTaskDefinition;
if (typeof script === 'string') {
kind = { type: 'npm', script: script };
@ -292,7 +292,9 @@ export function createTask(script: NpmTaskDefinition | string, cmd: string, fold
}
let taskName = getTaskName(kind.script, relativePackageJson);
let cwd = path.dirname(packageJsonUri.fsPath);
return new Task(kind, folder, taskName, 'npm', new ShellExecution(getCommandLine(folder, cmd), { cwd: cwd }), matcher);
const task = new Task(kind, folder, taskName, 'npm', new ShellExecution(getCommandLine(folder, cmd), { cwd: cwd }), matcher);
task.detail = detail;
return task;
}

1035
extensions/npm/src/vscode.proposed.d.ts vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -14,7 +14,7 @@ export class TypeScriptServerError extends Error {
response: Proto.Response
): TypeScriptServerError {
const parsedResult = TypeScriptServerError.parseErrorText(version, response);
return new TypeScriptServerError(serverId, version, response, parsedResult ? parsedResult.message : undefined, parsedResult ? parsedResult.stack : undefined);
return new TypeScriptServerError(serverId, version, response, parsedResult?.message, parsedResult?.stack);
}
private constructor(
@ -24,7 +24,7 @@ export class TypeScriptServerError extends Error {
public readonly serverMessage: string | undefined,
public readonly serverStack: string | undefined
) {
super(`<${serverId}> TypeScript Server Error (${version.versionString})\n${serverMessage}\n${serverStack}`);
super(`<${serverId}> TypeScript Server Error (${version.displayName})\n${serverMessage}\n${serverStack}`);
}
public get serverErrorText() { return this.response.message; }

View file

@ -159,7 +159,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
return this.serverState.tsserverVersion;
}
}
return this.apiVersion.versionString;
return this.apiVersion.version;
}));
this.typescriptServerSpawner = new TypeScriptServerSpawner(this.versionProvider, this.logDirectoryProvider, this.pluginPathsProvider, this.logger, this.telemetryReporter, this.tracer);
@ -299,11 +299,13 @@ export default class TypeScriptServiceClient extends Disposable implements IType
"${include}": [
"${TypeScriptCommonProperties}"
],
"localTypeScriptVersion": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
"localTypeScriptVersion": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"typeScriptVersionSource": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.logTelemetry('tsserver.spawned', {
localTypeScriptVersion: this.versionProvider.localVersion ? this.versionProvider.localVersion.versionString : '',
localTypeScriptVersion: this.versionProvider.localVersion ? this.versionProvider.localVersion.displayName : '',
typeScriptVersionSource: currentVersion.source,
});
handle.onError((err: Error) => {
@ -619,7 +621,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
isAsync: false,
token,
expectsResult: true,
lowPriority: config ? config.lowPriority : undefined
lowPriority: config?.lowPriority
});
if (config?.nonRecoverable) {

View file

@ -5,6 +5,7 @@
import * as semver from 'semver';
import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
export default class API {
@ -35,7 +36,6 @@ export default class API {
public static readonly v345 = API.fromSimpleString('3.4.5');
public static readonly v350 = API.fromSimpleString('3.5.0');
public static fromVersionString(versionString: string): API {
let version = semver.valid(versionString);
if (!version) {
@ -51,8 +51,8 @@ export default class API {
}
private constructor(
public readonly versionString: string,
private readonly version: string
public readonly displayName: string,
public readonly version: string
) { }
public gte(other: API): boolean {

View file

@ -58,8 +58,8 @@ export class TypeScriptVersionPicker {
pickOptions.push({
label: (!this.useWorkspaceTsdkSetting
? '• '
: '') + localize('useVSCodeVersionOption', 'Use VS Code\'s Version'),
description: shippedVersion.versionString,
: '') + localize('useVSCodeVersionOption', "Use VS Code's Version"),
description: shippedVersion.displayName,
detail: shippedVersion.pathLabel,
id: MessageAction.useBundled,
});
@ -68,8 +68,8 @@ export class TypeScriptVersionPicker {
pickOptions.push({
label: (this.useWorkspaceTsdkSetting && this.currentVersion.path === version.path
? '• '
: '') + localize('useWorkspaceVersionOption', 'Use Workspace Version'),
description: version.versionString,
: '') + localize('useWorkspaceVersionOption', "Use Workspace Version"),
description: version.displayName,
detail: version.pathLabel,
id: MessageAction.useLocal,
version
@ -85,7 +85,7 @@ export class TypeScriptVersionPicker {
const selected = await vscode.window.showQuickPick<MyQuickPickItem>(pickOptions, {
placeHolder: localize(
'selectTsVersion',
'Select the TypeScript version used for JavaScript and TypeScript language features'),
"Select the TypeScript version used for JavaScript and TypeScript language features"),
ignoreFocusOut: firstRun,
});
@ -120,4 +120,4 @@ export class TypeScriptVersionPicker {
return { oldVersion: this.currentVersion };
}
}
}
}

View file

@ -12,8 +12,17 @@ import { RelativeWorkspacePathResolver } from './relativePathResolver';
const localize = nls.loadMessageBundle();
export const enum TypeScriptVersionSource {
Bundled = 'bundled',
TsNightlyExtension = 'ts-nightly-extension',
NodeModules = 'node-modules',
UserSetting = 'user-setting',
WorkspaceSetting = 'workspace-setting',
}
export class TypeScriptVersion {
constructor(
public readonly source: TypeScriptVersionSource,
public readonly path: string,
private readonly _pathLabel?: string
) { }
@ -23,7 +32,7 @@ export class TypeScriptVersion {
}
public get pathLabel(): string {
return typeof this._pathLabel === 'undefined' ? this.path : this._pathLabel;
return this._pathLabel ?? this.path;
}
public get isValid(): boolean {
@ -45,9 +54,9 @@ export class TypeScriptVersion {
return undefined;
}
public get versionString(): string {
public get displayName(): string {
const version = this.apiVersion;
return version ? version.versionString : localize(
return version ? version.displayName : localize(
'couldNotLoadTsVersion', 'Could not load the TypeScript version at this path');
}
@ -103,7 +112,7 @@ export class TypeScriptVersionProvider {
public get globalVersion(): TypeScriptVersion | undefined {
if (this.configuration.globalTsdk) {
const globals = this.loadVersionsFromSetting(this.configuration.globalTsdk);
const globals = this.loadVersionsFromSetting(TypeScriptVersionSource.UserSetting, this.configuration.globalTsdk);
if (globals && globals.length) {
return globals[0];
}
@ -137,7 +146,7 @@ export class TypeScriptVersionProvider {
}
public get bundledVersion(): TypeScriptVersion {
const version = this.getContributedVersion('vscode.typescript-language-features', ['..', 'node_modules']);
const version = this.getContributedVersion(TypeScriptVersionSource.Bundled, 'vscode.typescript-language-features', ['..', 'node_modules']);
if (version) {
return version;
}
@ -149,15 +158,15 @@ export class TypeScriptVersionProvider {
}
private get contributedTsNextVersion(): TypeScriptVersion | undefined {
return this.getContributedVersion('ms-vscode.vscode-typescript-next', ['node_modules']);
return this.getContributedVersion(TypeScriptVersionSource.TsNightlyExtension, 'ms-vscode.vscode-typescript-next', ['node_modules']);
}
private getContributedVersion(extensionId: string, pathToTs: readonly string[]): TypeScriptVersion | undefined {
private getContributedVersion(source: TypeScriptVersionSource, extensionId: string, pathToTs: readonly string[]): TypeScriptVersion | undefined {
try {
const extension = vscode.extensions.getExtension(extensionId);
if (extension) {
const typescriptPath = path.join(extension.extensionPath, ...pathToTs, 'typescript', 'lib');
const bundledVersion = new TypeScriptVersion(typescriptPath, '');
const bundledVersion = new TypeScriptVersion(source, typescriptPath, '');
if (bundledVersion.isValid) {
return bundledVersion;
}
@ -170,28 +179,28 @@ export class TypeScriptVersionProvider {
private get localTsdkVersions(): TypeScriptVersion[] {
const localTsdk = this.configuration.localTsdk;
return localTsdk ? this.loadVersionsFromSetting(localTsdk) : [];
return localTsdk ? this.loadVersionsFromSetting(TypeScriptVersionSource.WorkspaceSetting, localTsdk) : [];
}
private loadVersionsFromSetting(tsdkPathSetting: string): TypeScriptVersion[] {
private loadVersionsFromSetting(source: TypeScriptVersionSource, tsdkPathSetting: string): TypeScriptVersion[] {
if (path.isAbsolute(tsdkPathSetting)) {
return [new TypeScriptVersion(tsdkPathSetting)];
return [new TypeScriptVersion(source, tsdkPathSetting)];
}
const workspacePath = RelativeWorkspacePathResolver.asAbsoluteWorkspacePath(tsdkPathSetting);
if (workspacePath !== undefined) {
return [new TypeScriptVersion(workspacePath, tsdkPathSetting)];
return [new TypeScriptVersion(source, workspacePath, tsdkPathSetting)];
}
return this.loadTypeScriptVersionsFromPath(tsdkPathSetting);
return this.loadTypeScriptVersionsFromPath(source, tsdkPathSetting);
}
private get localNodeModulesVersions(): TypeScriptVersion[] {
return this.loadTypeScriptVersionsFromPath(path.join('node_modules', 'typescript', 'lib'))
return this.loadTypeScriptVersionsFromPath(TypeScriptVersionSource.NodeModules, path.join('node_modules', 'typescript', 'lib'))
.filter(x => x.isValid);
}
private loadTypeScriptVersionsFromPath(relativePath: string): TypeScriptVersion[] {
private loadTypeScriptVersionsFromPath(source: TypeScriptVersionSource, relativePath: string): TypeScriptVersion[] {
if (!vscode.workspace.workspaceFolders) {
return [];
}
@ -203,7 +212,7 @@ export class TypeScriptVersionProvider {
label = path.join(root.name, relativePath);
}
versions.push(new TypeScriptVersion(path.join(root.uri.fsPath, relativePath), label));
versions.push(new TypeScriptVersion(source, path.join(root.uri.fsPath, relativePath), label));
}
return versions;
}

View file

@ -29,7 +29,7 @@ export default class VersionStatus extends Disposable {
public onDidChangeTypeScriptVersion(version: TypeScriptVersion) {
this.showHideStatus();
this._versionBarEntry.text = version.versionString;
this._versionBarEntry.text = version.displayName;
this._versionBarEntry.tooltip = version.path;
this._versionBarEntry.command = 'typescript.selectTypeScriptVersion';
}

View file

@ -1,7 +1,7 @@
{
"name": "code-oss-dev",
"version": "1.40.0",
"distro": "c4406f67d23097ea3ddc5e388290c06ad37021eb",
"distro": "30a01ef35cdd2a2cd799a2ec6a3372c83891d59c",
"author": {
"name": "Microsoft Corporation"
},
@ -41,7 +41,7 @@
"native-is-elevated": "0.3.0",
"native-keymap": "2.0.0",
"native-watchdog": "1.2.0",
"node-pty": "0.9.0-beta19",
"node-pty": "0.9.0",
"nsfw": "1.2.5",
"onigasm-umd": "^2.2.2",
"semver-umd": "^5.5.3",

View file

@ -11,7 +11,7 @@
"iconv-lite": "0.5.0",
"jschardet": "1.6.0",
"native-watchdog": "1.2.0",
"node-pty": "0.9.0-beta19",
"node-pty": "0.9.0",
"nsfw": "1.2.5",
"onigasm-umd": "^2.2.2",
"semver-umd": "^5.5.3",

View file

@ -249,7 +249,7 @@ ms@2.0.0:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
nan@^2.0.0, nan@^2.13.2, nan@^2.14.0:
nan@^2.0.0, nan@^2.14.0:
version "2.14.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
@ -264,12 +264,12 @@ node-addon-api@1.6.2:
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.6.2.tgz#d8aad9781a5cfc4132cc2fecdbdd982534265217"
integrity sha512-479Bjw9nTE5DdBSZZWprFryHGjUaQC31y1wHo19We/k0BZlrmhqQitWoUL0cD8+scljCbIUL+E58oRDEakdGGA==
node-pty@0.9.0-beta19:
version "0.9.0-beta19"
resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-0.9.0-beta19.tgz#0fd381b2006f4665c4c2ee0509219e591842371a"
integrity sha512-MkKEvBnauGnzgXNr/oaoWQLVXm1gheIKZs4YQp8883ZiETmbEnpSvD0FU3bELcPXG5VFPRqIGsQJ4KUMBLzkPA==
node-pty@0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-0.9.0.tgz#8f9bcc0d1c5b970a3184ffd533d862c7eb6590a6"
integrity sha512-MBnCQl83FTYOu7B4xWw10AW77AAh7ThCE1VXEv+JeWj8mSpGo+0bwgsV+b23ljBFwEM9OmsOv3kM27iUPPm84g==
dependencies:
nan "^2.13.2"
nan "^2.14.0"
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"

View file

@ -23,24 +23,6 @@
outline: none;
}
.monaco-breadcrumbs .monaco-breadcrumb-item::before {
width: 14px;
height: 16px;
display: inline-block;
.monaco-breadcrumbs .monaco-breadcrumb-item:first-of-type::before {
content: ' ';
}
.monaco-breadcrumbs .monaco-breadcrumb-item:not(:nth-child(2))::before {
background-image: url(./tree-collapsed-light.svg);
opacity: .7;
background-size: 16px;
background-position: 50% 50%;
}
.vs-dark .monaco-breadcrumbs .monaco-breadcrumb-item:not(:nth-child(2))::before {
background-image: url(./tree-collapsed-dark.svg);
}
.hc-black .monaco-breadcrumbs .monaco-breadcrumb-item:not(:nth-child(2))::before {
background-image: url(./tree-collapsed-hc.svg);
}

View file

@ -328,7 +328,9 @@ export class BreadcrumbsWidget {
item.render(container);
container.tabIndex = -1;
container.setAttribute('role', 'listitem');
dom.addClass(container, 'monaco-breadcrumb-item');
dom.addClasses(container, 'monaco-breadcrumb-item');
const iconContainer = dom.$('.codicon.codicon-chevron-right');
container.appendChild(iconContainer);
}
private _onClick(event: IMouseEvent): void {

View file

@ -5,7 +5,7 @@
@font-face {
font-family: "codicon";
src: url("./codicon.ttf?10ac421d405314bb3250169d97fc2c62") format("truetype");
src: url("./codicon.ttf?3a05fcfc657285cdb4cd3eba790b7462") format("truetype");
}
.codicon[class*='codicon-'] {
@ -109,258 +109,275 @@
.codicon-clock:before { content: "\ea82" }
.codicon-folder:before { content: "\ea83" }
.codicon-file-directory:before { content: "\ea83" }
.codicon-symbol-folder:before { content: "\ea83" }
.codicon-logo-github:before { content: "\ea84" }
.codicon-mark-github:before { content: "\ea84" }
.codicon-github:before { content: "\ea84" }
.codicon-terminal:before { content: "\ea85" }
.codicon-console:before { content: "\ea85" }
.codicon-zap:before { content: "\ea86" }
.codicon-event:before { content: "\ea86" }
.codicon-symbol-event:before { content: "\ea86" }
.codicon-error:before { content: "\ea87" }
.codicon-stop:before { content: "\ea87" }
.codicon-variable:before { content: "\ea88" }
.codicon-symbol-variable:before { content: "\ea88" }
.codicon-array:before { content: "\ea8a" }
.codicon-symbol-array:before { content: "\ea8a" }
.codicon-symbol-module:before { content: "\ea8b" }
.codicon-symbol-package:before { content: "\ea8b" }
.codicon-symbol-namespace:before { content: "\ea8b" }
.codicon-symbol-object:before { content: "\ea8b" }
.codicon-symbol-method:before { content: "\ea8c" }
.codicon-symbol-function:before { content: "\ea8c" }
.codicon-symbol-constructor:before { content: "\ea8c" }
.codicon-symbol-boolean:before { content: "\ea8f" }
.codicon-symbol-null:before { content: "\ea8f" }
.codicon-symbol-numeric:before { content: "\ea90" }
.codicon-symbol-number:before { content: "\ea90" }
.codicon-symbol-structure:before { content: "\ea91" }
.codicon-symbol-struct:before { content: "\ea91" }
.codicon-symbol-parameter:before { content: "\ea92" }
.codicon-symbol-type-parameter:before { content: "\ea92" }
.codicon-symbol-key:before { content: "\ea93" }
.codicon-symbol-string:before { content: "\ea93" }
.codicon-symbol-text:before { content: "\ea93" }
.codicon-symbol-reference:before { content: "\ea94" }
.codicon-go-to-file:before { content: "\ea94" }
.codicon-symbol-enum:before { content: "\ea95" }
.codicon-symbol-value:before { content: "\ea95" }
.codicon-symbol-ruler:before { content: "\ea96" }
.codicon-symbol-unit:before { content: "\ea96" }
.codicon-activate-breakpoints:before { content: "\f101" }
.codicon-archive:before { content: "\f102" }
.codicon-array:before { content: "\f103" }
.codicon-arrow-both:before { content: "\f104" }
.codicon-arrow-down:before { content: "\f105" }
.codicon-arrow-left:before { content: "\f106" }
.codicon-arrow-right:before { content: "\f107" }
.codicon-arrow-small-down:before { content: "\f108" }
.codicon-arrow-small-left:before { content: "\f109" }
.codicon-arrow-small-right:before { content: "\f10a" }
.codicon-arrow-small-up:before { content: "\f10b" }
.codicon-arrow-up:before { content: "\f10c" }
.codicon-bell:before { content: "\f10d" }
.codicon-bold:before { content: "\f10e" }
.codicon-book:before { content: "\f10f" }
.codicon-bookmark:before { content: "\f110" }
.codicon-boolean:before { content: "\f111" }
.codicon-breakpoint-conditional-unverified:before { content: "\f112" }
.codicon-breakpoint-conditional:before { content: "\f113" }
.codicon-breakpoint-data-unverified:before { content: "\f114" }
.codicon-breakpoint-data:before { content: "\f115" }
.codicon-breakpoint-log-unverified:before { content: "\f116" }
.codicon-breakpoint-log:before { content: "\f117" }
.codicon-briefcase:before { content: "\f118" }
.codicon-broadcast:before { content: "\f119" }
.codicon-browser:before { content: "\f11a" }
.codicon-bug:before { content: "\f11b" }
.codicon-calendar:before { content: "\f11c" }
.codicon-case-sensitive:before { content: "\f11d" }
.codicon-check:before { content: "\f11e" }
.codicon-checklist:before { content: "\f11f" }
.codicon-chevron-down:before { content: "\f120" }
.codicon-chevron-left:before { content: "\f121" }
.codicon-chevron-right:before { content: "\f122" }
.codicon-chevron-up:before { content: "\f123" }
.codicon-chrome-close:before { content: "\f124" }
.codicon-chrome-maximize:before { content: "\f125" }
.codicon-chrome-minimize:before { content: "\f126" }
.codicon-chrome-restore:before { content: "\f127" }
.codicon-circle-outline:before { content: "\f128" }
.codicon-circle-slash:before { content: "\f129" }
.codicon-circuit-board:before { content: "\f12a" }
.codicon-class:before { content: "\f12b" }
.codicon-clear-all:before { content: "\f12c" }
.codicon-clippy:before { content: "\f12d" }
.codicon-close-all:before { content: "\f12e" }
.codicon-cloud-download:before { content: "\f12f" }
.codicon-cloud-upload:before { content: "\f130" }
.codicon-code:before { content: "\f131" }
.codicon-collapse-all:before { content: "\f132" }
.codicon-color-mode:before { content: "\f133" }
.codicon-color:before { content: "\f134" }
.codicon-comment-discussion:before { content: "\f135" }
.codicon-compare-changes:before { content: "\f136" }
.codicon-constant:before { content: "\f137" }
.codicon-continue:before { content: "\f138" }
.codicon-credit-card:before { content: "\f139" }
.codicon-current-and-breakpoint:before { content: "\f13a" }
.codicon-current:before { content: "\f13b" }
.codicon-dash:before { content: "\f13c" }
.codicon-dashboard:before { content: "\f13d" }
.codicon-database:before { content: "\f13e" }
.codicon-debug-disconnect:before { content: "\f13f" }
.codicon-debug-pause:before { content: "\f140" }
.codicon-debug-restart:before { content: "\f141" }
.codicon-debug-start:before { content: "\f142" }
.codicon-debug-step-into:before { content: "\f143" }
.codicon-debug-step-out:before { content: "\f144" }
.codicon-debug-step-over:before { content: "\f145" }
.codicon-debug-stop:before { content: "\f146" }
.codicon-debug:before { content: "\f147" }
.codicon-device-camera-video:before { content: "\f148" }
.codicon-device-camera:before { content: "\f149" }
.codicon-device-mobile:before { content: "\f14a" }
.codicon-diff-added:before { content: "\f14b" }
.codicon-diff-ignored:before { content: "\f14c" }
.codicon-diff-modified:before { content: "\f14d" }
.codicon-diff-removed:before { content: "\f14e" }
.codicon-diff-renamed:before { content: "\f14f" }
.codicon-diff:before { content: "\f150" }
.codicon-discard:before { content: "\f151" }
.codicon-editor-layout:before { content: "\f152" }
.codicon-ellipsis:before { content: "\f153" }
.codicon-empty-window:before { content: "\f154" }
.codicon-enumerator-member:before { content: "\f155" }
.codicon-enumerator:before { content: "\f156" }
.codicon-exclude:before { content: "\f157" }
.codicon-extensions:before { content: "\f158" }
.codicon-eye-closed:before { content: "\f159" }
.codicon-field:before { content: "\f15a" }
.codicon-file-binary:before { content: "\f15b" }
.codicon-file-code:before { content: "\f15c" }
.codicon-file-media:before { content: "\f15d" }
.codicon-file-pdf:before { content: "\f15e" }
.codicon-file-submodule:before { content: "\f15f" }
.codicon-file-symlink-directory:before { content: "\f160" }
.codicon-file-symlink-file:before { content: "\f161" }
.codicon-file-zip:before { content: "\f162" }
.codicon-files:before { content: "\f163" }
.codicon-filter:before { content: "\f164" }
.codicon-flame:before { content: "\f165" }
.codicon-fold-down:before { content: "\f166" }
.codicon-fold-up:before { content: "\f167" }
.codicon-fold:before { content: "\f168" }
.codicon-folder-active:before { content: "\f169" }
.codicon-folder-opened:before { content: "\f16a" }
.codicon-gear:before { content: "\f16b" }
.codicon-gift:before { content: "\f16c" }
.codicon-gist-secret:before { content: "\f16d" }
.codicon-gist:before { content: "\f16e" }
.codicon-git-commit:before { content: "\f16f" }
.codicon-git-compare:before { content: "\f170" }
.codicon-git-merge:before { content: "\f171" }
.codicon-github-action:before { content: "\f172" }
.codicon-github-alt:before { content: "\f173" }
.codicon-globe:before { content: "\f174" }
.codicon-go-to-file:before { content: "\f175" }
.codicon-grabber:before { content: "\f176" }
.codicon-graph:before { content: "\f177" }
.codicon-gripper:before { content: "\f178" }
.codicon-heart:before { content: "\f179" }
.codicon-home:before { content: "\f17a" }
.codicon-horizontal-rule:before { content: "\f17b" }
.codicon-hubot:before { content: "\f17c" }
.codicon-inbox:before { content: "\f17d" }
.codicon-interface:before { content: "\f17e" }
.codicon-issue-closed:before { content: "\f17f" }
.codicon-issue-reopened:before { content: "\f180" }
.codicon-issues:before { content: "\f181" }
.codicon-italic:before { content: "\f182" }
.codicon-jersey:before { content: "\f183" }
.codicon-json:before { content: "\f184" }
.codicon-kebab-vertical:before { content: "\f185" }
.codicon-key:before { content: "\f186" }
.codicon-keyword:before { content: "\f187" }
.codicon-law:before { content: "\f188" }
.codicon-lightbulb-autofix:before { content: "\f189" }
.codicon-link-external:before { content: "\f18a" }
.codicon-link:before { content: "\f18b" }
.codicon-list-ordered:before { content: "\f18c" }
.codicon-list-unordered:before { content: "\f18d" }
.codicon-live-share:before { content: "\f18e" }
.codicon-loading:before { content: "\f18f" }
.codicon-location:before { content: "\f190" }
.codicon-mail-read:before { content: "\f191" }
.codicon-mail:before { content: "\f192" }
.codicon-markdown:before { content: "\f193" }
.codicon-megaphone:before { content: "\f194" }
.codicon-mention:before { content: "\f195" }
.codicon-method:before { content: "\f196" }
.codicon-milestone:before { content: "\f197" }
.codicon-misc:before { content: "\f198" }
.codicon-mortar-board:before { content: "\f199" }
.codicon-move:before { content: "\f19a" }
.codicon-multiple-windows:before { content: "\f19b" }
.codicon-mute:before { content: "\f19c" }
.codicon-namespace:before { content: "\f19d" }
.codicon-no-newline:before { content: "\f19e" }
.codicon-note:before { content: "\f19f" }
.codicon-numeric:before { content: "\f1a0" }
.codicon-octoface:before { content: "\f1a1" }
.codicon-open-preview:before { content: "\f1a2" }
.codicon-operator:before { content: "\f1a3" }
.codicon-package:before { content: "\f1a4" }
.codicon-paintcan:before { content: "\f1a5" }
.codicon-parameter:before { content: "\f1a6" }
.codicon-pin:before { content: "\f1a7" }
.codicon-play:before { content: "\f1a8" }
.codicon-plug:before { content: "\f1a9" }
.codicon-preserve-case:before { content: "\f1aa" }
.codicon-preview:before { content: "\f1ab" }
.codicon-project:before { content: "\f1ac" }
.codicon-property:before { content: "\f1ad" }
.codicon-pulse:before { content: "\f1ae" }
.codicon-question:before { content: "\f1af" }
.codicon-quote:before { content: "\f1b0" }
.codicon-radio-tower:before { content: "\f1b1" }
.codicon-reactions:before { content: "\f1b2" }
.codicon-references:before { content: "\f1b3" }
.codicon-refresh:before { content: "\f1b4" }
.codicon-regex:before { content: "\f1b5" }
.codicon-remote:before { content: "\f1b6" }
.codicon-remove:before { content: "\f1b7" }
.codicon-replace-all:before { content: "\f1b8" }
.codicon-replace:before { content: "\f1b9" }
.codicon-repo-clone:before { content: "\f1ba" }
.codicon-repo-force-push:before { content: "\f1bb" }
.codicon-repo-pull:before { content: "\f1bc" }
.codicon-repo-push:before { content: "\f1bd" }
.codicon-report:before { content: "\f1be" }
.codicon-request-changes:before { content: "\f1bf" }
.codicon-rocket:before { content: "\f1c0" }
.codicon-root-folder-opened:before { content: "\f1c1" }
.codicon-root-folder:before { content: "\f1c2" }
.codicon-rss:before { content: "\f1c3" }
.codicon-ruby:before { content: "\f1c4" }
.codicon-ruler:before { content: "\f1c5" }
.codicon-save-all:before { content: "\f1c6" }
.codicon-save-as:before { content: "\f1c7" }
.codicon-save:before { content: "\f1c8" }
.codicon-screen-full:before { content: "\f1c9" }
.codicon-screen-normal:before { content: "\f1ca" }
.codicon-search-stop:before { content: "\f1cb" }
.codicon-selection:before { content: "\f1cc" }
.codicon-server:before { content: "\f1cd" }
.codicon-settings:before { content: "\f1ce" }
.codicon-shield:before { content: "\f1cf" }
.codicon-smiley:before { content: "\f1d0" }
.codicon-snippet:before { content: "\f1d1" }
.codicon-sort-precedence:before { content: "\f1d2" }
.codicon-split-horizontal:before { content: "\f1d3" }
.codicon-split-vertical:before { content: "\f1d4" }
.codicon-squirrel:before { content: "\f1d5" }
.codicon-star-full:before { content: "\f1d6" }
.codicon-star-half:before { content: "\f1d7" }
.codicon-string:before { content: "\f1d8" }
.codicon-structure:before { content: "\f1d9" }
.codicon-tasklist:before { content: "\f1da" }
.codicon-telescope:before { content: "\f1db" }
.codicon-text-size:before { content: "\f1dc" }
.codicon-three-bars:before { content: "\f1dd" }
.codicon-thumbsdown:before { content: "\f1de" }
.codicon-thumbsup:before { content: "\f1df" }
.codicon-tools:before { content: "\f1e0" }
.codicon-triangle-down:before { content: "\f1e1" }
.codicon-triangle-left:before { content: "\f1e2" }
.codicon-triangle-right:before { content: "\f1e3" }
.codicon-triangle-up:before { content: "\f1e4" }
.codicon-twitter:before { content: "\f1e5" }
.codicon-unfold:before { content: "\f1e6" }
.codicon-unlock:before { content: "\f1e7" }
.codicon-unmute:before { content: "\f1e8" }
.codicon-unverified:before { content: "\f1e9" }
.codicon-variable:before { content: "\f1ea" }
.codicon-verified:before { content: "\f1eb" }
.codicon-versions:before { content: "\f1ec" }
.codicon-vm-active:before { content: "\f1ed" }
.codicon-vm-outline:before { content: "\f1ee" }
.codicon-vm-running:before { content: "\f1ef" }
.codicon-watch:before { content: "\f1f0" }
.codicon-whitespace:before { content: "\f1f1" }
.codicon-whole-word:before { content: "\f1f2" }
.codicon-window:before { content: "\f1f3" }
.codicon-word-wrap:before { content: "\f1f4" }
.codicon-zoom-in:before { content: "\f1f5" }
.codicon-zoom-out:before { content: "\f1f6" }
.codicon-arrow-both:before { content: "\f103" }
.codicon-arrow-down:before { content: "\f104" }
.codicon-arrow-left:before { content: "\f105" }
.codicon-arrow-right:before { content: "\f106" }
.codicon-arrow-small-down:before { content: "\f107" }
.codicon-arrow-small-left:before { content: "\f108" }
.codicon-arrow-small-right:before { content: "\f109" }
.codicon-arrow-small-up:before { content: "\f10a" }
.codicon-arrow-up:before { content: "\f10b" }
.codicon-bell:before { content: "\f10c" }
.codicon-bold:before { content: "\f10d" }
.codicon-book:before { content: "\f10e" }
.codicon-bookmark:before { content: "\f10f" }
.codicon-breakpoint-conditional-unverified:before { content: "\f110" }
.codicon-breakpoint-conditional:before { content: "\f111" }
.codicon-breakpoint-data-unverified:before { content: "\f112" }
.codicon-breakpoint-data:before { content: "\f113" }
.codicon-breakpoint-log-unverified:before { content: "\f114" }
.codicon-breakpoint-log:before { content: "\f115" }
.codicon-briefcase:before { content: "\f116" }
.codicon-broadcast:before { content: "\f117" }
.codicon-browser:before { content: "\f118" }
.codicon-bug:before { content: "\f119" }
.codicon-calendar:before { content: "\f11a" }
.codicon-case-sensitive:before { content: "\f11b" }
.codicon-check:before { content: "\f11c" }
.codicon-checklist:before { content: "\f11d" }
.codicon-chevron-down:before { content: "\f11e" }
.codicon-chevron-left:before { content: "\f11f" }
.codicon-chevron-right:before { content: "\f120" }
.codicon-chevron-up:before { content: "\f121" }
.codicon-chrome-close:before { content: "\f122" }
.codicon-chrome-maximize:before { content: "\f123" }
.codicon-chrome-minimize:before { content: "\f124" }
.codicon-chrome-restore:before { content: "\f125" }
.codicon-circle-outline:before { content: "\f126" }
.codicon-circle-slash:before { content: "\f127" }
.codicon-circuit-board:before { content: "\f128" }
.codicon-clear-all:before { content: "\f129" }
.codicon-clippy:before { content: "\f12a" }
.codicon-close-all:before { content: "\f12b" }
.codicon-cloud-download:before { content: "\f12c" }
.codicon-cloud-upload:before { content: "\f12d" }
.codicon-code:before { content: "\f12e" }
.codicon-collapse-all:before { content: "\f12f" }
.codicon-color-mode:before { content: "\f130" }
.codicon-comment-discussion:before { content: "\f131" }
.codicon-compare-changes:before { content: "\f132" }
.codicon-continue:before { content: "\f133" }
.codicon-credit-card:before { content: "\f134" }
.codicon-current-and-breakpoint:before { content: "\f135" }
.codicon-current:before { content: "\f136" }
.codicon-dash:before { content: "\f137" }
.codicon-dashboard:before { content: "\f138" }
.codicon-database:before { content: "\f139" }
.codicon-debug-disconnect:before { content: "\f13a" }
.codicon-debug-pause:before { content: "\f13b" }
.codicon-debug-restart:before { content: "\f13c" }
.codicon-debug-start:before { content: "\f13d" }
.codicon-debug-step-into:before { content: "\f13e" }
.codicon-debug-step-out:before { content: "\f13f" }
.codicon-debug-step-over:before { content: "\f140" }
.codicon-debug-stop:before { content: "\f141" }
.codicon-debug:before { content: "\f142" }
.codicon-device-camera-video:before { content: "\f143" }
.codicon-device-camera:before { content: "\f144" }
.codicon-device-mobile:before { content: "\f145" }
.codicon-diff-added:before { content: "\f146" }
.codicon-diff-ignored:before { content: "\f147" }
.codicon-diff-modified:before { content: "\f148" }
.codicon-diff-removed:before { content: "\f149" }
.codicon-diff-renamed:before { content: "\f14a" }
.codicon-diff:before { content: "\f14b" }
.codicon-discard:before { content: "\f14c" }
.codicon-editor-layout:before { content: "\f14d" }
.codicon-ellipsis:before { content: "\f14e" }
.codicon-empty-window:before { content: "\f14f" }
.codicon-exclude:before { content: "\f150" }
.codicon-extensions:before { content: "\f151" }
.codicon-eye-closed:before { content: "\f152" }
.codicon-file-binary:before { content: "\f153" }
.codicon-file-code:before { content: "\f154" }
.codicon-file-media:before { content: "\f155" }
.codicon-file-pdf:before { content: "\f156" }
.codicon-file-submodule:before { content: "\f157" }
.codicon-file-symlink-directory:before { content: "\f158" }
.codicon-file-symlink-file:before { content: "\f159" }
.codicon-file-zip:before { content: "\f15a" }
.codicon-files:before { content: "\f15b" }
.codicon-filter:before { content: "\f15c" }
.codicon-flame:before { content: "\f15d" }
.codicon-fold-down:before { content: "\f15e" }
.codicon-fold-up:before { content: "\f15f" }
.codicon-fold:before { content: "\f160" }
.codicon-folder-active:before { content: "\f161" }
.codicon-folder-opened:before { content: "\f162" }
.codicon-gear:before { content: "\f163" }
.codicon-gift:before { content: "\f164" }
.codicon-gist-secret:before { content: "\f165" }
.codicon-gist:before { content: "\f166" }
.codicon-git-commit:before { content: "\f167" }
.codicon-git-compare:before { content: "\f168" }
.codicon-git-merge:before { content: "\f169" }
.codicon-github-action:before { content: "\f16a" }
.codicon-github-alt:before { content: "\f16b" }
.codicon-globe:before { content: "\f16c" }
.codicon-grabber:before { content: "\f16d" }
.codicon-graph:before { content: "\f16e" }
.codicon-gripper:before { content: "\f16f" }
.codicon-heart:before { content: "\f170" }
.codicon-home:before { content: "\f171" }
.codicon-horizontal-rule:before { content: "\f172" }
.codicon-hubot:before { content: "\f173" }
.codicon-inbox:before { content: "\f174" }
.codicon-issue-closed:before { content: "\f175" }
.codicon-issue-reopened:before { content: "\f176" }
.codicon-issues:before { content: "\f177" }
.codicon-italic:before { content: "\f178" }
.codicon-jersey:before { content: "\f179" }
.codicon-json:before { content: "\f17a" }
.codicon-kebab-vertical:before { content: "\f17b" }
.codicon-law:before { content: "\f17c" }
.codicon-lightbulb-autofix:before { content: "\f17d" }
.codicon-link-external:before { content: "\f17e" }
.codicon-link:before { content: "\f17f" }
.codicon-list-ordered:before { content: "\f180" }
.codicon-list-unordered:before { content: "\f181" }
.codicon-live-share:before { content: "\f182" }
.codicon-loading:before { content: "\f183" }
.codicon-location:before { content: "\f184" }
.codicon-mail-read:before { content: "\f185" }
.codicon-mail:before { content: "\f186" }
.codicon-markdown:before { content: "\f187" }
.codicon-megaphone:before { content: "\f188" }
.codicon-mention:before { content: "\f189" }
.codicon-milestone:before { content: "\f18a" }
.codicon-mortar-board:before { content: "\f18b" }
.codicon-move:before { content: "\f18c" }
.codicon-multiple-windows:before { content: "\f18d" }
.codicon-mute:before { content: "\f18e" }
.codicon-no-newline:before { content: "\f18f" }
.codicon-note:before { content: "\f190" }
.codicon-octoface:before { content: "\f191" }
.codicon-open-preview:before { content: "\f192" }
.codicon-package:before { content: "\f193" }
.codicon-paintcan:before { content: "\f194" }
.codicon-pin:before { content: "\f195" }
.codicon-play:before { content: "\f196" }
.codicon-plug:before { content: "\f197" }
.codicon-preserve-case:before { content: "\f198" }
.codicon-preview:before { content: "\f199" }
.codicon-project:before { content: "\f19a" }
.codicon-pulse:before { content: "\f19b" }
.codicon-question:before { content: "\f19c" }
.codicon-quote:before { content: "\f19d" }
.codicon-radio-tower:before { content: "\f19e" }
.codicon-reactions:before { content: "\f19f" }
.codicon-references:before { content: "\f1a0" }
.codicon-refresh:before { content: "\f1a1" }
.codicon-regex:before { content: "\f1a2" }
.codicon-remote:before { content: "\f1a3" }
.codicon-remove:before { content: "\f1a4" }
.codicon-replace-all:before { content: "\f1a5" }
.codicon-replace:before { content: "\f1a6" }
.codicon-repo-clone:before { content: "\f1a7" }
.codicon-repo-force-push:before { content: "\f1a8" }
.codicon-repo-pull:before { content: "\f1a9" }
.codicon-repo-push:before { content: "\f1aa" }
.codicon-report:before { content: "\f1ab" }
.codicon-request-changes:before { content: "\f1ac" }
.codicon-rocket:before { content: "\f1ad" }
.codicon-root-folder-opened:before { content: "\f1ae" }
.codicon-root-folder:before { content: "\f1af" }
.codicon-rss:before { content: "\f1b0" }
.codicon-ruby:before { content: "\f1b1" }
.codicon-save-all:before { content: "\f1b2" }
.codicon-save-as:before { content: "\f1b3" }
.codicon-save:before { content: "\f1b4" }
.codicon-screen-full:before { content: "\f1b5" }
.codicon-screen-normal:before { content: "\f1b6" }
.codicon-search-stop:before { content: "\f1b7" }
.codicon-selection:before { content: "\f1b8" }
.codicon-server:before { content: "\f1b9" }
.codicon-settings:before { content: "\f1ba" }
.codicon-shield:before { content: "\f1bb" }
.codicon-smiley:before { content: "\f1bc" }
.codicon-sort-precedence:before { content: "\f1bd" }
.codicon-split-horizontal:before { content: "\f1be" }
.codicon-split-vertical:before { content: "\f1bf" }
.codicon-squirrel:before { content: "\f1c0" }
.codicon-star-full:before { content: "\f1c1" }
.codicon-star-half:before { content: "\f1c2" }
.codicon-symbol-class:before { content: "\f1c3" }
.codicon-symbol-color:before { content: "\f1c4" }
.codicon-symbol-constant:before { content: "\f1c5" }
.codicon-symbol-enum-member:before { content: "\f1c6" }
.codicon-symbol-field:before { content: "\f1c7" }
.codicon-symbol-file:before { content: "\f1c8" }
.codicon-symbol-interface:before { content: "\f1c9" }
.codicon-symbol-keyword:before { content: "\f1ca" }
.codicon-symbol-misc:before { content: "\f1cb" }
.codicon-symbol-operator:before { content: "\f1cc" }
.codicon-symbol-property:before { content: "\f1cd" }
.codicon-symbol-snippet:before { content: "\f1ce" }
.codicon-tasklist:before { content: "\f1cf" }
.codicon-telescope:before { content: "\f1d0" }
.codicon-text-size:before { content: "\f1d1" }
.codicon-three-bars:before { content: "\f1d2" }
.codicon-thumbsdown:before { content: "\f1d3" }
.codicon-thumbsup:before { content: "\f1d4" }
.codicon-tools:before { content: "\f1d5" }
.codicon-triangle-down:before { content: "\f1d6" }
.codicon-triangle-left:before { content: "\f1d7" }
.codicon-triangle-right:before { content: "\f1d8" }
.codicon-triangle-up:before { content: "\f1d9" }
.codicon-twitter:before { content: "\f1da" }
.codicon-unfold:before { content: "\f1db" }
.codicon-unlock:before { content: "\f1dc" }
.codicon-unmute:before { content: "\f1dd" }
.codicon-unverified:before { content: "\f1de" }
.codicon-verified:before { content: "\f1df" }
.codicon-versions:before { content: "\f1e0" }
.codicon-vm-active:before { content: "\f1e1" }
.codicon-vm-outline:before { content: "\f1e2" }
.codicon-vm-running:before { content: "\f1e3" }
.codicon-watch:before { content: "\f1e4" }
.codicon-whitespace:before { content: "\f1e5" }
.codicon-whole-word:before { content: "\f1e6" }
.codicon-window:before { content: "\f1e7" }
.codicon-word-wrap:before { content: "\f1e8" }
.codicon-zoom-in:before { content: "\f1e9" }
.codicon-zoom-out:before { content: "\f1ea" }

View file

@ -20,6 +20,7 @@
padding-right: 6px;
width: 16px;
height: 22px;
line-height: inherit !important;
display: inline-block;
/* fonts icons */

View file

@ -8,7 +8,7 @@ import { startsWithIgnoreCase, equalsIgnoreCase, endsWith, rtrim } from 'vs/base
import { CharCode } from 'vs/base/common/charCode';
import { sep, posix, isAbsolute, join, normalize } from 'vs/base/common/path';
function isPathSeparator(code: number) {
export function isPathSeparator(code: number) {
return code === CharCode.Slash || code === CharCode.Backslash;
}
@ -282,4 +282,4 @@ export function isRootOrDriveLetter(path: string): boolean {
}
return pathNormalized === posix.sep;
}
}

View file

@ -246,7 +246,8 @@ export function relativePath(from: URI, to: URI, ignoreCase = hasToIgnoreCase(fr
}
/**
* Resolves a absolute or relative path against a base URI.
* Resolves an absolute or relative path against a base URI.
* The path can be relative or absolute posix or a Windows path
*/
export function resolvePath(base: URI, path: string): URI {
if (base.scheme === Schemas.file) {
@ -256,6 +257,12 @@ export function resolvePath(base: URI, path: string): URI {
path: newURI.path
});
}
if (path.indexOf('/') === -1) { // no slashes? it's likely a Windows path
path = extpath.toSlashes(path);
if (/^[a-zA-Z]:(\/|$)/.test(path)) { // starts with a drive letter
path = '/' + path;
}
}
return base.with({
path: paths.posix.resolve(base.path, path)
});
@ -353,4 +360,4 @@ export function toLocalResource(resource: URI, authority: string | undefined): U
}
return resource.with({ scheme: Schemas.file });
}
}

View file

@ -4,6 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { CharCode } from 'vs/base/common/charCode';
import { Constants } from 'vs/base/common/uint';
export function isFalsyOrWhitespace(str: string | undefined): boolean {
if (!str || typeof str !== 'string') {
@ -487,6 +488,190 @@ export function isLowSurrogate(charCode: number): boolean {
return (0xDC00 <= charCode && charCode <= 0xDFFF);
}
/**
* get the code point that begins at offset `offset`
*/
export function getNextCodePoint(str: string, len: number, offset: number): number {
const charCode = str.charCodeAt(offset);
if (isHighSurrogate(charCode) && offset + 1 < len) {
const nextCharCode = str.charCodeAt(offset + 1);
if (isLowSurrogate(nextCharCode)) {
return ((charCode - 0xD800) << 10) + (nextCharCode - 0xDC00) + 0x10000;
}
}
return charCode;
}
/**
* get the code point that ends right before offset `offset`
*/
function getPrevCodePoint(str: string, offset: number): number {
const charCode = str.charCodeAt(offset - 1);
if (isLowSurrogate(charCode) && offset > 1) {
const prevCharCode = str.charCodeAt(offset - 2);
if (isHighSurrogate(prevCharCode)) {
return ((prevCharCode - 0xD800) << 10) + (charCode - 0xDC00) + 0x10000;
}
}
return charCode;
}
export function nextCharLength(str: string, offset: number): number {
const initialOffset = offset;
const len = str.length;
let codePoint = getNextCodePoint(str, len, offset);
offset += (codePoint >= Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);
while (offset < len) {
codePoint = getNextCodePoint(str, len, offset);
if (!isUnicodeMark(codePoint)) {
break;
}
offset += (codePoint >= Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);
}
return (offset - initialOffset);
}
export function prevCharLength(str: string, offset: number): number {
const initialOffset = offset;
let codePoint = getPrevCodePoint(str, offset);
offset -= (codePoint >= Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);
while (offset > 0 && isUnicodeMark(codePoint)) {
codePoint = getPrevCodePoint(str, offset);
offset -= (codePoint >= Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);
}
return (initialOffset - offset);
}
function _getCharContainingOffset(str: string, offset: number): [number, number] {
const len = str.length;
const initialOffset = offset;
const initialCodePoint = getNextCodePoint(str, len, offset);
offset += (initialCodePoint >= Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);
// extend to the right
while (offset < len) {
const nextCodePoint = getNextCodePoint(str, len, offset);
if (!isUnicodeMark(nextCodePoint)) {
break;
}
offset += (nextCodePoint >= Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);
}
const endOffset = offset;
// extend to the left
offset = initialOffset;
let codePoint = initialCodePoint;
while (offset > 0 && isUnicodeMark(codePoint)) {
codePoint = getPrevCodePoint(str, offset);
offset -= (codePoint >= Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);
}
return [offset, endOffset];
}
export function getCharContainingOffset(str: string, offset: number): [number, number] {
if (offset > 0 && isLowSurrogate(str.charCodeAt(offset))) {
return _getCharContainingOffset(str, offset - 1);
}
return _getCharContainingOffset(str, offset);
}
export function isUnicodeMark(codePoint: number): boolean {
return MarkClassifier.getInstance().isUnicodeMark(codePoint);
}
class MarkClassifier {
private static _INSTANCE: MarkClassifier | null = null;
public static getInstance(): MarkClassifier {
if (!MarkClassifier._INSTANCE) {
MarkClassifier._INSTANCE = new MarkClassifier();
}
return MarkClassifier._INSTANCE;
}
private arr: Uint8Array;
constructor() {
// generated using https://github.com/alexandrudima/unicode-utils/blob/master/generate-mark-test.js
const ranges = [
0x0300, 0x036F, 0x0483, 0x0489, 0x0591, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x05C2, 0x05C4, 0x05C5,
0x05C7, 0x05C7, 0x0610, 0x061A, 0x064B, 0x065F, 0x0670, 0x0670, 0x06D6, 0x06DC, 0x06DF, 0x06E4,
0x06E7, 0x06E8, 0x06EA, 0x06ED, 0x0711, 0x0711, 0x0730, 0x074A, 0x07A6, 0x07B0, 0x07EB, 0x07F3,
0x07FD, 0x07FD, 0x0816, 0x0819, 0x081B, 0x0823, 0x0825, 0x0827, 0x0829, 0x082D, 0x0859, 0x085B,
0x08D3, 0x08E1, 0x08E3, 0x0903, 0x093A, 0x093C, 0x093E, 0x094F, 0x0951, 0x0957, 0x0962, 0x0963,
0x0981, 0x0983, 0x09BC, 0x09BC, 0x09BE, 0x09CD, 0x09D7, 0x09D7, 0x09E2, 0x09E3, 0x09FE, 0x0A03,
0x0A3C, 0x0A51, 0x0A70, 0x0A71, 0x0A75, 0x0A75, 0x0A81, 0x0A83, 0x0ABC, 0x0ABC, 0x0ABE, 0x0ACD,
0x0AE2, 0x0AE3, 0x0AFA, 0x0B03, 0x0B3C, 0x0B3C, 0x0B3E, 0x0B57, 0x0B62, 0x0B63, 0x0B82, 0x0B82,
0x0BBE, 0x0BCD, 0x0BD7, 0x0BD7, 0x0C00, 0x0C04, 0x0C3E, 0x0C56, 0x0C62, 0x0C63, 0x0C81, 0x0C83,
0x0CBC, 0x0CBC, 0x0CBE, 0x0CD6, 0x0CE2, 0x0CE3, 0x0D00, 0x0D03, 0x0D3B, 0x0D3C, 0x0D3E, 0x0D4D,
0x0D57, 0x0D57, 0x0D62, 0x0D63, 0x0D81, 0x0D83, 0x0DCA, 0x0DDF, 0x0DF2, 0x0DF3, 0x0E31, 0x0E31,
0x0E34, 0x0E3A, 0x0E47, 0x0E4E, 0x0EB1, 0x0EB1, 0x0EB4, 0x0EBC, 0x0EC8, 0x0ECD, 0x0F18, 0x0F19,
0x0F35, 0x0F35, 0x0F37, 0x0F37, 0x0F39, 0x0F39, 0x0F3E, 0x0F3F, 0x0F71, 0x0F84, 0x0F86, 0x0F87,
0x0F8D, 0x0FBC, 0x0FC6, 0x0FC6, 0x102B, 0x103E, 0x1056, 0x1059, 0x105E, 0x1060, 0x1062, 0x1064,
0x1067, 0x106D, 0x1071, 0x1074, 0x1082, 0x108D, 0x108F, 0x108F, 0x109A, 0x109D, 0x135D, 0x135F,
0x1712, 0x1714, 0x1732, 0x1734, 0x1752, 0x1753, 0x1772, 0x1773, 0x17B4, 0x17D3, 0x17DD, 0x17DD,
0x180B, 0x180D, 0x1885, 0x1886, 0x18A9, 0x18A9, 0x1920, 0x193B, 0x1A17, 0x1A1B, 0x1A55, 0x1A7F,
0x1AB0, 0x1B04, 0x1B34, 0x1B44, 0x1B6B, 0x1B73, 0x1B80, 0x1B82, 0x1BA1, 0x1BAD, 0x1BE6, 0x1BF3,
0x1C24, 0x1C37, 0x1CD0, 0x1CD2, 0x1CD4, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4, 0x1CF7, 0x1CF9,
0x1DC0, 0x1DFF, 0x20D0, 0x20F0, 0x2CEF, 0x2CF1, 0x2D7F, 0x2D7F, 0x2DE0, 0x2DFF, 0x302A, 0x302F,
0x3099, 0x309A, 0xA66F, 0xA672, 0xA674, 0xA67D, 0xA69E, 0xA69F, 0xA6F0, 0xA6F1, 0xA802, 0xA802,
0xA806, 0xA806, 0xA80B, 0xA80B, 0xA823, 0xA827, 0xA82C, 0xA82C, 0xA880, 0xA881, 0xA8B4, 0xA8C5,
0xA8E0, 0xA8F1, 0xA8FF, 0xA8FF, 0xA926, 0xA92D, 0xA947, 0xA953, 0xA980, 0xA983, 0xA9B3, 0xA9C0,
0xA9E5, 0xA9E5, 0xAA29, 0xAA36, 0xAA43, 0xAA43, 0xAA4C, 0xAA4D, 0xAA7B, 0xAA7D, 0xAAB0, 0xAAB0,
0xAAB2, 0xAAB4, 0xAAB7, 0xAAB8, 0xAABE, 0xAABF, 0xAAC1, 0xAAC1, 0xAAEB, 0xAAEF, 0xAAF5, 0xAAF6,
0xABE3, 0xABEA, 0xABEC, 0xABED, 0xFB1E, 0xFB1E, 0xFE00, 0xFE0F, 0xFE20, 0xFE2F, 0x101FD, 0x101FD,
0x102E0, 0x102E0, 0x10376, 0x1037A, 0x10A01, 0x10A0F, 0x10A38, 0x10A3F, 0x10AE5, 0x10AE6, 0x10D24, 0x10D27,
0x10EAB, 0x10EAC, 0x10F46, 0x10F50, 0x11000, 0x11002, 0x11038, 0x11046, 0x1107F, 0x11082, 0x110B0, 0x110BA,
0x11100, 0x11102, 0x11127, 0x11134, 0x11145, 0x11146, 0x11173, 0x11173, 0x11180, 0x11182, 0x111B3, 0x111C0,
0x111C9, 0x111CC, 0x111CE, 0x111CF, 0x1122C, 0x11237, 0x1123E, 0x1123E, 0x112DF, 0x112EA, 0x11300, 0x11303,
0x1133B, 0x1133C, 0x1133E, 0x1134D, 0x11357, 0x11357, 0x11362, 0x11374, 0x11435, 0x11446, 0x1145E, 0x1145E,
0x114B0, 0x114C3, 0x115AF, 0x115C0, 0x115DC, 0x115DD, 0x11630, 0x11640, 0x116AB, 0x116B7, 0x1171D, 0x1172B,
0x1182C, 0x1183A, 0x11930, 0x1193E, 0x11940, 0x11940, 0x11942, 0x11943, 0x119D1, 0x119E0, 0x119E4, 0x119E4,
0x11A01, 0x11A0A, 0x11A33, 0x11A39, 0x11A3B, 0x11A3E, 0x11A47, 0x11A47, 0x11A51, 0x11A5B, 0x11A8A, 0x11A99,
0x11C2F, 0x11C3F, 0x11C92, 0x11CB6, 0x11D31, 0x11D45, 0x11D47, 0x11D47, 0x11D8A, 0x11D97, 0x11EF3, 0x11EF6,
0x16AF0, 0x16AF4, 0x16B30, 0x16B36, 0x16F4F, 0x16F4F, 0x16F51, 0x16F92, 0x16FE4, 0x16FF1, 0x1BC9D, 0x1BC9E,
0x1D165, 0x1D169, 0x1D16D, 0x1D172, 0x1D17B, 0x1D182, 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1D242, 0x1D244,
0x1DA00, 0x1DA36, 0x1DA3B, 0x1DA6C, 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, 0x1DA9B, 0x1E02A, 0x1E130, 0x1E136,
0x1E2EC, 0x1E2EF, 0x1E8D0, 0x1E8D6, 0x1E944, 0x1E94A, 0xE0100, 0xE01EF
];
const maxCodePoint = ranges[ranges.length - 1];
const arrLen = Math.ceil(maxCodePoint / 8);
const arr = new Uint8Array(arrLen);
for (let i = 0, len = ranges.length / 2; i < len; i++) {
const from = ranges[2 * i];
const to = ranges[2 * i + 1];
for (let j = from; j <= to; j++) {
const div8 = j >>> 3;
const mod8 = j & 7;
arr[div8] = arr[div8] | (1 << mod8);
}
}
this.arr = arr;
}
public isUnicodeMark(codePoint: number): boolean {
const div8 = codePoint >>> 3;
const mod8 = codePoint & 7;
if (div8 >= this.arr.length) {
return false;
}
return (this.arr[div8] & (1 << mod8)) ? true : false;
}
}
/**
* Generated using https://github.com/alexandrudima/unicode-utils/blob/master/generate-rtl-test.js
*/
@ -502,7 +687,7 @@ export function containsRTL(str: string): boolean {
/**
* Generated using https://github.com/alexandrudima/unicode-utils/blob/master/generate-emoji-test.js
*/
const CONTAINS_EMOJI = /(?:[\u231A\u231B\u23F0\u23F3\u2600-\u27BF\u2B50\u2B55]|\uD83C[\uDDE6-\uDDFF\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F\uDE80-\uDEF8]|\uD83E[\uDD00-\uDDE6])/;
const CONTAINS_EMOJI = /(?:[\u231A\u231B\u23F0\u23F3\u2600-\u27BF\u2B50\u2B55]|\uD83C[\uDDE6-\uDDFF\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F\uDE80-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD00-\uDDFF\uDE70-\uDE73\uDE78-\uDE82\uDE90-\uDE95])/;
export function containsEmoji(str: string): boolean {
return CONTAINS_EMOJI.test(str);
@ -572,6 +757,18 @@ export function isFullWidthCharacter(charCode: number): boolean {
);
}
/**
* A fast function (therefore imprecise) to check if code points are emojis.
* Generated using https://github.com/alexandrudima/unicode-utils/blob/master/generate-emoji-test.js
*/
export function isEmojiImprecise(x: number): boolean {
return (
(x >= 0x1F1E6 && x <= 0x1F1FF) || (x >= 9728 && x <= 10175) || (x >= 127744 && x <= 128591)
|| (x >= 128640 && x <= 128764) || (x >= 128992 && x <= 129003) || (x >= 129280 && x <= 129535)
|| (x >= 129648 && x <= 129651) || (x >= 129656 && x <= 129666) || (x >= 129680 && x <= 129685)
);
}
/**
* Given a string and a max length returns a shorted version. Shorting
* happens at favorable positions - such as whitespace or punctuation characters.

View file

@ -35,7 +35,7 @@ export const enum Constants {
*/
MAX_UINT_32 = 4294967295, // 2^32 - 1
UNICODE_SUPPLEMENTARY_PLANE_BEGIN = 0x010000
}
export function toUint8(v: number): number {

View file

@ -70,7 +70,8 @@
width: 16px;
height: 16px;
margin-right: 4px;
display: inline-block;
display: flex;
align-items: center;
vertical-align: middle;
flex-shrink: 0;
}
@ -161,4 +162,4 @@
.monaco-quick-open-widget .quick-open-tree .monaco-highlighted-label .highlight {
font-weight: bold;
}
}

View file

@ -8,7 +8,7 @@ import { URI } from 'vs/base/common/uri';
import { isWindows } from 'vs/base/common/platform';
import { toSlashes } from 'vs/base/common/extpath';
import { startsWith } from 'vs/base/common/strings';
import { isAbsolute } from 'vs/base/common/path';
import { win32, posix } from 'vs/base/common/path';
suite('Resources', () => {
@ -294,7 +294,8 @@ suite('Resources', () => {
const actual = resolvePath(u1, path);
assertEqualURI(actual, expected, `from ${u1.toString()} and ${path}`);
if (!isAbsolute(path)) {
const p = path.indexOf('/') !== -1 ? posix : win32;
if (!p.isAbsolute(path)) {
let expectedPath = isWindows ? toSlashes(path) : path;
expectedPath = startsWith(expectedPath, './') ? expectedPath.substr(2) : expectedPath;
assert.equal(relativePath(u1, actual), expectedPath, `relativePath (${u1.toString()}) on actual (${actual.toString()}) should be to path (${expectedPath})`);
@ -335,6 +336,10 @@ suite('Resources', () => {
assertResolve(URI.parse('foo://server/foo/bar'), 'file.js', URI.parse('foo://server/foo/bar/file.js'));
assertResolve(URI.parse('foo://server/foo/bar'), './file.js', URI.parse('foo://server/foo/bar/file.js'));
assertResolve(URI.parse('foo://server/foo/bar'), './file.js', URI.parse('foo://server/foo/bar/file.js'));
assertResolve(URI.parse('foo://server/foo/bar'), 'c:\\a1\\b1', URI.parse('foo://server/c:/a1/b1'));
assertResolve(URI.parse('foo://server/foo/bar'), 'c:\\', URI.parse('foo://server/c:'));
});
test('isEqual', () => {

View file

@ -206,6 +206,8 @@ class WorkspaceProvider implements IWorkspaceProvider {
static QUERY_PARAM_FOLDER = 'folder';
static QUERY_PARAM_WORKSPACE = 'workspace';
static QUERY_PARAM_PAYLOAD = 'payload';
constructor(
public readonly workspace: IWorkspace,
public readonly payload: object
@ -216,27 +218,7 @@ class WorkspaceProvider implements IWorkspaceProvider {
return; // return early if workspace and environment is not changing and we are reusing window
}
// Empty
let targetHref: string | undefined = undefined;
if (!workspace) {
targetHref = `${document.location.origin}${document.location.pathname}?${WorkspaceProvider.QUERY_PARAM_EMPTY_WINDOW}=true`;
}
// Folder
else if (isFolderToOpen(workspace)) {
targetHref = `${document.location.origin}${document.location.pathname}?${WorkspaceProvider.QUERY_PARAM_FOLDER}=${workspace.folderUri.path}`;
}
// Workspace
else if (isWorkspaceToOpen(workspace)) {
targetHref = `${document.location.origin}${document.location.pathname}?${WorkspaceProvider.QUERY_PARAM_WORKSPACE}=${workspace.workspaceUri.path}`;
}
// Environment
if (options?.payload) {
targetHref += `&payload=${encodeURIComponent(JSON.stringify(options.payload))}`;
}
const targetHref = this.createTargetUrl(workspace, options);
if (targetHref) {
if (options?.reuse) {
window.location.href = targetHref;
@ -250,6 +232,32 @@ class WorkspaceProvider implements IWorkspaceProvider {
}
}
private createTargetUrl(workspace: IWorkspace, options?: { reuse?: boolean, payload?: object }): string | undefined {
// Empty
let targetHref: string | undefined = undefined;
if (!workspace) {
targetHref = `${document.location.origin}${document.location.pathname}?${WorkspaceProvider.QUERY_PARAM_EMPTY_WINDOW}=true`;
}
// Folder
else if (isFolderToOpen(workspace)) {
targetHref = `${document.location.origin}${document.location.pathname}?${WorkspaceProvider.QUERY_PARAM_FOLDER}=${encodeURIComponent(workspace.folderUri.toString())}`;
}
// Workspace
else if (isWorkspaceToOpen(workspace)) {
targetHref = `${document.location.origin}${document.location.pathname}?${WorkspaceProvider.QUERY_PARAM_WORKSPACE}=${encodeURIComponent(workspace.workspaceUri.toString())}`;
}
// Append payload if any
if (options?.payload) {
targetHref += `&${WorkspaceProvider.QUERY_PARAM_PAYLOAD}=${encodeURIComponent(JSON.stringify(options.payload))}`;
}
return targetHref;
}
private isSame(workspaceA: IWorkspace, workspaceB: IWorkspace): boolean {
if (!workspaceA || !workspaceB) {
return workspaceA === workspaceB; // both empty
@ -276,32 +284,49 @@ class WorkspaceProvider implements IWorkspaceProvider {
throw new Error('Missing web configuration element');
}
const options: IWorkbenchConstructionOptions & { folderUri?: UriComponents, workspaceUri?: UriComponents } = JSON.parse(configElementAttribute);
// Determine workspace to open
// Find workspace to open and payload
let foundWorkspace = false;
let workspace: IWorkspace;
if (options.folderUri) {
workspace = { folderUri: URI.revive(options.folderUri) };
} else if (options.workspaceUri) {
workspace = { workspaceUri: URI.revive(options.workspaceUri) };
} else {
workspace = undefined;
}
// Find payload
let payload = Object.create(null);
if (document.location.search) {
const query = document.location.search.substring(1);
const vars = query.split('&');
for (let p of vars) {
const pair = p.split('=');
if (pair.length === 2) {
const [key, value] = pair;
if (key === 'payload') {
payload = JSON.parse(decodeURIComponent(value));
break;
}
}
const query = new URL(document.location.href).searchParams;
query.forEach((value, key) => {
switch (key) {
// Folder
case WorkspaceProvider.QUERY_PARAM_FOLDER:
workspace = { folderUri: URI.parse(value) };
foundWorkspace = true;
break;
// Workspace
case WorkspaceProvider.QUERY_PARAM_WORKSPACE:
workspace = { workspaceUri: URI.parse(value) };
foundWorkspace = true;
break;
// Empty
case WorkspaceProvider.QUERY_PARAM_EMPTY_WINDOW:
workspace = undefined;
foundWorkspace = true;
break;
// Payload
case WorkspaceProvider.QUERY_PARAM_PAYLOAD:
payload = JSON.parse(value);
break;
}
});
// If no workspace is provided through the URL, check for config attribute from server
const options: IWorkbenchConstructionOptions & { folderUri?: UriComponents, workspaceUri?: UriComponents } = JSON.parse(configElementAttribute);
if (!foundWorkspace) {
if (options.folderUri) {
workspace = { folderUri: URI.revive(options.folderUri) };
} else if (options.workspaceUri) {
workspace = { workspaceUri: URI.revive(options.workspaceUri) };
} else {
workspace = undefined;
}
}

View file

@ -118,7 +118,6 @@ export class ViewCursor {
private _prepareRender(ctx: RenderingContext): ViewCursorRenderData | null {
let textContent = '';
let textContentClassName = '';
if (this._cursorStyle === TextEditorCursorStyle.Line || this._cursorStyle === TextEditorCursorStyle.LineThin) {
const visibleRange = ctx.visibleRangeForPosition(this._position);
@ -126,26 +125,32 @@ export class ViewCursor {
// Outside viewport
return null;
}
let width: number;
if (this._cursorStyle === TextEditorCursorStyle.Line) {
width = dom.computeScreenAwareSize(this._lineCursorWidth > 0 ? this._lineCursorWidth : 2);
if (width > 2) {
const lineContent = this._context.model.getLineContent(this._position.lineNumber);
textContent = lineContent.charAt(this._position.column - 1);
const nextCharLength = strings.nextCharLength(lineContent, this._position.column - 1);
textContent = lineContent.substr(this._position.column - 1, nextCharLength);
}
} else {
width = dom.computeScreenAwareSize(1);
}
let left = visibleRange.left;
if (width >= 2 && left >= 1) {
// try to center cursor
left -= 1;
}
const top = ctx.getVerticalOffsetForLineNumber(this._position.lineNumber) - ctx.bigNumbersDelta;
return new ViewCursorRenderData(top, left, width, this._lineHeight, textContent, textContentClassName);
return new ViewCursorRenderData(top, left, width, this._lineHeight, textContent, '');
}
const visibleRangeForCharacter = ctx.linesVisibleRangesForRange(new Range(this._position.lineNumber, this._position.column, this._position.lineNumber, this._position.column + 1), false);
const lineContent = this._context.model.getLineContent(this._position.lineNumber);
const nextCharLength = strings.nextCharLength(lineContent, this._position.column - 1);
const visibleRangeForCharacter = ctx.linesVisibleRangesForRange(new Range(this._position.lineNumber, this._position.column, this._position.lineNumber, this._position.column + nextCharLength), false);
if (!visibleRangeForCharacter || visibleRangeForCharacter.length === 0 || visibleRangeForCharacter[0].ranges.length === 0) {
// Outside viewport
@ -155,12 +160,10 @@ export class ViewCursor {
const range = visibleRangeForCharacter[0].ranges[0];
const width = range.width < 1 ? this._typicalHalfwidthCharacterWidth : range.width;
let textContentClassName = '';
if (this._cursorStyle === TextEditorCursorStyle.Block) {
const lineData = this._context.model.getViewLineData(this._position.lineNumber);
textContent = lineData.content.charAt(this._position.column - 1);
if (strings.isHighSurrogate(lineData.content.charCodeAt(this._position.column - 1))) {
textContent += lineData.content.charAt(this._position.column);
}
textContent = lineContent.substr(this._position.column - 1, nextCharLength);
const tokenIndex = lineData.tokens.findTokenIndexAtOffset(this._position.column - 1);
textContentClassName = lineData.tokens.getClassName(tokenIndex);
}

View file

@ -173,6 +173,7 @@ export class Cursor extends viewEvents.ViewEventEmitter implements ICursors {
private _isHandling: boolean;
private _isDoingComposition: boolean;
private _selectionsWhenCompositionStarted: Selection[] | null;
private _columnSelectData: IColumnSelectData | null;
private _autoClosedActions: AutoClosedAction[];
private _prevEditOperationType: EditOperationType;
@ -188,6 +189,7 @@ export class Cursor extends viewEvents.ViewEventEmitter implements ICursors {
this._isHandling = false;
this._isDoingComposition = false;
this._selectionsWhenCompositionStarted = null;
this._columnSelectData = null;
this._autoClosedActions = [];
this._prevEditOperationType = EditOperationType.Other;
@ -667,6 +669,7 @@ export class Cursor extends viewEvents.ViewEventEmitter implements ICursors {
if (handlerId === H.CompositionStart) {
this._isDoingComposition = true;
this._selectionsWhenCompositionStarted = this.getSelections().slice(0);
return;
}
@ -757,7 +760,8 @@ export class Cursor extends viewEvents.ViewEventEmitter implements ICursors {
if (!this._isDoingComposition && source === 'keyboard') {
// composition finishes, let's check if we need to auto complete if necessary.
const autoClosedCharacters = AutoClosedAction.getAllAutoClosedCharacters(this._autoClosedActions);
this._executeEditOperation(TypeOperations.compositionEndWithInterceptors(this._prevEditOperationType, this.context.config, this.context.model, this.getSelections(), autoClosedCharacters));
this._executeEditOperation(TypeOperations.compositionEndWithInterceptors(this._prevEditOperationType, this.context.config, this.context.model, this._selectionsWhenCompositionStarted, this.getSelections(), autoClosedCharacters));
this._selectionsWhenCompositionStarted = null;
}
}
@ -765,19 +769,17 @@ export class Cursor extends viewEvents.ViewEventEmitter implements ICursors {
if (!this._isDoingComposition && source === 'keyboard') {
// If this event is coming straight from the keyboard, look for electric characters and enter
for (let i = 0, len = text.length; i < len; i++) {
let charCode = text.charCodeAt(i);
let chr: string;
if (strings.isHighSurrogate(charCode) && i + 1 < len) {
chr = text.charAt(i) + text.charAt(i + 1);
i++;
} else {
chr = text.charAt(i);
}
const len = text.length;
let offset = 0;
while (offset < len) {
const charLength = strings.nextCharLength(text, offset);
const chr = text.substr(offset, charLength);
// Here we must interpret each typed character individually
const autoClosedCharacters = AutoClosedAction.getAllAutoClosedCharacters(this._autoClosedActions);
this._executeEditOperation(TypeOperations.typeWithInterceptors(this._prevEditOperationType, this.context.config, this.context.model, this.getSelections(), autoClosedCharacters, chr));
offset += charLength;
}
} else {

View file

@ -19,6 +19,7 @@ import { IAutoClosingPair, StandardAutoClosingPairConditional } from 'vs/editor/
import { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';
import { VerticalRevealType } from 'vs/editor/common/view/viewEvents';
import { IViewModel } from 'vs/editor/common/viewModel/viewModel';
import { Constants } from 'vs/base/common/uint';
export interface IColumnSelectData {
isReal: boolean;
@ -509,66 +510,53 @@ export class EditOperationResult {
*/
export class CursorColumns {
public static isLowSurrogate(model: ICursorSimpleModel, lineNumber: number, charOffset: number): boolean {
let lineContent = model.getLineContent(lineNumber);
if (charOffset < 0 || charOffset >= lineContent.length) {
return false;
}
return strings.isLowSurrogate(lineContent.charCodeAt(charOffset));
}
public static isHighSurrogate(model: ICursorSimpleModel, lineNumber: number, charOffset: number): boolean {
let lineContent = model.getLineContent(lineNumber);
if (charOffset < 0 || charOffset >= lineContent.length) {
return false;
}
return strings.isHighSurrogate(lineContent.charCodeAt(charOffset));
}
public static isInsideSurrogatePair(model: ICursorSimpleModel, lineNumber: number, column: number): boolean {
return this.isHighSurrogate(model, lineNumber, column - 2);
}
public static visibleColumnFromColumn(lineContent: string, column: number, tabSize: number): number {
let endOffset = lineContent.length;
if (endOffset > column - 1) {
endOffset = column - 1;
}
const lineContentLength = lineContent.length;
const endOffset = column - 1 < lineContentLength ? column - 1 : lineContentLength;
let result = 0;
for (let i = 0; i < endOffset; i++) {
let charCode = lineContent.charCodeAt(i);
if (charCode === CharCode.Tab) {
result = this.nextRenderTabStop(result, tabSize);
} else if (strings.isFullWidthCharacter(charCode)) {
result = result + 2;
let i = 0;
while (i < endOffset) {
const codePoint = strings.getNextCodePoint(lineContent, endOffset, i);
i += (codePoint >= Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);
if (codePoint === CharCode.Tab) {
result = CursorColumns.nextRenderTabStop(result, tabSize);
} else {
result = result + 1;
while (i < endOffset) {
const nextCodePoint = strings.getNextCodePoint(lineContent, endOffset, i);
if (!strings.isUnicodeMark(nextCodePoint)) {
break;
}
i += (nextCodePoint >= Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);
}
if (strings.isFullWidthCharacter(codePoint) || strings.isEmojiImprecise(codePoint)) {
result = result + 2;
} else {
result = result + 1;
}
}
}
return result;
}
public static toStatusbarColumn(lineContent: string, column: number, tabSize: number): number {
let endOffset = lineContent.length;
if (endOffset > column - 1) {
endOffset = column - 1;
}
const lineContentLength = lineContent.length;
const endOffset = column - 1 < lineContentLength ? column - 1 : lineContentLength;
let result = 0;
for (let i = 0; i < endOffset; i++) {
let charCode = lineContent.charCodeAt(i);
if (charCode === CharCode.Tab) {
result = this.nextRenderTabStop(result, tabSize);
let i = 0;
while (i < endOffset) {
const codePoint = strings.getNextCodePoint(lineContent, endOffset, i);
i += (codePoint >= Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);
if (codePoint === CharCode.Tab) {
result = CursorColumns.nextRenderTabStop(result, tabSize);
} else {
if (strings.isHighSurrogate(charCode)) {
result = result + 1;
i = i + 1;
} else {
result = result + 1;
}
result = result + 1;
}
}
return result + 1;
}
@ -584,29 +572,43 @@ export class CursorColumns {
const lineLength = lineContent.length;
let beforeVisibleColumn = 0;
for (let i = 0; i < lineLength; i++) {
let charCode = lineContent.charCodeAt(i);
let beforeColumn = 1;
let i = 0;
while (i < lineLength) {
const codePoint = strings.getNextCodePoint(lineContent, lineLength, i);
i += (codePoint >= Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);
let afterVisibleColumn: number;
if (charCode === CharCode.Tab) {
afterVisibleColumn = this.nextRenderTabStop(beforeVisibleColumn, tabSize);
} else if (strings.isFullWidthCharacter(charCode)) {
afterVisibleColumn = beforeVisibleColumn + 2;
if (codePoint === CharCode.Tab) {
afterVisibleColumn = CursorColumns.nextRenderTabStop(beforeVisibleColumn, tabSize);
} else {
afterVisibleColumn = beforeVisibleColumn + 1;
while (i < lineLength) {
const nextCodePoint = strings.getNextCodePoint(lineContent, lineLength, i);
if (!strings.isUnicodeMark(nextCodePoint)) {
break;
}
i += (nextCodePoint >= Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN ? 2 : 1);
}
if (strings.isFullWidthCharacter(codePoint) || strings.isEmojiImprecise(codePoint)) {
afterVisibleColumn = beforeVisibleColumn + 2;
} else {
afterVisibleColumn = beforeVisibleColumn + 1;
}
}
const afterColumn = i + 1;
if (afterVisibleColumn >= visibleColumn) {
let prevDelta = visibleColumn - beforeVisibleColumn;
let afterDelta = afterVisibleColumn - visibleColumn;
if (afterDelta < prevDelta) {
return i + 2;
const beforeDelta = visibleColumn - beforeVisibleColumn;
const afterDelta = afterVisibleColumn - visibleColumn;
if (afterDelta < beforeDelta) {
return afterColumn;
} else {
return i + 1;
return beforeColumn;
}
}
beforeVisibleColumn = afterVisibleColumn;
beforeColumn = afterColumn;
}
// walked the entire string

View file

@ -6,6 +6,7 @@
import { CursorColumns, CursorConfiguration, ICursorSimpleModel, SingleCursorState } from 'vs/editor/common/controller/cursorCommon';
import { Position } from 'vs/editor/common/core/position';
import { Range } from 'vs/editor/common/core/range';
import * as strings from 'vs/base/common/strings';
export class CursorPosition {
_cursorPositionBrand: void;
@ -23,21 +24,19 @@ export class CursorPosition {
export class MoveOperations {
public static left(config: CursorConfiguration, model: ICursorSimpleModel, lineNumber: number, column: number): CursorPosition {
public static leftPosition(model: ICursorSimpleModel, lineNumber: number, column: number): Position {
if (column > model.getLineMinColumn(lineNumber)) {
if (CursorColumns.isLowSurrogate(model, lineNumber, column - 2)) {
// character before column is a low surrogate
column = column - 2;
} else {
column = column - 1;
}
column = column - strings.prevCharLength(model.getLineContent(lineNumber), column - 1);
} else if (lineNumber > 1) {
lineNumber = lineNumber - 1;
column = model.getLineMaxColumn(lineNumber);
}
return new Position(lineNumber, column);
}
return new CursorPosition(lineNumber, column, 0);
public static left(config: CursorConfiguration, model: ICursorSimpleModel, lineNumber: number, column: number): CursorPosition {
const pos = MoveOperations.leftPosition(model, lineNumber, column);
return new CursorPosition(pos.lineNumber, pos.column, 0);
}
public static moveLeft(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean, noOfColumns: number): SingleCursorState {
@ -57,21 +56,19 @@ export class MoveOperations {
return cursor.move(inSelectionMode, lineNumber, column, 0);
}
public static right(config: CursorConfiguration, model: ICursorSimpleModel, lineNumber: number, column: number): CursorPosition {
public static rightPosition(model: ICursorSimpleModel, lineNumber: number, column: number): Position {
if (column < model.getLineMaxColumn(lineNumber)) {
if (CursorColumns.isHighSurrogate(model, lineNumber, column - 1)) {
// character after column is a high surrogate
column = column + 2;
} else {
column = column + 1;
}
column = column + strings.nextCharLength(model.getLineContent(lineNumber), column - 1);
} else if (lineNumber < model.getLineCount()) {
lineNumber = lineNumber + 1;
column = model.getLineMinColumn(lineNumber);
}
return new Position(lineNumber, column);
}
return new CursorPosition(lineNumber, column, 0);
public static right(config: CursorConfiguration, model: ICursorSimpleModel, lineNumber: number, column: number): CursorPosition {
const pos = MoveOperations.rightPosition(model, lineNumber, column);
return new CursorPosition(pos.lineNumber, pos.column, 0);
}
public static moveRight(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean, noOfColumns: number): SingleCursorState {
@ -102,15 +99,9 @@ export class MoveOperations {
column = model.getLineMaxColumn(lineNumber);
} else {
column = Math.min(model.getLineMaxColumn(lineNumber), column);
if (CursorColumns.isInsideSurrogatePair(model, lineNumber, column)) {
column = column - 1;
}
}
} else {
column = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, currentVisibleColumn);
if (CursorColumns.isInsideSurrogatePair(model, lineNumber, column)) {
column = column - 1;
}
}
leftoverVisibleColumns = currentVisibleColumn - CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize);
@ -160,15 +151,9 @@ export class MoveOperations {
column = model.getLineMinColumn(lineNumber);
} else {
column = Math.min(model.getLineMaxColumn(lineNumber), column);
if (CursorColumns.isInsideSurrogatePair(model, lineNumber, column)) {
column = column - 1;
}
}
} else {
column = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, currentVisibleColumn);
if (CursorColumns.isInsideSurrogatePair(model, lineNumber, column)) {
column = column - 1;
}
}
leftoverVisibleColumns = currentVisibleColumn - CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize);

View file

@ -755,7 +755,12 @@ export class TypeOperations {
/**
* This is very similar with typing, but the character is already in the text buffer!
*/
public static compositionEndWithInterceptors(prevEditOperationType: EditOperationType, config: CursorConfiguration, model: ITextModel, selections: Selection[], autoClosedCharacters: Range[]): EditOperationResult | null {
public static compositionEndWithInterceptors(prevEditOperationType: EditOperationType, config: CursorConfiguration, model: ITextModel, selectionsWhenCompositionStarted: Selection[] | null, selections: Selection[], autoClosedCharacters: Range[]): EditOperationResult | null {
if (!selectionsWhenCompositionStarted || Selection.selectionsArrEqual(selectionsWhenCompositionStarted, selections)) {
// no content was typed
return null;
}
let ch: string | null = null;
// extract last typed character
for (const selection of selections) {

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 {

View file

@ -954,7 +954,7 @@ export namespace SymbolKinds {
* @internal
*/
export function toCssClassName(kind: SymbolKind, inline?: boolean): string {
return `symbol-icon ${inline ? 'inline' : 'block'} ${byKind.get(kind) || 'property'}`;
return `codicon ${inline ? 'inline' : 'block'} codicon-symbol-${byKind.get(kind) || 'property'}`;
}
}

View file

@ -94,10 +94,12 @@ type Brackets = [Range, Range];
class BracketsData {
public readonly position: Position;
public readonly brackets: Brackets | null;
public readonly options: ModelDecorationOptions;
constructor(position: Position, brackets: Brackets | null) {
constructor(position: Position, brackets: Brackets | null, options: ModelDecorationOptions) {
this.position = position;
this.brackets = brackets;
this.options = options;
}
}
@ -245,8 +247,7 @@ export class BracketMatchingController extends Disposable implements editorCommo
}
}
private static readonly _DECORATION_OPTIONS = ModelDecorationOptions.register({
private static readonly _DECORATION_OPTIONS_WITH_OVERVIEW_RULER = ModelDecorationOptions.register({
stickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,
className: 'bracket-match',
overviewRuler: {
@ -255,6 +256,11 @@ export class BracketMatchingController extends Disposable implements editorCommo
}
});
private static readonly _DECORATION_OPTIONS_WITHOUT_OVERVIEW_RULER = ModelDecorationOptions.register({
stickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,
className: 'bracket-match'
});
private _updateBrackets(): void {
if (!this._matchBrackets) {
return;
@ -262,11 +268,11 @@ export class BracketMatchingController extends Disposable implements editorCommo
this._recomputeBrackets();
let newDecorations: IModelDeltaDecoration[] = [], newDecorationsLen = 0;
for (let i = 0, len = this._lastBracketsData.length; i < len; i++) {
let brackets = this._lastBracketsData[i].brackets;
for (const bracketData of this._lastBracketsData) {
let brackets = bracketData.brackets;
if (brackets) {
newDecorations[newDecorationsLen++] = { range: brackets[0], options: BracketMatchingController._DECORATION_OPTIONS };
newDecorations[newDecorationsLen++] = { range: brackets[1], options: BracketMatchingController._DECORATION_OPTIONS };
newDecorations[newDecorationsLen++] = { range: brackets[0], options: bracketData.options };
newDecorations[newDecorationsLen++] = { range: brackets[1], options: bracketData.options };
}
}
@ -325,10 +331,12 @@ export class BracketMatchingController extends Disposable implements editorCommo
newData[newDataLen++] = previousData[previousIndex];
} else {
let brackets = model.matchBracket(position);
let options = BracketMatchingController._DECORATION_OPTIONS_WITH_OVERVIEW_RULER;
if (!brackets) {
brackets = model.findEnclosingBrackets(position);
options = BracketMatchingController._DECORATION_OPTIONS_WITHOUT_OVERVIEW_RULER;
}
newData[newDataLen++] = new BracketsData(position, brackets);
newData[newDataLen++] = new BracketsData(position, brackets, options);
}
}

View file

@ -5,57 +5,17 @@
import * as nls from 'vs/nls';
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import { isHighSurrogate, isLowSurrogate } from 'vs/base/common/strings';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { EditorAction, ServicesAccessor, registerEditorAction } from 'vs/editor/browser/editorExtensions';
import { ReplaceCommand } from 'vs/editor/common/commands/replaceCommand';
import { IPosition, Position } from 'vs/editor/common/core/position';
import { Range } from 'vs/editor/common/core/range';
import { ICommand } from 'vs/editor/common/editorCommon';
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { ITextModel } from 'vs/editor/common/model';
import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
import { MoveOperations } from 'vs/editor/common/controller/cursorMoveOperations';
class TransposeLettersAction extends EditorAction {
private positionLeftOf(start: IPosition, model: ITextModel): Position {
let column = start.column;
let lineNumber = start.lineNumber;
if (column > model.getLineMinColumn(lineNumber)) {
if (isLowSurrogate(model.getLineContent(lineNumber).charCodeAt(column - 2))) {
// character before column is a low surrogate
column = column - 2;
} else {
column = column - 1;
}
} else if (lineNumber > 1) {
lineNumber = lineNumber - 1;
column = model.getLineMaxColumn(lineNumber);
}
return new Position(lineNumber, column);
}
private positionRightOf(start: IPosition, model: ITextModel): Position {
let column = start.column;
let lineNumber = start.lineNumber;
if (column < model.getLineMaxColumn(lineNumber)) {
if (isHighSurrogate(model.getLineContent(lineNumber).charCodeAt(column - 1))) {
// character after column is a high surrogate
column = column + 2;
} else {
column = column + 1;
}
} else if (lineNumber < model.getLineCount()) {
lineNumber = lineNumber + 1;
column = 0;
}
return new Position(lineNumber, column);
}
constructor() {
super({
id: 'editor.action.transposeLetters',
@ -101,10 +61,10 @@ class TransposeLettersAction extends EditorAction {
// otherwise, transpose left and right chars
let endPosition = (column === lastColumn) ?
selection.getPosition() :
this.positionRightOf(selection.getPosition(), model);
MoveOperations.rightPosition(model, selection.getPosition().lineNumber, selection.getPosition().column);
let middlePosition = this.positionLeftOf(endPosition, model);
let beginPosition = this.positionLeftOf(middlePosition, model);
let middlePosition = MoveOperations.leftPosition(model, endPosition.lineNumber, endPosition.column);
let beginPosition = MoveOperations.leftPosition(model, middlePosition.lineNumber, middlePosition.column);
let leftChar = model.getValueInRange(Range.fromPositions(beginPosition, middlePosition));
let rightChar = model.getValueInRange(Range.fromPositions(middlePosition, endPosition));

View file

@ -68,25 +68,27 @@ export class CursorUndoRedoController extends Disposable implements IEditorContr
this._undoStack = [];
this._redoStack = [];
this._prevState = null;
this._pushStateIfNecessary();
}));
this._register(editor.onDidChangeCursorSelection((e) => {
this._register(editor.onDidChangeCursorSelection(() => this._pushStateIfNecessary()));
}
const newState = new CursorState(this._editor.getSelections()!);
private _pushStateIfNecessary(): void {
const newState = new CursorState(this._editor.getSelections()!);
if (!this._isCursorUndoRedo && this._prevState) {
const isEqualToLastUndoStack = (this._undoStack.length > 0 && this._undoStack[this._undoStack.length - 1].equals(this._prevState));
if (!isEqualToLastUndoStack) {
this._undoStack.push(this._prevState);
this._redoStack = [];
if (this._undoStack.length > 50) {
// keep the cursor undo stack bounded
this._undoStack.shift();
}
if (!this._isCursorUndoRedo && this._prevState) {
const isEqualToLastUndoStack = (this._undoStack.length > 0 && this._undoStack[this._undoStack.length - 1].equals(this._prevState));
if (!isEqualToLastUndoStack) {
this._undoStack.push(this._prevState);
this._redoStack = [];
if (this._undoStack.length > 50) {
// keep the cursor undo stack bounded
this._undoStack.shift();
}
}
}
this._prevState = newState;
}));
this._prevState = newState;
}
public cursorUndo(): void {
@ -119,8 +121,8 @@ export class CursorUndo extends EditorAction {
constructor() {
super({
id: 'cursorUndo',
label: nls.localize('cursor.undo', "Soft Undo"),
alias: 'Soft Undo',
label: nls.localize('cursor.undo', "Cursor Undo"),
alias: 'Cursor Undo',
precondition: undefined,
kbOpts: {
kbExpr: EditorContextKeys.textInputFocus,
@ -139,8 +141,8 @@ export class CursorRedo extends EditorAction {
constructor() {
super({
id: 'cursorRedo',
label: nls.localize('cursor.redo', "Soft Redo"),
alias: 'Soft Redo',
label: nls.localize('cursor.redo', "Cursor Redo"),
alias: 'Cursor Redo',
precondition: undefined
});
}

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 3.5L1.5 3H14.5L15 3.5L15 12.5L14.5 13H1.5L1 12.5V3.5ZM14 4H8L8 7.49297L7.89793 7.49285L7.5 7.49225V7.49237L3.92614 7.48807L6.01638 5.39784L5.30927 4.69073L2.35356 7.64645L2.35356 8.35355L5.30927 11.3093L6.01638 10.6022L3.90228 8.48807L7.8976 8.49285L8 8.493V7.50702L11.9073 7.51222L9.79289 5.39784L10.5 4.69073L13.4557 7.64645V8.35355L10.5 11.3093L9.79289 10.6022L11.8828 8.51222L8 8.50702V12H14V4Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 572 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 3.5L1.5 3H14.5L15 3.5L15 12.5L14.5 13H1.5L1 12.5V3.5ZM14 4H8L8 7.49297L7.89793 7.49285L7.5 7.49225V7.49237L3.92614 7.48807L6.01638 5.39784L5.30927 4.69073L2.35356 7.64645L2.35356 8.35355L5.30927 11.3093L6.01638 10.6022L3.90228 8.48807L7.8976 8.49285L8 8.493V7.50702L11.9073 7.51222L9.79289 5.39784L10.5 4.69073L13.4557 7.64645V8.35355L10.5 11.3093L9.79289 10.6022L11.8828 8.51222L8 8.50702V12H14V4Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 572 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.35356 6.64642L2.06066 5.35353L5.35356 2.06065L6.64645 3.35354L3.35356 6.64642ZM5 1L1 4.99998V5.70708L3 7.70707H3.70711L4.85355 6.56063V12.3535L5.35355 12.8535H10.0097V13.3741L11.343 14.7074H12.0501L14.7168 12.0407V11.3336L13.3835 10.0003H12.6763L10.8231 11.8535H5.85355V7.89355H10.0097V8.37401L11.343 9.70734H12.0501L14.7168 7.04068V6.33357L13.3835 5.00024H12.6763L10.863 6.81356H5.85355V5.56064L7.70711 3.70709V2.99999L5.70711 1H5ZM11.0703 8.02046L11.6966 8.64668L13.6561 6.68713L13.0299 6.0609L11.0703 8.02046ZM11.0703 13.0205L11.6966 13.6467L13.6561 11.6872L13.0299 11.061L11.0703 13.0205Z" fill="#EE9D28"/>
</svg>

Before

Width:  |  Height:  |  Size: 766 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.35356 6.64642L2.06066 5.35353L5.35356 2.06065L6.64645 3.35354L3.35356 6.64642ZM5 1L1 4.99998V5.70708L3 7.70707H3.70711L4.85355 6.56063V12.3535L5.35355 12.8535H10.0097V13.3741L11.343 14.7074H12.0501L14.7168 12.0407V11.3336L13.3835 10.0003H12.6763L10.8231 11.8535H5.85355V7.89355H10.0097V8.37401L11.343 9.70734H12.0501L14.7168 7.04068V6.33357L13.3835 5.00024H12.6763L10.863 6.81356H5.85355V5.56064L7.70711 3.70709V2.99999L5.70711 1H5ZM11.0703 8.02046L11.6966 8.64668L13.6561 6.68713L13.0299 6.0609L11.0703 8.02046ZM11.0703 13.0205L11.6966 13.6467L13.6561 11.6872L13.0299 11.061L11.0703 13.0205Z" fill="#D67E00"/>
</svg>

Before

Width:  |  Height:  |  Size: 766 B

View file

@ -1,4 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 6H12V7H4V6ZM12 9H4V10H12V9Z" fill="#C5C5C5"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 4L2 3H14L15 4V12L14 13H2L1 12V4ZM2 4V12H14V4H2Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 319 B

View file

@ -1,4 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 6H12V7H4V6ZM12 9H4V10H12V9Z" fill="#424242"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 4L2 3H14L15 4V12L14 13H2L1 12V4ZM2 4V12H14V4H2Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 319 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 2L7 3V6H8V3H14V8H10V9H14L15 8V3L14 2H8ZM9 8L8 7H7H2L1 8V13L2 14H8L9 13V9V8ZM8 9V8H7H2V13H8V9ZM9 6.58579L9.41421 7H13V6H9V6.58579ZM13 4H9V5H13V4ZM7 9H3V10H7V9ZM3 11H7V12H3V11Z" fill="#EE9D28"/>
</svg>

Before

Width:  |  Height:  |  Size: 348 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 3L8 2H14L15 3V8L14 9H10V8H14V3H8V6H7V3ZM8 7L9 8V9V13L8 14H2L1 13V8L2 7H7H8ZM8 8V9V13H2V8H7H8ZM9.41421 7L9 6.58579V6H13V7H9.41421ZM9 4H13V5H9V4ZM7 10H3V11H7V10Z" fill="#75BEFF"/>
</svg>

Before

Width:  |  Height:  |  Size: 333 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 3L8 2H14L15 3V8L14 9H10V8H14V3H8V6H7V3ZM8 7L9 8V9V13L8 14H2L1 13V8L2 7H7H8ZM8 8V9V13H2V8H7H8ZM9.41421 7L9 6.58579V6H13V7H9.41421ZM9 4H13V5H9V4ZM7 10H3V11H7V10Z" fill="#007ACC"/>
</svg>

Before

Width:  |  Height:  |  Size: 333 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 2L7 3V6H8V3H14V8H10V9H14L15 8V3L14 2H8ZM9 8L8 7H7H2L1 8V13L2 14H8L9 13V9V8ZM8 9V8H7H2V13H8V9ZM9 6.58579L9.41421 7H13V6H9V6.58579ZM13 4H9V5H13V4ZM7 9H3V10H7V9ZM3 11H7V12H3V11Z" fill="#D67E00"/>
</svg>

Before

Width:  |  Height:  |  Size: 348 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.41354 1.55996L8.31152 1H11.6056L12.424 2.57465L10.2356 6H12.0174L12.7363 7.69512L5.61943 15L4.01675 13.837L6.11943 10H4.89798L4 8.55996L7.41354 1.55996ZM7.78033 9L4.90054 14.3049L12.0174 7H8.31152L11.6056 2H8.31152L4.89798 9H7.78033Z" fill="#EE9D28"/>
</svg>

Before

Width:  |  Height:  |  Size: 407 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.41354 1.55996L8.31152 1H11.6056L12.424 2.57465L10.2356 6H12.0174L12.7363 7.69512L5.61943 15L4.01675 13.837L6.11943 10H4.89798L4 8.55996L7.41354 1.55996ZM7.78033 9L4.90054 14.3049L12.0174 7H8.31152L11.6056 2H8.31152L4.89798 9H7.78033Z" fill="#D67E00"/>
</svg>

Before

Width:  |  Height:  |  Size: 407 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 6.39443L1.55279 5.5L8.55279 2H9.44721L14.4472 4.5L15 5.39443V9.89443L14.4472 10.7889L7.44721 14.2889H6.55279L1.55279 11.7889L1 10.8944V6.39443ZM6.5 13.1444L2 10.8944V7.17094L6.5 9.21639V13.1444ZM7.5 13.1444L14 9.89443V6.17954L7.5 9.21287V13.1444ZM9 2.89443L2.33728 6.22579L6.99725 8.34396L13.6706 5.22973L9 2.89443Z" fill="#75BEFF"/>
</svg>

Before

Width:  |  Height:  |  Size: 489 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 6.39443L1.55279 5.5L8.55279 2H9.44721L14.4472 4.5L15 5.39443V9.89443L14.4472 10.7889L7.44721 14.2889H6.55279L1.55279 11.7889L1 10.8944V6.39443ZM6.5 13.1444L2 10.8944V7.17094L6.5 9.21639V13.1444ZM7.5 13.1444L14 9.89443V6.17954L7.5 9.21287V13.1444ZM9 2.89443L2.33728 6.22579L6.99725 8.34396L13.6706 5.22973L9 2.89443Z" fill="#007ACC"/>
</svg>

Before

Width:  |  Height:  |  Size: 489 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 1L3 2V14L4 15H13L14 14V5L13.7071 4.29289L10.7071 1.29289L10 1H4ZM4 14V2L9 2V6H13V14H4ZM13 5L10 2V5L13 5Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 278 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 1L3 2V14L4 15H13L14 14V5L13.7071 4.29289L10.7071 1.29289L10 1H4ZM4 14V2L9 2V6H13V14H4ZM13 5L10 2V5L13 5Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 278 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2L1 2.5V13.5L1.5 14H4V13H2V3H4V2H1.5ZM14.5 14L15 13.5L15 2.5L14.5 2H12V3L14 3L14 13H12V14H14.5Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 271 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2L1 2.5V13.5L1.5 14H4V13H2V3H4V2H1.5ZM14.5 14L15 13.5L15 2.5L14.5 2H12V3L14 3L14 13H12V14H14.5Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 271 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.5 5C10.1193 5 9 6.11929 9 7.5C9 8.88071 10.1193 10 11.5 10C12.8807 10 14 8.88071 14 7.5C14 6.11929 12.8807 5 11.5 5ZM8.03544 8C8.27806 9.69615 9.73676 11 11.5 11C13.433 11 15 9.433 15 7.5C15 5.567 13.433 4 11.5 4C9.73676 4 8.27806 5.30385 8.03544 7H4.93699C4.71497 6.13739 3.93192 5.5 3 5.5C1.89543 5.5 1 6.39543 1 7.5C1 8.60457 1.89543 9.5 3 9.5C3.93192 9.5 4.71497 8.86261 4.93699 8H8.03544Z" fill="#75BEFF"/>
</svg>

Before

Width:  |  Height:  |  Size: 568 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.5 5C10.1193 5 9 6.11929 9 7.5C9 8.88071 10.1193 10 11.5 10C12.8807 10 14 8.88071 14 7.5C14 6.11929 12.8807 5 11.5 5ZM8.03544 8C8.27806 9.69615 9.73676 11 11.5 11C13.433 11 15 9.433 15 7.5C15 5.567 13.433 4 11.5 4C9.73676 4 8.27806 5.30385 8.03544 7H4.93699C4.71497 6.13739 3.93192 5.5 3 5.5C1.89543 5.5 1 6.39543 1 7.5C1 8.60457 1.89543 9.5 3 9.5C3.93192 9.5 4.71497 8.86261 4.93699 8H8.03544Z" fill="#007ACC"/>
</svg>

Before

Width:  |  Height:  |  Size: 568 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 4H10V3H15V4ZM14 7H12V8H14V7ZM10 7H1V8H10V7ZM12 13H1V14H12V13ZM7 10H1V11H7V10ZM15 10H10V11H15V10ZM8 2V5H1V2H8ZM7 3H2V4H7V3Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 257 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 4H10V3H15V4ZM14 7H12V8H14V7ZM10 7H1V8H10V7ZM12 13H1V14H12V13ZM7 10H1V11H7V10ZM15 10H10V11H15V10ZM8 2V5H1V2H8ZM7 3H2V4H7V3Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 257 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 4.85749L2.4855 4L7.4855 1H8.5145L13.5145 4L14 4.85749V10.8575L13.5145 11.715L8.5145 14.715H7.4855L2.4855 11.715L2 10.8575V4.85749ZM7.5 13.5575L3 10.8575V5.69975L7.5 8.1543V13.5575ZM8.5 13.5575L13 10.8575V5.69975L8.5 8.1543V13.5575ZM8 1.85749L3.25913 4.70201L8 7.28794L12.7409 4.70201L8 1.85749Z" fill="#B180D7"/>
</svg>

Before

Width:  |  Height:  |  Size: 468 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 4.85749L2.4855 4L7.4855 1H8.5145L13.5145 4L14 4.85749V10.8575L13.5145 11.715L8.5145 14.715H7.4855L2.4855 11.715L2 10.8575V4.85749ZM7.5 13.5575L3 10.8575V5.69975L7.5 8.1543V13.5575ZM8.5 13.5575L13 10.8575V5.69975L8.5 8.1543V13.5575ZM8 1.85749L3.25913 4.70201L8 7.28794L12.7409 4.70201L8 1.85749Z" fill="#652D90"/>
</svg>

Before

Width:  |  Height:  |  Size: 468 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6 2.98361V2.97184V2H5.91083C5.59743 2 5.29407 2.06161 5.00128 2.18473C4.70818 2.30798 4.44942 2.48474 4.22578 2.71498C4.00311 2.94422 3.83792 3.19498 3.73282 3.46766L3.73233 3.46898C3.63382 3.7352 3.56814 4.01201 3.53533 4.29917L3.53519 4.30053C3.50678 4.5805 3.4987 4.86844 3.51084 5.16428C3.52272 5.45379 3.52866 5.74329 3.52866 6.03279C3.52866 6.23556 3.48974 6.42594 3.412 6.60507L3.4116 6.60601C3.33687 6.78296 3.23423 6.93866 3.10317 7.07359C2.97644 7.20405 2.82466 7.31055 2.64672 7.3925C2.4706 7.46954 2.28497 7.5082 2.08917 7.5082H2V7.6V8.4V8.4918H2.08917C2.28465 8.4918 2.47001 8.53238 2.64601 8.61334L2.64742 8.61396C2.82457 8.69157 2.97577 8.79762 3.10221 8.93161L3.10412 8.93352C3.23428 9.0637 3.33659 9.21871 3.41129 9.39942L3.41201 9.40108C3.48986 9.58047 3.52866 9.76883 3.52866 9.96721C3.52866 10.2567 3.52272 10.5462 3.51084 10.8357C3.4987 11.1316 3.50677 11.4215 3.53516 11.7055L3.53535 11.7072C3.56819 11.9903 3.63387 12.265 3.73232 12.531L3.73283 12.5323C3.83793 12.805 4.00311 13.0558 4.22578 13.285C4.44942 13.5153 4.70818 13.692 5.00128 13.8153C5.29407 13.9384 5.59743 14 5.91083 14H6V13.2V13.0164H5.91083C5.71095 13.0164 5.52346 12.9777 5.34763 12.9008C5.17396 12.8191 5.02194 12.7126 4.89086 12.5818C4.76386 12.4469 4.66104 12.2911 4.58223 12.1137C4.50838 11.9346 4.47134 11.744 4.47134 11.541C4.47134 11.3127 4.4753 11.0885 4.48321 10.8686C4.49125 10.6411 4.49127 10.4195 4.48324 10.2039C4.47914 9.98246 4.46084 9.76883 4.42823 9.56312C4.39513 9.35024 4.33921 9.14757 4.26039 8.95536C4.18091 8.76157 4.07258 8.57746 3.93616 8.40298C3.82345 8.25881 3.68538 8.12462 3.52283 8C3.68538 7.87538 3.82345 7.74119 3.93616 7.59702C4.07258 7.42254 4.18091 7.23843 4.26039 7.04464C4.33913 6.85263 4.39513 6.65175 4.42826 6.44285C4.46082 6.2333 4.47914 6.01973 4.48324 5.80219C4.49127 5.58262 4.49125 5.36105 4.48321 5.13749C4.4753 4.9134 4.47134 4.68725 4.47134 4.45902C4.47134 4.26019 4.50833 4.07152 4.58238 3.89205C4.66135 3.71034 4.76421 3.55475 4.89086 3.42437C5.02193 3.28942 5.17461 3.18275 5.34802 3.10513C5.5238 3.02427 5.71113 2.98361 5.91083 2.98361H6ZM10 13.0164V13.0282V14H10.0892C10.4026 14 10.7059 13.9384 10.9987 13.8153C11.2918 13.692 11.5506 13.5153 11.7742 13.285C11.9969 13.0558 12.1621 12.805 12.2672 12.5323L12.2677 12.531C12.3662 12.2648 12.4319 11.988 12.4647 11.7008L12.4648 11.6995C12.4932 11.4195 12.5013 11.1316 12.4892 10.8357C12.4773 10.5462 12.4713 10.2567 12.4713 9.96721C12.4713 9.76444 12.5103 9.57406 12.588 9.39493L12.5884 9.39399C12.6631 9.21704 12.7658 9.06134 12.8968 8.92642C13.0236 8.79595 13.1753 8.68945 13.3533 8.6075C13.5294 8.53046 13.715 8.4918 13.9108 8.4918H14V8.4V7.6V7.5082H13.9108C13.7153 7.5082 13.53 7.46762 13.354 7.38666L13.3526 7.38604C13.1754 7.30844 13.0242 7.20238 12.8978 7.06839L12.8959 7.06648C12.7657 6.9363 12.6634 6.78129 12.5887 6.60058L12.588 6.59892C12.5101 6.41953 12.4713 6.23117 12.4713 6.03279C12.4713 5.74329 12.4773 5.45379 12.4892 5.16428C12.5013 4.86842 12.4932 4.57848 12.4648 4.29454L12.4646 4.29285C12.4318 4.00971 12.3661 3.73502 12.2677 3.46897L12.2672 3.46766C12.1621 3.19499 11.9969 2.94422 11.7742 2.71498C11.5506 2.48474 11.2918 2.30798 10.9987 2.18473C10.7059 2.06161 10.4026 2 10.0892 2H10V2.8V2.98361H10.0892C10.2891 2.98361 10.4765 3.0223 10.6524 3.09917C10.826 3.18092 10.9781 3.28736 11.1091 3.41823C11.2361 3.55305 11.339 3.70889 11.4178 3.88628C11.4916 4.0654 11.5287 4.25596 11.5287 4.45902C11.5287 4.68727 11.5247 4.91145 11.5168 5.13142C11.5088 5.35894 11.5087 5.58049 11.5168 5.79605C11.5209 6.01754 11.5392 6.23117 11.5718 6.43688C11.6049 6.64976 11.6608 6.85243 11.7396 7.04464C11.8191 7.23843 11.9274 7.42254 12.0638 7.59702C12.1765 7.74119 12.3146 7.87538 12.4772 8C12.3146 8.12462 12.1765 8.25881 12.0638 8.40298C11.9274 8.57746 11.8191 8.76157 11.7396 8.95536C11.6609 9.14737 11.6049 9.34825 11.5717 9.55715C11.5392 9.7667 11.5209 9.98027 11.5168 10.1978C11.5087 10.4174 11.5087 10.6389 11.5168 10.8625C11.5247 11.0866 11.5287 11.3128 11.5287 11.541C11.5287 11.7398 11.4917 11.9285 11.4176 12.1079C11.3386 12.2897 11.2358 12.4452 11.1091 12.5756C10.9781 12.7106 10.8254 12.8173 10.652 12.8949C10.4762 12.9757 10.2889 13.0164 10.0892 13.0164H10Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6 2.98361V2.97184V2H5.91083C5.59743 2 5.29407 2.06161 5.00128 2.18473C4.70818 2.30798 4.44942 2.48474 4.22578 2.71498C4.00311 2.94422 3.83792 3.19498 3.73282 3.46766L3.73233 3.46898C3.63382 3.7352 3.56814 4.01201 3.53533 4.29917L3.53519 4.30053C3.50678 4.5805 3.4987 4.86844 3.51084 5.16428C3.52272 5.45379 3.52866 5.74329 3.52866 6.03279C3.52866 6.23556 3.48974 6.42594 3.412 6.60507L3.4116 6.60601C3.33687 6.78296 3.23423 6.93866 3.10317 7.07359C2.97644 7.20405 2.82466 7.31055 2.64672 7.3925C2.4706 7.46954 2.28497 7.5082 2.08917 7.5082H2V7.6V8.4V8.4918H2.08917C2.28465 8.4918 2.47001 8.53238 2.64601 8.61334L2.64742 8.61396C2.82457 8.69157 2.97577 8.79762 3.10221 8.93161L3.10412 8.93352C3.23428 9.0637 3.33659 9.21871 3.41129 9.39942L3.41201 9.40108C3.48986 9.58047 3.52866 9.76883 3.52866 9.96721C3.52866 10.2567 3.52272 10.5462 3.51084 10.8357C3.4987 11.1316 3.50677 11.4215 3.53516 11.7055L3.53535 11.7072C3.56819 11.9903 3.63387 12.265 3.73232 12.531L3.73283 12.5323C3.83793 12.805 4.00311 13.0558 4.22578 13.285C4.44942 13.5153 4.70818 13.692 5.00128 13.8153C5.29407 13.9384 5.59743 14 5.91083 14H6V13.2V13.0164H5.91083C5.71095 13.0164 5.52346 12.9777 5.34763 12.9008C5.17396 12.8191 5.02194 12.7126 4.89086 12.5818C4.76386 12.4469 4.66104 12.2911 4.58223 12.1137C4.50838 11.9346 4.47134 11.744 4.47134 11.541C4.47134 11.3127 4.4753 11.0885 4.48321 10.8686C4.49125 10.6411 4.49127 10.4195 4.48324 10.2039C4.47914 9.98246 4.46084 9.76883 4.42823 9.56312C4.39513 9.35024 4.33921 9.14757 4.26039 8.95536C4.18091 8.76157 4.07258 8.57746 3.93616 8.40298C3.82345 8.25881 3.68538 8.12462 3.52283 8C3.68538 7.87538 3.82345 7.74119 3.93616 7.59702C4.07258 7.42254 4.18091 7.23843 4.26039 7.04464C4.33913 6.85263 4.39513 6.65175 4.42826 6.44285C4.46082 6.2333 4.47914 6.01973 4.48324 5.80219C4.49127 5.58262 4.49125 5.36105 4.48321 5.13749C4.4753 4.9134 4.47134 4.68725 4.47134 4.45902C4.47134 4.26019 4.50833 4.07152 4.58238 3.89205C4.66135 3.71034 4.76421 3.55475 4.89086 3.42437C5.02193 3.28942 5.17461 3.18275 5.34802 3.10513C5.5238 3.02427 5.71113 2.98361 5.91083 2.98361H6ZM10 13.0164V13.0282V14H10.0892C10.4026 14 10.7059 13.9384 10.9987 13.8153C11.2918 13.692 11.5506 13.5153 11.7742 13.285C11.9969 13.0558 12.1621 12.805 12.2672 12.5323L12.2677 12.531C12.3662 12.2648 12.4319 11.988 12.4647 11.7008L12.4648 11.6995C12.4932 11.4195 12.5013 11.1316 12.4892 10.8357C12.4773 10.5462 12.4713 10.2567 12.4713 9.96721C12.4713 9.76444 12.5103 9.57406 12.588 9.39493L12.5884 9.39399C12.6631 9.21704 12.7658 9.06134 12.8968 8.92642C13.0236 8.79595 13.1753 8.68945 13.3533 8.6075C13.5294 8.53046 13.715 8.4918 13.9108 8.4918H14V8.4V7.6V7.5082H13.9108C13.7153 7.5082 13.53 7.46762 13.354 7.38666L13.3526 7.38604C13.1754 7.30844 13.0242 7.20238 12.8978 7.06839L12.8959 7.06648C12.7657 6.9363 12.6634 6.78129 12.5887 6.60058L12.588 6.59892C12.5101 6.41953 12.4713 6.23117 12.4713 6.03279C12.4713 5.74329 12.4773 5.45379 12.4892 5.16428C12.5013 4.86842 12.4932 4.57848 12.4648 4.29454L12.4646 4.29285C12.4318 4.00971 12.3661 3.73502 12.2677 3.46897L12.2672 3.46766C12.1621 3.19499 11.9969 2.94422 11.7742 2.71498C11.5506 2.48474 11.2918 2.30798 10.9987 2.18473C10.7059 2.06161 10.4026 2 10.0892 2H10V2.8V2.98361H10.0892C10.2891 2.98361 10.4765 3.0223 10.6524 3.09917C10.826 3.18092 10.9781 3.28736 11.1091 3.41823C11.2361 3.55305 11.339 3.70889 11.4178 3.88628C11.4916 4.0654 11.5287 4.25596 11.5287 4.45902C11.5287 4.68727 11.5247 4.91145 11.5168 5.13142C11.5088 5.35894 11.5087 5.58049 11.5168 5.79605C11.5209 6.01754 11.5392 6.23117 11.5718 6.43688C11.6049 6.64976 11.6608 6.85243 11.7396 7.04464C11.8191 7.23843 11.9274 7.42254 12.0638 7.59702C12.1765 7.74119 12.3146 7.87538 12.4772 8C12.3146 8.12462 12.1765 8.25881 12.0638 8.40298C11.9274 8.57746 11.8191 8.76157 11.7396 8.95536C11.6609 9.14737 11.6049 9.34825 11.5717 9.55715C11.5392 9.7667 11.5209 9.98027 11.5168 10.1978C11.5087 10.4174 11.5087 10.6389 11.5168 10.8625C11.5247 11.0866 11.5287 11.3128 11.5287 11.541C11.5287 11.7398 11.4917 11.9285 11.4176 12.1079C11.3386 12.2897 11.2358 12.4452 11.1091 12.5756C10.9781 12.7106 10.8254 12.8173 10.652 12.8949C10.4762 12.9757 10.2889 13.0164 10.0892 13.0164H10Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11 1V5H15V6H11L11 10H15V11H11V15H10V11H6V15H5L5 11H1V10H5L5 6H1V5H5L5 1H6V5H10V1H11ZM6 6L6 10H10L10 6H6Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 276 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11 1V5H15V6H11L11 10H15V11H11V15H10V11H6V15H5L5 11H1V10H5L5 6H1V5H5L5 1H6V5H10V1H11ZM6 6L6 10H10L10 6H6Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 276 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.87289 1.10023C3.20768 1.23579 3.47545 1.498 3.61802 1.82988C3.69032 1.99959 3.72675 2.18242 3.72502 2.36688C3.72617 2.54999 3.68975 2.7314 3.61802 2.89988C3.51299 3.14567 3.33782 3.35503 3.11442 3.50177C2.89102 3.64851 2.6293 3.72612 2.36202 3.72488C2.17924 3.72592 1.99818 3.68951 1.83002 3.61788C1.58298 3.51406 1.37227 3.33932 1.22453 3.11575C1.0768 2.89219 0.998666 2.62984 1.00002 2.36188C0.99913 2.17921 1.03519 1.99825 1.10602 1.82988C1.24337 1.50314 1.50328 1.24323 1.83002 1.10588C2.16332 0.966692 2.53809 0.964661 2.87289 1.10023ZM2.57502 2.86488C2.7054 2.80913 2.80927 2.70526 2.86502 2.57488C2.8929 2.50838 2.90718 2.43698 2.90702 2.36488C2.90813 2.2654 2.88215 2.1675 2.83185 2.08167C2.78156 1.99584 2.70884 1.92531 2.62151 1.87767C2.53418 1.83002 2.43553 1.80705 2.33614 1.81121C2.23674 1.81537 2.14035 1.8465 2.05731 1.90128C1.97426 1.95606 1.9077 2.03241 1.86475 2.12215C1.8218 2.21188 1.80409 2.31161 1.81352 2.41065C1.82294 2.50968 1.85915 2.60428 1.91825 2.6843C1.97736 2.76433 2.05713 2.82675 2.14902 2.86488C2.28549 2.92089 2.43854 2.92089 2.57502 2.86488ZM6.42995 1.1095L1.10967 6.42977L1.79557 7.11567L7.11584 1.7954L6.42995 1.1095ZM11.5 8.99999H12.5V11.5H15V12.5H12.5V15H11.5V12.5H9V11.5H11.5V8.99999ZM5.76777 9.52509L6.47487 10.2322L4.70711 12L6.47487 13.7677L5.76777 14.4748L4 12.7071L2.23223 14.4748L1.52513 13.7677L3.29289 12L1.52513 10.2322L2.23223 9.52509L4 11.2929L5.76777 9.52509ZM7.11802 5.32988C7.01442 5.08268 6.83973 4.87183 6.61612 4.72406C6.3925 4.57629 6.13004 4.49826 5.86202 4.49988C5.67935 4.49899 5.49839 4.53505 5.33002 4.60588C5.00328 4.74323 4.74337 5.00314 4.60602 5.32988C4.53588 5.49478 4.49897 5.67191 4.49741 5.8511C4.49586 6.0303 4.52967 6.20804 4.59693 6.37414C4.66419 6.54024 4.76356 6.69143 4.88936 6.81906C5.01516 6.94669 5.1649 7.04823 5.33002 7.11788C5.49867 7.18848 5.67968 7.22484 5.86252 7.22484C6.04535 7.22484 6.22636 7.18848 6.39502 7.11788C6.64201 7.01388 6.8527 6.83913 7.00058 6.61563C7.14845 6.39213 7.22689 6.12987 7.22602 5.86188C7.22655 5.67905 7.1898 5.49803 7.11802 5.32988ZM6.36502 6.07488C6.33766 6.13937 6.29829 6.19808 6.24902 6.24788C6.19908 6.29724 6.14042 6.33691 6.07602 6.36488C6.00854 6.39297 5.93611 6.40725 5.86302 6.40688C5.78991 6.40744 5.71744 6.39315 5.65002 6.36488C5.58541 6.33729 5.52668 6.29757 5.47702 6.24788C5.42691 6.19856 5.38713 6.13975 5.36002 6.07488C5.30401 5.9384 5.30401 5.78536 5.36002 5.64888C5.41536 5.51846 5.51941 5.41477 5.65002 5.35988C5.71737 5.33126 5.78984 5.31663 5.86302 5.31688C5.93618 5.31685 6.0086 5.33147 6.07602 5.35988C6.14037 5.38749 6.19904 5.42682 6.24902 5.47588C6.29786 5.52603 6.33717 5.58465 6.36502 5.64888C6.3934 5.7163 6.40802 5.78872 6.40802 5.86188C6.40802 5.93503 6.3934 6.00745 6.36502 6.07488ZM14 3H10V4H14V3Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.87289 1.10023C3.20768 1.23579 3.47545 1.498 3.61802 1.82988C3.69032 1.99959 3.72675 2.18242 3.72502 2.36688C3.72617 2.54999 3.68975 2.7314 3.61802 2.89988C3.51299 3.14567 3.33782 3.35503 3.11442 3.50177C2.89102 3.64851 2.6293 3.72612 2.36202 3.72488C2.17924 3.72592 1.99818 3.68951 1.83002 3.61788C1.58298 3.51406 1.37227 3.33932 1.22453 3.11575C1.0768 2.89219 0.998666 2.62984 1.00002 2.36188C0.99913 2.17921 1.03519 1.99825 1.10602 1.82988C1.24337 1.50314 1.50328 1.24323 1.83002 1.10588C2.16332 0.966692 2.53809 0.964661 2.87289 1.10023ZM2.57502 2.86488C2.7054 2.80913 2.80927 2.70526 2.86502 2.57488C2.8929 2.50838 2.90718 2.43698 2.90702 2.36488C2.90813 2.2654 2.88215 2.1675 2.83185 2.08167C2.78156 1.99584 2.70884 1.92531 2.62151 1.87767C2.53418 1.83002 2.43553 1.80705 2.33614 1.81121C2.23674 1.81537 2.14035 1.8465 2.05731 1.90128C1.97426 1.95606 1.9077 2.03241 1.86475 2.12215C1.8218 2.21188 1.80409 2.31161 1.81352 2.41065C1.82294 2.50968 1.85915 2.60428 1.91825 2.6843C1.97736 2.76433 2.05713 2.82675 2.14902 2.86488C2.28549 2.92089 2.43854 2.92089 2.57502 2.86488ZM6.42995 1.1095L1.10967 6.42977L1.79557 7.11567L7.11584 1.7954L6.42995 1.1095ZM11.5 8.99999H12.5V11.5H15V12.5H12.5V15H11.5V12.5H9V11.5H11.5V8.99999ZM5.76777 9.52509L6.47487 10.2322L4.70711 12L6.47487 13.7677L5.76777 14.4748L4 12.7071L2.23223 14.4748L1.52513 13.7677L3.29289 12L1.52513 10.2322L2.23223 9.52509L4 11.2929L5.76777 9.52509ZM7.11802 5.32988C7.01442 5.08268 6.83973 4.87183 6.61612 4.72406C6.3925 4.57629 6.13004 4.49826 5.86202 4.49988C5.67935 4.49899 5.49839 4.53505 5.33002 4.60588C5.00328 4.74323 4.74337 5.00314 4.60602 5.32988C4.53588 5.49478 4.49897 5.67191 4.49741 5.8511C4.49586 6.0303 4.52967 6.20804 4.59693 6.37414C4.66419 6.54024 4.76356 6.69143 4.88936 6.81906C5.01516 6.94669 5.1649 7.04823 5.33002 7.11788C5.49867 7.18848 5.67968 7.22484 5.86252 7.22484C6.04535 7.22484 6.22636 7.18848 6.39502 7.11788C6.64201 7.01388 6.8527 6.83913 7.00058 6.61563C7.14845 6.39213 7.22689 6.12987 7.22602 5.86188C7.22655 5.67905 7.1898 5.49803 7.11802 5.32988ZM6.36502 6.07488C6.33766 6.13937 6.29829 6.19808 6.24902 6.24788C6.19908 6.29724 6.14042 6.33691 6.07602 6.36488C6.00854 6.39297 5.93611 6.40725 5.86302 6.40688C5.78991 6.40744 5.71744 6.39315 5.65002 6.36488C5.58541 6.33729 5.52668 6.29757 5.47702 6.24788C5.42691 6.19856 5.38713 6.13975 5.36002 6.07488C5.30401 5.9384 5.30401 5.78536 5.36002 5.64888C5.41536 5.51846 5.51941 5.41477 5.65002 5.35988C5.71737 5.33126 5.78984 5.31663 5.86302 5.31688C5.93618 5.31685 6.0086 5.33147 6.07602 5.35988C6.14037 5.38749 6.19904 5.42682 6.24902 5.47588C6.29786 5.52603 6.33716 5.58465 6.36502 5.64888C6.3934 5.7163 6.40802 5.78872 6.40802 5.86188C6.40802 5.93503 6.3934 6.00745 6.36502 6.07488ZM14 3H10V4H14V3Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -39,3 +39,7 @@
font-size: 14px;
opacity: 0.4;
}
.monaco-list .outline-element .outline-element-icon {
margin-right: 4px;
}

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.80723 14.9754C2.57119 14.9721 2.33826 14.9211 2.12247 14.8254C1.90667 14.7297 1.71248 14.5913 1.55158 14.4186C1.2385 14.1334 1.04433 13.7408 1.00775 13.3189C0.966225 12.8828 1.09269 12.4473 1.36133 12.1013C2.56779 10.8289 4.9473 8.4494 6.67811 6.75479C6.30983 5.75887 6.32704 4.66127 6.72637 3.67739C7.05474 2.85876 7.63869 2.16805 8.39129 1.70807C8.9817 1.31706 9.66031 1.07944 10.3657 1.01673C11.0711 0.954022 11.7809 1.06819 12.4311 1.34892L13.0482 1.6162L10.1824 4.56738L11.4371 5.82582L14.3809 2.94887L14.6482 3.56788C14.8735 4.08976 14.993 4.65119 14.9997 5.21961C15.0064 5.78802 14.9002 6.35211 14.6872 6.87915C14.476 7.40029 14.1623 7.87368 13.7647 8.27122C13.5394 8.49169 13.2904 8.68653 13.0222 8.85218C12.4673 9.22275 11.8324 9.45636 11.1697 9.5338C10.5069 9.61124 9.83521 9.5303 9.20982 9.29764C8.11194 10.4113 5.37142 13.1704 3.89119 14.5522C3.59426 14.8219 3.20832 14.9726 2.80723 14.9754ZM10.7448 1.92802C10.087 1.92637 9.44359 2.12018 8.89614 2.48485C8.68265 2.6152 8.48437 2.76897 8.30498 2.9433C7.82789 3.42423 7.50926 4.03953 7.39182 4.70669C7.27437 5.37385 7.36374 6.06098 7.64792 6.67591L7.78342 6.97288L7.55048 7.20025C5.81224 8.89672 3.28146 11.4201 2.06479 12.7045C1.95646 12.8658 1.91012 13.0608 1.93435 13.2535C1.95857 13.4463 2.05171 13.6238 2.19657 13.7532C2.28005 13.8462 2.38177 13.9211 2.49541 13.9731C2.59557 14.0184 2.70383 14.043 2.81373 14.0455C2.98064 14.0413 3.14044 13.977 3.26383 13.8646C4.83687 12.3964 7.87622 9.32641 8.76807 8.42435L8.9973 8.19326L9.29242 8.32783C9.80618 8.56732 10.3731 8.66985 10.9382 8.62545C11.5033 8.58106 12.0473 8.39125 12.5174 8.07447C12.7313 7.9426 12.9296 7.78694 13.1085 7.61045C13.4183 7.30153 13.6631 6.93374 13.8286 6.52874C13.994 6.12375 14.0767 5.68974 14.0719 5.25228C14.0719 5.03662 14.0505 4.82148 14.0078 4.61007L11.4306 7.12508L8.87944 4.57759L11.3944 1.98834C11.1804 1.94674 10.9628 1.92653 10.7448 1.92802Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 2 KiB

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.80723 14.9754C2.57119 14.9721 2.33826 14.9211 2.12247 14.8254C1.90667 14.7297 1.71248 14.5913 1.55158 14.4186C1.2385 14.1334 1.04433 13.7408 1.00775 13.3189C0.966225 12.8828 1.09269 12.4473 1.36133 12.1013C2.56779 10.8289 4.9473 8.4494 6.67811 6.75479C6.30983 5.75887 6.32704 4.66127 6.72637 3.67739C7.05474 2.85876 7.63869 2.16805 8.39129 1.70807C8.9817 1.31706 9.66031 1.07944 10.3657 1.01673C11.0711 0.954022 11.7809 1.06819 12.4311 1.34892L13.0482 1.6162L10.1824 4.56738L11.4371 5.82582L14.3809 2.94887L14.6482 3.56788C14.8735 4.08976 14.993 4.65119 14.9997 5.21961C15.0064 5.78802 14.9002 6.35211 14.6872 6.87915C14.476 7.40029 14.1623 7.87368 13.7647 8.27122C13.5394 8.49169 13.2904 8.68653 13.0222 8.85218C12.4673 9.22275 11.8324 9.45636 11.1697 9.5338C10.5069 9.61124 9.83521 9.5303 9.20982 9.29764C8.11194 10.4113 5.37142 13.1704 3.89119 14.5522C3.59426 14.8219 3.20832 14.9726 2.80723 14.9754ZM10.7448 1.92802C10.087 1.92637 9.44359 2.12018 8.89614 2.48485C8.68265 2.6152 8.48437 2.76897 8.30498 2.9433C7.82789 3.42423 7.50926 4.03953 7.39182 4.70669C7.27437 5.37385 7.36374 6.06098 7.64792 6.67591L7.78342 6.97288L7.55048 7.20025C5.81224 8.89672 3.28146 11.4201 2.06479 12.7045C1.95646 12.8658 1.91012 13.0608 1.93435 13.2535C1.95857 13.4463 2.05171 13.6238 2.19657 13.7532C2.28005 13.8462 2.38177 13.9211 2.49541 13.9731C2.59557 14.0184 2.70383 14.043 2.81373 14.0455C2.98064 14.0413 3.14044 13.977 3.26383 13.8646C4.83687 12.3964 7.87622 9.32641 8.76807 8.42435L8.9973 8.19326L9.29242 8.32783C9.80618 8.56732 10.3731 8.66985 10.9382 8.62545C11.5033 8.58106 12.0473 8.39125 12.5174 8.07447C12.7313 7.9426 12.9296 7.78694 13.1085 7.61045C13.4183 7.30153 13.6631 6.93374 13.8286 6.52874C13.994 6.12375 14.0767 5.68974 14.0719 5.25228C14.0719 5.03662 14.0505 4.82148 14.0078 4.61007L11.4306 7.12508L8.87944 4.57759L11.3944 1.98834C11.1804 1.94674 10.9628 1.92653 10.7448 1.92802Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 2 KiB

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.5 1L2 1.5V13H3V2H14V13H15V1.5L14.5 1H2.5ZM2 15V14H3V15H2ZM5 14.0001H4V15.0001H5V14.0001ZM6 14.0001H7V15.0001H6V14.0001ZM9 14.0001H8V15.0001H9V14.0001ZM10 14.0001H11V15.0001H10V14.0001ZM15 15.0001V14.0001H14V15.0001H15ZM12 14.0001H13V15.0001H12V14.0001Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 426 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.5 1L2 1.5V13H3V2H14V13H15V1.5L14.5 1H2.5ZM2 15V14H3V15H2ZM5 14.0001H4V15.0001H5V14.0001ZM6 14.0001H7V15.0001H6V14.0001ZM9 14.0001H8V15.0001H9V14.0001ZM10 14.0001H11V15.0001H10V14.0001ZM15 15.0001V14.0001H14V15.0001H15ZM12 14.0001H13V15.0001H12V14.0001Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 426 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.22289 10.933C7.54863 11.1254 7.92163 11.2231 8.29989 11.215C8.63777 11.2218 8.97254 11.1492 9.27721 11.003C9.58188 10.8567 9.84792 10.6409 10.0539 10.373C10.5091 9.76519 10.7402 9.01867 10.7079 8.25998C10.7412 7.58622 10.5374 6.9221 10.1319 6.38298C9.93575 6.14161 9.68577 5.94957 9.402 5.82228C9.11824 5.69498 8.80858 5.63597 8.49789 5.64997C8.07522 5.64699 7.65994 5.76085 7.29789 5.97898C7.18304 6.04807 7.0749 6.12775 6.97489 6.21698V3.47498H5.98389V11.1H6.97889V10.756C7.05516 10.8217 7.13677 10.8809 7.22289 10.933ZM7.84981 6.70006C8.03598 6.62105 8.23807 6.58677 8.43989 6.59998C8.61257 6.59452 8.78404 6.63054 8.93994 6.70501C9.09583 6.77948 9.23161 6.89023 9.33589 7.02798C9.59253 7.39053 9.7184 7.82951 9.69289 8.27297C9.71972 8.79748 9.57969 9.31701 9.29289 9.75698C9.18822 9.91527 9.04546 10.0447 8.87773 10.1335C8.70999 10.2223 8.52264 10.2675 8.33289 10.265C8.14934 10.2732 7.9663 10.24 7.79734 10.1678C7.62838 10.0956 7.47784 9.98628 7.35689 9.84797C7.10152 9.55957 6.96501 9.18506 6.97489 8.79998V8.19998C6.96299 7.78332 7.10263 7.3765 7.36789 7.05498C7.49858 6.90064 7.66364 6.77908 7.84981 6.70006ZM3.28902 5.67499C2.97011 5.67933 2.65388 5.734 2.35202 5.83699C2.06417 5.92293 1.79347 6.05828 1.55202 6.23699L1.45202 6.31399V7.51399L1.87502 7.15499C2.24579 6.80478 2.73133 6.60146 3.24102 6.58299C3.36593 6.57164 3.4917 6.59147 3.60706 6.64068C3.72243 6.6899 3.82377 6.76697 3.90202 6.86499C4.0522 7.0971 4.13239 7.36754 4.13302 7.64399L2.90002 7.82499C2.39435 7.87781 1.91525 8.07772 1.52202 8.39999C1.36697 8.55181 1.24339 8.73271 1.15835 8.93235C1.07331 9.13199 1.02848 9.34644 1.02644 9.56343C1.0244 9.78042 1.06517 9.99568 1.14644 10.1969C1.2277 10.3981 1.34786 10.5813 1.50002 10.736C1.6687 10.8904 1.86622 11.01 2.08125 11.0879C2.29627 11.1659 2.52456 11.2005 2.75302 11.19C3.147 11.1931 3.53278 11.0774 3.86002 10.858C3.96153 10.7897 4.0572 10.7131 4.14602 10.629V11.073H5.08702V7.71499C5.12137 7.17422 4.9543 6.63988 4.61802 6.21499C4.44979 6.03285 4.24348 5.89003 4.01378 5.7967C3.78407 5.70336 3.53661 5.66181 3.28902 5.67499ZM4.14602 8.71599C4.16564 9.13435 4.02592 9.54459 3.75502 9.864C3.63689 10.0005 3.48998 10.1092 3.32486 10.1821C3.15973 10.2551 2.98049 10.2906 2.80002 10.286C2.69049 10.2945 2.58035 10.2812 2.47599 10.2469C2.37163 10.2125 2.27511 10.1579 2.19202 10.086C2.06079 9.93455 1.98856 9.74088 1.98856 9.54049C1.98856 9.34011 2.06079 9.14644 2.19202 8.99499C2.47322 8.82131 2.79233 8.71837 3.12202 8.69499L4.14202 8.54699L4.14602 8.71599ZM12.4588 11.0325C12.766 11.1638 13.0983 11.2261 13.4322 11.215C13.927 11.227 14.4153 11.1006 14.8422 10.85L14.9652 10.775L14.9782 10.768V9.61504L14.5322 9.93504C14.216 10.1592 13.8356 10.2747 13.4482 10.264C13.2497 10.2719 13.052 10.2342 12.8703 10.1538C12.6886 10.0733 12.5278 9.95232 12.4002 9.80004C12.1144 9.42453 11.9725 8.95911 12.0002 8.48804C11.9737 7.98732 12.1352 7.49475 12.4532 7.10704C12.5934 6.94105 12.7695 6.80914 12.9682 6.7213C13.167 6.63346 13.3831 6.592 13.6002 6.60004C13.9439 6.59844 14.2808 6.69525 14.5712 6.87904L15.0002 7.14404V5.97004L14.8312 5.89704C14.4626 5.73432 14.0641 5.6502 13.6612 5.65004C13.2999 5.63991 12.9406 5.70762 12.6078 5.84859C12.2749 5.98956 11.9763 6.20048 11.7322 6.46704C11.2261 7.02683 10.9581 7.76186 10.9852 8.51604C10.9567 9.22346 11.1955 9.91569 11.6542 10.455C11.8769 10.704 12.1516 10.9012 12.4588 11.0325Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.22289 10.933C7.54863 11.1254 7.92163 11.2231 8.29989 11.215C8.63777 11.2218 8.97254 11.1492 9.27721 11.003C9.58188 10.8567 9.84792 10.6409 10.0539 10.373C10.5091 9.76519 10.7402 9.01867 10.7079 8.25998C10.7412 7.58622 10.5374 6.9221 10.1319 6.38298C9.93575 6.14161 9.68577 5.94957 9.402 5.82228C9.11824 5.69498 8.80858 5.63597 8.49789 5.64997C8.07522 5.64699 7.65994 5.76085 7.29789 5.97898C7.18304 6.04807 7.0749 6.12775 6.97489 6.21698V3.47498H5.98389V11.1H6.97889V10.756C7.05516 10.8217 7.13677 10.8809 7.22289 10.933ZM7.84981 6.70006C8.03598 6.62105 8.23807 6.58677 8.43989 6.59998C8.61257 6.59452 8.78404 6.63054 8.93994 6.70501C9.09583 6.77948 9.23161 6.89023 9.33589 7.02798C9.59253 7.39053 9.7184 7.82951 9.69289 8.27297C9.71972 8.79748 9.57969 9.31701 9.29289 9.75698C9.18822 9.91527 9.04546 10.0447 8.87773 10.1335C8.70999 10.2223 8.52264 10.2675 8.33289 10.265C8.14934 10.2732 7.9663 10.24 7.79734 10.1678C7.62838 10.0956 7.47784 9.98628 7.35689 9.84797C7.10152 9.55957 6.96501 9.18506 6.97489 8.79998V8.19998C6.96299 7.78332 7.10263 7.3765 7.36789 7.05498C7.49858 6.90064 7.66364 6.77908 7.84981 6.70006ZM3.28902 5.67499C2.97011 5.67933 2.65388 5.734 2.35202 5.83699C2.06417 5.92293 1.79347 6.05828 1.55202 6.23699L1.45202 6.31399V7.51399L1.87502 7.15499C2.24579 6.80478 2.73133 6.60146 3.24102 6.58299C3.36593 6.57164 3.4917 6.59147 3.60706 6.64068C3.72243 6.6899 3.82377 6.76697 3.90202 6.86499C4.0522 7.0971 4.13239 7.36754 4.13302 7.64399L2.90002 7.82499C2.39435 7.87781 1.91525 8.07772 1.52202 8.39999C1.36697 8.55181 1.24339 8.73271 1.15835 8.93235C1.07331 9.13199 1.02848 9.34644 1.02644 9.56343C1.0244 9.78042 1.06517 9.99568 1.14644 10.1969C1.2277 10.3981 1.34786 10.5813 1.50002 10.736C1.6687 10.8904 1.86622 11.01 2.08125 11.0879C2.29627 11.1659 2.52456 11.2005 2.75302 11.19C3.147 11.1931 3.53278 11.0774 3.86002 10.858C3.96153 10.7897 4.0572 10.7131 4.14602 10.629V11.073H5.08702V7.71499C5.12137 7.17422 4.9543 6.63988 4.61802 6.21499C4.44979 6.03285 4.24348 5.89003 4.01378 5.7967C3.78407 5.70336 3.53661 5.66181 3.28902 5.67499ZM4.14602 8.71599C4.16564 9.13435 4.02592 9.54459 3.75502 9.864C3.63689 10.0005 3.48998 10.1092 3.32486 10.1821C3.15973 10.2551 2.98049 10.2906 2.80002 10.286C2.69049 10.2945 2.58035 10.2812 2.47599 10.2469C2.37163 10.2125 2.27511 10.1579 2.19202 10.086C2.06079 9.93455 1.98856 9.74088 1.98856 9.54049C1.98856 9.34011 2.06079 9.14644 2.19202 8.99499C2.47322 8.82131 2.79233 8.71837 3.12202 8.69499L4.14202 8.54699L4.14602 8.71599ZM12.4588 11.0325C12.766 11.1638 13.0983 11.2261 13.4322 11.215C13.927 11.227 14.4153 11.1006 14.8422 10.85L14.9652 10.775L14.9782 10.768V9.61504L14.5322 9.93504C14.216 10.1592 13.8356 10.2747 13.4482 10.264C13.2497 10.2719 13.052 10.2342 12.8703 10.1538C12.6886 10.0733 12.5278 9.95232 12.4002 9.80004C12.1144 9.42453 11.9725 8.95911 12.0002 8.48804C11.9737 7.98732 12.1352 7.49475 12.4532 7.10704C12.5934 6.94105 12.7695 6.80914 12.9682 6.7213C13.167 6.63346 13.3831 6.592 13.6002 6.60004C13.9439 6.59844 14.2808 6.69525 14.5712 6.87904L15.0002 7.14404V5.97004L14.8312 5.89704C14.4626 5.73432 14.0641 5.6502 13.6612 5.65004C13.2999 5.63991 12.9406 5.70762 12.6078 5.84859C12.2749 5.98956 11.9763 6.20048 11.7322 6.46704C11.2261 7.02683 10.9581 7.76186 10.9852 8.51604C10.9567 9.22346 11.1955 9.91569 11.6542 10.455C11.8769 10.704 12.1516 10.9012 12.4588 11.0325Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 2L1 3V6L2 7H14L15 6V3L14 2H2ZM2 3H3H13H14V4V5V6H13H3H2V5V4V3ZM1 10L2 9H5L6 10V13L5 14H2L1 13V10ZM3 10H2V11V12V13H3H4H5V12V11V10H4H3ZM10 10L11 9H14L15 10V13L14 14H11L10 13V10ZM12 10H11V11V12V13H12H13H14V12V11V10H13H12Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 391 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 2L1 3V6L2 7H14L15 6V3L14 2H2ZM2 3H3H13H14V4V5V6H13H3H2V5V4V3ZM1 10L2 9H5L6 10V13L5 14H2L1 13V10ZM3 10H2V11V12V13H3H4H5V12V11V10H4H3ZM10 10L11 9H14L15 10V13L14 14H11L10 13V10ZM12 10H11V11V12V13H12H13H14V12V11V10H13H12Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 391 B

View file

@ -9,9 +9,9 @@
}
.monaco-workbench .symbol-icon.inline {
background-position: left center;
padding-left: 20px;
background-size: 16px 16px;
display: flex;
align-items: center;
padding-left: 0;
}
.monaco-workbench .symbol-icon.block {
@ -22,267 +22,3 @@
min-width: 16px;
background-position: center;
}
/* default icons */
.monaco-workbench .symbol-icon {
background-image: url('field-light.svg');
background-repeat: no-repeat;
}
.vs-dark .monaco-workbench .symbol-icon,
.hc-black .monaco-workbench .symbol-icon {
background-image: url('field-dark.svg');
}
/* constant */
.monaco-workbench .symbol-icon.constant {
background-image: url('constant-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.constant,
.hc-black .monaco-workbench .symbol-icon.constant {
background-image: url('constant-dark.svg');
}
/* enum */
.monaco-workbench .symbol-icon.enum {
background-image: url('enumerator-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.enum,
.hc-black .monaco-workbench .symbol-icon.enum {
background-image: url('enumerator-dark.svg');
}
/* enum-member */
.monaco-workbench .symbol-icon.enum-member {
background-image: url('enumerator-item-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.enum-member,
.hc-black .monaco-workbench .symbol-icon.enum-member {
background-image: url('enumerator-item-dark.svg');
}
/* struct */
.monaco-workbench .symbol-icon.struct {
background-image: url('structure-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.struct,
.hc-black .monaco-workbench .symbol-icon.struct {
background-image: url('structure-dark.svg');
}
/* event */
.monaco-workbench .symbol-icon.event {
background-image: url('event-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.event,
.hc-black .monaco-workbench .symbol-icon.event {
background-image: url('event-dark.svg');
}
/* operator */
.monaco-workbench .symbol-icon.operator {
background-image: url('operator-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.operator,
.hc-black .monaco-workbench .symbol-icon.operator {
background-image: url('operator-dark.svg');
}
/* type paramter */
.monaco-workbench .symbol-icon.type-parameter {
background-image: url('template-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.type-parameter,
.hc-black .monaco-workbench .symbol-icon.type-parameter {
background-image: url('template-dark.svg');
}
/* boolean, null */
.monaco-workbench .symbol-icon.boolean {
background-image: url('boolean-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.boolean,
.hc-black .monaco-workbench .symbol-icon.boolean {
background-image: url('boolean-dark.svg');
}
/* null */
.monaco-workbench .symbol-icon.null {
background-image: url('boolean-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.null,
.hc-black .monaco-workbench .symbol-icon.null {
background-image: url('boolean-dark.svg');
}
/* class */
.monaco-workbench .symbol-icon.class {
background-image: url('class-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.class,
.hc-black .monaco-workbench .symbol-icon.class {
background-image: url('class-dark.svg');
}
/* constructor */
.monaco-workbench .symbol-icon.constructor {
background-image: url('method-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.constructor,
.hc-black .monaco-workbench .symbol-icon.constructor {
background-image: url('method-dark.svg');
}
/* file */
.monaco-workbench .symbol-icon.file {
background-image: url('file-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.file,
.hc-black .monaco-workbench .symbol-icon.file {
background-image: url('file-dark.svg');
}
/* field */
.monaco-workbench .symbol-icon.field {
background-image: url('field-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.field,
.hc-black .monaco-workbench .symbol-icon.field {
background-image: url('field-dark.svg');
}
/* variable */
.monaco-workbench .symbol-icon.variable {
background-image: url('variable-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.variable,
.hc-black .monaco-workbench .symbol-icon.variable {
background-image: url('variable-dark.svg');
}
/* array */
.monaco-workbench .symbol-icon.array {
background-image: url('indexer-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.array,
.hc-black .monaco-workbench .symbol-icon.array {
background-image: url('indexer-dark.svg');
}
/* keyword */
/* todo@joh not used? */
.monaco-workbench .symbol-icon.keyword {
background-image: url('keyword-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.keyword,
.hc-black .monaco-workbench .symbol-icon.keyword {
background-image: url('keyword-dark.svg');
}
/* interface */
.monaco-workbench .symbol-icon.interface {
background-image: url('interface-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.interface,
.hc-black .monaco-workbench .symbol-icon.interface {
background-image: url('interface-dark.svg');
}
/* method */
.monaco-workbench .symbol-icon.method {
background-image: url('method-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.method,
.hc-black .monaco-workbench .symbol-icon.method {
background-image: url('method-dark.svg');
}
/* function */
.monaco-workbench .symbol-icon.function {
background-image: url('method-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.function,
.hc-black .monaco-workbench .symbol-icon.function {
background-image: url('method-dark.svg');
}
/* object */
.monaco-workbench .symbol-icon.object {
background-image: url('namespace-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.object,
.hc-black .monaco-workbench .symbol-icon.object {
background-image: url('namespace-dark.svg');
}
/* namespace */
.monaco-workbench .symbol-icon.namespace {
background-image: url('namespace-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.namespace,
.hc-black .monaco-workbench .symbol-icon.namespace {
background-image: url('namespace-dark.svg');
}
/* package */
.monaco-workbench .symbol-icon.package {
background-image: url('namespace-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.package,
.hc-black .monaco-workbench .symbol-icon.package {
background-image: url('namespace-dark.svg');
}
/* module */
.monaco-workbench .symbol-icon.module {
background-image: url('namespace-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.module,
.hc-black .monaco-workbench .symbol-icon.module {
background-image: url('namespace-dark.svg');
}
/* number */
.monaco-workbench .symbol-icon.number {
background-image: url('numeric-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.number,
.hc-black .monaco-workbench .symbol-icon.number {
background-image: url('numeric-dark.svg');
}
/* property */
.monaco-workbench .symbol-icon.property {
background-image: url('property-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.property,
.hc-black .monaco-workbench .symbol-icon.property {
background-image: url('property-dark.svg');
}
/* snippet */
/* todo@joh unused? */
.monaco-workbench .symbol-icon.snippet {
background-image: url('snippet-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.snippet,
.hc-black .monaco-workbench .symbol-icon.snippet {
background-image: url('snippet-dark.svg');
}
/* string */
.monaco-workbench .symbol-icon.string {
background-image: url('string-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.string,
.hc-black .monaco-workbench .symbol-icon.string {
background-image: url('string-dark.svg');
}
/* key */
.monaco-workbench .symbol-icon.key {
background-image: url('string-light.svg');
}
.vs-dark .monaco-workbench .symbol-icon.key,
.hc-black .monaco-workbench .symbol-icon.key {
background-image: url('string-dark.svg');
}

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11 6H10V5.5C10 5.22386 9.77616 5 9.50001 5H8.47902V10.5C8.47902 10.7761 8.70288 11 8.97902 11H9.47902V12H6.47902V11H6.97902C7.25516 11 7.47902 10.7761 7.47902 10.5V5H6.50001C6.22387 5 6.00001 5.22386 6.00001 5.5V6H5.00001V4H11V6ZM13.9142 8.0481L12.4519 6.58581L13.159 5.87871L14.9749 7.69454V8.40165L13.2071 10.1694L12.5 9.46231L13.9142 8.0481ZM3.5481 9.4623L2.08581 8.00002L3.50002 6.58581L2.79291 5.8787L1.02515 7.64647V8.35357L2.841 10.1694L3.5481 9.4623Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 630 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11 6H10V5.5C10 5.22386 9.77616 5 9.50001 5H8.47902V10.5C8.47902 10.7761 8.70288 11 8.97902 11H9.47902V12H6.47902V11H6.97902C7.25516 11 7.47902 10.7761 7.47902 10.5V5H6.50001C6.22387 5 6.00001 5.22386 6.00001 5.5V6H5.00001V4H11V6ZM13.9142 8.0481L12.4519 6.58581L13.159 5.87871L14.9749 7.69454V8.40165L13.2071 10.1694L12.5 9.46231L13.9142 8.0481ZM3.5481 9.4623L2.08581 8.00002L3.50002 6.58581L2.79291 5.8787L1.02515 7.64647V8.35357L2.841 10.1694L3.5481 9.4623Z" fill="#424242"/>
</svg>

Before

Width:  |  Height:  |  Size: 630 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 4L1 4.5V12.5L1.5 13H4V12H2V5H4V4H1.5ZM14.5 13L15 12.5L15 4.5L14.5 4H12V5L14 5L14 12H12V13H14.5ZM8.79693 5L4.29693 7L4 7.45691V9.95691L4.24275 10.3857L6.74275 11.8857L7.20307 11.9138L11.7031 9.91381L12 9.45691V6.95691L11.7572 6.52816L9.25725 5.02816L8.79693 5ZM5 8.34V9.67381L6.5 10.5738V9.24L5 8.34ZM7.5 9.28184V10.6875L11 9.13197V7.72629L7.5 9.28184ZM10.4178 6.89071L8.96559 6.01936L5.58216 7.52311L7.03441 8.39445L10.4178 6.89071Z" fill="#75BEFF"/>
</svg>

Before

Width:  |  Height:  |  Size: 608 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 4L1 4.5V12.5L1.5 13H4V12H2V5H4V4H1.5ZM14.5 13L15 12.5L15 4.5L14.5 4H12V5L14 5L14 12H12V13H14.5ZM8.79693 5L4.29693 7L4 7.45691V9.95691L4.24275 10.3857L6.74275 11.8857L7.20307 11.9138L11.7031 9.91381L12 9.45691V6.95691L11.7572 6.52816L9.25725 5.02816L8.79693 5ZM5 8.34V9.67381L6.5 10.5738V9.24L5 8.34ZM7.5 9.28184V10.6875L11 9.13197V7.72629L7.5 9.28184ZM10.4178 6.89071L8.96559 6.01936L5.58216 7.52311L7.03441 8.39445L10.4178 6.89071Z" fill="#007ACC"/>
</svg>

Before

Width:  |  Height:  |  Size: 608 B

View file

@ -19,8 +19,8 @@ import { IconLabel } from 'vs/base/browser/ui/iconLabel/iconLabel';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { OutlineConfigKeys } from 'vs/editor/contrib/documentSymbols/outline';
import { MarkerSeverity } from 'vs/platform/markers/common/markers';
import { IThemeService } from 'vs/platform/theme/common/themeService';
import { listErrorForeground, listWarningForeground } from 'vs/platform/theme/common/colorRegistry';
import { IThemeService, registerThemingParticipant, ITheme, ICssStyleCollector } from 'vs/platform/theme/common/themeService';
import { registerColor, listErrorForeground, listWarningForeground, foreground } from 'vs/platform/theme/common/colorRegistry';
import { IdleValue } from 'vs/base/common/async';
export type OutlineItem = OutlineGroup | OutlineElement;
@ -56,6 +56,7 @@ export class OutlineElementTemplate {
constructor(
readonly container: HTMLElement,
readonly iconLabel: IconLabel,
readonly iconClass: HTMLElement,
readonly decoration: HTMLElement,
) { }
}
@ -110,9 +111,11 @@ export class OutlineElementRenderer implements ITreeRenderer<OutlineElement, Fuz
renderTemplate(container: HTMLElement): OutlineElementTemplate {
dom.addClass(container, 'outline-element');
const iconLabel = new IconLabel(container, { supportHighlights: true });
const iconClass = dom.$('.outline-element-icon');
const decoration = dom.$('.outline-element-decoration');
container.prepend(iconClass);
container.appendChild(decoration);
return new OutlineElementTemplate(container, iconLabel, decoration);
return new OutlineElementTemplate(container, iconLabel, iconClass, decoration);
}
renderElement(node: ITreeNode<OutlineElement, FuzzyScore>, index: number, template: OutlineElementTemplate): void {
@ -125,7 +128,8 @@ export class OutlineElementRenderer implements ITreeRenderer<OutlineElement, Fuz
};
if (this._configurationService.getValue(OutlineConfigKeys.icons)) {
// add styles for the icons
options.extraClasses.push(`outline-element-icon ${SymbolKinds.toCssClassName(element.symbol.kind, true)}`);
template.iconClass.className = '';
dom.addClasses(template.iconClass, `outline-element-icon ${SymbolKinds.toCssClassName(element.symbol.kind, true)}`);
}
if (element.symbol.tags.indexOf(SymbolTag.Deprecated) >= 0) {
options.extraClasses.push(`deprecated`);
@ -273,3 +277,398 @@ export class OutlineDataSource implements IDataSource<OutlineModel, OutlineItem>
return values(element.children);
}
}
export const SYMBOL_ICON_ARRAY_FOREGROUND = registerColor('symbolIcon.arrayForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.arrayForeground', 'The foreground color for array symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_BOOLEAN_FOREGROUND = registerColor('symbolIcon.booleanForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.booleanForeground', 'The foreground color for boolean symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_CLASS_FOREGROUND = registerColor('symbolIcon.classForeground', {
dark: '#EE9D28',
light: '#D67E00',
hc: '#EE9D28'
}, localize('symbolIcon.classForeground', 'The foreground color for class symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_CONSTANT_FOREGROUND = registerColor('symbolIcon.contstantForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.contstantForeground', 'The foreground color for contstant symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_CONSTRUCTOR_FOREGROUND = registerColor('symbolIcon.constructorForeground', {
dark: '#B180D7',
light: '#652D90',
hc: '#B180D7'
}, localize('symbolIcon.constructorForeground', 'The foreground color for constructor symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_ENUMERATOR_FOREGROUND = registerColor('symbolIcon.enumeratorForeground', {
dark: '#EE9D28',
light: '#D67E00',
hc: '#EE9D28'
}, localize('symbolIcon.enumeratorForeground', 'The foreground color for enumerator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND = registerColor('symbolIcon.enumeratorMemberForeground', {
dark: '#75BEFF',
light: '#007ACC',
hc: '#75BEFF'
}, localize('symbolIcon.enumeratorMemberForeground', 'The foreground color for enumerator member symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_EVENT_FOREGROUND = registerColor('symbolIcon.eventForeground', {
dark: '#EE9D28',
light: '#D67E00',
hc: '#EE9D28'
}, localize('symbolIcon.eventForeground', 'The foreground color for event symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_FIELD_FOREGROUND = registerColor('symbolIcon.fieldForeground', {
dark: '#75BEFF',
light: '#007ACC',
hc: '#75BEFF'
}, localize('symbolIcon.fieldForeground', 'The foreground color for field symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_FILE_FOREGROUND = registerColor('symbolIcon.fileForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.fileForeground', 'The foreground color for file symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_FUNCTION_FOREGROUND = registerColor('symbolIcon.functionForeground', {
dark: '#B180D7',
light: '#652D90',
hc: '#B180D7'
}, localize('symbolIcon.functionForeground', 'The foreground color for function symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_INTERFACE_FOREGROUND = registerColor('symbolIcon.interfaceForeground', {
dark: '#75BEFF',
light: '#007ACC',
hc: '#75BEFF'
}, localize('symbolIcon.interfaceForeground', 'The foreground color for interface symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_KEY_FOREGROUND = registerColor('symbolIcon.keyForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.keyForeground', 'The foreground color for key symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_METHOD_FOREGROUND = registerColor('symbolIcon.methodForeground', {
dark: '#B180D7',
light: '#652D90',
hc: '#B180D7'
}, localize('symbolIcon.methodForeground', 'The foreground color for method symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_MODULE_FOREGROUND = registerColor('symbolIcon.moduleForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.moduleForeground', 'The foreground color for module symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_NAMESPACE_FOREGROUND = registerColor('symbolIcon.namespaceForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.namespaceForeground', 'The foreground color for namespace symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_NULL_FOREGROUND = registerColor('symbolIcon.nullForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.nullForeground', 'The foreground color for null symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_NUMBER_FOREGROUND = registerColor('symbolIcon.numberForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.numberForeground', 'The foreground color for number symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_OBJECT_FOREGROUND = registerColor('symbolIcon.objectForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.objectForeground', 'The foreground color for object symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_OPERATOR_FOREGROUND = registerColor('symbolIcon.operatorForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.operatorForeground', 'The foreground color for operator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_PACKAGE_FOREGROUND = registerColor('symbolIcon.packageForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.packageForeground', 'The foreground color for package symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_PROPERTY_FOREGROUND = registerColor('symbolIcon.propertyForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.propertyForeground', 'The foreground color for property symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_STRING_FOREGROUND = registerColor('symbolIcon.stringForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.stringForeground', 'The foreground color for string symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_STRUCT_FOREGROUND = registerColor('symbolIcon.structForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.structForeground', 'The foreground color for struct symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_TYPEPARAMETER_FOREGROUND = registerColor('symbolIcon.typeParameterForeground', {
dark: foreground,
light: foreground,
hc: foreground
}, localize('symbolIcon.typeParameterForeground', 'The foreground color for type parameter symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
export const SYMBOL_ICON_VARIABLE_FOREGROUND = registerColor('symbolIcon.variableForeground', {
dark: '#75BEFF',
light: '#007ACC',
hc: '#75BEFF'
}, localize('symbolIcon.variableForeground', 'The foreground color for variable symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));
registerThemingParticipant((theme: ITheme, collector: ICssStyleCollector) => {
const symbolIconArrayColor = theme.getColor(SYMBOL_ICON_ARRAY_FOREGROUND);
if (symbolIconArrayColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-array {
color: ${symbolIconArrayColor} !important;
}
`);
}
const symbolIconBooleanColor = theme.getColor(SYMBOL_ICON_BOOLEAN_FOREGROUND);
if (symbolIconBooleanColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-boolean {
color: ${symbolIconBooleanColor} !important;
}
`);
}
const symbolIconClassColor = theme.getColor(SYMBOL_ICON_CLASS_FOREGROUND);
if (symbolIconClassColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-class {
color: ${symbolIconClassColor} !important;
}
`);
}
const symbolIconMethodColor = theme.getColor(SYMBOL_ICON_METHOD_FOREGROUND);
if (symbolIconMethodColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-method {
color: ${symbolIconMethodColor} !important;
}
`);
}
const symbolIconConstantColor = theme.getColor(SYMBOL_ICON_CONSTANT_FOREGROUND);
if (symbolIconConstantColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-constant {
color: ${symbolIconConstantColor} !important;
}
`);
}
const symbolIconConstructorColor = theme.getColor(SYMBOL_ICON_CONSTRUCTOR_FOREGROUND);
if (symbolIconConstructorColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-constructor {
color: ${symbolIconConstructorColor} !important;
}
`);
}
const symbolIconEnumeratorColor = theme.getColor(SYMBOL_ICON_ENUMERATOR_FOREGROUND);
if (symbolIconEnumeratorColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-value,
.monaco-workbench .codicon-symbol-enum {
color: ${symbolIconEnumeratorColor} !important;
}
`);
}
const symbolIconEnumeratorMemberColor = theme.getColor(SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND);
if (symbolIconEnumeratorMemberColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-enum-member {
color: ${symbolIconEnumeratorMemberColor} !important;
}
`);
}
const symbolIconEventColor = theme.getColor(SYMBOL_ICON_EVENT_FOREGROUND);
if (symbolIconEventColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-event {
color: ${symbolIconEventColor} !important;
}
`);
}
const symbolIconFieldColor = theme.getColor(SYMBOL_ICON_FIELD_FOREGROUND);
if (symbolIconFieldColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-field {
color: ${symbolIconFieldColor} !important;
}
`);
}
const symbolIconFileColor = theme.getColor(SYMBOL_ICON_FILE_FOREGROUND);
if (symbolIconFileColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-file {
color: ${symbolIconFileColor} !important;
}
`);
}
const symbolIconFunctionColor = theme.getColor(SYMBOL_ICON_FUNCTION_FOREGROUND);
if (symbolIconFunctionColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-function {
color: ${symbolIconFunctionColor} !important;
}
`);
}
const symbolIconInterfaceColor = theme.getColor(SYMBOL_ICON_INTERFACE_FOREGROUND);
if (symbolIconInterfaceColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-interface {
color: ${symbolIconInterfaceColor} !important;
}
`);
}
const symbolIconKeyColor = theme.getColor(SYMBOL_ICON_KEY_FOREGROUND);
if (symbolIconKeyColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-key {
color: ${symbolIconKeyColor} !important;
}
`);
}
const symbolIconModuleColor = theme.getColor(SYMBOL_ICON_MODULE_FOREGROUND);
if (symbolIconModuleColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-module {
color: ${symbolIconModuleColor} !important;
}
`);
}
const outlineNamespaceColor = theme.getColor(SYMBOL_ICON_NAMESPACE_FOREGROUND);
if (outlineNamespaceColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-namespace {
color: ${outlineNamespaceColor} !important;
}
`);
}
const symbolIconNullColor = theme.getColor(SYMBOL_ICON_NULL_FOREGROUND);
if (symbolIconNullColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-null {
color: ${symbolIconNullColor} !important;
}
`);
}
const symbolIconNumberColor = theme.getColor(SYMBOL_ICON_NUMBER_FOREGROUND);
if (symbolIconNumberColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-number {
color: ${symbolIconNumberColor} !important;
}
`);
}
const symbolIconObjectColor = theme.getColor(SYMBOL_ICON_OBJECT_FOREGROUND);
if (symbolIconObjectColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-object {
color: ${symbolIconObjectColor} !important;
}
`);
}
const symbolIconOperatorColor = theme.getColor(SYMBOL_ICON_OPERATOR_FOREGROUND);
if (symbolIconOperatorColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-operator {
color: ${symbolIconOperatorColor} !important;
}
`);
}
const symbolIconPackageColor = theme.getColor(SYMBOL_ICON_PACKAGE_FOREGROUND);
if (symbolIconPackageColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-package {
color: ${symbolIconPackageColor} !important;
}
`);
}
const symbolIconPropertyColor = theme.getColor(SYMBOL_ICON_PROPERTY_FOREGROUND);
if (symbolIconPropertyColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-property {
color: ${symbolIconPropertyColor} !important;
}
`);
}
const symbolIconStringColor = theme.getColor(SYMBOL_ICON_STRING_FOREGROUND);
if (symbolIconStringColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-string {
color: ${symbolIconStringColor} !important;
}
`);
}
const symbolIconStructColor = theme.getColor(SYMBOL_ICON_STRUCT_FOREGROUND);
if (symbolIconStructColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-struct {
color: ${symbolIconStructColor} !important;
}
`);
}
const symbolIconTypeParameterColor = theme.getColor(SYMBOL_ICON_TYPEPARAMETER_FOREGROUND);
if (symbolIconTypeParameterColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-type-parameter {
color: ${symbolIconTypeParameterColor} !important;
}
`);
}
const symbolIconVariableColor = theme.getColor(SYMBOL_ICON_VARIABLE_FOREGROUND);
if (symbolIconVariableColor) {
collector.addRule(`
.monaco-workbench .codicon-symbol-variable {
color: ${symbolIconVariableColor} !important;
}
`);
}
});

View file

@ -7,7 +7,7 @@ import { alert } from 'vs/base/browser/ui/aria/aria';
import { createCancelablePromise, raceCancellation } from 'vs/base/common/async';
import { CancellationToken } from 'vs/base/common/cancellation';
import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import * as platform from 'vs/base/common/platform';
import { isWeb } from 'vs/base/common/platform';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { EditorAction, IActionOptions, registerEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions';
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
@ -32,6 +32,7 @@ import { EditorStateCancellationTokenSource, CodeEditorStateFlag } from 'vs/edit
import { ISymbolNavigationService } from 'vs/editor/contrib/goToDefinition/goToDefinitionResultsNavigation';
import { EditorOption } from 'vs/editor/common/config/editorOptions';
import { isEqual } from 'vs/base/common/resources';
import { isStandalone } from 'vs/base/browser/browser';
export class DefinitionActionConfig {
@ -201,7 +202,7 @@ export class DefinitionAction extends EditorAction {
}
}
const goToDefinitionKb = platform.isWeb
const goToDefinitionKb = isWeb && !isStandalone
? KeyMod.CtrlCmd | KeyCode.F12
: KeyCode.F12;

View file

@ -27,6 +27,7 @@ import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegis
import { overviewRulerSelectionHighlightForeground } from 'vs/platform/theme/common/colorRegistry';
import { themeColorFromId } from 'vs/platform/theme/common/themeService';
import { EditorOption } from 'vs/editor/common/config/editorOptions';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
export class InsertCursorAbove extends EditorAction {
@ -747,7 +748,7 @@ export class CompatChangeAll extends MultiCursorSelectionControllerAction {
id: 'editor.action.changeAll',
label: nls.localize('changeAll.label', "Change All Occurrences"),
alias: 'Change All Occurrences',
precondition: EditorContextKeys.writable,
precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.editorTextFocus),
kbOpts: {
kbExpr: EditorContextKeys.editorTextFocus,
primary: KeyMod.CtrlCmd | KeyCode.F2,

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.35356 6.64642L2.06066 5.35353L5.35356 2.06065L6.64645 3.35354L3.35356 6.64642ZM5 1L1 4.99998V5.70708L3 7.70707H3.70711L4.85355 6.56063V12.3535L5.35355 12.8535H10.0097V13.3741L11.343 14.7074H12.0501L14.7168 12.0407V11.3336L13.3835 10.0003H12.6763L10.8231 11.8535H5.85355V7.89355H10.0097V8.37401L11.343 9.70734H12.0501L14.7168 7.04068V6.33357L13.3835 5.00024H12.6763L10.863 6.81356H5.85355V5.56064L7.70711 3.70709V2.99999L5.70711 1H5ZM11.0703 8.02046L11.6966 8.64668L13.6561 6.68713L13.0299 6.0609L11.0703 8.02046ZM11.0703 13.0205L11.6966 13.6467L13.6561 11.6872L13.0299 11.061L11.0703 13.0205Z" fill="#EE9D28"/>
</svg>

Before

Width:  |  Height:  |  Size: 766 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.35356 6.64642L2.06066 5.35353L5.35356 2.06065L6.64645 3.35354L3.35356 6.64642ZM5 1L1 4.99998V5.70708L3 7.70707H3.70711L4.85355 6.56063V12.3535L5.35355 12.8535H10.0097V13.3741L11.343 14.7074H12.0501L14.7168 12.0407V11.3336L13.3835 10.0003H12.6763L10.8231 11.8535H5.85355V7.89355H10.0097V8.37401L11.343 9.70734H12.0501L14.7168 7.04068V6.33357L13.3835 5.00024H12.6763L10.863 6.81356H5.85355V5.56064L7.70711 3.70709V2.99999L5.70711 1H5ZM11.0703 8.02046L11.6966 8.64668L13.6561 6.68713L13.0299 6.0609L11.0703 8.02046ZM11.0703 13.0205L11.6966 13.6467L13.6561 11.6872L13.0299 11.061L11.0703 13.0205Z" fill="#D67E00"/>
</svg>

Before

Width:  |  Height:  |  Size: 766 B

View file

@ -1,3 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.99998 8.70708L11.6464 12.3535L12.3535 11.6464L8.70708 7.99998L12.3535 4.35353L11.6464 3.64642L7.99998 7.29287L4.35353 3.64642L3.64642 4.35353L7.29287 7.99998L3.64642 11.6464L4.35353 12.3535L7.99998 8.70708Z" fill="#C5C5C5"/>
</svg>

Before

Width:  |  Height:  |  Size: 380 B

Some files were not shown because too many files have changed in this diff Show more