From e0efe016a44b31db45104006401e1f17e0c6b78b Mon Sep 17 00:00:00 2001 From: Robby Bennett Date: Wed, 11 Oct 2023 12:02:12 -0600 Subject: [PATCH 01/92] make gotoErrorWidget styling of relatedInformation more consistent with that of markerHoverParticipant --- .../contrib/gotoError/browser/media/gotoErrorWidget.css | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/vs/editor/contrib/gotoError/browser/media/gotoErrorWidget.css b/src/vs/editor/contrib/gotoError/browser/media/gotoErrorWidget.css index 9e52eb6d750..67edd0e78d5 100644 --- a/src/vs/editor/contrib/gotoError/browser/media/gotoErrorWidget.css +++ b/src/vs/editor/contrib/gotoError/browser/media/gotoErrorWidget.css @@ -66,13 +66,10 @@ /** Hack to force underline to show **/ border-bottom: 1px solid transparent; text-underline-position: under; - color: var(--vscode-textLink-foreground); -} - -.monaco-editor .marker-widget .descriptioncontainer .message a.code-link > span { color: var(--vscode-textLink-activeForeground); } .monaco-editor .marker-widget .descriptioncontainer .filename { cursor: pointer; + color: var(--vscode-textLink-activeForeground); } From cab772fcfe98bff9f8ae5fe91e44c6a395a6b969 Mon Sep 17 00:00:00 2001 From: Quentin Quaadgras Date: Sat, 18 Nov 2023 18:50:51 +1300 Subject: [PATCH 02/92] Mobile/Android: support text selection with a pen/stylus. Currently it is not possible to use a pointing device on a mobile device to make text selections, leaving the keyboard as the only viable option. This change enables a pen to be used for selection and this works well for Android-based mobile phones and tablets with support for a pen. As it enables text to be selected with the pen instead of simply scrolling (which you can already do with touch). I've tested the [PointerEventHandler] on a Samsung Z Fold5 android (using touch & S pen) and it works well, I don't see why it should be restricted to IOS, so I've removed the platform flag. Before this change, pens on android would act as touch input and although I don't have an IOS device on hand to confirm, from looking at the [PointerEventHandler], it would appear that an IOS pen can only be used to perform tap gestures. I support efforts to make text selection possible using touch-only but in the mean time, this change should help to make VS Code usable on more mobile devices. Helps to extend, compliment and address: https://github.com/microsoft/vscode/issues/21812 https://github.com/microsoft/vscode/issues/47770 https://github.com/microsoft/monaco-editor/issues/246 https://github.com/microsoft/monaco-editor/issues/1504 --- .../browser/controller/pointerHandler.ts | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/vs/editor/browser/controller/pointerHandler.ts b/src/vs/editor/browser/controller/pointerHandler.ts index b21e9fb821b..fb3aa645670 100644 --- a/src/vs/editor/browser/controller/pointerHandler.ts +++ b/src/vs/editor/browser/controller/pointerHandler.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import * as dom from 'vs/base/browser/dom'; -import * as platform from 'vs/base/common/platform'; import { EventType, Gesture, GestureEvent } from 'vs/base/browser/touch'; import { Disposable } from 'vs/base/common/lifecycle'; import { IPointerHandlerHelper, MouseHandler } from 'vs/editor/browser/controller/mouseHandler'; @@ -83,9 +82,29 @@ export class PointerEventHandler extends MouseHandler { } } - private onChange(e: GestureEvent): void { + private onChange(event: GestureEvent): void { if (this._lastPointerType === 'touch') { - this._context.viewModel.viewLayout.deltaScrollNow(-e.translationX, -e.translationY); + this._context.viewModel.viewLayout.deltaScrollNow(-event.translationX, -event.translationY); + } + if (this._lastPointerType === 'pen') { + const target = this._createMouseTarget(new EditorMouseEvent(event, false, this.viewHelper.viewDomNode), false); + if (target.position) { + this.viewController.dispatchMouse({ + position: target.position, + mouseColumn: target.position.column, + startedOnLineNumbers: false, + revealType: NavigationCommandRevealType.Minimal, + mouseDownCount: event.tapCount, + inSelectionMode: true, + altKey: false, + ctrlKey: false, + metaKey: false, + shiftKey: false, + leftButton: false, + middleButton: false, + onInjectedText: target.type === MouseTargetType.CONTENT_TEXT && target.detail.injectedText !== null + }); + } } } @@ -137,7 +156,7 @@ export class PointerHandler extends Disposable { constructor(context: ViewContext, viewController: ViewController, viewHelper: IPointerHandlerHelper) { super(); - if ((platform.isIOS && BrowserFeatures.pointerEvents)) { + if ((BrowserFeatures.pointerEvents)) { this.handler = this._register(new PointerEventHandler(context, viewController, viewHelper)); } else if (mainWindow.TouchEvent) { this.handler = this._register(new TouchHandler(context, viewController, viewHelper)); From c8aacdd6e00b4614841e50758ca43c8fbfbfd39e Mon Sep 17 00:00:00 2001 From: Aiday Marlen Kyzy Date: Fri, 1 Dec 2023 12:50:12 +0100 Subject: [PATCH 03/92] decreasing the lightening factor to 1 from 1.7 --- src/vs/platform/theme/common/colorRegistry.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/platform/theme/common/colorRegistry.ts b/src/vs/platform/theme/common/colorRegistry.ts index 6f35f2c70a6..c7ecd0485b4 100644 --- a/src/vs/platform/theme/common/colorRegistry.ts +++ b/src/vs/platform/theme/common/colorRegistry.ts @@ -400,7 +400,7 @@ export const editorInlayHintParameterBackground = registerColor('editorInlayHint */ export const editorLightBulbForeground = registerColor('editorLightBulb.foreground', { dark: '#FFCC00', light: '#DDB100', hcDark: '#FFCC00', hcLight: '#007ACC' }, nls.localize('editorLightBulbForeground', "The color used for the lightbulb actions icon.")); export const editorLightBulbAutoFixForeground = registerColor('editorLightBulbAutoFix.foreground', { dark: '#75BEFF', light: '#007ACC', hcDark: '#75BEFF', hcLight: '#007ACC' }, nls.localize('editorLightBulbAutoFixForeground', "The color used for the lightbulb auto fix actions icon.")); -export const editorLightBulbAiForeground = registerColor('editorLightBulbAi.foreground', { dark: darken(iconForeground, 0.4), light: lighten(iconForeground, 1.7), hcDark: iconForeground, hcLight: iconForeground }, nls.localize('editorLightBulbAiForeground', "The color used for the lightbulb AI icon.")); +export const editorLightBulbAiForeground = registerColor('editorLightBulbAi.foreground', { dark: darken(iconForeground, 0.4), light: lighten(iconForeground, 1), hcDark: iconForeground, hcLight: iconForeground }, nls.localize('editorLightBulbAiForeground', "The color used for the lightbulb AI icon.")); /** * Diff Editor Colors From 986a1770d946e401683f3df8cfa7d0812c7b1a9b Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Fri, 1 Dec 2023 11:56:02 -0800 Subject: [PATCH 04/92] Only show devMode markers on hover Fixes #199775 --- .../terminalContrib/developer/browser/media/developer.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/vs/workbench/contrib/terminalContrib/developer/browser/media/developer.css b/src/vs/workbench/contrib/terminalContrib/developer/browser/media/developer.css index 3873d8423f4..ad552b0a47b 100644 --- a/src/vs/workbench/contrib/terminalContrib/developer/browser/media/developer.css +++ b/src/vs/workbench/contrib/terminalContrib/developer/browser/media/developer.css @@ -27,6 +27,10 @@ .monaco-workbench .xterm.dev-mode .xterm-sequence-decoration { background-color: var(--vscode-terminal-background, var(--vscode-panel-background)); + display: none !important; +} +.monaco-workbench .xterm.dev-mode:hover .xterm-sequence-decoration { + display: block !important; } .monaco-workbench .xterm.dev-mode .xterm-sequence-decoration.left { direction: rtl; From f84b90130d3af0519473b71df896a6b356f03461 Mon Sep 17 00:00:00 2001 From: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Date: Fri, 1 Dec 2023 21:45:24 +0100 Subject: [PATCH 05/92] SCM - remove old action bar from SCMInputWidget (#199809) --- .../contrib/scm/browser/media/scm.css | 4 +- .../contrib/scm/browser/scmViewPane.ts | 106 +++++++----------- 2 files changed, 39 insertions(+), 71 deletions(-) diff --git a/src/vs/workbench/contrib/scm/browser/media/scm.css b/src/vs/workbench/contrib/scm/browser/media/scm.css index d398ddf117a..789055c36b9 100644 --- a/src/vs/workbench/contrib/scm/browser/media/scm.css +++ b/src/vs/workbench/contrib/scm/browser/media/scm.css @@ -303,9 +303,7 @@ padding: 1px 3px 1px 1px; } -.scm-view .scm-input .scm-editor .scm-editor-toolbar.hidden, -.scm-view .scm-input .scm-editor .scm-editor-toolbar .monaco-action-bar.hidden, -.scm-view .scm-input .scm-editor .scm-editor-toolbar .monaco-toolbar.hidden { +.scm-view .scm-input .scm-editor .scm-editor-toolbar.hidden { display: none; } diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts index bad5fc40df6..ad769a9c7fb 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts @@ -1774,8 +1774,6 @@ const enum SCMInputCommandId { } const SCMInputContextKeys = { - ActionCount: new RawContextKey('scmInputActionCount', 0), - ActionIsEnabled: new RawContextKey('scmInputActionIsEnabled', false), ActionIsRunning: new RawContextKey('scmInputActionIsRunning', false), }; @@ -1837,11 +1835,15 @@ class SCMInputWidgetToolbar extends WorkbenchToolBar { private _dropdownActions: IAction[] = []; get dropdownActions(): IAction[] { return this._dropdownActions; } - private readonly _ctxActionCount: IContextKey; + private _dropdownAction: IAction; + get dropdownAction(): IAction { return this._dropdownAction; } + + private _onDidChange = new Emitter(); + readonly onDidChange: Event = this._onDidChange.event; constructor( container: HTMLElement, - menuId: MenuId, + input: ISCMInput, options: IMenuWorkbenchToolBarOptions | undefined, @IMenuService menuService: IMenuService, @IContextKeyService contextKeyService: IContextKeyService, @@ -1851,9 +1853,15 @@ class SCMInputWidgetToolbar extends WorkbenchToolBar { @IStorageService storageService: IStorageService, @ITelemetryService telemetryService: ITelemetryService, ) { - super(container, { resetMenu: menuId, ...options }, menuService, contextKeyService, contextMenuService, keybindingService, telemetryService); + super(container, { resetMenu: MenuId.SCMInputBox, ...options }, menuService, contextKeyService, contextMenuService, keybindingService, telemetryService); - const menu = this._store.add(menuService.createMenu(menuId, contextKeyService, { emitEventsForSubmenuChanges: true })); + const menu = this._store.add(menuService.createMenu(MenuId.SCMInputBox, contextKeyService, { emitEventsForSubmenuChanges: true })); + + this._dropdownAction = new Action( + 'scmInputMoreActions', + localize('scmInputMoreActions', 'More Actions...'), + 'codicon-chevron-down', + true); const cancelAction = new MenuItemAction({ id: SCMInputCommandId.CancelAction, @@ -1861,7 +1869,9 @@ class SCMInputWidgetToolbar extends WorkbenchToolBar { icon: Codicon.debugStop, }, undefined, undefined, undefined, contextKeyService, commandService); - this._ctxActionCount = SCMInputContextKeys.ActionCount.bindTo(contextKeyService); + const isEnabled = (): boolean => { + return input.repository.provider.groups.some(g => g.resources.length > 0); + }; const updateToolbar = () => { const actions: IAction[] = []; @@ -1878,22 +1888,22 @@ class SCMInputWidgetToolbar extends WorkbenchToolBar { primaryAction = actions.find(a => a.id === lastActionId) ?? actions[0]; } - if (primaryAction && - primaryAction.id !== SCMInputCommandId.CancelAction && - contextKeyService.getContextKeyValue(SCMInputContextKeys.ActionIsEnabled.key) === false) { + if (primaryAction && primaryAction.id !== SCMInputCommandId.CancelAction && !isEnabled()) { primaryAction.enabled = false; } - this._ctxActionCount.set(actions.length); + this._dropdownAction.enabled = isEnabled(); this._dropdownActions = actions.length === 1 ? [] : actions; - container.classList.toggle('has-no-actions', actions.length === 0); super.setActions(primaryAction ? [primaryAction] : [], []); + + this._onDidChange.fire(); }; this._store.add(menu.onDidChange(() => updateToolbar())); + this._store.add(input.repository.provider.onDidChangeResources(() => updateToolbar())); - const ctxKeys = new Set([SCMInputContextKeys.ActionIsEnabled.key, SCMInputContextKeys.ActionIsRunning.key]); + const ctxKeys = new Set([SCMInputContextKeys.ActionIsRunning.key]); this._store.add(Event.filter(contextKeyService.onDidChangeContext, e => e.affectsSome(ctxKeys))(() => updateToolbar())); // Delay initial update to finish class initialization @@ -1917,8 +1927,8 @@ class SCMInputWidget { private placeholderTextContainer: HTMLElement; private inputEditor: CodeEditorWidget; private toolbarContainer: HTMLElement; + private toolbar: SCMInputWidgetToolbar | undefined; private toolbarContextKeyService: IContextKeyService; - private actionBar: ActionBar; private readonly disposables = new DisposableStore(); private model: { readonly input: ISCMInput; textModelRef?: IReference } | undefined; @@ -2072,34 +2082,9 @@ class SCMInputWidget { updateEnablement(input.enabled); // Toolbar - const onDidChangeActionButton = () => { - this.actionBar.clear(); - - const actionCount = this.toolbarContextKeyService.getContextKeyValue(SCMInputContextKeys.ActionCount.key) ?? 0; - - if (input.actionButton && actionCount === 0) { - const action = new Action( - input.actionButton.command.id, - input.actionButton.command.title, - ThemeIcon.isThemeIcon(input.actionButton.icon) ? ThemeIcon.asClassName(input.actionButton.icon) : undefined, - input.actionButton.enabled, - () => this.commandService.executeCommand(input.actionButton!.command.id, ...(input.actionButton!.command.arguments || []))); - - this.actionBar.push(action, { icon: true, label: false }); - } - - this.layout(); - }; - - const ctxKeys = new Set([SCMInputContextKeys.ActionCount.key]); - this.repositoryDisposables.add(Event.filter(this.toolbarContextKeyService.onDidChangeContext, e => e.affectsSome(ctxKeys))(onDidChangeActionButton, this)); - - this.repositoryDisposables.add(input.onDidChangeActionButton(onDidChangeActionButton, this)); - this.repositoryDisposables.add(Event.filter(this.configurationService.onDidChangeConfiguration, e => e.affectsConfiguration('scm.showInputActionButton'))(onDidChangeActionButton, this)); - onDidChangeActionButton(); - - // Toolbar (new) - this.createToolbar(input); + this.toolbar = this.createToolbar(input); + this.repositoryDisposables.add(this.toolbar.onDidChange(() => this.layout())); + this.repositoryDisposables.add(this.toolbar); } get selections(): Selection[] | null { @@ -2112,25 +2097,18 @@ class SCMInputWidget { } } - private createToolbar(input: ISCMInput): void { + private createToolbar(input: ISCMInput): SCMInputWidgetToolbar { const services = new ServiceCollection([IContextKeyService, this.toolbarContextKeyService]); const instantiationService2 = this.instantiationService.createChild(services); - const ctxIsActionEnabled = SCMInputContextKeys.ActionIsEnabled.bindTo(this.toolbarContextKeyService); - this.repositoryDisposables.add(input.repository.provider.onDidChangeResources(() => ctxIsActionEnabled.set(input.repository.provider.groups.some(r => r.resources.length > 0)))); - ctxIsActionEnabled.set(input.repository.provider.groups.some(r => r.resources.length > 0)); - const actionRunner = instantiationService2.createInstance(SCMInputWidgetActionRunner, input); this.repositoryDisposables.add(actionRunner); - const toolbar: SCMInputWidgetToolbar = instantiationService2.createInstance(SCMInputWidgetToolbar, this.toolbarContainer, MenuId.SCMInputBox, { + const toolbar: SCMInputWidgetToolbar = instantiationService2.createInstance(SCMInputWidgetToolbar, this.toolbarContainer, input, { actionRunner, actionViewItemProvider: action => { if (action instanceof MenuItemAction && toolbar.dropdownActions.length > 1) { - const scmInputActionIsEnabled = this.toolbarContextKeyService.getContextKeyValue('scmInputActionIsEnabled') === true; - const dropdownAction = new Action('scmInputMoreActions', localize('scmInputMoreActions', 'More Actions...'), 'codicon-chevron-down', scmInputActionIsEnabled); - - return instantiationService2.createInstance(DropdownWithPrimaryActionViewItem, action, dropdownAction, toolbar.dropdownActions, '', this.contextMenuService, { actionRunner }); + return instantiationService2.createInstance(DropdownWithPrimaryActionViewItem, action, toolbar.dropdownAction, toolbar.dropdownActions, '', this.contextMenuService, { actionRunner }); } return createActionViewItem(instantiationService2, action); @@ -2139,7 +2117,8 @@ class SCMInputWidget { shouldForwardArgs: true } }); - this.repositoryDisposables.add(toolbar); + + return toolbar; } private setValidation(validation: IInputValidation | undefined, options?: { focus?: boolean; timeout?: boolean }) { @@ -2172,8 +2151,7 @@ class SCMInputWidget { @ISCMViewService private readonly scmViewService: ISCMViewService, @IContextViewService private readonly contextViewService: IContextViewService, @IOpenerService private readonly openerService: IOpenerService, - @IContextMenuService private readonly contextMenuService: IContextMenuService, - @ICommandService private readonly commandService: ICommandService + @IContextMenuService private readonly contextMenuService: IContextMenuService ) { this.element = append(container, $('.scm-editor')); this.editorContainer = append(this.element, $('.scm-editor-container')); @@ -2309,11 +2287,9 @@ class SCMInputWidget { this.setPlaceholderFontStyles(fontFamily, fontSize, lineHeight); })); - this.onDidChangeContentHeight = Event.signal(Event.filter(this.inputEditor.onDidContentSizeChange, e => e.contentHeightChanged, this.disposables)); + Event.filter(this.configurationService.onDidChangeConfiguration, e => e.affectsConfiguration('scm.showInputActionButton'))(() => this.layout(), this, this.disposables); - // Toolbar - this.actionBar = new ActionBar(this.toolbarContainer); - this.disposables.add(this.actionBar); + this.onDidChangeContentHeight = Event.signal(Event.filter(this.inputEditor.onDidContentSizeChange, e => e.contentHeightChanged, this.disposables)); } getContentHeight(): number { @@ -2338,8 +2314,8 @@ class SCMInputWidget { this.placeholderTextContainer.style.width = `${dimension.width}px`; this.renderValidation(); - this.actionBar.domNode.classList.toggle('hidden', this.actionBar.isEmpty()); - this.toolbarContainer.classList.toggle('hidden', this.configurationService.getValue('scm.showInputActionButton') === false); + const showInputActionButton = this.configurationService.getValue('scm.showInputActionButton') === true; + this.toolbarContainer.classList.toggle('hidden', !showInputActionButton || this.toolbar?.isEmpty() === true); if (this.shouldFocusAfterLayout) { this.shouldFocusAfterLayout = false; @@ -2473,13 +2449,7 @@ class SCMInputWidget { private getToolbarWidth(): number { const showInputActionButton = this.configurationService.getValue('scm.showInputActionButton'); - const actionCount = this.toolbarContextKeyService.getContextKeyValue(SCMInputContextKeys.ActionCount.key) ?? 0; - - if (!showInputActionButton || (this.actionBar.isEmpty() && actionCount === 0)) { - return 0; - } - - return 26; /* 22px action + 4px margin */ + return showInputActionButton && this.toolbar?.isEmpty() === false ? 26 /* 22px action + 4px margin */ : 0; } private computeLineHeight(fontSize: number): number { From 9c3b7a50259738e77ef6d0dba850c0de87a6d365 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Fri, 1 Dec 2023 12:49:44 -0800 Subject: [PATCH 06/92] testing: allow opening peek for messages without an explicit location (#199810) Fall back to peeking the test location. Fixes #199552 --- .../testing/browser/testingOutputPeek.ts | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts b/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts index e226b405a7a..c13e9958e19 100644 --- a/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts +++ b/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts @@ -242,15 +242,14 @@ export class TestingPeekOpener extends Disposable implements ITestingPeekOpener return false; } - const message = candidate.message; this.showPeekFromUri({ type: TestUriType.ResultMessage, - documentUri: message.location!.uri, + documentUri: candidate.location.uri, taskIndex: candidate.taskId, messageIndex: candidate.index, resultId: result.id, testExtId: test.item.extId, - }, undefined, { selection: message.location!.range, ...options }); + }, undefined, { selection: candidate.location.range, ...options }); return true; } @@ -471,9 +470,14 @@ export class TestingPeekOpener extends Disposable implements ITestingPeekOpener * Gets the first failed message that can be displayed from the result. */ private getFailedCandidateMessage(test: TestResultItem) { - let best: { taskId: number; index: number; message: ITestMessage } | undefined; + const fallbackLocation = test.item.uri && test.item.range + ? { uri: test.item.uri, range: test.item.range } + : undefined; + + let best: { taskId: number; index: number; message: ITestMessage; location: IRichLocation } | undefined; mapFindTestMessage(test, (task, message, messageIndex, taskId) => { - if (!isFailedState(task.state) || !message.location) { + const location = message.location || fallbackLocation; + if (!isFailedState(task.state) || !location) { return; } @@ -481,7 +485,7 @@ export class TestingPeekOpener extends Disposable implements ITestingPeekOpener return; } - best = { taskId, index: messageIndex, message }; + best = { taskId, index: messageIndex, message, location }; }); return best; @@ -1092,6 +1096,10 @@ export class TestResultsView extends ViewPane { this.content.reveal({ preserveFocus, subject: new TaskSubject(result, 0) }); } + public showMessage(result: ITestResult, test: TestResultItem, taskIndex: number, messageIndex: number) { + this.content.reveal({ preserveFocus: false, subject: new MessageSubject(result, test, taskIndex, messageIndex) }); + } + protected override renderBody(container: HTMLElement): void { super.renderBody(container); this.content.fillBody(container); From dc5e66524d0768489f134a9405c175ff34cabebe Mon Sep 17 00:00:00 2001 From: Aaron Munger Date: Fri, 1 Dec 2023 13:43:59 -0800 Subject: [PATCH 07/92] do not focus webview if the event originated from clicking the webview (#199816) --- src/vs/workbench/contrib/notebook/browser/notebookBrowser.ts | 1 + .../workbench/contrib/notebook/browser/notebookEditorWidget.ts | 2 +- .../contrib/notebook/browser/view/renderers/backLayerWebView.ts | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/notebook/browser/notebookBrowser.ts b/src/vs/workbench/contrib/notebook/browser/notebookBrowser.ts index 61b361aac83..8fa9bf480d8 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookBrowser.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookBrowser.ts @@ -158,6 +158,7 @@ export interface IFocusNotebookCellOptions { readonly revealBehavior?: ScrollToRevealBehavior | undefined; readonly outputId?: string; readonly altOutputId?: string; + readonly outputWebviewFocused?: boolean; } //#endregion diff --git a/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts b/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts index 4957ab3e2f2..745adff1205 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts @@ -2371,7 +2371,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditorD } const focusElementId = options?.outputId ?? cell.id; - this._webview.focusOutput(focusElementId, options?.altOutputId, this._webviewFocused); + this._webview.focusOutput(focusElementId, options?.altOutputId, options?.outputWebviewFocused || this._webviewFocused); cell.updateEditState(CellEditState.Preview, 'focusNotebookCell'); cell.focusMode = CellFocusMode.Output; diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts index 4c559a6d359..83a3f715efd 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts @@ -663,7 +663,7 @@ export class BackLayerWebView extends Themable { const latestCell = this.notebookEditor.getCellByInfo(resolvedResult.cellInfo); if (latestCell) { latestCell.outputIsFocused = true; - this.notebookEditor.focusNotebookCell(latestCell, 'output', { skipReveal: true }); + this.notebookEditor.focusNotebookCell(latestCell, 'output', { skipReveal: true, outputWebviewFocused: true }); } } break; From dfc36257c1ecfe3bd81d3081284f2e13de4f9517 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Fri, 1 Dec 2023 13:51:48 -0800 Subject: [PATCH 08/92] Prefer runCommand over sendText Fixes microsoft/vscode-copilot-release#622 --- .../contrib/chat/browser/actions/chatCodeblockActions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.ts index 9c087ffd9ca..2d6c3a5ef10 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.ts @@ -466,7 +466,7 @@ export function registerChatCodeBlockActions() { terminalGroupService.showPanel(true); } - terminal.sendText(context.code, false, true); + terminal.runCommand(context.code, false); if (isResponseVM(context.element)) { chatService.notifyUserAction({ From 613142b826afbb7019b0492ecbc9d056b0b38849 Mon Sep 17 00:00:00 2001 From: Chapman Pendery Date: Fri, 1 Dec 2023 14:07:26 -0800 Subject: [PATCH 09/92] build: enable suggestions when 'shellIntegration.suggestEnabled' is true Signed-off-by: Chapman Pendery --- .../platform/terminal/node/terminalEnvironment.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/vs/platform/terminal/node/terminalEnvironment.ts b/src/vs/platform/terminal/node/terminalEnvironment.ts index fc3dab089b2..066ca8f6bc1 100644 --- a/src/vs/platform/terminal/node/terminalEnvironment.ts +++ b/src/vs/platform/terminal/node/terminalEnvironment.ts @@ -146,10 +146,9 @@ export function getShellIntegrationInjection( } newArgs = [...newArgs]; // Shallow clone the array to avoid setting the default array newArgs[newArgs.length - 1] = format(newArgs[newArgs.length - 1], appRoot, ''); - // TODO: Uncomment when suggestEnabled is ready for use - // if (options.shellIntegration.suggestEnabled) { - // envMixin['VSCODE_SUGGEST'] = '1'; - // } + if (options.shellIntegration.suggestEnabled) { + envMixin['VSCODE_SUGGEST'] = '1'; + } return { newArgs, envMixin }; } logService.warn(`Shell integration cannot be enabled for executable "${shellLaunchConfig.executable}" and args`, shellLaunchConfig.args); @@ -191,10 +190,9 @@ export function getShellIntegrationInjection( if (!newArgs) { return undefined; } - // TODO: Uncomment when suggestEnabled is ready for use - // if (options.shellIntegration.suggestEnabled) { - // envMixin['VSCODE_SUGGEST'] = '1'; - // } + if (options.shellIntegration.suggestEnabled) { + envMixin['VSCODE_SUGGEST'] = '1'; + } newArgs = [...newArgs]; // Shallow clone the array to avoid setting the default array newArgs[newArgs.length - 1] = format(newArgs[newArgs.length - 1], appRoot, ''); return { newArgs, envMixin }; From 8a3a7a73bb77541d73aca31781f4479d7d2fbc20 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Fri, 1 Dec 2023 15:21:04 -0800 Subject: [PATCH 10/92] testing: canonicalize uris upon deserialization (#199824) Resolves cases of file sensitivity mishandling. Fixes #199699 --- .../api/browser/mainThreadTesting.ts | 10 ++-- src/vs/workbench/api/common/extHostTesting.ts | 8 +-- .../common/mainThreadTestCollection.ts | 8 +-- .../contrib/testing/common/testResult.ts | 4 +- .../testing/common/testResultStorage.ts | 7 ++- .../contrib/testing/common/testServiceImpl.ts | 4 +- .../contrib/testing/common/testTypes.ts | 51 +++++++++++-------- .../testing/test/browser/testObjectTree.ts | 2 +- .../test/common/testResultService.test.ts | 11 +++- .../test/common/testResultStorage.test.ts | 7 ++- .../contrib/testing/test/common/testStubs.ts | 2 +- 11 files changed, 75 insertions(+), 39 deletions(-) diff --git a/src/vs/workbench/api/browser/mainThreadTesting.ts b/src/vs/workbench/api/browser/mainThreadTesting.ts index a7cf4ecca77..d6babee621e 100644 --- a/src/vs/workbench/api/browser/mainThreadTesting.ts +++ b/src/vs/workbench/api/browser/mainThreadTesting.ts @@ -11,6 +11,7 @@ import { ISettableObservable } from 'vs/base/common/observable'; import { WellDefinedPrefixTree } from 'vs/base/common/prefixTree'; import { URI } from 'vs/base/common/uri'; import { Range } from 'vs/editor/common/core/range'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { MutableObservableValue } from 'vs/workbench/contrib/testing/common/observableValue'; import { TestCoverage } from 'vs/workbench/contrib/testing/common/testCoverage'; import { TestId } from 'vs/workbench/contrib/testing/common/testId'; @@ -35,6 +36,7 @@ export class MainThreadTesting extends Disposable implements MainThreadTestingSh constructor( extHostContext: IExtHostContext, + @IUriIdentityService private readonly uriIdentityService: IUriIdentityService, @ITestService private readonly testService: ITestService, @ITestProfileService private readonly testProfiles: ITestProfileService, @ITestResultService private readonly resultService: ITestResultService, @@ -118,7 +120,8 @@ export class MainThreadTesting extends Disposable implements MainThreadTestingSh * @inheritdoc */ $addTestsToRun(controllerId: string, runId: string, tests: ITestItem.Serialized[]): void { - this.withLiveRun(runId, r => r.addTestChainToRun(controllerId, tests.map(ITestItem.deserialize))); + this.withLiveRun(runId, r => r.addTestChainToRun(controllerId, + tests.map(t => ITestItem.deserialize(this.uriIdentityService, t)))); } /** @@ -197,7 +200,7 @@ export class MainThreadTesting extends Disposable implements MainThreadTestingSh const r = this.resultService.getResult(runId); if (r && r instanceof LiveTestResult) { for (const message of messages) { - r.appendMessage(testId, taskId, ITestMessage.deserialize(message)); + r.appendMessage(testId, taskId, ITestMessage.deserialize(this.uriIdentityService, message)); } } } @@ -277,7 +280,8 @@ export class MainThreadTesting extends Disposable implements MainThreadTestingSh * @inheritdoc */ public $publishDiff(controllerId: string, diff: TestsDiffOp.Serialized[]): void { - this.testService.publishDiff(controllerId, diff.map(TestsDiffOp.deserialize)); + this.testService.publishDiff(controllerId, + diff.map(d => TestsDiffOp.deserialize(this.uriIdentityService, d))); } public async $runTests(req: ResolvedTestRunRequest, token: CancellationToken): Promise { diff --git a/src/vs/workbench/api/common/extHostTesting.ts b/src/vs/workbench/api/common/extHostTesting.ts index 71ff7a7c521..b84fb025706 100644 --- a/src/vs/workbench/api/common/extHostTesting.ts +++ b/src/vs/workbench/api/common/extHostTesting.ts @@ -318,7 +318,7 @@ export class ExtHostTesting extends Disposable implements ExtHostTestingShape { * tests change. */ public $acceptDiff(diff: TestsDiffOp.Serialized[]): void { - this.observer.applyDiff(diff.map(TestsDiffOp.deserialize)); + this.observer.applyDiff(diff.map(d => TestsDiffOp.deserialize({ asCanonicalUri: u => u }, d))); } /** @@ -1006,7 +1006,9 @@ class TestObservers { tests: MirroredTestCollection; }; - constructor(private readonly proxy: MainThreadTestingShape) { + constructor( + private readonly proxy: MainThreadTestingShape, + ) { } public checkout(): vscode.TestObserver { @@ -1044,7 +1046,7 @@ class TestObservers { } private createObserverData() { - const tests = new MirroredTestCollection(); + const tests = new MirroredTestCollection({ asCanonicalUri: u => u }); this.proxy.$subscribeToDiffs(); return { observers: 0, tests, }; } diff --git a/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.ts b/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.ts index c1de21e7820..97f2de57063 100644 --- a/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.ts +++ b/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.ts @@ -5,10 +5,10 @@ import { Emitter } from 'vs/base/common/event'; import { Iterable } from 'vs/base/common/iterator'; -import { AbstractIncrementalTestCollection, IncrementalChangeCollector, IncrementalTestCollectionItem, InternalTestItem, TestDiffOpType, TestsDiff } from 'vs/workbench/contrib/testing/common/testTypes'; -import { IMainThreadTestCollection } from 'vs/workbench/contrib/testing/common/testService'; import { ResourceMap } from 'vs/base/common/map'; import { URI } from 'vs/base/common/uri'; +import { IMainThreadTestCollection } from 'vs/workbench/contrib/testing/common/testService'; +import { AbstractIncrementalTestCollection, ITestUriCanonicalizer, IncrementalChangeCollector, IncrementalTestCollectionItem, InternalTestItem, TestDiffOpType, TestsDiff } from 'vs/workbench/contrib/testing/common/testTypes'; export class MainThreadTestCollection extends AbstractIncrementalTestCollection implements IMainThreadTestCollection { private testsByUrl = new ResourceMap>(); @@ -47,8 +47,8 @@ export class MainThreadTestCollection extends AbstractIncrementalTestCollection< public readonly onBusyProvidersChange = this.busyProvidersChangeEmitter.event; - constructor(private readonly expandActual: (id: string, levels: number) => Promise) { - super(); + constructor(uriIdentityService: ITestUriCanonicalizer, private readonly expandActual: (id: string, levels: number) => Promise) { + super(uriIdentityService); } /** diff --git a/src/vs/workbench/contrib/testing/common/testResult.ts b/src/vs/workbench/contrib/testing/common/testResult.ts index 118fdc87da3..e6056621bf2 100644 --- a/src/vs/workbench/contrib/testing/common/testResult.ts +++ b/src/vs/workbench/contrib/testing/common/testResult.ts @@ -14,6 +14,7 @@ import { language } from 'vs/base/common/platform'; import { WellDefinedPrefixTree } from 'vs/base/common/prefixTree'; import { removeAnsiEscapeCodes } from 'vs/base/common/strings'; import { localize } from 'vs/nls'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { IComputedStateAccessor, refreshComputedState } from 'vs/workbench/contrib/testing/common/getComputedState'; import { TestCoverage } from 'vs/workbench/contrib/testing/common/testCoverage'; import { TestId } from 'vs/workbench/contrib/testing/common/testId'; @@ -646,6 +647,7 @@ export class HydratedTestResult implements ITestResult { private readonly testById = new Map(); constructor( + identity: IUriIdentityService, private readonly serialized: ISerializedTestResults, private readonly persist = true, ) { @@ -663,7 +665,7 @@ export class HydratedTestResult implements ITestResult { this.request = serialized.request; for (const item of serialized.items) { - const de = TestResultItem.deserialize(item); + const de = TestResultItem.deserialize(identity, item); this.counts[de.ownComputedState]++; this.testById.set(item.item.extId, de); } diff --git a/src/vs/workbench/contrib/testing/common/testResultStorage.ts b/src/vs/workbench/contrib/testing/common/testResultStorage.ts index 5574e744b8a..6140744e5eb 100644 --- a/src/vs/workbench/contrib/testing/common/testResultStorage.ts +++ b/src/vs/workbench/contrib/testing/common/testResultStorage.ts @@ -12,6 +12,7 @@ import { IFileService } from 'vs/platform/files/common/files'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { ILogService } from 'vs/platform/log/common/log'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { StoredValue } from 'vs/workbench/contrib/testing/common/storedValue'; import { HydratedTestResult, ITestResult } from 'vs/workbench/contrib/testing/common/testResult'; @@ -55,6 +56,7 @@ export abstract class BaseTestResultStorage extends Disposable implements ITestR }, this.storageService)); constructor( + @IUriIdentityService private readonly uriIdentityService: IUriIdentityService, @IStorageService private readonly storageService: IStorageService, @ILogService private readonly logService: ILogService, ) { @@ -76,7 +78,7 @@ export abstract class BaseTestResultStorage extends Disposable implements ITestR return undefined; } - return new HydratedTestResult(contents); + return new HydratedTestResult(this.uriIdentityService, contents); } catch (e) { this.logService.warn(`Error deserializing stored test result ${id}`, e); return undefined; @@ -206,13 +208,14 @@ export class TestResultStorage extends BaseTestResultStorage { private readonly directory: URI; constructor( + @IUriIdentityService uriIdentityService: IUriIdentityService, @IStorageService storageService: IStorageService, @ILogService logService: ILogService, @IWorkspaceContextService workspaceContext: IWorkspaceContextService, @IFileService private readonly fileService: IFileService, @IEnvironmentService environmentService: IEnvironmentService, ) { - super(storageService, logService); + super(uriIdentityService, storageService, logService); this.directory = URI.joinPath(environmentService.workspaceStorageHome, workspaceContext.getWorkspace().id, 'testResults'); } diff --git a/src/vs/workbench/contrib/testing/common/testServiceImpl.ts b/src/vs/workbench/contrib/testing/common/testServiceImpl.ts index e7541f0d2f2..3af68d68c4e 100644 --- a/src/vs/workbench/contrib/testing/common/testServiceImpl.ts +++ b/src/vs/workbench/contrib/testing/common/testServiceImpl.ts @@ -29,6 +29,7 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { getTestingConfiguration, TestingConfigKeys } from 'vs/workbench/contrib/testing/common/configuration'; import { isDefined } from 'vs/base/common/types'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; export class TestService extends Disposable implements ITestService { declare readonly _serviceBrand: undefined; @@ -67,7 +68,7 @@ export class TestService extends Disposable implements ITestService { /** * @inheritdoc */ - public readonly collection = new MainThreadTestCollection(this.expandTest.bind(this)); + public readonly collection = new MainThreadTestCollection(this.uriIdentityService, this.expandTest.bind(this)); /** * @inheritdoc @@ -86,6 +87,7 @@ export class TestService extends Disposable implements ITestService { constructor( @IContextKeyService contextKeyService: IContextKeyService, @IInstantiationService instantiationService: IInstantiationService, + @IUriIdentityService private readonly uriIdentityService: IUriIdentityService, @IStorageService private readonly storage: IStorageService, @IEditorService private readonly editorService: IEditorService, @ITestProfileService private readonly testProfiles: ITestProfileService, diff --git a/src/vs/workbench/contrib/testing/common/testTypes.ts b/src/vs/workbench/contrib/testing/common/testTypes.ts index 0b3486efa89..883b00fa5f9 100644 --- a/src/vs/workbench/contrib/testing/common/testTypes.ts +++ b/src/vs/workbench/contrib/testing/common/testTypes.ts @@ -10,6 +10,7 @@ import { IPosition, Position } from 'vs/editor/common/core/position'; import { IRange, Range } from 'vs/editor/common/core/range'; import { TestId } from 'vs/workbench/contrib/testing/common/testId'; + export const enum TestResultState { Unset = 0, Queued = 1, @@ -129,6 +130,12 @@ export interface IRichLocation { uri: URI; } +/** Subset of the IUriIdentityService */ +export interface ITestUriCanonicalizer { + /** @link import('vs/platform/uriIdentity/common/uriIdentity').IUriIdentityService */ + asCanonicalUri(uri: URI): URI; +} + export namespace IRichLocation { export interface Serialize { range: IRange; @@ -140,9 +147,9 @@ export namespace IRichLocation { uri: location.uri.toJSON(), }); - export const deserialize = (location: Serialize): IRichLocation => ({ + export const deserialize = (uriIdentity: ITestUriCanonicalizer, location: Serialize): IRichLocation => ({ range: Range.lift(location.range), - uri: URI.revive(location.uri), + uri: uriIdentity.asCanonicalUri(URI.revive(location.uri)), }); } @@ -179,13 +186,13 @@ export namespace ITestErrorMessage { location: message.location && IRichLocation.serialize(message.location), }); - export const deserialize = (message: Serialized): ITestErrorMessage => ({ + export const deserialize = (uriIdentity: ITestUriCanonicalizer, message: Serialized): ITestErrorMessage => ({ message: message.message, type: TestMessageType.Error, expected: message.expected, actual: message.actual, contextValue: message.contextValue, - location: message.location && IRichLocation.deserialize(message.location), + location: message.location && IRichLocation.deserialize(uriIdentity, message.location), }); } @@ -221,12 +228,12 @@ export namespace ITestOutputMessage { location: message.location && IRichLocation.serialize(message.location), }); - export const deserialize = (message: Serialized): ITestOutputMessage => ({ + export const deserialize = (uriIdentity: ITestUriCanonicalizer, message: Serialized): ITestOutputMessage => ({ message: message.message, type: TestMessageType.Output, offset: message.offset, length: message.length, - location: message.location && IRichLocation.deserialize(message.location), + location: message.location && IRichLocation.deserialize(uriIdentity, message.location), }); } @@ -238,8 +245,8 @@ export namespace ITestMessage { export const serialize = (message: Readonly): Serialized => message.type === TestMessageType.Error ? ITestErrorMessage.serialize(message) : ITestOutputMessage.serialize(message); - export const deserialize = (message: Serialized): ITestMessage => - message.type === TestMessageType.Error ? ITestErrorMessage.deserialize(message) : ITestOutputMessage.deserialize(message); + export const deserialize = (uriIdentity: ITestUriCanonicalizer, message: Serialized): ITestMessage => + message.type === TestMessageType.Error ? ITestErrorMessage.deserialize(uriIdentity, message) : ITestOutputMessage.deserialize(uriIdentity, message); } export interface ITestTaskState { @@ -267,10 +274,10 @@ export namespace ITestTaskState { messages: state.messages.map(ITestMessage.serialize), }); - export const deserialize = (state: Serialized): ITestTaskState => ({ + export const deserialize = (uriIdentity: ITestUriCanonicalizer, state: Serialized): ITestTaskState => ({ state: state.state, duration: state.duration, - messages: state.messages.map(ITestMessage.deserialize), + messages: state.messages.map(m => ITestMessage.deserialize(uriIdentity, m)), }); } @@ -342,13 +349,13 @@ export namespace ITestItem { sortText: item.sortText }); - export const deserialize = (serialized: Serialized): ITestItem => ({ + export const deserialize = (uriIdentity: ITestUriCanonicalizer, serialized: Serialized): ITestItem => ({ extId: serialized.extId, label: serialized.label, tags: serialized.tags, busy: serialized.busy, children: undefined, - uri: serialized.uri ? URI.revive(serialized.uri) : undefined, + uri: serialized.uri ? uriIdentity.asCanonicalUri(URI.revive(serialized.uri)) : undefined, range: serialized.range ? Range.lift(serialized.range) : null, description: serialized.description, error: serialized.error, @@ -386,13 +393,13 @@ export namespace InternalTestItem { item: ITestItem.serialize(item.item) }); - export const deserialize = (serialized: Serialized): InternalTestItem => ({ + export const deserialize = (uriIdentity: ITestUriCanonicalizer, serialized: Serialized): InternalTestItem => ({ // the `controllerId` is derived from the test.item.extId. It's redundant // in the non-serialized InternalTestItem too, but there just because it's // checked against in many hot paths. controllerId: TestId.root(serialized.item.extId), expand: serialized.expand, - item: ITestItem.deserialize(serialized.item) + item: ITestItem.deserialize(uriIdentity, serialized.item) }); } @@ -497,11 +504,11 @@ export namespace TestResultItem { tasks: original.tasks.map(ITestTaskState.serialize), }); - export const deserialize = (serialized: Serialized): TestResultItem => ({ - ...InternalTestItem.deserialize(serialized), + export const deserialize = (uriIdentity: ITestUriCanonicalizer, serialized: Serialized): TestResultItem => ({ + ...InternalTestItem.deserialize(uriIdentity, serialized), ownComputedState: serialized.ownComputedState, computedState: serialized.computedState, - tasks: serialized.tasks.map(ITestTaskState.deserialize), + tasks: serialized.tasks.map(m => ITestTaskState.deserialize(uriIdentity, m)), retired: true, }); } @@ -705,13 +712,13 @@ export namespace TestsDiffOp { | { op: TestDiffOpType.RemoveTag; id: string } | { op: TestDiffOpType.DocumentSynced; uri: UriComponents; docv?: number }; - export const deserialize = (u: Serialized): TestsDiffOp => { + export const deserialize = (uriIdentity: ITestUriCanonicalizer, u: Serialized): TestsDiffOp => { if (u.op === TestDiffOpType.Add) { - return { op: u.op, item: InternalTestItem.deserialize(u.item) }; + return { op: u.op, item: InternalTestItem.deserialize(uriIdentity, u.item) }; } else if (u.op === TestDiffOpType.Update) { return { op: u.op, item: ITestItemUpdate.deserialize(u.item) }; } else if (u.op === TestDiffOpType.DocumentSynced) { - return { op: u.op, uri: URI.revive(u.uri), docv: u.docv }; + return { op: u.op, uri: uriIdentity.asCanonicalUri(URI.revive(u.uri)), docv: u.docv }; } else { return u; } @@ -823,6 +830,8 @@ export abstract class AbstractIncrementalTestCollection = this._tags; + constructor(private readonly uriIdentity: ITestUriCanonicalizer) { } + /** * Applies the diff to the collection. */ @@ -832,7 +841,7 @@ export abstract class AbstractIncrementalTestCollection this.c.setDiff(d /* don't clear during testing */))); - const collection = new MainThreadTestCollection((testId, levels) => { + const collection = new MainThreadTestCollection({ asCanonicalUri: u => u }, (testId, levels) => { this.c.expand(testId, levels); if (!this.isProcessingDiff) { this.onDiff.fire(this.c.collectDiff()); diff --git a/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts b/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts index d6cb76e0848..1ccfb22aa67 100644 --- a/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts +++ b/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts @@ -10,6 +10,7 @@ import { CancellationTokenSource } from 'vs/base/common/cancellation'; import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; import { MockContextKeyService } from 'vs/platform/keybinding/test/common/mockKeybindingService'; import { NullLogService } from 'vs/platform/log/common/log'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { TestId } from 'vs/workbench/contrib/testing/common/testId'; import { TestProfileService } from 'vs/workbench/contrib/testing/common/testProfileService'; import { HydratedTestResult, LiveTestResult, TaskRawOutput, TestResultItemChange, TestResultItemChangeReason, resultItemParents } from 'vs/workbench/contrib/testing/common/testResult'; @@ -207,7 +208,11 @@ suite('Workbench - Test Results Service', () => { } setup(() => { - storage = ds.add(new InMemoryResultStorage(ds.add(new TestStorageService()), new NullLogService())); + storage = ds.add(new InMemoryResultStorage({ + asCanonicalUri(uri) { + return uri; + }, + } as IUriIdentityService, ds.add(new TestStorageService()), new NullLogService())); results = ds.add(new TestTestResultService( new MockContextKeyService(), storage, @@ -277,6 +282,10 @@ suite('Workbench - Test Results Service', () => { }); const makeHydrated = async (completedAt = 42, state = TestResultState.Passed) => new HydratedTestResult({ + asCanonicalUri(uri) { + return uri; + }, + } as IUriIdentityService, { completedAt, id: 'some-id', tasks: [{ id: 't', name: undefined }], diff --git a/src/vs/workbench/contrib/testing/test/common/testResultStorage.test.ts b/src/vs/workbench/contrib/testing/test/common/testResultStorage.test.ts index 98d828c0a3d..a406eb7f2cc 100644 --- a/src/vs/workbench/contrib/testing/test/common/testResultStorage.test.ts +++ b/src/vs/workbench/contrib/testing/test/common/testResultStorage.test.ts @@ -8,6 +8,7 @@ import { range } from 'vs/base/common/arrays'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; import { NullLogService } from 'vs/platform/log/common/log'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { ITestResult, LiveTestResult } from 'vs/workbench/contrib/testing/common/testResult'; import { InMemoryResultStorage, RETAIN_MAX_RESULTS } from 'vs/workbench/contrib/testing/common/testResultStorage'; import { testStubs } from 'vs/workbench/contrib/testing/test/common/testStubs'; @@ -42,7 +43,11 @@ suite('Workbench - Test Result Storage', () => { setup(async () => { ds = new DisposableStore(); - storage = ds.add(new InMemoryResultStorage(ds.add(new TestStorageService()), new NullLogService())); + storage = ds.add(new InMemoryResultStorage({ + asCanonicalUri(uri) { + return uri; + }, + } as IUriIdentityService, ds.add(new TestStorageService()), new NullLogService())); }); teardown(() => ds.dispose()); diff --git a/src/vs/workbench/contrib/testing/test/common/testStubs.ts b/src/vs/workbench/contrib/testing/test/common/testStubs.ts index e2c41e8a2b7..836fe2143e8 100644 --- a/src/vs/workbench/contrib/testing/test/common/testStubs.ts +++ b/src/vs/workbench/contrib/testing/test/common/testStubs.ts @@ -106,7 +106,7 @@ export class TestTestCollection extends TestItemCollection { * roots/stubs. */ export const getInitializedMainTestCollection = async (singleUse = testStubs.nested()) => { - const c = new MainThreadTestCollection(async (t, l) => singleUse.expand(t, l)); + const c = new MainThreadTestCollection({ asCanonicalUri: u => u }, async (t, l) => singleUse.expand(t, l)); await singleUse.expand(singleUse.root.id, Infinity); c.apply(singleUse.collectDiff()); singleUse.dispose(); From 4fc3ed352718e792ef92a437ecc7de5022e516dc Mon Sep 17 00:00:00 2001 From: Joyce Er Date: Fri, 1 Dec 2023 16:37:46 -0800 Subject: [PATCH 11/92] feat: render keybinding label for chat `/help` command link (#199831) --- .../contrib/chat/browser/chatListRenderer.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts index 7fa4749fd20..15ce304da13 100644 --- a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts +++ b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts @@ -39,6 +39,7 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { FileKind } from 'vs/platform/files/common/files'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { WorkbenchCompressibleAsyncDataTree, WorkbenchList } from 'vs/platform/list/browser/listService'; import { ILogService } from 'vs/platform/log/common/log'; import { IOpenerService } from 'vs/platform/opener/common/opener'; @@ -140,6 +141,7 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer { + const keybinding = this.keybindingService.lookupKeybinding(command); + const keybindingLabel = keybinding?.getLabel(); + if (keybindingLabel) { + // ideally we would use the keybindingLabel renderer but dompurify sanitizes the styling + return `${match} (\`${keybindingLabel}\`)`; + } + return match; + }); + + markdown = new MarkdownString(value, { isTrusted: { // Disable all other config options except isTrusted enabledCommands: typeof markdown.isTrusted === 'object' ? markdown.isTrusted?.enabledCommands : [] ?? [] From c8ba61004641f4c85c853a6580f98a79c7186ea0 Mon Sep 17 00:00:00 2001 From: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Date: Sat, 2 Dec 2023 02:28:58 +0100 Subject: [PATCH 12/92] SCM - more scm input box toolbar cleanup (#199833) * Cleaning up context keys * SCM - more scm input box toolbar cleanup * Fix compilation error --- .../dropdownWithPrimaryActionViewItem.ts | 7 ++ .../contrib/scm/browser/scmViewPane.ts | 75 ++++++++++--------- 2 files changed, 45 insertions(+), 37 deletions(-) diff --git a/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts b/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts index 654c1c336e9..99e25133cd8 100644 --- a/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts +++ b/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts @@ -93,6 +93,8 @@ export class DropdownWithPrimaryActionViewItem extends BaseActionViewItem { event.stopPropagation(); } })); + + this.updateEnabled(); } override focus(fromRight?: boolean): void { @@ -119,6 +121,11 @@ export class DropdownWithPrimaryActionViewItem extends BaseActionViewItem { } } + protected override updateEnabled(): void { + const disabled = !this.action.enabled; + this.element?.classList.toggle('disabled', disabled); + } + update(dropdownAction: IAction, dropdownMenuActions: IAction[], dropdownIcon?: string): void { this._dropdown.dispose(); this._dropdown = new DropdownMenuActionViewItem(dropdownAction, dropdownMenuActions, this._contextMenuProvider, { diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts index ad769a9c7fb..81500caf75d 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts @@ -1773,14 +1773,11 @@ const enum SCMInputCommandId { CancelAction = 'scm.input.cancelAction' } -const SCMInputContextKeys = { - ActionIsRunning: new RawContextKey('scmInputActionIsRunning', false), -}; - class SCMInputWidgetActionRunner extends ActionRunner { - private _runningActions = new Set(); - private _ctxIsActionRunning: IContextKey; + private readonly _runningActions = new Set(); + public get runningActions(): Set { return this._runningActions; } + private _cts: CancellationTokenSource | undefined; constructor( @@ -1789,14 +1786,12 @@ class SCMInputWidgetActionRunner extends ActionRunner { @IStorageService private readonly storageService: IStorageService ) { super(); - - this._ctxIsActionRunning = SCMInputContextKeys.ActionIsRunning.bindTo(contextKeyService); } protected override async runAction(action: IAction): Promise { try { // Cancel previous action - if (this._ctxIsActionRunning.get() === true) { + if (this.runningActions.size !== 0) { this._cts?.cancel(); if (action.id === SCMInputCommandId.CancelAction) { @@ -1804,9 +1799,7 @@ class SCMInputWidgetActionRunner extends ActionRunner { } } - this._runningActions.add(action); - this._ctxIsActionRunning.set(true); - + // Create action context const context: ISCMInputValueProviderContext[] = []; for (const group of this.input.repository.provider.groups) { context.push({ @@ -1815,15 +1808,16 @@ class SCMInputWidgetActionRunner extends ActionRunner { }); } + // Run action + this._runningActions.add(action); this._cts = new CancellationTokenSource(); await action.run(...[this.input.repository.provider.rootUri, context, this._cts.token]); } finally { this._runningActions.delete(action); + // Save last action if (this._runningActions.size === 0) { this.storageService.store('scm.input.lastActionId', action.id, StorageScope.PROFILE, StorageTarget.USER); - - this._ctxIsActionRunning.set(false); } } } @@ -1844,6 +1838,7 @@ class SCMInputWidgetToolbar extends WorkbenchToolBar { constructor( container: HTMLElement, input: ISCMInput, + actionRunner: SCMInputWidgetActionRunner, options: IMenuWorkbenchToolBarOptions | undefined, @IMenuService menuService: IMenuService, @IContextKeyService contextKeyService: IContextKeyService, @@ -1877,24 +1872,21 @@ class SCMInputWidgetToolbar extends WorkbenchToolBar { const actions: IAction[] = []; createAndFillInActionBarActions(menu, options?.menuOptions, actions); + for (const action of actions) { + action.enabled = isEnabled(); + } + this._dropdownAction.enabled = isEnabled(); + let primaryAction: IAction | undefined = undefined; - if (contextKeyService.getContextKeyValue(SCMInputContextKeys.ActionIsRunning.key) === true) { - primaryAction = cancelAction; - } else if (actions.length === 1) { + if (actions.length === 1) { primaryAction = actions[0]; } else if (actions.length > 1) { const lastActionId = storageService.get('scm.input.lastActionId', StorageScope.PROFILE, ''); primaryAction = actions.find(a => a.id === lastActionId) ?? actions[0]; } - if (primaryAction && primaryAction.id !== SCMInputCommandId.CancelAction && !isEnabled()) { - primaryAction.enabled = false; - } - - this._dropdownAction.enabled = isEnabled(); this._dropdownActions = actions.length === 1 ? [] : actions; - super.setActions(primaryAction ? [primaryAction] : [], []); this._onDidChange.fire(); @@ -1903,8 +1895,17 @@ class SCMInputWidgetToolbar extends WorkbenchToolBar { this._store.add(menu.onDidChange(() => updateToolbar())); this._store.add(input.repository.provider.onDidChangeResources(() => updateToolbar())); - const ctxKeys = new Set([SCMInputContextKeys.ActionIsRunning.key]); - this._store.add(Event.filter(contextKeyService.onDidChangeContext, e => e.affectsSome(ctxKeys))(() => updateToolbar())); + this._store.add(actionRunner.onWillRun(e => { + if (actionRunner.runningActions.size === 0) { + super.setActions([cancelAction], []); + this._onDidChange.fire(); + } + })); + this._store.add(actionRunner.onDidRun(e => { + if (actionRunner.runningActions.size === 0) { + updateToolbar(); + } + })); // Delay initial update to finish class initialization setTimeout(() => updateToolbar(), 0); @@ -1928,7 +1929,6 @@ class SCMInputWidget { private inputEditor: CodeEditorWidget; private toolbarContainer: HTMLElement; private toolbar: SCMInputWidgetToolbar | undefined; - private toolbarContextKeyService: IContextKeyService; private readonly disposables = new DisposableStore(); private model: { readonly input: ISCMInput; textModelRef?: IReference } | undefined; @@ -2098,20 +2098,17 @@ class SCMInputWidget { } private createToolbar(input: ISCMInput): SCMInputWidgetToolbar { - const services = new ServiceCollection([IContextKeyService, this.toolbarContextKeyService]); - const instantiationService2 = this.instantiationService.createChild(services); - - const actionRunner = instantiationService2.createInstance(SCMInputWidgetActionRunner, input); + const actionRunner = this.instantiationService.createInstance(SCMInputWidgetActionRunner, input); this.repositoryDisposables.add(actionRunner); - const toolbar: SCMInputWidgetToolbar = instantiationService2.createInstance(SCMInputWidgetToolbar, this.toolbarContainer, input, { + const toolbar: SCMInputWidgetToolbar = this.instantiationService.createInstance(SCMInputWidgetToolbar, this.toolbarContainer, input, actionRunner, { actionRunner, actionViewItemProvider: action => { if (action instanceof MenuItemAction && toolbar.dropdownActions.length > 1) { - return instantiationService2.createInstance(DropdownWithPrimaryActionViewItem, action, toolbar.dropdownAction, toolbar.dropdownActions, '', this.contextMenuService, { actionRunner }); + return this.instantiationService.createInstance(DropdownWithPrimaryActionViewItem, action, toolbar.dropdownAction, toolbar.dropdownActions, '', this.contextMenuService, { actionRunner }); } - return createActionViewItem(instantiationService2, action); + return createActionViewItem(this.instantiationService, action); }, menuOptions: { shouldForwardArgs: true @@ -2142,7 +2139,7 @@ class SCMInputWidget { constructor( container: HTMLElement, overflowWidgetsDomNode: HTMLElement, - @IContextKeyService private readonly contextKeyService: IContextKeyService, + @IContextKeyService contextKeyService: IContextKeyService, @IModelService private modelService: IModelService, @ITextModelService private textModelService: ITextModelService, @IKeybindingService private keybindingService: IKeybindingService, @@ -2164,8 +2161,6 @@ class SCMInputWidget { this.setPlaceholderFontStyles(fontFamily, fontSize, lineHeight); - this.toolbarContextKeyService = this.contextKeyService.createScoped(this.toolbarContainer); - const contextKeyService2 = contextKeyService.createScoped(this.element); this.repositoryIdContextKey = contextKeyService2.createKey('scmRepository', undefined); @@ -2449,7 +2444,13 @@ class SCMInputWidget { private getToolbarWidth(): number { const showInputActionButton = this.configurationService.getValue('scm.showInputActionButton'); - return showInputActionButton && this.toolbar?.isEmpty() === false ? 26 /* 22px action + 4px margin */ : 0; + if (!this.toolbar || !showInputActionButton || this.toolbar?.isEmpty() === true) { + return 0; + } + + return this.toolbar.dropdownActions.length === 0 ? + 26 /* 22px action + 4px margin */ : + 39 /* 35px action + 4px margin */; } private computeLineHeight(fontSize: number): number { From fda96c2ab0b180aee8654c9910823e3163fc06cb Mon Sep 17 00:00:00 2001 From: Joyce Er Date: Fri, 1 Dec 2023 17:37:56 -0800 Subject: [PATCH 13/92] fix: track empty editor content widget visibility in contrib (#199834) --- .../emptyTextEditorHint.ts | 49 +++++++++---------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts b/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts index 1732dc5fffe..76c1a353154 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts @@ -80,6 +80,8 @@ export class EmptyTextEditorHintContribution implements IEditorContribution { this.toDispose = []; this.toDispose.push(this.editor.onDidChangeModel(() => this.update())); this.toDispose.push(this.editor.onDidChangeModelLanguage(() => this.update())); + this.toDispose.push(this.editor.onDidChangeModelContent(() => this.update())); + this.toDispose.push(this.inlineChatService.onDidChangeProviders(() => this.update())); this.toDispose.push(this.editor.onDidChangeModelDecorations(() => this.update())); this.toDispose.push(this.configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration(emptyTextEditorHintSetting)) { @@ -122,15 +124,28 @@ export class EmptyTextEditorHintContribution implements IEditorContribution { return false; } + if (this.editor.getModel()?.getValueLength()) { + return false; + } + + const hasConflictingDecorations = Boolean(this.editor.getLineDecorations(1)?.find((d) => + d.options.beforeContentClassName + || d.options.afterContentClassName + || d.options.before?.content + || d.options.after?.content + )); + if (hasConflictingDecorations) { + return false; + } + const inlineChatProviders = [...this.inlineChatService.getAllProvider()]; const shouldRenderDefaultHint = model?.uri.scheme === Schemas.untitled && languageId === PLAINTEXT_LANGUAGE_ID && !inlineChatProviders.length; return inlineChatProviders.length > 0 || shouldRenderDefaultHint; } protected update(): void { - this.textHintContentWidget?.dispose(); - - if (this._shouldRenderHint()) { + const shouldRenderHint = this._shouldRenderHint(); + if (shouldRenderHint && !this.textHintContentWidget) { this.textHintContentWidget = new EmptyTextEditorHintContentWidget( this.editor, this._getOptions(), @@ -142,6 +157,9 @@ export class EmptyTextEditorHintContribution implements IEditorContribution { this.telemetryService, this.productService ); + } else if (!shouldRenderHint && this.textHintContentWidget) { + this.textHintContentWidget.dispose(); + this.textHintContentWidget = undefined; } } @@ -172,8 +190,6 @@ class EmptyTextEditorHintContentWidget implements IContentWidget { private readonly productService: IProductService ) { this.toDispose = new DisposableStore(); - this.toDispose.add(this.inlineChatService.onDidChangeProviders(() => this.onDidChangeModelContent())); - this.toDispose.add(this.editor.onDidChangeModelContent(() => this.onDidChangeModelContent())); this.toDispose.add(this.editor.onDidChangeConfiguration((e: ConfigurationChangedEvent) => { if (this.domNode && e.hasChanged(EditorOption.fontInfo)) { this.editor.applyFontInfo(this.domNode); @@ -185,28 +201,7 @@ class EmptyTextEditorHintContentWidget implements IContentWidget { status(this.ariaLabel); } })); - this.onDidChangeModelContent(); - } - - private onDidChangeModelContent(): void { - if (!this.editor.getModel()?.getValueLength() && !this.hasConflictingDecorations()) { - this.editor.addContentWidget(this); - this.isVisible = true; - } else { - this.editor.removeContentWidget(this); - this.isVisible = false; - } - } - - private hasConflictingDecorations(): boolean { - const res = Boolean(this.editor.getLineDecorations(1)?.find((d) => - d.options.beforeContentClassName - || d.options.afterContentClassName - || d.options.before?.content - || d.options.after?.content - )); - - return res; + this.editor.addContentWidget(this); } getId(): string { From 0a13aeb3f49508f2fb4d320f20ce7695fda18764 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Sat, 2 Dec 2023 08:25:30 +0100 Subject: [PATCH 14/92] aux window - fix web (#199836) (#199838) --- src/vs/base/browser/dom.ts | 10 +++++++--- .../auxiliaryWindow/browser/auxiliaryWindowService.ts | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index a24e41988e1..e8bf8980241 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -444,9 +444,9 @@ export function getComputedStyle(el: HTMLElement): CSSStyleDeclaration { return getWindow(el).getComputedStyle(el, null); } -export function getClientArea(element: HTMLElement): Dimension { - const elDocument = element.ownerDocument; - const elWindow = elDocument.defaultView?.window; +export function getClientArea(element: HTMLElement, fallback?: HTMLElement): Dimension { + const elWindow = getWindow(element); + const elDocument = elWindow.document; // Try with DOM clientWidth / clientHeight if (element !== elDocument.body) { @@ -473,6 +473,10 @@ export function getClientArea(element: HTMLElement): Dimension { return new Dimension(elDocument.documentElement.clientWidth, elDocument.documentElement.clientHeight); } + if (fallback) { + return getClientArea(fallback); + } + throw new Error('Unable to figure out browser width and height'); } diff --git a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts index aedc4393850..a4639125b9b 100644 --- a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts +++ b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts @@ -83,7 +83,7 @@ export class AuxiliaryWindow extends BaseWindow implements IAuxiliaryWindow { })); this._register(addDisposableListener(this.window, EventType.RESIZE, () => { - const dimension = getClientArea(this.window.document.body); + const dimension = getClientArea(this.window.document.body, this.container); position(this.container, 0, 0, 0, 0, 'relative'); size(this.container, dimension.width, dimension.height); @@ -116,7 +116,7 @@ export class AuxiliaryWindow extends BaseWindow implements IAuxiliaryWindow { } layout(): void { - this._onDidLayout.fire(getClientArea(this.window.document.body)); + this._onDidLayout.fire(getClientArea(this.window.document.body, this.container)); } override dispose(): void { From 8c24af1bf467eba4725a6b058f37e2faa43a6d15 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Sat, 2 Dec 2023 08:26:08 +0100 Subject: [PATCH 15/92] aux window - track input focus properly (#199729) (#199839) --- src/vs/workbench/browser/contextkeys.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/browser/contextkeys.ts b/src/vs/workbench/browser/contextkeys.ts index 24cbbab7351..264b62dc082 100644 --- a/src/vs/workbench/browser/contextkeys.ts +++ b/src/vs/workbench/browser/contextkeys.ts @@ -9,7 +9,7 @@ import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from 'vs/platform/contextkey/common/contextkeys'; import { SplitEditorsVertically, InEditorZenModeContext, ActiveEditorCanRevertContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, ActiveEditorContext, EditorsVisibleContext, TextCompareEditorVisibleContext, TextCompareEditorActiveContext, ActiveEditorGroupEmptyContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsCenteredLayoutContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorReadonlyContext, MainEditorAreaVisibleContext, ActiveEditorAvailableEditorIdsContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, ActiveEditorCanToggleReadonlyContext, applyAvailableEditorIds, TitleBarVisibleContext, TitleBarStyleContext, MultipleEditorGroupsContext, IsAuxiliaryWindowFocusedContext } from 'vs/workbench/common/contextkeys'; import { TEXT_DIFF_EDITOR_ID, EditorInputCapabilities, SIDE_BY_SIDE_EDITOR_ID, EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor'; -import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow } from 'vs/base/browser/dom'; +import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow, getActiveWindow } from 'vs/base/browser/dom'; import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; @@ -348,7 +348,18 @@ export class WorkbenchContextKeysHandler extends Disposable { if (isInputFocused) { const tracker = trackFocus(ownerDocument.activeElement as HTMLElement); Event.once(tracker.onDidBlur)(() => { - this.inputFocusedContext.set(activeElementIsInput()); + + // Ensure we are only updating the context key if we are + // still in the same document that we are tracking. This + // fixes a race condition in multi-window setups where + // the blur event arrives in the inactive window overwriting + // the context key of the active window. This is because + // blur events from the focus tracker are emitted with a + // timeout of 0. + + if (getActiveWindow().document === ownerDocument) { + this.inputFocusedContext.set(activeElementIsInput()); + } tracker.dispose(); }); From f48cf5f19609ce31b9286dcaf6607971828b1e6c Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Sat, 2 Dec 2023 14:31:26 +0100 Subject: [PATCH 16/92] aux window - patch `HTMLElement.focus()` to focus owning window (#199837) * aux window - patch `HTMLElement.focus()` to focus owning window * fix tests --- .../browser/parts/views/viewPaneContainer.ts | 3 +- src/vs/workbench/browser/window.ts | 28 ++++++++++++++++++- .../contrib/files/browser/explorerViewlet.ts | 3 +- src/vs/workbench/test/browser/window.test.ts | 2 ++ 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/browser/parts/views/viewPaneContainer.ts b/src/vs/workbench/browser/parts/views/viewPaneContainer.ts index 2be6d0ca33b..67b09829a33 100644 --- a/src/vs/workbench/browser/parts/views/viewPaneContainer.ts +++ b/src/vs/workbench/browser/parts/views/viewPaneContainer.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { addDisposableListener, Dimension, DragAndDropObserver, EventType, focusWindow, getWindow, isAncestor } from 'vs/base/browser/dom'; +import { addDisposableListener, Dimension, DragAndDropObserver, EventType, getWindow, isAncestor } from 'vs/base/browser/dom'; import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; import { EventType as TouchEventType, Gesture } from 'vs/base/browser/touch'; import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar'; @@ -611,7 +611,6 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer { } } if (paneToFocus) { - focusWindow(paneToFocus.element); paneToFocus.focus(); } } diff --git a/src/vs/workbench/browser/window.ts b/src/vs/workbench/browser/window.ts index c1ea5ce7b4a..c2e85c276ea 100644 --- a/src/vs/workbench/browser/window.ts +++ b/src/vs/workbench/browser/window.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { isSafari, setFullscreen } from 'vs/base/browser/browser'; -import { addDisposableListener, addDisposableThrottledListener, detectFullscreen, EventHelper, EventType, getWindows, getWindowsCount, windowOpenNoOpener, windowOpenPopup, windowOpenWithSuccess } from 'vs/base/browser/dom'; +import { addDisposableListener, addDisposableThrottledListener, detectFullscreen, EventHelper, EventType, getActiveWindow, getWindow, getWindows, getWindowsCount, windowOpenNoOpener, windowOpenPopup, windowOpenWithSuccess } from 'vs/base/browser/dom'; import { DomEmitter } from 'vs/base/browser/event'; import { HidDeviceData, requestHidDevice, requestSerialPort, requestUsbDevice, SerialPortData, UsbDeviceData } from 'vs/base/browser/deviceAccess'; import { timeout } from 'vs/base/common/async'; @@ -38,9 +38,35 @@ export abstract class BaseWindow extends Disposable { constructor(targetWindow: CodeWindow, dom = { getWindowsCount, getWindows } /* for testing */) { super(); + this.enableWindowFocusOnElementFocus(targetWindow); this.enableMultiWindowAwareTimeout(targetWindow, dom); } + //#region focus handling in multi-window applications + + protected enableWindowFocusOnElementFocus(targetWindow: CodeWindow): void { + const originalFocus = HTMLElement.prototype.focus; + + targetWindow.HTMLElement.prototype.focus = function (this: HTMLElement, options?: FocusOptions | undefined): void { + + // If the active focused window is not the same as the + // window of the element to focus, make sure to focus + // that window first before focusing the element. + const activeWindow = getActiveWindow(); + if (activeWindow.document.hasFocus()) { + const elementWindow = getWindow(this); + if (activeWindow !== elementWindow) { + elementWindow.focus(); + } + } + + // Pass to original focus() method + originalFocus.apply(this, [options]); + }; + } + + //#endregion + //#region timeout handling in multi-window applications /** diff --git a/src/vs/workbench/contrib/files/browser/explorerViewlet.ts b/src/vs/workbench/contrib/files/browser/explorerViewlet.ts index 5f1ccf45830..5b064b6c620 100644 --- a/src/vs/workbench/contrib/files/browser/explorerViewlet.ts +++ b/src/vs/workbench/contrib/files/browser/explorerViewlet.ts @@ -37,7 +37,7 @@ import { OpenRecentAction } from 'vs/workbench/browser/actions/windowActions'; import { isMacintosh, isWeb } from 'vs/base/common/platform'; import { Codicon } from 'vs/base/common/codicons'; import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { focusWindow, isMouseEvent } from 'vs/base/browser/dom'; +import { isMouseEvent } from 'vs/base/browser/dom'; const explorerViewIcon = registerIcon('explorer-view-icon', Codicon.files, localize('explorerViewIcon', 'View icon of the explorer view.')); const openEditorsViewIcon = registerIcon('open-editors-view-icon', Codicon.book, localize('openEditorsIcon', 'View icon of the open editors view.')); @@ -239,7 +239,6 @@ export class ExplorerViewPaneContainer extends ViewPaneContainer { explorerView.setExpanded(true); } if (explorerView?.isExpanded()) { - focusWindow(explorerView.element); explorerView.focus(); } else { super.focus(); diff --git a/src/vs/workbench/test/browser/window.test.ts b/src/vs/workbench/test/browser/window.test.ts index e2ffc2a359a..6096c501a6d 100644 --- a/src/vs/workbench/test/browser/window.test.ts +++ b/src/vs/workbench/test/browser/window.test.ts @@ -20,6 +20,8 @@ suite('Window', () => { constructor(window: CodeWindow, dom: { getWindowsCount: () => number; getWindows: () => Iterable }) { super(window, dom); } + + override enableWindowFocusOnElementFocus(): void { } } test('multi window aware setTimeout()', async function () { From ef804e738b931ca4767b71518f77e049ac114976 Mon Sep 17 00:00:00 2001 From: Robo Date: Sun, 3 Dec 2023 00:17:36 +0900 Subject: [PATCH 17/92] chore: update electron@25.9.7 (#199854) * chore: update electron@25.9.7 * chore: bump distro --- .yarnrc | 4 +- build/checksums/electron.txt | 150 +++++++++++++++++------------------ cgmanifest.json | 4 +- package.json | 4 +- yarn.lock | 8 +- 5 files changed, 85 insertions(+), 85 deletions(-) diff --git a/.yarnrc b/.yarnrc index 93ab6e90d78..105cc495165 100644 --- a/.yarnrc +++ b/.yarnrc @@ -1,5 +1,5 @@ disturl "https://electronjs.org/headers" -target "25.9.6" -ms_build_id "25531495" +target "25.9.7" +ms_build_id "25551756" runtime "electron" build_from_source "true" diff --git a/build/checksums/electron.txt b/build/checksums/electron.txt index 960980997b0..9551123e83e 100644 --- a/build/checksums/electron.txt +++ b/build/checksums/electron.txt @@ -1,75 +1,75 @@ -bd1bd27fb2724748b50ed9978146e9f3c28f21f09144901da4fb09c2412ef6b8 *chromedriver-v25.9.6-darwin-arm64.zip -c8fc339dcf9d93940d9e85be0ca8ef992ee12c93f191b79b074f8c5624c195e8 *chromedriver-v25.9.6-darwin-x64.zip -77331490233bd58c1fcd8c930e8a346b50ffe4e790278370c83a7c4bfe2e91b5 *chromedriver-v25.9.6-linux-arm64.zip -2a050686a8b455ad3ff799f50844b64849db8d0b3b7354850bfb62b21408dc6c *chromedriver-v25.9.6-linux-armv7l.zip -4999e2bb69c65c84e562a9ad3420b0323ad0cffb04979ed6db8211b3bd90783e *chromedriver-v25.9.6-linux-x64.zip -42273234489748b2c16886dd4c8afada9ecf972e60ce4323fd810fb101097738 *chromedriver-v25.9.6-mas-arm64.zip -d63b3ef6eb49bc0d1d048a77e8f5059599aa8b7d74a4032cb90b6b8978dd822f *chromedriver-v25.9.6-mas-x64.zip -88337702ae3854fdd01978383753d125548f45614422e0bc1979b84e9ee4568e *chromedriver-v25.9.6-win32-arm64.zip -4e6191def9c9975d44eba453218186ebd1511c61ab739f018c6ee887b9df87e5 *chromedriver-v25.9.6-win32-ia32.zip -002e6a0e331013c8679a3835110f6f73c6b297b091bb3a82dff3ae96fbf167f6 *chromedriver-v25.9.6-win32-x64.zip -5cf2cf7f78c6c4e2411f2fca3e8a68ea8b627478d12da7f9d1066b12c2c3ad30 *electron-api.json -e18f9801837e0cf3d9818bb0829819b57545fcaebf1355999f2cb8d0eada09f1 *electron-v25.9.6-darwin-arm64-dsym-snapshot.zip -dd961d0f2de707ce5153adc0f5d62fb97e0b251f0512cf3f364ba9cb4e043161 *electron-v25.9.6-darwin-arm64-dsym.zip -14f9d7c37a85ef03300edc335ba3b43583c121bb05d23e7496adfc001a552feb *electron-v25.9.6-darwin-arm64-symbols.zip -dc06bbd7378b68d67469b958bf049944e08dc67c7fc9d0a5f94828f85982f5b9 *electron-v25.9.6-darwin-arm64.zip -d5cef8cdaa0d697ec82d1c8ca2252d7debe4a6beeab34cbd14e2af294bec6745 *electron-v25.9.6-darwin-x64-dsym-snapshot.zip -d3da17c9e8b9bcaf52871f8dfbf8589401613e4ba8dd09316bccf0606ac68fb3 *electron-v25.9.6-darwin-x64-dsym.zip -7cac10c7b4ff45f90fd8e15dbc33f69931abaf06e9791f0d4e6af5b589face64 *electron-v25.9.6-darwin-x64-symbols.zip -0accf891874030cac28632cc36ac4b88398e99aa3c39be0947ed9e3d3457c0ba *electron-v25.9.6-darwin-x64.zip -4374a1513e6829f241855bfe11b2aa6eb276a8f3cfbf4f5b8f67b0f561016219 *electron-v25.9.6-linux-arm64-debug.zip -127ba3c914d978e62765b1a6be1ffe963aa9d7ed91dbb8442bb94ebd0e45fec1 *electron-v25.9.6-linux-arm64-symbols.zip -6ced27b15114c868d2ec0e479a4cd4c32a42014f28a3cfac274c0cf5d26c8433 *electron-v25.9.6-linux-arm64.zip -4374a1513e6829f241855bfe11b2aa6eb276a8f3cfbf4f5b8f67b0f561016219 *electron-v25.9.6-linux-armv7l-debug.zip -a6f605e2174ebcaa8f508a49a1ca3d3273295f8d5547a77e7d71d1e631a40baa *electron-v25.9.6-linux-armv7l-symbols.zip -311e463b02ed81788c2ab0d462f1efcf45efa49f325b0e9383a2894cdd6bf25c *electron-v25.9.6-linux-armv7l.zip -b58e46a687f69df227567083487818d10a31fd010bf377c8c4269a8c5b0f03bf *electron-v25.9.6-linux-x64-debug.zip -17661fd7bf9ee53d5f45e7d85a8e00e02c91ef67a1fcd8f04854392910cdca44 *electron-v25.9.6-linux-x64-symbols.zip -aa6b7e15c303f3c6a75c5d46c2809975a33848600cdcfc08023085a3fb490799 *electron-v25.9.6-linux-x64.zip -e18f9801837e0cf3d9818bb0829819b57545fcaebf1355999f2cb8d0eada09f1 *electron-v25.9.6-mas-arm64-dsym-snapshot.zip -d3c688a5a6297fba598f96fc315cd1712120f9f75966c82c7cd4f727159dfa60 *electron-v25.9.6-mas-arm64-dsym.zip -49706b64eed5929236c94b74622fee539c84287a2c2b6c7391307f38817750d3 *electron-v25.9.6-mas-arm64-symbols.zip -4920d36bc45e07a4705ab779a11db5339af6e0ba52c38dd2e9add007c96399fb *electron-v25.9.6-mas-arm64.zip -3601d1a6d5f686944798b58ea95ccbfc92584d2eec7c9e73bf3acb87eb570fb0 *electron-v25.9.6-mas-x64-dsym-snapshot.zip -5ccda3381211819ab87cd3a34f22ed9cf422dbe9d36bb4e5458a6b5d523b87bc *electron-v25.9.6-mas-x64-dsym.zip -d9d01d00ebbdc8a6a4894d5486c1eec657925bfdf6948b2123051c7eadc06369 *electron-v25.9.6-mas-x64-symbols.zip -8cf6f477b9468fb0ae693c96f47852d3f1be96eb5b4ca45b1946295c3677d28f *electron-v25.9.6-mas-x64.zip -568fbe49277eb0458e79c7793ea6038c419624b654628892535bc58f1f86c5f8 *electron-v25.9.6-win32-arm64-pdb.zip -9cbcf9e64c0f2611d27cea77105595a7ab9c57cc933da3bf162edb1b7f1a9808 *electron-v25.9.6-win32-arm64-symbols.zip -e7b968fc53cc7a10a4ccb5133af045968479685ebb9617f06817f03667fdd425 *electron-v25.9.6-win32-arm64-toolchain-profile.zip -6c4f9beed89c7bfd1538815861e2b1128a28a82fd729429dca1757dc4f77ccbd *electron-v25.9.6-win32-arm64.zip -b8eb0490a78757f61ca4438a1f78eb7874eb8da66544432adbdb97fa84bad2d6 *electron-v25.9.6-win32-ia32-pdb.zip -87edb1f236e7728b0c2b7a055e9f56f375fc2cafda880c3a6dc6df06678308ce *electron-v25.9.6-win32-ia32-symbols.zip -e7b968fc53cc7a10a4ccb5133af045968479685ebb9617f06817f03667fdd425 *electron-v25.9.6-win32-ia32-toolchain-profile.zip -ba25e44570ec2ba476052a43220011ee36609c70af9a96255385987ef9aafee4 *electron-v25.9.6-win32-ia32.zip -e9b4061feadf44020976bde51427e8f19d5921cf0bee1a6f7f2c91428896a0f6 *electron-v25.9.6-win32-x64-pdb.zip -5f85dc477fd1cb780dddfb6b62ef758a36a7973a1c51e58e5ba00b5b2c0a2eaa *electron-v25.9.6-win32-x64-symbols.zip -e7b968fc53cc7a10a4ccb5133af045968479685ebb9617f06817f03667fdd425 *electron-v25.9.6-win32-x64-toolchain-profile.zip -ed6410951228470ff976227042a0b430b72ce6c1e241a48fec367a86df8fa0a1 *electron-v25.9.6-win32-x64.zip -fc51b357c0fff78487b91a927076e2520d57081abe6a4ddbb8d15e3f462cbdb3 *electron.d.ts -0cf917e3270eeb935152a02e223cd551e43f59d40f2951a93cc24be2497f60de *ffmpeg-v25.9.6-darwin-arm64.zip -9254e94359efac66a2d9161d8e9312a43d174eab56ce4fb8cab202e5516a3ad0 *ffmpeg-v25.9.6-darwin-x64.zip -bd52d57ff97fb56ac01a3482af905d04f0d4e9c13c53858c6d9f99957eca82da *ffmpeg-v25.9.6-linux-arm64.zip -9b3d09177fa1e63e2a6beecfa70aeec30aeb5c1873ff21128a68051c4e23f95d *ffmpeg-v25.9.6-linux-armv7l.zip -edc7b1c9f1a0733f109a2c0375a4e40c5bfe0bf28b7f06dcc76e1ada0aa2f125 *ffmpeg-v25.9.6-linux-x64.zip -d50d1880a1c9e4ef11d8e712091b8faa0f47bcbdf339cbf276dd952892c64dbe *ffmpeg-v25.9.6-mas-arm64.zip -d61f6ecb96cb28876e9f53944763cac2d9b85a9d9dba53851f477ac3dc3301ef *ffmpeg-v25.9.6-mas-x64.zip -198d05aaef020af1a98453246a3e3ff999331b63967607fb706586f08cc43fac *ffmpeg-v25.9.6-win32-arm64.zip -2b80110b470491dbf33f2dcf1188a865980c94fb2a940cff5610e5b86701b51b *ffmpeg-v25.9.6-win32-ia32.zip -37f260ab3ae666df594705b400ff6592ddc4f088d95b585acd37ba529db5fff2 *ffmpeg-v25.9.6-win32-x64.zip -b1423529a11f5348b6b78a36d355134aec2760a1a2744699c83cd0b6b03cd425 *hunspell_dictionaries.zip -c89b061fe0b8835df41b8c00d3f791bc0830fb9be6b0955518c78bcacb5dd75f *libcxx-objects-v25.9.6-linux-arm64.zip -098e9f8af88085189e4c04f324baafa09d7a64c350576fd38d9dbf32ff0e8d30 *libcxx-objects-v25.9.6-linux-armv7l.zip -2e4e4faac500704cf16db656a870b9981659671ebaef4dfc972b5ad222422a81 *libcxx-objects-v25.9.6-linux-x64.zip -b61068bc99d5144f1f31f6a5d9862ebd7f091c745dba0ddfd1135be395540721 *libcxx_headers.zip -3a13e19e8633bea161650a6b3eba8a0b08b98e84d0246a72eea099d0807cba3c *libcxxabi_headers.zip -a33a708edab6fd2cab24eba6ea520e4b762bfd642e7a8e5548281c190b94a2a1 *mksnapshot-v25.9.6-darwin-arm64.zip -3ac987f47d898a8ef3f3ac2703be1aad4c10dc44dc01f5c2a495a8ca9ec9c660 *mksnapshot-v25.9.6-darwin-x64.zip -c3ee9b1d7d899c9211154fd56b2403cd882d77bb58fb48bbe744a668fe05256d *mksnapshot-v25.9.6-linux-arm64-x64.zip -440e7a903decccf95c1e0a1b01bef286413a59bd2c0831553f52872ba3790e22 *mksnapshot-v25.9.6-linux-armv7l-x64.zip -7240fa92f34beb0c6e5f455bc1f08f693de4480e852c986989f799849b1c6961 *mksnapshot-v25.9.6-linux-x64.zip -4a4f0337d444fa390ed7dffc70c73b67db0d37c978683aa0d41ee9cac741b690 *mksnapshot-v25.9.6-mas-arm64.zip -10de1874b5d168e9cdce9c825a1a29eee830495a9c4c0ab1c2849e89641b35b0 *mksnapshot-v25.9.6-mas-x64.zip -b2a15fdb3cca2085fdd72bc991fd8f945a028c0ed5872e9d271a79c8f61efb1d *mksnapshot-v25.9.6-win32-arm64-x64.zip -bd625b4089e43ece3246f92bfa1d0d401efe522cf9a3cba52bcc484aa86ec7a5 *mksnapshot-v25.9.6-win32-ia32.zip -f82a10a340568bcfc6605e69853f84b2158f0e86561c42036ee2232b23fccbec *mksnapshot-v25.9.6-win32-x64.zip +6d0c679fa3f8a9498b708f93c40c0918523c5790bb0e0055b0e8ac871efc228d *chromedriver-v25.9.7-darwin-arm64.zip +cd758c34bb6a5bf0ce0df48627fafa4fab5d1f22f2622b29cba3f5c5cc2dd4ae *chromedriver-v25.9.7-darwin-x64.zip +bcfd29d527ba4d243b496dddee58a73e82a2aeaae5c1c15d55a5729a5d714576 *chromedriver-v25.9.7-linux-arm64.zip +869e2584570e1a472bd60bf6a405abc53702e1c8c20f24ff9e6e74449e49fad6 *chromedriver-v25.9.7-linux-armv7l.zip +af8c4bc1277cf816bc9b94d1da4febda0083f7764318dbaca6d678527bffcc4f *chromedriver-v25.9.7-linux-x64.zip +9c7ce39bc74da1db6a95ed63683649001a42306476a288afb55c53c3fca1fef0 *chromedriver-v25.9.7-mas-arm64.zip +123fbab9b17aac3142051bfd3c60f1ac1b0eb6e71049b9e6d489a0f917daa909 *chromedriver-v25.9.7-mas-x64.zip +e6a52e4181ee1a3a15ba254c237043147b72904f38b7b925e40e85d37cf1d44a *chromedriver-v25.9.7-win32-arm64.zip +4c5b8d1df6efe5c9ec5db033a3fc2ec7f93f429d0c43d6025fe0f7b96f2cf449 *chromedriver-v25.9.7-win32-ia32.zip +388cc0cce6ce11a60d0b81c5b37b8cb04bcbade533616973a4ef7161487aa59f *chromedriver-v25.9.7-win32-x64.zip +0bfdc68d235fb824b809f59394a0e39c735235a07c1a715df26cc65cd55141b0 *electron-api.json +bba809f7e84b67efabe8b9c92d2cf976d4d90c56c0d20d88fa893d0e47674e50 *electron-v25.9.7-darwin-arm64-dsym-snapshot.zip +9058c533f955a792ad491094b4b2c31def667916301eb42f8d36d3b60b7bcf69 *electron-v25.9.7-darwin-arm64-dsym.zip +59c72fb1bd0c58b4ad05a2478bb3fba69c05e195b4d5972b3723c13b70d04fa6 *electron-v25.9.7-darwin-arm64-symbols.zip +f0fd83b62946669849c535f89eb8a44e17fa1d1a454058447759d2a2f5ce03fc *electron-v25.9.7-darwin-arm64.zip +75473483e4dbdd7416e1dd78ab8123940904e7c63d5ae47efd481a3806dedc34 *electron-v25.9.7-darwin-x64-dsym-snapshot.zip +119e21d1961f11978a85dc0fef58d689a94ea9593ee4122519a02e449da52cf8 *electron-v25.9.7-darwin-x64-dsym.zip +77aaac85c725d32ca9a79e9efa1749d1404bbacb72aa9e15846da566c49543f1 *electron-v25.9.7-darwin-x64-symbols.zip +a3c61f288d416a7ddc23c9b5db779502243f630bffaba47ab66c0f00c0018fdb *electron-v25.9.7-darwin-x64.zip +d8fe114d07c4d0953e4ab40da6d9c958b401e4304755a7a133f13156b8ca48e4 *electron-v25.9.7-linux-arm64-debug.zip +1e0df565ec278b6515adee40f9eed06f5931297a72a6eb71c1472f8d31dbe8b1 *electron-v25.9.7-linux-arm64-symbols.zip +c889eec8bdb2737ff03d03d571df7834e3cef764527688db87f6578f54684d7c *electron-v25.9.7-linux-arm64.zip +d8fe114d07c4d0953e4ab40da6d9c958b401e4304755a7a133f13156b8ca48e4 *electron-v25.9.7-linux-armv7l-debug.zip +d58185a0eff29461868d5e8b15a387ccf8f2ffd407c06e787f1a89b73ce8b794 *electron-v25.9.7-linux-armv7l-symbols.zip +56b31812f7b4b010f34240bb3e3ea186c8c7f87e75be483a3877f93d7b9442d1 *electron-v25.9.7-linux-armv7l.zip +1818221bd66f005fc6cd843375db9a13dd0c8ef9709725ed9708177fbc2e26d0 *electron-v25.9.7-linux-x64-debug.zip +87907fb6fec001e7dcd4ebb9e6340a008385a5de2e59ce06c6de0828f2ed6aaa *electron-v25.9.7-linux-x64-symbols.zip +54b458ac590c495bef05ed6708a4667bbeac6a1865734ac3ecbb4da24ab57d26 *electron-v25.9.7-linux-x64.zip +bba809f7e84b67efabe8b9c92d2cf976d4d90c56c0d20d88fa893d0e47674e50 *electron-v25.9.7-mas-arm64-dsym-snapshot.zip +7d8271d31dc3a1348ccdf7f70bd111ca43f8f5dbba509dcbafafa607432070d4 *electron-v25.9.7-mas-arm64-dsym.zip +965d581a44d70e6597b3da8864754eeb3470d1db0451d5d4385c43063e78a80d *electron-v25.9.7-mas-arm64-symbols.zip +1ddbe56386e08612f6196f5a9b1ad6de4e45cb1525175f4a8dbb1abd14673614 *electron-v25.9.7-mas-arm64.zip +2b2c4ae842cd6da1d4d7784e40a6e28ee087b399320d73fa8470b91570efa92f *electron-v25.9.7-mas-x64-dsym-snapshot.zip +abed370155c8f758ab25f1e201791889cd1d1c81e967f56b1eb0e7f2116d307b *electron-v25.9.7-mas-x64-dsym.zip +2b5d527fd2c4658dea4a0ec5c16c44f79f4be6d316a450c300cbd2635131ab2f *electron-v25.9.7-mas-x64-symbols.zip +ca0a53619c4c71331f1641d4186496a6ad9f557357e24028c49fa25b5e8ab3e2 *electron-v25.9.7-mas-x64.zip +491d76cd80b52bac63000c4affdf63f11a043fb196e75974648ef3cacba8eb0b *electron-v25.9.7-win32-arm64-pdb.zip +238a44d5c38ef9b3ec521a17af3808f7148bb6106c285b37148a9a45142029e9 *electron-v25.9.7-win32-arm64-symbols.zip +e7b968fc53cc7a10a4ccb5133af045968479685ebb9617f06817f03667fdd425 *electron-v25.9.7-win32-arm64-toolchain-profile.zip +d3a90da294b5137177af45d492d09603363db39a9c77ce43be24d80fea03347f *electron-v25.9.7-win32-arm64.zip +5c1a25b57e6a50ab0224f1eaef5572e122905ff0c690dda58f1c767100eab405 *electron-v25.9.7-win32-ia32-pdb.zip +96706d1eab97189ae3eda815a270ebe02bef3e228428fcd343065866569a3a16 *electron-v25.9.7-win32-ia32-symbols.zip +e7b968fc53cc7a10a4ccb5133af045968479685ebb9617f06817f03667fdd425 *electron-v25.9.7-win32-ia32-toolchain-profile.zip +16fecd283bae6b72747132b8a7da68520a69752ac9d5fa1d39f3a43a8920f366 *electron-v25.9.7-win32-ia32.zip +4c2c40cb56ee8e6091a8860c8eec1e59542d525e3c23506e0f265aec29aacb49 *electron-v25.9.7-win32-x64-pdb.zip +5c4e56dce95bdfac8d91e7d2b6af69b7dab98d823377392a68e41352e4098daf *electron-v25.9.7-win32-x64-symbols.zip +e7b968fc53cc7a10a4ccb5133af045968479685ebb9617f06817f03667fdd425 *electron-v25.9.7-win32-x64-toolchain-profile.zip +d4b77ec5b7cfc8d156a0518ebd82eb373440ce2abf1af92b6faa32cf444b7256 *electron-v25.9.7-win32-x64.zip +c80b2154d9de94a520c09b038b27f4a5e93177f8de48821c3f129cea0e52bd1c *electron.d.ts +65f4ed4292b9114f79385dac6e79c468ad686f97b0c4d507943ad7b9a28821c4 *ffmpeg-v25.9.7-darwin-arm64.zip +5259bd7c62211644aa6bb982a8e80d36b5c0049a76917cc1d39fc2226df02da5 *ffmpeg-v25.9.7-darwin-x64.zip +bd52d57ff97fb56ac01a3482af905d04f0d4e9c13c53858c6d9f99957eca82da *ffmpeg-v25.9.7-linux-arm64.zip +9b3d09177fa1e63e2a6beecfa70aeec30aeb5c1873ff21128a68051c4e23f95d *ffmpeg-v25.9.7-linux-armv7l.zip +edc7b1c9f1a0733f109a2c0375a4e40c5bfe0bf28b7f06dcc76e1ada0aa2f125 *ffmpeg-v25.9.7-linux-x64.zip +3eb7218d6fa54ebb3836773df6414d1b0e119071761151dc48dd39ab7421a1ba *ffmpeg-v25.9.7-mas-arm64.zip +0dbbba4c8120c1a0a00cffec6e4ad70013eab35b77e19877c79fc7ae9caff1e9 *ffmpeg-v25.9.7-mas-x64.zip +11853e7c01586a0b9b2a58caee308282b6cf1662b7b5bf9ac5d74de423b16f1c *ffmpeg-v25.9.7-win32-arm64.zip +7306690feb13bb97491ca0c4ac3fa78feb5d3227043b317febddb10136eb0b2b *ffmpeg-v25.9.7-win32-ia32.zip +da487bff8151e47827fa684607d1799e5d0c0b53dcd51e76c955ed5d2ee8f24a *ffmpeg-v25.9.7-win32-x64.zip +77b9a9567a24c5583722d97a3cb23a075ebf1eec885cec660c53cd1b54992b30 *hunspell_dictionaries.zip +9a3395cbd02f241134df5eb6cb65788052919bc19816c92befe6cb500eeb398c *libcxx-objects-v25.9.7-linux-arm64.zip +1feea6b4bd9ee66c0dfd0327e422f07b4b52cb24e872b12aa37e98d819fbadc6 *libcxx-objects-v25.9.7-linux-armv7l.zip +2f3bbda5de58e46705d622d1f671224973cef54de9cbdb8355dfe270ca092288 *libcxx-objects-v25.9.7-linux-x64.zip +324a1eed3f8197bbeac0a513d50a394b2eaa0ac92c92f9526b0b07d74f12c4e8 *libcxx_headers.zip +8052c0a22a9ad673d32c1ae157df9638838fbd017a030263d4cce21aeed5c824 *libcxxabi_headers.zip +7dd7ddb90482c84fb7d29e10ca8293bc85ed692c4f1f636624229bbe8ac103af *mksnapshot-v25.9.7-darwin-arm64.zip +696f5eb1d7eb5941ea0c2cca1e0682d77d7883f71ff18f577e6ccdb1591e8a4e *mksnapshot-v25.9.7-darwin-x64.zip +aff92c1eb4ef1c33fa4d1fcda43ee6123f87c5acd72093f78c8d22daaba2622d *mksnapshot-v25.9.7-linux-arm64-x64.zip +8e7463c9714b99d8fafee3830f5bcbf335ff9f66b9d8b9a77d285a688a0691c0 *mksnapshot-v25.9.7-linux-armv7l-x64.zip +329c285e158322667844cccf99767ea1ef39ada804edbbfe99ddbe2c228ddc21 *mksnapshot-v25.9.7-linux-x64.zip +aa30c1cb96f52bfc68e44dd7c2420a153de577652a9312a5c85256a1f2769f48 *mksnapshot-v25.9.7-mas-arm64.zip +e32f14ed222f7e01d81982959601df7881928d5f90ada773454a06203bd83412 *mksnapshot-v25.9.7-mas-x64.zip +472ffc38d34c059c1e1036784a11109f6d998e91d4b8c4bb0e84ded3d66f7bea *mksnapshot-v25.9.7-win32-arm64-x64.zip +882a8880a03deffa40b24cbc59af31ac285a6a1e0e049d053f750d3db17853ea *mksnapshot-v25.9.7-win32-ia32.zip +dfe408f01ddcc9b4f52b59fcefe49386f30eb097cef78fb98b8667deb42bc7f1 *mksnapshot-v25.9.7-win32-x64.zip diff --git a/cgmanifest.json b/cgmanifest.json index db840afa215..5de4d621039 100644 --- a/cgmanifest.json +++ b/cgmanifest.json @@ -528,12 +528,12 @@ "git": { "name": "electron", "repositoryUrl": "https://github.com/electron/electron", - "commitHash": "7916733f5ff0cf319972a0df44de01e40bbfa40e" + "commitHash": "55738ddac34a75be9bfbdda3ac1638adfd0e5479" } }, "isOnlyProductionDependency": true, "license": "MIT", - "version": "25.9.6" + "version": "25.9.7" }, { "component": { diff --git a/package.json b/package.json index 61e5ce43962..2772df69313 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", "version": "1.85.0", - "distro": "69e0a36f6df8a1e9fca2a92920a6a4c1ba9e57e4", + "distro": "166cef1a46189f0a5c1952c9e11bf0c387bae990", "author": { "name": "Microsoft Corporation" }, @@ -150,7 +150,7 @@ "cssnano": "^4.1.11", "debounce": "^1.0.0", "deemon": "^1.8.0", - "electron": "25.9.6", + "electron": "25.9.7", "eslint": "8.36.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-jsdoc": "^46.5.0", diff --git a/yarn.lock b/yarn.lock index 149984b4ad6..27aba72196e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3565,10 +3565,10 @@ electron-to-chromium@^1.4.202: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.207.tgz#9c3310ebace2952903d05dcaba8abe3a4ed44c01" integrity sha512-piH7MJDJp4rJCduWbVvmUd59AUne1AFBJ8JaRQvk0KzNTSUnZrVXHCZc+eg+CGE4OujkcLJznhGKD6tuAshj5Q== -electron@25.9.6: - version "25.9.6" - resolved "https://registry.yarnpkg.com/electron/-/electron-25.9.6.tgz#424b6b5ce24a7329ac0edf915b9fbd0732b7f630" - integrity sha512-vddWieRqlAFOTNZDwHwD8/3dRua8dpob6zZOUurO8y5JcFjA5/Kl2dbU6nwq/LI5BAS/6lg575xNZTJfOVwCmA== +electron@25.9.7: + version "25.9.7" + resolved "https://registry.yarnpkg.com/electron/-/electron-25.9.7.tgz#d6baa370ea334f0ead48d543f5f6c764e05fdaca" + integrity sha512-8aejD8NricfzeoUflPPpDU7M6yEppQyASoZBT7qgiKnEy6+M3SgetZNEmkoHMGK/NNxP8GcO5lRuvCyegI1mig== dependencies: "@electron/get" "^2.0.0" "@types/node" "^18.11.18" From 21048de4d6d15254f021e81c28518b917282d973 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Sun, 3 Dec 2023 08:30:02 +0100 Subject: [PATCH 18/92] eng - fix hygiene (#199883) --- src/vs/workbench/test/browser/window.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/test/browser/window.test.ts b/src/vs/workbench/test/browser/window.test.ts index 6096c501a6d..eabf5661cfc 100644 --- a/src/vs/workbench/test/browser/window.test.ts +++ b/src/vs/workbench/test/browser/window.test.ts @@ -21,7 +21,7 @@ suite('Window', () => { super(window, dom); } - override enableWindowFocusOnElementFocus(): void { } + protected override enableWindowFocusOnElementFocus(): void { } } test('multi window aware setTimeout()', async function () { From 4b9608ccceba9fee3d5ceb5f76e0b728d7a05068 Mon Sep 17 00:00:00 2001 From: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Date: Sun, 3 Dec 2023 10:56:35 +0100 Subject: [PATCH 19/92] =?UTF-8?q?SCM=20-=20SCMInputWidget=20toolbar=20?= =?UTF-8?q?=F0=9F=92=84=20(#199885)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contrib/scm/browser/scmViewPane.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts index 81500caf75d..06db83e807a 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts @@ -1769,10 +1769,14 @@ class HistoryItemViewChangesAction extends Action2 { registerAction2(HistoryItemViewChangesAction); -const enum SCMInputCommandId { +const enum SCMInputWidgetCommandId { CancelAction = 'scm.input.cancelAction' } +const enum SCMInputWidgetStorageKey { + LastActionId = 'scm.input.lastActionId' +} + class SCMInputWidgetActionRunner extends ActionRunner { private readonly _runningActions = new Set(); @@ -1794,7 +1798,7 @@ class SCMInputWidgetActionRunner extends ActionRunner { if (this.runningActions.size !== 0) { this._cts?.cancel(); - if (action.id === SCMInputCommandId.CancelAction) { + if (action.id === SCMInputWidgetCommandId.CancelAction) { return; } } @@ -1817,7 +1821,7 @@ class SCMInputWidgetActionRunner extends ActionRunner { // Save last action if (this._runningActions.size === 0) { - this.storageService.store('scm.input.lastActionId', action.id, StorageScope.PROFILE, StorageTarget.USER); + this.storageService.store(SCMInputWidgetStorageKey.LastActionId, action.id, StorageScope.PROFILE, StorageTarget.USER); } } } @@ -1854,12 +1858,11 @@ class SCMInputWidgetToolbar extends WorkbenchToolBar { this._dropdownAction = new Action( 'scmInputMoreActions', - localize('scmInputMoreActions', 'More Actions...'), - 'codicon-chevron-down', - true); + localize('scmInputMoreActions', "More Actions..."), + 'codicon-chevron-down'); const cancelAction = new MenuItemAction({ - id: SCMInputCommandId.CancelAction, + id: SCMInputWidgetCommandId.CancelAction, title: localize('scmInputCancelAction', "Cancel"), icon: Codicon.debugStop, }, undefined, undefined, undefined, contextKeyService, commandService); @@ -1882,7 +1885,7 @@ class SCMInputWidgetToolbar extends WorkbenchToolBar { if (actions.length === 1) { primaryAction = actions[0]; } else if (actions.length > 1) { - const lastActionId = storageService.get('scm.input.lastActionId', StorageScope.PROFILE, ''); + const lastActionId = storageService.get(SCMInputWidgetStorageKey.LastActionId, StorageScope.PROFILE, ''); primaryAction = actions.find(a => a.id === lastActionId) ?? actions[0]; } From dd998e02942cb7aaf8fb1c5527319e8eb1f44fd6 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Sun, 3 Dec 2023 21:30:33 +0100 Subject: [PATCH 20/92] change log level format --- .../environment/common/environmentService.ts | 2 +- .../contrib/logs/common/defaultLogLevels.ts | 52 +++++++++++++------ .../contrib/logs/common/logs.contribution.ts | 9 ++++ 3 files changed, 45 insertions(+), 18 deletions(-) diff --git a/src/vs/platform/environment/common/environmentService.ts b/src/vs/platform/environment/common/environmentService.ts index 6d77e70d6b1..cd55aa9b259 100644 --- a/src/vs/platform/environment/common/environmentService.ts +++ b/src/vs/platform/environment/common/environmentService.ts @@ -14,7 +14,7 @@ import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; import { ExtensionKind, IExtensionHostDebugParams, INativeEnvironmentService } from 'vs/platform/environment/common/environment'; import { IProductService } from 'vs/platform/product/common/productService'; -export const EXTENSION_IDENTIFIER_WITH_LOG_REGEX = /^([^.]+\..+):(.+)$/; +export const EXTENSION_IDENTIFIER_WITH_LOG_REGEX = /^([^.]+\..+)[:=](.+)$/; export interface INativeEnvironmentPaths { diff --git a/src/vs/workbench/contrib/logs/common/defaultLogLevels.ts b/src/vs/workbench/contrib/logs/common/defaultLogLevels.ts index c942cccb779..9feccec6965 100644 --- a/src/vs/workbench/contrib/logs/common/defaultLogLevels.ts +++ b/src/vs/workbench/contrib/logs/common/defaultLogLevels.ts @@ -29,6 +29,8 @@ export interface IDefaultLogLevelsService { getDefaultLogLevels(): Promise; setDefaultLogLevel(logLevel: LogLevel, extensionId?: string): Promise; + + migrateLogLevels(): void; } class DefaultLogLevelsService implements IDefaultLogLevelsService { @@ -98,37 +100,53 @@ class DefaultLogLevelsService implements IDefaultLogLevelsService { logLevelsValue.push(LogLevelToString(logLevels.default)); } for (const [extension, logLevel] of logLevels.extensions ?? []) { - logLevelsValue.push(`${extension}:${LogLevelToString(logLevel)}`); + logLevelsValue.push(`${extension}=${LogLevelToString(logLevel)}`); } await this.jsonEditingService.write(this.environmentService.argvResource, [{ path: ['log-level'], value: logLevelsValue.length ? logLevelsValue : undefined }], true); } private async _parseLogLevelsFromArgv(): Promise { const result: ParsedArgvLogLevels = { extensions: [] }; + const logLevels = await this._readLogLevelsFromArgv(); + for (const extensionLogLevel of logLevels) { + const matches = EXTENSION_IDENTIFIER_WITH_LOG_REGEX.exec(extensionLogLevel); + if (matches && matches[1] && matches[2]) { + const logLevel = parseLogLevel(matches[2]); + if (!isUndefined(logLevel)) { + result.extensions?.push([matches[1].toLowerCase(), logLevel]); + } + } else { + const logLevel = parseLogLevel(extensionLogLevel); + if (!isUndefined(logLevel)) { + result.default = logLevel; + } + } + } + return !isUndefined(result.default) || result.extensions?.length ? result : undefined; + } + + async migrateLogLevels(): Promise { + const logLevels = await this._readLogLevelsFromArgv(); + const regex = /^([^.]+\..+):(.+)$/; + if (logLevels.some(extensionLogLevel => regex.test(extensionLogLevel))) { + const argvLogLevel = await this._parseLogLevelsFromArgv(); + if (argvLogLevel) { + await this._writeLogLevelsToArgv(argvLogLevel); + } + } + } + + private async _readLogLevelsFromArgv(): Promise { try { const content = await this.fileService.readFile(this.environmentService.argvResource); const argv: { 'log-level'?: string | string[] } = parse(content.value.toString()); - const logLevels = isString(argv['log-level']) ? [argv['log-level']] : Array.isArray(argv['log-level']) ? argv['log-level'] : []; - for (const extensionLogLevel of logLevels) { - const matches = EXTENSION_IDENTIFIER_WITH_LOG_REGEX.exec(extensionLogLevel); - if (matches && matches[1] && matches[2]) { - const logLevel = parseLogLevel(matches[2]); - if (!isUndefined(logLevel)) { - result.extensions?.push([matches[1].toLowerCase(), logLevel]); - } - } else { - const logLevel = parseLogLevel(extensionLogLevel); - if (!isUndefined(logLevel)) { - result.default = logLevel; - } - } - } + return isString(argv['log-level']) ? [argv['log-level']] : Array.isArray(argv['log-level']) ? argv['log-level'] : []; } catch (error) { if (toFileOperationResult(error) !== FileOperationResult.FILE_NOT_FOUND) { this.logService.error(error); } } - return !isUndefined(result.default) || result.extensions?.length ? result : undefined; + return []; } private _getDefaultLogLevelFromEnv(): LogLevel { diff --git a/src/vs/workbench/contrib/logs/common/logs.contribution.ts b/src/vs/workbench/contrib/logs/common/logs.contribution.ts index 59581610f9b..2b5ec6c3cfe 100644 --- a/src/vs/workbench/contrib/logs/common/logs.contribution.ts +++ b/src/vs/workbench/contrib/logs/common/logs.contribution.ts @@ -213,4 +213,13 @@ class LogOutputChannels extends Disposable implements IWorkbenchContribution { } +class LogLevelMigration implements IWorkbenchContribution { + constructor( + @IDefaultLogLevelsService defaultLogLevelsService: IDefaultLogLevelsService + ) { + defaultLogLevelsService.migrateLogLevels(); + } +} + Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(LogOutputChannels, LifecyclePhase.Restored); +Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(LogLevelMigration, LifecyclePhase.Eventually); From 967abeaacb0f65abd051285e5950b19036792317 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Sun, 3 Dec 2023 16:56:17 -0600 Subject: [PATCH 21/92] Fix error message: "Cannot read properties of undefined (reading 'chatDynamicVariableModel')" (#199909) Fix #199818 --- src/vs/workbench/contrib/chat/browser/chatWidget.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatWidget.ts b/src/vs/workbench/contrib/chat/browser/chatWidget.ts index a01464ef766..fa45bd88196 100644 --- a/src/vs/workbench/contrib/chat/browser/chatWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/chatWidget.ts @@ -403,7 +403,7 @@ export class ChatWidget extends Disposable implements IChatWidget { this._register(this.inputPart.onDidLoadInputState(state => { this.contribs.forEach(c => { - if (c.setInputState && state[c.id]) { + if (c.setInputState && typeof state === 'object' && state?.[c.id]) { c.setInputState(state[c.id]); } }); From 34d475b9c98fb67594362bc0eda264e993e96a18 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Sun, 3 Dec 2023 18:38:02 -0600 Subject: [PATCH 22/92] Fix cmd+up/down in chat input to match my expectations (#199912) --- .../contrib/chat/browser/actions/chatActions.ts | 6 +++--- src/vs/workbench/contrib/chat/browser/chatInputPart.ts | 9 +++++++-- src/vs/workbench/contrib/chat/common/chatContextKeys.ts | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts index 46be79f9858..8c38645a0d9 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts @@ -27,7 +27,7 @@ import { IChatEditorOptions } from 'vs/workbench/contrib/chat/browser/chatEditor import { ChatEditorInput } from 'vs/workbench/contrib/chat/browser/chatEditorInput'; import { ChatViewPane } from 'vs/workbench/contrib/chat/browser/chatViewPane'; import { IChatAgentService } from 'vs/workbench/contrib/chat/common/chatAgents'; -import { CONTEXT_IN_CHAT_INPUT, CONTEXT_IN_CHAT_SESSION, CONTEXT_PROVIDER_EXISTS, CONTEXT_REQUEST, CONTEXT_RESPONSE } from 'vs/workbench/contrib/chat/common/chatContextKeys'; +import { CONTEXT_CHAT_INPUT_CURSOR_AT_TOP, CONTEXT_IN_CHAT_INPUT, CONTEXT_IN_CHAT_SESSION, CONTEXT_PROVIDER_EXISTS, CONTEXT_REQUEST, CONTEXT_RESPONSE } from 'vs/workbench/contrib/chat/common/chatContextKeys'; import { IChatContributionService } from 'vs/workbench/contrib/chat/common/chatContributionService'; import { chatAgentLeader } from 'vs/workbench/contrib/chat/common/chatParserTypes'; import { IChatDetail, IChatService } from 'vs/workbench/contrib/chat/common/chatService'; @@ -161,7 +161,7 @@ export function registerChatActions() { super({ id: 'chat.action.focus', title: { value: localize('actions.interactiveSession.focus', "Focus Chat List"), original: 'Focus Chat List' }, - precondition: CONTEXT_IN_CHAT_INPUT, + precondition: ContextKeyExpr.and(CONTEXT_IN_CHAT_INPUT, CONTEXT_CHAT_INPUT_CURSOR_AT_TOP), category: CHAT_CATEGORY, keybinding: { when: EditorContextKeys.textInputFocus, @@ -206,7 +206,7 @@ export function registerChatActions() { keybinding: { primary: KeyMod.CtrlCmd | KeyCode.DownArrow, weight: KeybindingWeight.WorkbenchContrib, - when: ContextKeyExpr.and(CONTEXT_IN_CHAT_SESSION, ContextKeyExpr.not(EditorContextKeys.focus.key)) + when: ContextKeyExpr.and(CONTEXT_IN_CHAT_SESSION, CONTEXT_IN_CHAT_INPUT.negate()) } }); } diff --git a/src/vs/workbench/contrib/chat/browser/chatInputPart.ts b/src/vs/workbench/contrib/chat/browser/chatInputPart.ts index f4a74d52b48..34a12669d1f 100644 --- a/src/vs/workbench/contrib/chat/browser/chatInputPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatInputPart.ts @@ -35,7 +35,7 @@ import { IChatExecuteActionContext, SubmitAction } from 'vs/workbench/contrib/ch import { IChatWidget } from 'vs/workbench/contrib/chat/browser/chat'; import { ChatFollowups } from 'vs/workbench/contrib/chat/browser/chatFollowups'; import { IChatAgentService } from 'vs/workbench/contrib/chat/common/chatAgents'; -import { CONTEXT_CHAT_INPUT_HAS_TEXT, CONTEXT_IN_CHAT_INPUT } from 'vs/workbench/contrib/chat/common/chatContextKeys'; +import { CONTEXT_CHAT_INPUT_CURSOR_AT_TOP, CONTEXT_CHAT_INPUT_HAS_TEXT, CONTEXT_IN_CHAT_INPUT } from 'vs/workbench/contrib/chat/common/chatContextKeys'; import { chatAgentLeader } from 'vs/workbench/contrib/chat/common/chatParserTypes'; import { IChatReplyFollowup } from 'vs/workbench/contrib/chat/common/chatService'; import { IChatResponseViewModel } from 'vs/workbench/contrib/chat/common/chatViewModel'; @@ -87,6 +87,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge private historyNavigationForewardsEnablement!: IContextKey; private inputModel: ITextModel | undefined; private inputEditorHasText: IContextKey; + private chatCursorAtTop: IContextKey; private providerId: string | undefined; private cachedDimensions: dom.Dimension | undefined; @@ -108,6 +109,8 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge super(); this.inputEditorHasText = CONTEXT_CHAT_INPUT_HAS_TEXT.bindTo(contextKeyService); + this.chatCursorAtTop = CONTEXT_CHAT_INPUT_CURSOR_AT_TOP.bindTo(contextKeyService); + this.history = new HistoryNavigator([], 5); this._register(this.historyService.onDidClearHistory(() => this.history.clear())); this._register(this.configurationService.onDidChangeConfiguration(e => { @@ -273,7 +276,9 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge return; } - this.historyNavigationBackwardsEnablement.set(e.position.column === 1 && e.position.lineNumber === 1); + const atTop = e.position.column === 1 && e.position.lineNumber === 1; + this.historyNavigationBackwardsEnablement.set(atTop); + this.chatCursorAtTop.set(atTop); this.historyNavigationForewardsEnablement.set(e.position.equals(getLastPosition(model))); })); diff --git a/src/vs/workbench/contrib/chat/common/chatContextKeys.ts b/src/vs/workbench/contrib/chat/common/chatContextKeys.ts index 85941ee0fd4..d5cb83c170a 100644 --- a/src/vs/workbench/contrib/chat/common/chatContextKeys.ts +++ b/src/vs/workbench/contrib/chat/common/chatContextKeys.ts @@ -19,3 +19,4 @@ export const CONTEXT_IN_CHAT_INPUT = new RawContextKey('inChatInput', f export const CONTEXT_IN_CHAT_SESSION = new RawContextKey('inChat', false, { type: 'boolean', description: localize('inChat', "True when focus is in the chat widget, false otherwise.") }); export const CONTEXT_PROVIDER_EXISTS = new RawContextKey('hasChatProvider', false, { type: 'boolean', description: localize('hasChatProvider', "True when some chat provider has been registered.") }); +export const CONTEXT_CHAT_INPUT_CURSOR_AT_TOP = new RawContextKey('chatCursorAtTop', false); From ef7a4529befe4e80370e9b2e8b4dfde0f8d4f30b Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Sun, 3 Dec 2023 18:45:18 -0600 Subject: [PATCH 23/92] Fix chat history not being deduped (#199915) Fix #199719 --- .../contrib/chat/browser/chatInputPart.ts | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatInputPart.ts b/src/vs/workbench/contrib/chat/browser/chatInputPart.ts index 34a12669d1f..a5871fac4e5 100644 --- a/src/vs/workbench/contrib/chat/browser/chatInputPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatInputPart.ts @@ -82,7 +82,8 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge return this._inputEditor; } - private history: HistoryNavigator<{ text: string; state?: any }>; + private history: HistoryNavigator; + private historyStates: Map = new Map(); private historyNavigationBackwardsEnablement!: IContextKey; private historyNavigationForewardsEnablement!: IContextKey; private inputModel: ITextModel | undefined; @@ -132,7 +133,11 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge setState(providerId: string, inputValue: string | undefined): void { this.providerId = providerId; const history = this.historyService.getHistory(providerId); - this.history = new HistoryNavigator(history, 50); + this.historyStates = new Map(history.map(h => [h.text, h.state])); + const historyTexts: string[] = []; + this.historyStates.forEach((_, str) => historyTexts.push(str)); + + this.history = new HistoryNavigator(historyTexts, 50); if (typeof inputValue === 'string') { this.setValue(inputValue); @@ -154,11 +159,11 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge private navigateHistory(previous: boolean): void { const historyInput = (previous ? (this.history.previous() ?? this.history.first()) : this.history.next()) - ?? { text: '' }; + ?? ''; - aria.status(historyInput.text); - this.setValue(historyInput.text); - this._onDidLoadInputState.fire(historyInput.state); + aria.status(historyInput); + this.setValue(historyInput); + this._onDidLoadInputState.fire(this.historyStates.get(historyInput)); if (previous) { this._inputEditor.setPosition({ lineNumber: 1, column: 1 }); } else { @@ -191,7 +196,8 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge */ async acceptInput(userQuery?: string, inputState?: any): Promise { if (userQuery) { - this.history.add({ text: userQuery, state: inputState }); + this.history.add(userQuery); + this.historyStates.set(userQuery, inputState); } if (this.accessibilityService.isScreenReaderOptimized() && isMacintosh) { @@ -369,7 +375,8 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge saveState(): void { const inputHistory = this.history.getHistory(); - this.historyService.saveHistory(this.providerId!, inputHistory); + const historyEntries = inputHistory.map(entry => ({ text: entry, state: this.historyStates.get(entry) })); + this.historyService.saveHistory(this.providerId!, historyEntries); } } From f0d15e28789098cbb6390f793d27e71a85fa5537 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Sun, 3 Dec 2023 19:54:32 -0600 Subject: [PATCH 24/92] Let the chat open action take `isPartialQuery` to set text in the chat input (#199913) --- .../chat/browser/actions/chatActions.ts | 30 +++++++++++++++---- src/vs/workbench/contrib/chat/browser/chat.ts | 2 +- .../contrib/chat/browser/chatWidget.ts | 2 +- .../actions/voiceChatActions.ts | 4 +-- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts index 8c38645a0d9..e776928802f 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts @@ -38,11 +38,22 @@ import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle export const CHAT_CATEGORY = { value: localize('chat.category', "Chat"), original: 'Chat' }; export const CHAT_OPEN_ACTION_ID = 'workbench.action.chat.open'; -class QuickChatGlobalAction extends Action2 { +export interface IChatViewOpenOptions { + /** + * The query for quick chat. + */ + query: string; + /** + * Whether the query is partial and will await more input from the user. + */ + isPartialQuery?: boolean; +} + +class OpenChatGlobalAction extends Action2 { constructor() { super({ id: CHAT_OPEN_ACTION_ID, - title: { value: localize('quickChat', "Quick Chat"), original: 'Quick Chat' }, + title: localize2('openChat', "Open Chat"), precondition: CONTEXT_PROVIDER_EXISTS, icon: Codicon.commentDiscussion, f1: false, @@ -57,7 +68,9 @@ class QuickChatGlobalAction extends Action2 { }); } - override async run(accessor: ServicesAccessor, query?: string): Promise { + override async run(accessor: ServicesAccessor, opts?: string | IChatViewOpenOptions): Promise { + opts = typeof opts === 'string' ? { query: opts } : opts; + const chatService = accessor.get(IChatService); const chatWidgetService = accessor.get(IChatWidgetService); const providers = chatService.getProviderInfos(); @@ -68,9 +81,14 @@ class QuickChatGlobalAction extends Action2 { if (!chatWidget) { return; } - if (query) { - chatWidget.acceptInput(query); + if (opts?.query) { + if (opts.isPartialQuery) { + chatWidget.setInput(opts.query); + } else { + chatWidget.acceptInput(opts.query); + } } + chatWidget.focusInput(); } } @@ -132,7 +150,7 @@ export class ChatSubmitEditorAction extends EditorAction2 { } export function registerChatActions() { - registerAction2(QuickChatGlobalAction); + registerAction2(OpenChatGlobalAction); registerAction2(ChatSubmitEditorAction); registerAction2(ChatSubmitSecondaryAgentEditorAction); diff --git a/src/vs/workbench/contrib/chat/browser/chat.ts b/src/vs/workbench/contrib/chat/browser/chat.ts index 3df1e83af19..17d1875bfc4 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.ts @@ -111,7 +111,7 @@ export interface IChatWidget { focus(item: ChatTreeItem): void; moveFocus(item: ChatTreeItem, type: 'next' | 'previous'): void; getFocus(): ChatTreeItem | undefined; - updateInput(query?: string): void; + setInput(query?: string): void; getInput(): string; acceptInput(query?: string): void; acceptInputWithPrefix(prefix: string): void; diff --git a/src/vs/workbench/contrib/chat/browser/chatWidget.ts b/src/vs/workbench/contrib/chat/browser/chatWidget.ts index fa45bd88196..443afc6be81 100644 --- a/src/vs/workbench/contrib/chat/browser/chatWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/chatWidget.ts @@ -504,7 +504,7 @@ export class ChatWidget extends Disposable implements IChatWidget { this.viewModel?.resetInputPlaceholder(); } - updateInput(value = ''): void { + setInput(value = ''): void { this.inputPart.setValue(value); } diff --git a/src/vs/workbench/contrib/chat/electron-sandbox/actions/voiceChatActions.ts b/src/vs/workbench/contrib/chat/electron-sandbox/actions/voiceChatActions.ts index e82a6afea81..84aa87c7756 100644 --- a/src/vs/workbench/contrib/chat/electron-sandbox/actions/voiceChatActions.ts +++ b/src/vs/workbench/contrib/chat/electron-sandbox/actions/voiceChatActions.ts @@ -169,7 +169,7 @@ class VoiceChatSessionControllerFactory { onDidCancelInput: Event.filter(viewsService.onDidChangeViewVisibility, e => e.id === chatContributionService.getViewIdForProvider(chatView.providerId)), focusInput: () => chatView.focusInput(), acceptInput: () => chatView.acceptInput(), - updateInput: text => chatView.updateInput(text), + updateInput: text => chatView.setInput(text), getInput: () => chatView.getInput(), setInputPlaceholder: text => chatView.setInputPlaceholder(text), clearInputPlaceholder: () => chatView.resetInputPlaceholder() @@ -183,7 +183,7 @@ class VoiceChatSessionControllerFactory { onDidCancelInput: quickChatService.onDidClose, focusInput: () => quickChat.focusInput(), acceptInput: () => quickChat.acceptInput(), - updateInput: text => quickChat.updateInput(text), + updateInput: text => quickChat.setInput(text), getInput: () => quickChat.getInput(), setInputPlaceholder: text => quickChat.setInputPlaceholder(text), clearInputPlaceholder: () => quickChat.resetInputPlaceholder() From ada980d5633d7f1ff5ee58dd64819f5f3a008bff Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Sun, 3 Dec 2023 22:58:17 -0600 Subject: [PATCH 25/92] Merge interactiveUserActions proposal into chatAgents2Additions, and get rid of the old global event (#199916) Towards #197687 --- extensions/vscode-api-tests/package.json | 3 +- .../workbench/api/browser/mainThreadChat.ts | 6 -- .../workbench/api/common/extHost.api.impl.ts | 6 +- .../workbench/api/common/extHost.protocol.ts | 1 - src/vs/workbench/api/common/extHostChat.ts | 10 +-- src/vs/workbench/api/common/extHostTypes.ts | 2 +- .../browser/actions/chatCodeblockActions.ts | 6 +- .../contrib/chat/common/chatService.ts | 4 +- .../contrib/chat/common/chatServiceImpl.ts | 4 +- .../common/extensionsApiProposals.ts | 1 - .../vscode.proposed.chatAgents2Additions.d.ts | 62 +++++++++++++-- ...scode.proposed.interactiveUserActions.d.ts | 77 ------------------- 12 files changed, 68 insertions(+), 114 deletions(-) delete mode 100644 src/vscode-dts/vscode.proposed.interactiveUserActions.d.ts diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json index 401b9a4da03..20b69bfc674 100644 --- a/extensions/vscode-api-tests/package.json +++ b/extensions/vscode-api-tests/package.json @@ -53,8 +53,7 @@ "workspaceTrust", "telemetry", "testingActiveProfile", - "windowActivity", - "interactiveUserActions" + "windowActivity" ], "private": true, "activationEvents": [], diff --git a/src/vs/workbench/api/browser/mainThreadChat.ts b/src/vs/workbench/api/browser/mainThreadChat.ts index 476bf6da65c..a67f5d4b250 100644 --- a/src/vs/workbench/api/browser/mainThreadChat.ts +++ b/src/vs/workbench/api/browser/mainThreadChat.ts @@ -28,12 +28,6 @@ export class MainThreadChat extends Disposable implements MainThreadChatShape { ) { super(); this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostChat); - - this._register(this._chatService.onDidPerformUserAction(e => { - if (!e.agentId) { - this._proxy.$onDidPerformUserAction(e); - } - })); } $transferChatSession(sessionId: number, toWorkspace: UriComponents): void { diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index b3546f88c2b..9d5fe872e94 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -1334,10 +1334,6 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I checkProposedApiEnabled(extension, 'interactive'); return extHostChat.sendInteractiveRequestToProvider(providerId, message); }, - get onDidPerformUserAction() { - checkProposedApiEnabled(extension, 'interactiveUserActions'); - return extHostChat.onDidPerformUserAction; - }, transferChatSession(session: vscode.InteractiveSession, toWorkspace: vscode.Uri) { checkProposedApiEnabled(extension, 'interactive'); return extHostChat.transferChatSession(session, toWorkspace); @@ -1609,7 +1605,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I LogLevel: LogLevel, EditSessionIdentityMatch: EditSessionIdentityMatch, InteractiveSessionVoteDirection: extHostTypes.InteractiveSessionVoteDirection, - InteractiveSessionCopyKind: extHostTypes.InteractiveSessionCopyKind, + ChatAgentCopyKind: extHostTypes.ChatAgentCopyKind, InteractiveEditorResponseFeedbackKind: extHostTypes.InteractiveEditorResponseFeedbackKind, StackFrameFocus: extHostTypes.StackFrameFocus, ThreadFocus: extHostTypes.ThreadFocus, diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 391234eac91..40e2e999ec8 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -1287,7 +1287,6 @@ export interface ExtHostChatShape { $provideWelcomeMessage(handle: number, token: CancellationToken): Promise<(string | IMarkdownString | IChatReplyFollowup[])[] | undefined>; $provideSampleQuestions(handle: number, token: CancellationToken): Promise; $releaseSession(sessionId: number): void; - $onDidPerformUserAction(event: IChatUserActionEvent): Promise; } export interface ExtHostUrlsShape { diff --git a/src/vs/workbench/api/common/extHostChat.ts b/src/vs/workbench/api/common/extHostChat.ts index 870c8a78848..74935c0e51f 100644 --- a/src/vs/workbench/api/common/extHostChat.ts +++ b/src/vs/workbench/api/common/extHostChat.ts @@ -4,14 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter } from 'vs/base/common/event'; import { IMarkdownString } from 'vs/base/common/htmlContent'; import { Iterable } from 'vs/base/common/iterator'; import { toDisposable } from 'vs/base/common/lifecycle'; import { IRelaxedExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { ExtHostChatShape, IChatDto, IMainContext, MainContext, MainThreadChatShape } from 'vs/workbench/api/common/extHost.protocol'; import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; -import { IChatReplyFollowup, IChatUserActionEvent } from 'vs/workbench/contrib/chat/common/chatService'; +import { IChatReplyFollowup } from 'vs/workbench/contrib/chat/common/chatService'; import type * as vscode from 'vscode'; class ChatProviderWrapper { @@ -33,9 +32,6 @@ export class ExtHostChat implements ExtHostChatShape { private readonly _chatSessions = new Map(); - private readonly _onDidPerformUserAction = new Emitter(); - public readonly onDidPerformUserAction = this._onDidPerformUserAction.event; - private readonly _proxy: MainThreadChatShape; constructor( @@ -140,9 +136,5 @@ export class ExtHostChat implements ExtHostChatShape { this._chatSessions.delete(sessionId); } - async $onDidPerformUserAction(event: IChatUserActionEvent): Promise { - this._onDidPerformUserAction.fire(event as any); - } - //#endregion } diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index 97d25527562..1e10046d465 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -4111,7 +4111,7 @@ export enum InteractiveSessionVoteDirection { Up = 1 } -export enum InteractiveSessionCopyKind { +export enum ChatAgentCopyKind { Action = 1, Toolbar = 2 } diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.ts index 2d6c3a5ef10..bbf5ba106b9 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.ts @@ -28,7 +28,7 @@ import { CHAT_CATEGORY } from 'vs/workbench/contrib/chat/browser/actions/chatAct import { IChatWidgetService } from 'vs/workbench/contrib/chat/browser/chat'; import { ICodeBlockActionContext } from 'vs/workbench/contrib/chat/browser/codeBlockPart'; import { CONTEXT_IN_CHAT_INPUT, CONTEXT_IN_CHAT_SESSION, CONTEXT_PROVIDER_EXISTS } from 'vs/workbench/contrib/chat/common/chatContextKeys'; -import { IChatService, IDocumentContext, InteractiveSessionCopyKind } from 'vs/workbench/contrib/chat/common/chatService'; +import { IChatService, IDocumentContext, ChatAgentCopyKind } from 'vs/workbench/contrib/chat/common/chatService'; import { IChatResponseViewModel, isResponseVM } from 'vs/workbench/contrib/chat/common/chatViewModel'; import { CTX_INLINE_CHAT_VISIBLE } from 'vs/workbench/contrib/inlineChat/common/inlineChat'; import { insertCell } from 'vs/workbench/contrib/notebook/browser/controller/cellOperations'; @@ -114,7 +114,7 @@ export function registerChatCodeBlockActions() { action: { kind: 'copy', codeBlockIndex: context.codeBlockIndex, - copyType: InteractiveSessionCopyKind.Toolbar, + copyKind: ChatAgentCopyKind.Toolbar, copiedCharacters: context.code.length, totalCharacters: context.code.length, copiedText: context.code, @@ -157,7 +157,7 @@ export function registerChatCodeBlockActions() { action: { kind: 'copy', codeBlockIndex: context.codeBlockIndex, - copyType: InteractiveSessionCopyKind.Action, + copyKind: ChatAgentCopyKind.Action, copiedText, copiedCharacters: copiedText.length, totalCharacters, diff --git a/src/vs/workbench/contrib/chat/common/chatService.ts b/src/vs/workbench/contrib/chat/common/chatService.ts index 9f372473a94..4cf8455129d 100644 --- a/src/vs/workbench/contrib/chat/common/chatService.ts +++ b/src/vs/workbench/contrib/chat/common/chatService.ts @@ -200,7 +200,7 @@ export interface IChatVoteAction { reportIssue?: boolean; } -export enum InteractiveSessionCopyKind { +export enum ChatAgentCopyKind { // Keyboard shortcut or context menu Action = 1, Toolbar = 2 @@ -209,7 +209,7 @@ export enum InteractiveSessionCopyKind { export interface IChatCopyAction { kind: 'copy'; codeBlockIndex: number; - copyType: InteractiveSessionCopyKind; + copyKind: ChatAgentCopyKind; copiedCharacters: number; totalCharacters: number; copiedText: string; diff --git a/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts b/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts index 47ebd3b8604..6c873f5a4f5 100644 --- a/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts +++ b/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts @@ -26,7 +26,7 @@ import { ChatModel, ChatModelInitState, ChatRequestModel, ChatWelcomeMessageMode import { ChatRequestAgentPart, ChatRequestAgentSubcommandPart, ChatRequestSlashCommandPart, IParsedChatRequest } from 'vs/workbench/contrib/chat/common/chatParserTypes'; import { ChatMessageRole, IChatMessage } from 'vs/workbench/contrib/chat/common/chatProvider'; import { ChatRequestParser } from 'vs/workbench/contrib/chat/common/chatRequestParser'; -import { IChat, IChatCompleteResponse, IChatDetail, IChatDynamicRequest, IChatFollowup, IChatProgress, IChatProvider, IChatProviderInfo, IChatResponse, IChatService, IChatTransferredSessionData, IChatUserActionEvent, InteractiveSessionCopyKind, InteractiveSessionVoteDirection } from 'vs/workbench/contrib/chat/common/chatService'; +import { IChat, IChatCompleteResponse, IChatDetail, IChatDynamicRequest, IChatFollowup, IChatProgress, IChatProvider, IChatProviderInfo, IChatResponse, IChatService, IChatTransferredSessionData, IChatUserActionEvent, ChatAgentCopyKind, InteractiveSessionVoteDirection } from 'vs/workbench/contrib/chat/common/chatService'; import { IChatSlashCommandService } from 'vs/workbench/contrib/chat/common/chatSlashCommands'; import { IChatVariablesService } from 'vs/workbench/contrib/chat/common/chatVariables'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; @@ -224,7 +224,7 @@ export class ChatService extends Disposable implements IChatService { } else if (action.action.kind === 'copy') { this.telemetryService.publicLog2('interactiveSessionCopy', { providerId: action.providerId, - copyKind: action.action.copyType === InteractiveSessionCopyKind.Action ? 'action' : 'toolbar' + copyKind: action.action.copyKind === ChatAgentCopyKind.Action ? 'action' : 'toolbar' }); } else if (action.action.kind === 'insert') { this.telemetryService.publicLog2('interactiveSessionInsert', { diff --git a/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts b/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts index e45c2d9a5ec..79467b47ff6 100644 --- a/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts +++ b/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts @@ -57,7 +57,6 @@ export const allApiProposals = Object.freeze({ idToken: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.idToken.d.ts', inlineCompletionsAdditions: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.inlineCompletionsAdditions.d.ts', interactive: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.interactive.d.ts', - interactiveUserActions: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.interactiveUserActions.d.ts', interactiveWindow: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.interactiveWindow.d.ts', ipc: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.ipc.d.ts', languageStatusText: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.languageStatusText.d.ts', diff --git a/src/vscode-dts/vscode.proposed.chatAgents2Additions.d.ts b/src/vscode-dts/vscode.proposed.chatAgents2Additions.d.ts index 1e0684cd03c..2ad0993986f 100644 --- a/src/vscode-dts/vscode.proposed.chatAgents2Additions.d.ts +++ b/src/vscode-dts/vscode.proposed.chatAgents2Additions.d.ts @@ -5,11 +5,6 @@ declare module 'vscode' { - export interface ChatAgentUserActionEvent { - readonly result: ChatAgentResult2; - readonly action: InteractiveSessionCopyAction | InteractiveSessionInsertAction | InteractiveSessionTerminalAction | InteractiveSessionCommandAction | InteractiveSessionFollowupAction | InteractiveSessionBugReportAction; - } - export interface ChatAgent2 { onDidPerformAction: Event; supportIssueReporting?: boolean; @@ -77,4 +72,61 @@ declare module 'vscode' { */ export function createChatAgent(name: string, handler: ChatAgentExtendedHandler): ChatAgent2; } + + /* + * User action events + */ + + export enum ChatAgentCopyKind { + // Keyboard shortcut or context menu + Action = 1, + Toolbar = 2 + } + + export interface ChatAgentCopyAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'copy'; + codeBlockIndex: number; + copyKind: ChatAgentCopyKind; + copiedCharacters: number; + totalCharacters: number; + copiedText: string; + } + + export interface ChatAgentInsertAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'insert'; + codeBlockIndex: number; + totalCharacters: number; + newFile?: boolean; + } + + export interface ChatAgentTerminalAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'runInTerminal'; + codeBlockIndex: number; + languageId?: string; + } + + export interface ChatAgentCommandAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'command'; + command: ChatAgentCommandFollowup; + } + + export interface ChatAgentSessionFollowupAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'followUp'; + followup: ChatAgentReplyFollowup; + } + + export interface ChatAgentBugReportAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'bug'; + } + + export interface ChatAgentUserActionEvent { + readonly result: ChatAgentResult2; + readonly action: ChatAgentCopyAction | ChatAgentInsertAction | ChatAgentTerminalAction | ChatAgentCommandAction | ChatAgentSessionFollowupAction | ChatAgentBugReportAction; + } } diff --git a/src/vscode-dts/vscode.proposed.interactiveUserActions.d.ts b/src/vscode-dts/vscode.proposed.interactiveUserActions.d.ts deleted file mode 100644 index c4f89f80bbe..00000000000 --- a/src/vscode-dts/vscode.proposed.interactiveUserActions.d.ts +++ /dev/null @@ -1,77 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -declare module 'vscode' { - - export enum InteractiveSessionVoteDirection { - Down = 0, - Up = 1 - } - - export interface InteractiveSessionVoteAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'vote'; - direction: InteractiveSessionVoteDirection; - } - - export enum InteractiveSessionCopyKind { - // Keyboard shortcut or context menu - Action = 1, - Toolbar = 2 - } - - export interface InteractiveSessionCopyAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'copy'; - codeBlockIndex: number; - copyType: InteractiveSessionCopyKind; - copiedCharacters: number; - totalCharacters: number; - copiedText: string; - } - - export interface InteractiveSessionInsertAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'insert'; - codeBlockIndex: number; - totalCharacters: number; - newFile?: boolean; - } - - export interface InteractiveSessionTerminalAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'runInTerminal'; - codeBlockIndex: number; - languageId?: string; - } - - export interface InteractiveSessionCommandAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'command'; - command: InteractiveResponseCommand; - } - - export interface InteractiveSessionFollowupAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'followUp'; - followup: InteractiveSessionReplyFollowup; - } - - export interface InteractiveSessionBugReportAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'bug'; - } - - export type InteractiveSessionUserAction = InteractiveSessionVoteAction | InteractiveSessionCopyAction | InteractiveSessionInsertAction | InteractiveSessionTerminalAction | InteractiveSessionCommandAction | InteractiveSessionBugReportAction; - - export interface InteractiveSessionUserActionEvent { - action: InteractiveSessionUserAction; - providerId: string; - } - - export namespace interactive { - export const onDidPerformUserAction: Event; - } -} From a46fe7114a051ddcf043ebe0f6ec8721194b577f Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Mon, 4 Dec 2023 09:13:42 +0100 Subject: [PATCH 26/92] aux window - introduce and adopt methods to check on active and focused elements (#199897) * aux window - introduce and adopt methods to check on active and focused elements * simplify * . * . * . * . --- src/vs/base/browser/dom.ts | 36 +++++++++++-------- .../browser/controller/textAreaInput.ts | 4 +-- src/vs/workbench/browser/layout.ts | 4 +-- .../browser/parts/editor/editorGroupView.ts | 6 ++-- .../browser/parts/editor/editorPanes.ts | 6 ++-- .../browser/parts/editor/editorPart.ts | 6 ++-- 6 files changed, 35 insertions(+), 27 deletions(-) diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index e8bf8980241..b611afafbb6 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -840,8 +840,9 @@ export function getShadowRoot(domNode: Node): ShadowRoot | null { } /** - * Returns the active element across all child windows. - * Use this instead of `document.activeElement` to handle multiple windows. + * Returns the active element across all child windows + * based on document focus. Falls back to the main + * window if no window has focus. */ export function getActiveElement(): Element | null { let result = getActiveDocument().activeElement; @@ -854,42 +855,49 @@ export function getActiveElement(): Element | null { } /** - * Returns whether the active element of the `document` that owns - * the `element` is `element`. + * Returns true if the focused window active element matches + * the provided element. Falls back to the main window if no + * window has focus. */ export function isActiveElement(element: Element): boolean { - return element.ownerDocument.activeElement === element; + return getActiveElement() === element; } /** - * Returns whether the active element of the `document` that owns - * the `ancestor` is contained in `ancestor`. + * Returns true if the focused window active element is contained in + * `ancestor`. Falls back to the main window if no window has focus. */ export function isAncestorOfActiveElement(ancestor: Element): boolean { - return isAncestor(ancestor.ownerDocument.activeElement, ancestor); + return isAncestor(getActiveElement(), ancestor); } /** - * Returns whether the element is in the active `document`. + * Returns whether the element is in the active `document`. The active + * document has focus or will be the main windows document. */ export function isActiveDocument(element: Element): boolean { return element.ownerDocument === getActiveDocument(); } /** - * Returns the active document across all child windows. - * Use this instead of `document` when reacting to dom - * events to handle multiple windows. + * Returns the active document across main and child windows. + * Prefers the window with focus, otherwise falls back to + * the main windows document. */ export function getActiveDocument(): Document { if (getWindowsCount() <= 1) { - return document; + return mainWindow.document; } const documents = Array.from(getWindows()).map(({ window }) => window.document); - return documents.find(doc => doc.hasFocus()) ?? document; + return documents.find(doc => doc.hasFocus()) ?? mainWindow.document; } +/** + * Returns the active window across main and child windows. + * Prefers the window with focus, otherwise falls back to + * the main window. + */ export function getActiveWindow(): CodeWindow { const document = getActiveDocument(); return (document.defaultView?.window ?? mainWindow) as CodeWindow; diff --git a/src/vs/editor/browser/controller/textAreaInput.ts b/src/vs/editor/browser/controller/textAreaInput.ts index 950dd87f220..88b4eb324e6 100644 --- a/src/vs/editor/browser/controller/textAreaInput.ts +++ b/src/vs/editor/browser/controller/textAreaInput.ts @@ -746,7 +746,7 @@ export class TextAreaWrapper extends Disposable implements ICompleteTextAreaWrap if (shadowRoot) { return shadowRoot.activeElement === this._actual; } else if (this._actual.isConnected) { - return this._actual.ownerDocument.activeElement === this._actual; + return dom.getActiveElement() === this._actual; } else { return false; } @@ -796,7 +796,7 @@ export class TextAreaWrapper extends Disposable implements ICompleteTextAreaWrap if (shadowRoot) { activeElement = shadowRoot.activeElement; } else { - activeElement = textArea.ownerDocument.activeElement; + activeElement = dom.getActiveElement(); } const activeWindow = dom.getWindow(activeElement); diff --git a/src/vs/workbench/browser/layout.ts b/src/vs/workbench/browser/layout.ts index 810c53f2abf..5ba8b083b88 100644 --- a/src/vs/workbench/browser/layout.ts +++ b/src/vs/workbench/browser/layout.ts @@ -5,7 +5,7 @@ import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import { Event, Emitter } from 'vs/base/common/event'; -import { EventType, addDisposableListener, getClientArea, position, size, IDimension, isAncestorUsingFlowTo, computeScreenAwareSize, getActiveDocument, getWindows, getActiveWindow, focusWindow, isActiveDocument, getWindow, getWindowId } from 'vs/base/browser/dom'; +import { EventType, addDisposableListener, getClientArea, position, size, IDimension, isAncestorUsingFlowTo, computeScreenAwareSize, getActiveDocument, getWindows, getActiveWindow, focusWindow, isActiveDocument, getWindow, getWindowId, getActiveElement } from 'vs/base/browser/dom'; import { onDidChangeFullscreen, isFullscreen, isWCOEnabled } from 'vs/base/browser/browser'; import { IWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/common/workingCopyBackup'; import { isWindows, isLinux, isMacintosh, isWeb, isNative, isIOS } from 'vs/base/common/platform'; @@ -1091,7 +1091,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi return false; } - const activeElement = container.ownerDocument.activeElement; + const activeElement = getActiveElement(); if (!activeElement) { return false; } diff --git a/src/vs/workbench/browser/parts/editor/editorGroupView.ts b/src/vs/workbench/browser/parts/editor/editorGroupView.ts index 0cc8da39d6b..3281151bed1 100644 --- a/src/vs/workbench/browser/parts/editor/editorGroupView.ts +++ b/src/vs/workbench/browser/parts/editor/editorGroupView.ts @@ -11,7 +11,7 @@ import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { SideBySideEditorInput } from 'vs/workbench/common/editor/sideBySideEditorInput'; import { Emitter, Relay } from 'vs/base/common/event'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { Dimension, trackFocus, addDisposableListener, EventType, EventHelper, findParentWithClass, isAncestor, IDomNodePagePosition, isMouseEvent, isActiveElement, focusWindow, getWindow } from 'vs/base/browser/dom'; +import { Dimension, trackFocus, addDisposableListener, EventType, EventHelper, findParentWithClass, isAncestor, IDomNodePagePosition, isMouseEvent, isActiveElement, focusWindow, getWindow, getActiveElement } from 'vs/base/browser/dom'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar'; @@ -510,7 +510,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView { options.sticky = this.model.isSticky(activeEditor); // preserve sticky state options.preserveFocus = true; // handle focus after editor is opened - const activeElement = this.editorContainer.ownerDocument.activeElement; + const activeElement = getActiveElement(); // Show active editor (intentionally not using async to keep // `restoreEditors` from executing in same stack) @@ -1481,7 +1481,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView { } private shouldRestoreFocus(target: Element): boolean { - const activeElement = target.ownerDocument.activeElement; + const activeElement = getActiveElement(); if (activeElement === target.ownerDocument.body) { return true; // always restore focus if nothing is focused currently } diff --git a/src/vs/workbench/browser/parts/editor/editorPanes.ts b/src/vs/workbench/browser/parts/editor/editorPanes.ts index 3e7425c82dd..1094f315842 100644 --- a/src/vs/workbench/browser/parts/editor/editorPanes.ts +++ b/src/vs/workbench/browser/parts/editor/editorPanes.ts @@ -10,7 +10,7 @@ import Severity from 'vs/base/common/severity'; import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import { EditorExtensions, EditorInputCapabilities, IEditorOpenContext, IVisibleEditorPane, createEditorOpenError, isEditorOpenError } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { Dimension, show, hide, IDomNodePagePosition, isAncestor, getWindow } from 'vs/base/browser/dom'; +import { Dimension, show, hide, IDomNodePagePosition, isAncestor, getWindow, getActiveElement } from 'vs/base/browser/dom'; import { Registry } from 'vs/platform/registry/common/platform'; import { IEditorPaneRegistry, IEditorPaneDescriptor } from 'vs/workbench/browser/editor'; import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; @@ -264,7 +264,7 @@ export class EditorPanes extends Disposable { const pane = this.doShowEditorPane(descriptor); // Remember current active element for deciding to restore focus later - const activeElement = this.editorPanesParent.ownerDocument.activeElement; + const activeElement = getActiveElement(); // Apply input to pane const { changed, cancelled } = await this.doSetInput(pane, editor, options, context); @@ -293,7 +293,7 @@ export class EditorPanes extends Disposable { return true; // restore focus if nothing was focused } - const activeElement = expectedActiveElement.ownerDocument.activeElement; + const activeElement = getActiveElement(); if (!activeElement || activeElement === expectedActiveElement.ownerDocument.body) { return true; // restore focus if nothing is focused currently } diff --git a/src/vs/workbench/browser/parts/editor/editorPart.ts b/src/vs/workbench/browser/parts/editor/editorPart.ts index 4227556ceaf..e87d98624fc 100644 --- a/src/vs/workbench/browser/parts/editor/editorPart.ts +++ b/src/vs/workbench/browser/parts/editor/editorPart.ts @@ -5,7 +5,7 @@ import { IThemeService } from 'vs/platform/theme/common/themeService'; import { Part } from 'vs/workbench/browser/part'; -import { Dimension, isAncestor, $, EventHelper, addDisposableGenericMouseDownListener, getWindow } from 'vs/base/browser/dom'; +import { Dimension, $, EventHelper, addDisposableGenericMouseDownListener, getWindow, isAncestorOfActiveElement, getActiveElement } from 'vs/base/browser/dom'; import { Event, Emitter, Relay } from 'vs/base/common/event'; import { contrastBorder, editorBackground } from 'vs/platform/theme/common/colorRegistry'; import { GroupDirection, GroupsArrangement, GroupOrientation, IMergeGroupOptions, MergeGroupMode, GroupsOrder, GroupLocation, IFindGroupScope, EditorGroupLayout, GroupLayoutArgument, IEditorSideGroup, IEditorDropTargetDelegate, IEditorPart } from 'vs/workbench/services/editor/common/editorGroupsService'; @@ -545,13 +545,13 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupsView { return false; } - const activeElement = target.ownerDocument.activeElement; + const activeElement = getActiveElement(); if (activeElement === target.ownerDocument.body) { return true; // always restore focus if nothing is focused currently } // otherwise check for the active element being an ancestor of the target - return isAncestor(activeElement, target); + return isAncestorOfActiveElement(target); } private isTwoDimensionalGrid(): boolean { From 83722efcc085965d821247f0b4d5a6bedfe7c55d Mon Sep 17 00:00:00 2001 From: Aiday Marlen Kyzy Date: Mon, 4 Dec 2023 09:35:45 +0100 Subject: [PATCH 27/92] Do not show when sparkle icon when showAiIconMode is Off (#199642) * using the setting in order to control if the AI icon is shown * add a method to clear the classes before an early return is done * reverting the code and placing the check inside of the _update method --- src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts b/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts index 4b74ecd36db..478f3ccd1fc 100644 --- a/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts +++ b/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts @@ -175,6 +175,12 @@ export class LightBulbWidget extends Disposable implements IContentWidget { return this.hide(); } + const onlyAIActions = actions.allAIFixes; + const showAiIcon = this._editor.getOption(EditorOption.lightbulb).experimental.showAiIcon; + if (onlyAIActions && showAiIcon === ShowAiIconMode.Off) { + return this.hide(); + } + const model = this._editor.getModel(); if (!model) { return this.hide(); From 07eba0ac378dc035f99d7316edff348d8fe0c724 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Mon, 4 Dec 2023 09:49:08 +0100 Subject: [PATCH 28/92] Aux window: show screen reader status entry everywhere (fix #199428) (#199920) * Aux window: show screen reader status entry everywhere (fix #199428) * . --- .../browser/accessibilityStatus.ts | 101 +++++++++++++----- 1 file changed, 75 insertions(+), 26 deletions(-) diff --git a/src/vs/workbench/contrib/accessibility/browser/accessibilityStatus.ts b/src/vs/workbench/contrib/accessibility/browser/accessibilityStatus.ts index 5160d1e2791..21e6760ee2a 100644 --- a/src/vs/workbench/contrib/accessibility/browser/accessibilityStatus.ts +++ b/src/vs/workbench/contrib/accessibility/browser/accessibilityStatus.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; +import { Disposable, DisposableStore, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { Event } from 'vs/base/common/event'; import Severity from 'vs/base/common/severity'; import { localize } from 'vs/nls'; @@ -13,28 +13,85 @@ import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configur import { INotificationHandle, INotificationService, NotificationPriority } from 'vs/platform/notification/common/notification'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { IStatusbarEntryAccessor, IStatusbarService, StatusbarAlignment } from 'vs/workbench/services/statusbar/browser/statusbar'; +import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; + +class ScreenReaderModeStatusEntry extends Disposable { + + private readonly screenReaderModeElement = this._register(new MutableDisposable()); + + constructor(@IStatusbarService private readonly statusbarService: IStatusbarService) { + super(); + } + + updateScreenReaderModeElement(visible: boolean): void { + if (visible) { + if (!this.screenReaderModeElement.value) { + const text = localize('screenReaderDetected', "Screen Reader Optimized"); + this.screenReaderModeElement.value = this.statusbarService.addEntry({ + name: localize('status.editor.screenReaderMode', "Screen Reader Mode"), + text, + ariaLabel: text, + command: 'showEditorScreenReaderNotification', + kind: 'prominent' + }, 'status.editor.screenReaderMode', StatusbarAlignment.RIGHT, 100.6); + } + } else { + this.screenReaderModeElement.clear(); + } + } +} export class AccessibilityStatus extends Disposable implements IWorkbenchContribution { private screenReaderNotification: INotificationHandle | null = null; private promptedScreenReader: boolean = false; - private readonly screenReaderModeElement = this._register(new MutableDisposable()); + private readonly screenReaderModeElements = new Set(); constructor( @IConfigurationService private readonly configurationService: IConfigurationService, @INotificationService private readonly notificationService: INotificationService, - @IAccessibilityService private readonly _accessibilityService: IAccessibilityService, - @IStatusbarService private readonly statusbarService: IStatusbarService + @IAccessibilityService private readonly accessibilityService: IAccessibilityService, + @IInstantiationService instantiationService: IInstantiationService, + @IEditorGroupsService private readonly editorGroupService: IEditorGroupsService ) { super(); - this._register(this._accessibilityService.onDidChangeScreenReaderOptimized(() => this.onScreenReaderModeChange())); - this._register(configurationService.onDidChangeConfiguration(c => { + this.createScreenReaderModeElement(instantiationService, this._store); + this.updateScreenReaderModeElements(accessibilityService.isScreenReaderOptimized()); + + CommandsRegistry.registerCommand({ id: 'showEditorScreenReaderNotification', handler: () => this.showScreenReaderNotification() }); + + this.registerListeners(); + } + + private createScreenReaderModeElement(instantiationService: IInstantiationService, disposables: DisposableStore): ScreenReaderModeStatusEntry { + const entry = disposables.add(instantiationService.createInstance(ScreenReaderModeStatusEntry)); + + this.screenReaderModeElements.add(entry); + disposables.add(toDisposable(() => this.screenReaderModeElements.delete(entry))); + + return entry; + } + + private updateScreenReaderModeElements(visible: boolean): void { + for (const entry of this.screenReaderModeElements) { + entry.updateScreenReaderModeElement(visible); + } + } + + private registerListeners(): void { + this._register(this.accessibilityService.onDidChangeScreenReaderOptimized(() => this.onScreenReaderModeChange())); + + this._register(this.configurationService.onDidChangeConfiguration(c => { if (c.affectsConfiguration('editor.accessibilitySupport')) { this.onScreenReaderModeChange(); } })); - CommandsRegistry.registerCommand({ id: 'showEditorScreenReaderNotification', handler: () => this.showScreenReaderNotification() }); - this.updateScreenReaderModeElement(this._accessibilityService.isScreenReaderOptimized()); + + this._register(this.editorGroupService.onDidCreateAuxiliaryEditorPart(({ instantiationService, disposables }) => { + const entry = this.createScreenReaderModeElement(instantiationService, disposables); + entry.updateScreenReaderModeElement(this.accessibilityService.isScreenReaderOptimized()); + })); } private showScreenReaderNotification(): void { @@ -60,27 +117,11 @@ export class AccessibilityStatus extends Disposable implements IWorkbenchContrib Event.once(this.screenReaderNotification.onDidClose)(() => this.screenReaderNotification = null); } - private updateScreenReaderModeElement(visible: boolean): void { - if (visible) { - if (!this.screenReaderModeElement.value) { - const text = localize('screenReaderDetected', "Screen Reader Optimized"); - this.screenReaderModeElement.value = this.statusbarService.addEntry({ - name: localize('status.editor.screenReaderMode', "Screen Reader Mode"), - text, - ariaLabel: text, - command: 'showEditorScreenReaderNotification', - kind: 'prominent' - }, 'status.editor.screenReaderMode', StatusbarAlignment.RIGHT, 100.6); - } - } else { - this.screenReaderModeElement.clear(); - } - } private onScreenReaderModeChange(): void { // We only support text based editors - const screenReaderDetected = this._accessibilityService.isScreenReaderOptimized(); + const screenReaderDetected = this.accessibilityService.isScreenReaderOptimized(); if (screenReaderDetected) { const screenReaderConfiguration = this.configurationService.getValue('editor.accessibilitySupport'); if (screenReaderConfiguration === 'auto') { @@ -94,6 +135,14 @@ export class AccessibilityStatus extends Disposable implements IWorkbenchContrib if (this.screenReaderNotification) { this.screenReaderNotification.close(); } - this.updateScreenReaderModeElement(this._accessibilityService.isScreenReaderOptimized()); + this.updateScreenReaderModeElements(this.accessibilityService.isScreenReaderOptimized()); + } + + override dispose(): void { + super.dispose(); + + for (const entry of this.screenReaderModeElements) { + entry.dispose(); + } } } From 86f1cc0eaf50bdd46e03c872c9ef69c08db8d789 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 4 Dec 2023 09:55:44 +0100 Subject: [PATCH 29/92] update feature-labels list (#199930) --- .vscode/notebooks/my-work.github-issues | 28 ++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/.vscode/notebooks/my-work.github-issues b/.vscode/notebooks/my-work.github-issues index 42bf5aee57d..07df761e355 100644 --- a/.vscode/notebooks/my-work.github-issues +++ b/.vscode/notebooks/my-work.github-issues @@ -7,7 +7,7 @@ { "kind": 2, "language": "github-issues", - "value": "// list of repos we work in\n$repos=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n// current milestone name\n$milestone=milestone:\"November 2023\"\n" + "value": "// list of repos we work in\n$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n// current milestone name\n$MILESTONE=milestone:\"November 2023\"\n" }, { "kind": 1, @@ -17,7 +17,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos $milestone assignee:@me is:open\n" + "value": "$REPOS $MILESTONE assignee:@me is:open\n" }, { "kind": 1, @@ -32,7 +32,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open label:bug\n" + "value": "$REPOS assignee:@me is:open label:bug\n" }, { "kind": 1, @@ -42,7 +42,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open label:debt,engineering\n" + "value": "$REPOS assignee:@me is:open label:debt,engineering\n" }, { "kind": 1, @@ -52,7 +52,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open label:perf,perf-startup,perf-bloat,freeze-slow-crash-leak\n" + "value": "$REPOS assignee:@me is:open label:perf,perf-startup,perf-bloat,freeze-slow-crash-leak\n" }, { "kind": 1, @@ -62,12 +62,12 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open label:feature-request milestone:Backlog sort:reactions-+1-desc\n" + "value": "$REPOS assignee:@me is:open label:feature-request milestone:Backlog sort:reactions-+1-desc\n" }, { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open milestone:\"Backlog Candidates\"\n" + "value": "$REPOS assignee:@me is:open milestone:\"Backlog Candidates\"\n" }, { "kind": 1, @@ -92,7 +92,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open type:issue -label:bug -label:\"info-needed\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry -label:engineering\n" + "value": "$REPOS assignee:@me is:open type:issue -label:bug -label:\"info-needed\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry -label:engineering\n" }, { "kind": 1, @@ -102,7 +102,7 @@ { "kind": 2, "language": "github-issues", - "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keybindings-json -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat\n" + "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:code-lens -label:command-center -label:comments -label:config -label:context-keys -label:custom-editors -label:debug -label:debug-console -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-sticky-scroll-decorations -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet-parse -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extension-signature -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:icon-brand -label:icons-product -label:icons-widget -label:inlay-hints -label:inline-chat -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:javascript -label:json -label:json-sorting -label:keybindings -label:keybindings-editor -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:multi-monitor -label:native-file-dialog -label:network -label:notebook -label:notebook-accessibility -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commands -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-sticky-scroll -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:panel-chat -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:quickpick-chat -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-desktop -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-search -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:system-context-menu -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:unc -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-documents -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-auxwindow -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-feedback -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-voice -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom" }, { "kind": 1, @@ -112,7 +112,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open type:issue no:milestone -label:info-needed -label:triage-needed\n" + "value": "$REPOS assignee:@me is:open type:issue no:milestone -label:info-needed -label:triage-needed\n" }, { "kind": 1, @@ -122,7 +122,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open label:\"info-needed\"\n" + "value": "$REPOS assignee:@me is:open label:\"info-needed\"\n" }, { "kind": 1, @@ -137,7 +137,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos author:@me is:open is:pr review:approved\n" + "value": "$REPOS author:@me is:open is:pr review:approved\n" }, { "kind": 1, @@ -147,7 +147,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos author:@me is:open is:pr review:required\n" + "value": "$REPOS author:@me is:open is:pr review:required\n" }, { "kind": 1, @@ -157,6 +157,6 @@ { "kind": 2, "language": "github-issues", - "value": "$repos author:@me is:open is:pr review:changes_requested\n" + "value": "$REPOS author:@me is:open is:pr review:changes_requested\n" } ] \ No newline at end of file From 4276925e1063e91ed54b6a1ec168d1dd4c1682ed Mon Sep 17 00:00:00 2001 From: Alexandru Dima Date: Mon, 4 Dec 2023 10:29:34 +0100 Subject: [PATCH 30/92] Schedule animation frame runners in each editor's window (#199933) Schedule animation frame runners in each editor's window (fixes #199868) --- src/vs/editor/browser/view.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/vs/editor/browser/view.ts b/src/vs/editor/browser/view.ts index 83c2094484e..6df5d5c6d6f 100644 --- a/src/vs/editor/browser/view.ts +++ b/src/vs/editor/browser/view.ts @@ -713,7 +713,7 @@ class EditorRenderingCoordinator { public static INSTANCE = new EditorRenderingCoordinator(); private _coordinatedRenderings: ICoordinatedRendering[] = []; - private _animationFrameRunner: IDisposable | null = null; + private _animationFrameRunners = new Map(); private constructor() { } @@ -729,23 +729,23 @@ class EditorRenderingCoordinator { this._coordinatedRenderings.splice(renderingIndex, 1); if (this._coordinatedRenderings.length === 0) { - // There are no more renderings to coordinate => cancel animation frame - if (this._animationFrameRunner !== null) { - this._animationFrameRunner.dispose(); - this._animationFrameRunner = null; + // There are no more renderings to coordinate => cancel animation frames + for (const [_, disposable] of this._animationFrameRunners) { + disposable.dispose(); } + this._animationFrameRunners.clear(); } } }; } private _scheduleRender(window: CodeWindow): void { - if (this._animationFrameRunner === null) { + if (!this._animationFrameRunners.has(window)) { const runner = () => { - this._animationFrameRunner = null; + this._animationFrameRunners.delete(window); this._onRenderScheduled(); }; - this._animationFrameRunner = dom.runAtThisOrScheduleAtNextAnimationFrame(window, runner, 100); + this._animationFrameRunners.set(window, dom.runAtThisOrScheduleAtNextAnimationFrame(window, runner, 100)); } } From 8610f916a494fbb251b75ed6481059fa37b3f35c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Moreno?= Date: Mon, 4 Dec 2023 11:12:50 +0100 Subject: [PATCH 31/92] improve async data tree default collapsed state computation (#199899) * improve async data tree default collapsed state computation fixes #199441 * unset forceExpanded flag --- src/vs/base/browser/ui/tree/asyncDataTree.ts | 39 ++++++------ .../browser/ui/tree/asyncDataTree.test.ts | 62 ++++++++++++++++++- 2 files changed, 79 insertions(+), 22 deletions(-) diff --git a/src/vs/base/browser/ui/tree/asyncDataTree.ts b/src/vs/base/browser/ui/tree/asyncDataTree.ts index a6e824612bc..dbd603b052d 100644 --- a/src/vs/base/browser/ui/tree/asyncDataTree.ts +++ b/src/vs/base/browser/ui/tree/asyncDataTree.ts @@ -11,7 +11,7 @@ import { ComposedTreeDelegate, TreeFindMode as TreeFindMode, IAbstractTreeOption import { ICompressedTreeElement, ICompressedTreeNode } from 'vs/base/browser/ui/tree/compressedObjectTreeModel'; import { getVisibleState, isFilterResult } from 'vs/base/browser/ui/tree/indexTreeModel'; import { CompressibleObjectTree, ICompressibleKeyboardNavigationLabelProvider, ICompressibleObjectTreeOptions, ICompressibleTreeRenderer, IObjectTreeOptions, IObjectTreeSetChildrenOptions, ObjectTree } from 'vs/base/browser/ui/tree/objectTree'; -import { IAsyncDataSource, ICollapseStateChangeEvent, IObjectTreeElement, ITreeContextMenuEvent, ITreeDragAndDrop, ITreeEvent, ITreeFilter, ITreeMouseEvent, ITreeNode, ITreeRenderer, ITreeSorter, TreeError, TreeFilterResult, TreeVisibility, WeakMapper } from 'vs/base/browser/ui/tree/tree'; +import { IAsyncDataSource, ICollapseStateChangeEvent, IObjectTreeElement, ITreeContextMenuEvent, ITreeDragAndDrop, ITreeEvent, ITreeFilter, ITreeMouseEvent, ITreeNode, ITreeRenderer, ITreeSorter, ObjectTreeElementCollapseState, TreeError, TreeFilterResult, TreeVisibility, WeakMapper } from 'vs/base/browser/ui/tree/tree'; import { CancelablePromise, createCancelablePromise, Promises, timeout } from 'vs/base/common/async'; import { Codicon } from 'vs/base/common/codicons'; import { ThemeIcon } from 'vs/base/common/themables'; @@ -31,13 +31,15 @@ interface IAsyncDataTreeNode { hasChildren: boolean; stale: boolean; slow: boolean; - collapsedByDefault: boolean | undefined; + readonly defaultCollapseState: undefined | ObjectTreeElementCollapseState.PreserveOrCollapsed | ObjectTreeElementCollapseState.PreserveOrExpanded; + forceExpanded: boolean; } interface IAsyncDataTreeNodeRequiredProps extends Partial> { readonly element: TInput | T; readonly parent: IAsyncDataTreeNode | null; readonly hasChildren: boolean; + readonly defaultCollapseState: undefined | ObjectTreeElementCollapseState.PreserveOrCollapsed | ObjectTreeElementCollapseState.PreserveOrExpanded; } function createAsyncDataTreeNode(props: IAsyncDataTreeNodeRequiredProps): IAsyncDataTreeNode { @@ -47,7 +49,7 @@ function createAsyncDataTreeNode(props: IAsyncDataTreeNodeRequiredPro refreshPromise: undefined, stale: true, slow: false, - collapsedByDefault: undefined + forceExpanded: false }; } @@ -321,7 +323,7 @@ export class AsyncDataTree implements IDisposable protected readonly root: IAsyncDataTreeNode; private readonly nodes = new Map>(); private readonly sorter?: ITreeSorter; - private readonly collapseByDefault?: { (e: T): boolean }; + private readonly getDefaultCollapseState: { (e: T): undefined | ObjectTreeElementCollapseState.PreserveOrCollapsed | ObjectTreeElementCollapseState.PreserveOrExpanded }; private readonly subTreeRefreshPromises = new Map, Promise>(); private readonly refreshPromises = new Map, CancelablePromise>>(); @@ -387,7 +389,7 @@ export class AsyncDataTree implements IDisposable this.identityProvider = options.identityProvider; this.autoExpandSingleChildren = typeof options.autoExpandSingleChildren === 'undefined' ? false : options.autoExpandSingleChildren; this.sorter = options.sorter; - this.collapseByDefault = options.collapseByDefault; + this.getDefaultCollapseState = e => options.collapseByDefault ? (options.collapseByDefault(e) ? ObjectTreeElementCollapseState.PreserveOrCollapsed : ObjectTreeElementCollapseState.PreserveOrExpanded) : undefined; this.tree = this.createTree(user, container, delegate, renderers, options); this.onDidChangeFindMode = this.tree.onDidChangeFindMode; @@ -395,7 +397,8 @@ export class AsyncDataTree implements IDisposable this.root = createAsyncDataTreeNode({ element: undefined!, parent: null, - hasChildren: true + hasChildren: true, + defaultCollapseState: undefined }); if (this.identityProvider) { @@ -935,10 +938,9 @@ export class AsyncDataTree implements IDisposable const hasChildren = !!this.dataSource.hasChildren(element); if (!this.identityProvider) { - const asyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, hasChildren }); + const asyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, hasChildren, defaultCollapseState: this.getDefaultCollapseState(element) }); - if (hasChildren && this.collapseByDefault && !this.collapseByDefault(element)) { - asyncDataTreeNode.collapsedByDefault = false; + if (hasChildren && asyncDataTreeNode.defaultCollapseState === ObjectTreeElementCollapseState.PreserveOrExpanded) { childrenToRefresh.push(asyncDataTreeNode); } @@ -966,15 +968,14 @@ export class AsyncDataTree implements IDisposable } else { childrenToRefresh.push(asyncDataTreeNode); } - } else if (hasChildren && this.collapseByDefault && !this.collapseByDefault(element)) { - asyncDataTreeNode.collapsedByDefault = false; + } else if (hasChildren && !result.collapsed) { childrenToRefresh.push(asyncDataTreeNode); } return asyncDataTreeNode; } - const childAsyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, id, hasChildren }); + const childAsyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, id, hasChildren, defaultCollapseState: this.getDefaultCollapseState(element) }); if (viewStateContext && viewStateContext.viewState.focus && viewStateContext.viewState.focus.indexOf(id) > -1) { viewStateContext.focus.push(childAsyncDataTreeNode); @@ -986,8 +987,7 @@ export class AsyncDataTree implements IDisposable if (viewStateContext && viewStateContext.viewState.expanded && viewStateContext.viewState.expanded.indexOf(id) > -1) { childrenToRefresh.push(childAsyncDataTreeNode); - } else if (hasChildren && this.collapseByDefault && !this.collapseByDefault(element)) { - childAsyncDataTreeNode.collapsedByDefault = false; + } else if (hasChildren && childAsyncDataTreeNode.defaultCollapseState === ObjectTreeElementCollapseState.PreserveOrExpanded) { childrenToRefresh.push(childAsyncDataTreeNode); } @@ -1006,7 +1006,7 @@ export class AsyncDataTree implements IDisposable // TODO@joao this doesn't take filter into account if (node !== this.root && this.autoExpandSingleChildren && children.length === 1 && childrenToRefresh.length === 0) { - children[0].collapsedByDefault = false; + children[0].forceExpanded = true; childrenToRefresh.push(children[0]); } @@ -1042,16 +1042,17 @@ export class AsyncDataTree implements IDisposable }; } - let collapsed: boolean | undefined; + let collapsed: boolean | ObjectTreeElementCollapseState.PreserveOrCollapsed | ObjectTreeElementCollapseState.PreserveOrExpanded | undefined; if (viewStateContext && viewStateContext.viewState.expanded && node.id && viewStateContext.viewState.expanded.indexOf(node.id) > -1) { collapsed = false; + } else if (node.forceExpanded) { + collapsed = false; + node.forceExpanded = false; } else { - collapsed = node.collapsedByDefault; + collapsed = node.defaultCollapseState; } - node.collapsedByDefault = undefined; - return { element: node, children: node.hasChildren ? Iterable.map(node.children, child => this.asTreeElement(child, viewStateContext)) : [], diff --git a/src/vs/base/test/browser/ui/tree/asyncDataTree.test.ts b/src/vs/base/test/browser/ui/tree/asyncDataTree.test.ts index 1f77768b7ed..24640e6cf65 100644 --- a/src/vs/base/test/browser/ui/tree/asyncDataTree.test.ts +++ b/src/vs/base/test/browser/ui/tree/asyncDataTree.test.ts @@ -5,8 +5,10 @@ import * as assert from 'assert'; import { IIdentityProvider, IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; -import { AsyncDataTree } from 'vs/base/browser/ui/tree/asyncDataTree'; -import { IAsyncDataSource, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; +import { AsyncDataTree, CompressibleAsyncDataTree, ITreeCompressionDelegate } from 'vs/base/browser/ui/tree/asyncDataTree'; +import { ICompressedTreeNode } from 'vs/base/browser/ui/tree/compressedObjectTreeModel'; +import { ICompressibleTreeRenderer } from 'vs/base/browser/ui/tree/objectTree'; +import { IAsyncDataSource, ITreeNode } from 'vs/base/browser/ui/tree/tree'; import { timeout } from 'vs/base/common/async'; import { Iterable } from 'vs/base/common/iterator'; import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; @@ -37,7 +39,7 @@ function find(element: Element, id: string): Element | undefined { return undefined; } -class Renderer implements ITreeRenderer { +class Renderer implements ICompressibleTreeRenderer { readonly templateId = 'default'; renderTemplate(container: HTMLElement): HTMLElement { return container; @@ -48,6 +50,15 @@ class Renderer implements ITreeRenderer { disposeTemplate(templateData: HTMLElement): void { // noop } + renderCompressedElements(node: ITreeNode, void>, index: number, templateData: HTMLElement, height: number | undefined): void { + const result: string[] = []; + + for (const element of node.element.elements) { + result.push(element.id + (element.suffix || '')); + } + + templateData.textContent = result.join('/'); + } } class IdentityProvider implements IIdentityProvider { @@ -520,4 +531,49 @@ suite('AsyncDataTree', function () { assert(tree.isCollapsible(a), 'a is still collapsible'); assert(!tree.isCollapsed(a), 'a is expanded'); }); + + test('issue #199441', async () => { + const container = document.createElement('div'); + + const dataSource = new class implements IAsyncDataSource { + hasChildren(element: Element): boolean { + return !!element.children && element.children.length > 0; + } + async getChildren(element: Element) { + return element.children ?? Iterable.empty(); + } + }; + + const compressionDelegate = new class implements ITreeCompressionDelegate { + isIncompressible(element: Element): boolean { + return !dataSource.hasChildren(element); + } + }; + + const model = new Model({ + id: 'root', + children: [{ + id: 'a', children: [{ + id: 'b', + children: [{ id: 'b.txt' }] + }] + }] + }); + + const collapseByDefault = (element: Element) => false; + + const tree = store.add(new CompressibleAsyncDataTree('test', container, new VirtualDelegate(), compressionDelegate, [new Renderer()], dataSource, { identityProvider: new IdentityProvider(), collapseByDefault })); + tree.layout(200); + + await tree.setInput(model.root); + assert.deepStrictEqual(Array.from(container.querySelectorAll('.monaco-list-row')).map(e => e.textContent), ['a/b', 'b.txt']); + + model.get('a').children!.push({ + id: 'c', + children: [{ id: 'c.txt' }] + }); + + await tree.updateChildren(model.root, true); + assert.deepStrictEqual(Array.from(container.querySelectorAll('.monaco-list-row')).map(e => e.textContent), ['a', 'b', 'b.txt', 'c', 'c.txt']); + }); }); From b04250d322dcf5ef74df4641f69078ff9a2475ed Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Mon, 4 Dec 2023 11:19:57 +0100 Subject: [PATCH 32/92] output - allow to open any file backed channel as editor (#199850) * output - allow to open any file backed channel as editor * address feedback --- .../contrib/output/browser/logViewer.ts | 48 ------------------- .../output/browser/output.contribution.ts | 22 ++++----- .../contrib/output/browser/outputServices.ts | 8 ++-- .../contrib/output/browser/outputView.ts | 1 - .../services/output/common/output.ts | 2 +- 5 files changed, 16 insertions(+), 65 deletions(-) delete mode 100644 src/vs/workbench/contrib/output/browser/logViewer.ts diff --git a/src/vs/workbench/contrib/output/browser/logViewer.ts b/src/vs/workbench/contrib/output/browser/logViewer.ts deleted file mode 100644 index 8446103f278..00000000000 --- a/src/vs/workbench/contrib/output/browser/logViewer.ts +++ /dev/null @@ -1,48 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { localize } from 'vs/nls'; -import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { AbstractTextResourceEditor } from 'vs/workbench/browser/parts/editor/textResourceEditor'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IEditorConfiguration } from 'vs/workbench/browser/parts/editor/textEditor'; - -export class LogViewer extends AbstractTextResourceEditor { - - static readonly LOG_VIEWER_EDITOR_ID = 'workbench.editors.logViewer'; - - constructor( - @ITelemetryService telemetryService: ITelemetryService, - @IInstantiationService instantiationService: IInstantiationService, - @IStorageService storageService: IStorageService, - @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService, - @IThemeService themeService: IThemeService, - @IEditorGroupsService editorGroupService: IEditorGroupsService, - @IEditorService editorService: IEditorService, - @IFileService fileService: IFileService - ) { - super(LogViewer.LOG_VIEWER_EDITOR_ID, telemetryService, instantiationService, storageService, textResourceConfigurationService, themeService, editorGroupService, editorService, fileService); - } - - protected override getConfigurationOverrides(configuration: IEditorConfiguration): IEditorOptions { - const options = super.getConfigurationOverrides(configuration); - options.wordWrap = 'off'; // all log viewers do not wrap - options.folding = false; - options.scrollBeyondLastLine = false; - options.renderValidationDecorations = 'editable'; - return options; - } - - protected getAriaLabel(): string { - return localize('logViewerAriaLabel', "Log viewer"); - } -} diff --git a/src/vs/workbench/contrib/output/browser/output.contribution.ts b/src/vs/workbench/contrib/output/browser/output.contribution.ts index 358b67f43e6..71b27b54876 100644 --- a/src/vs/workbench/contrib/output/browser/output.contribution.ts +++ b/src/vs/workbench/contrib/output/browser/output.contribution.ts @@ -10,7 +10,7 @@ import { Registry } from 'vs/platform/registry/common/platform'; import { MenuId, registerAction2, Action2, MenuRegistry } from 'vs/platform/actions/common/actions'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { OutputService } from 'vs/workbench/contrib/output/browser/outputServices'; -import { OUTPUT_MODE_ID, OUTPUT_MIME, OUTPUT_VIEW_ID, IOutputService, CONTEXT_IN_OUTPUT, LOG_MODE_ID, LOG_MIME, CONTEXT_ACTIVE_LOG_OUTPUT, CONTEXT_OUTPUT_SCROLL_LOCK, IOutputChannelDescriptor, IFileOutputChannelDescriptor, ACTIVE_OUTPUT_CHANNEL_CONTEXT, IOutputChannelRegistry, Extensions } from 'vs/workbench/services/output/common/output'; +import { OUTPUT_MODE_ID, OUTPUT_MIME, OUTPUT_VIEW_ID, IOutputService, CONTEXT_IN_OUTPUT, LOG_MODE_ID, LOG_MIME, CONTEXT_ACTIVE_FILE_OUTPUT, CONTEXT_OUTPUT_SCROLL_LOCK, IOutputChannelDescriptor, IFileOutputChannelDescriptor, ACTIVE_OUTPUT_CHANNEL_CONTEXT, IOutputChannelRegistry, Extensions } from 'vs/workbench/services/output/common/output'; import { OutputViewPane } from 'vs/workbench/contrib/output/browser/outputView'; import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions'; @@ -93,7 +93,7 @@ class OutputContribution extends Disposable implements IWorkbenchContribution { this.registerShowOutputChannelsAction(); this.registerClearOutputAction(); this.registerToggleAutoScrollAction(); - this.registerOpenActiveLogOutputFileAction(); + this.registerOpenActiveOutputFileAction(); this.registerShowLogsAction(); this.registerOpenLogFileAction(); } @@ -259,12 +259,12 @@ class OutputContribution extends Disposable implements IWorkbenchContribution { })); } - private registerOpenActiveLogOutputFileAction(): void { + private registerOpenActiveOutputFileAction(): void { this._register(registerAction2(class extends Action2 { constructor() { super({ id: `workbench.action.openActiveLogOutputFile`, - title: nls.localize2('openActiveLogOutputFile', "Open Log Output File"), + title: nls.localize2('openActiveOutputFile', "Open Output as Editor"), menu: [{ id: MenuId.ViewTitle, when: ContextKeyExpr.equals('view', OUTPUT_VIEW_ID), @@ -272,29 +272,29 @@ class OutputContribution extends Disposable implements IWorkbenchContribution { order: 4 }], icon: Codicon.goToFile, - precondition: CONTEXT_ACTIVE_LOG_OUTPUT + precondition: CONTEXT_ACTIVE_FILE_OUTPUT }); } async run(accessor: ServicesAccessor): Promise { const outputService = accessor.get(IOutputService); const editorService = accessor.get(IEditorService); const fileConfigurationService = accessor.get(IFilesConfigurationService); - const logFileOutputChannelDescriptor = this.getLogFileOutputChannelDescriptor(outputService); - if (logFileOutputChannelDescriptor) { - await fileConfigurationService.updateReadonly(logFileOutputChannelDescriptor.file, true); + const fileOutputChannelDescriptor = this.getFileOutputChannelDescriptor(outputService); + if (fileOutputChannelDescriptor) { + await fileConfigurationService.updateReadonly(fileOutputChannelDescriptor.file, true); await editorService.openEditor({ - resource: logFileOutputChannelDescriptor.file, + resource: fileOutputChannelDescriptor.file, options: { pinned: true, } }); } } - private getLogFileOutputChannelDescriptor(outputService: IOutputService): IFileOutputChannelDescriptor | null { + private getFileOutputChannelDescriptor(outputService: IOutputService): IFileOutputChannelDescriptor | null { const channel = outputService.getActiveChannel(); if (channel) { const descriptor = outputService.getChannelDescriptors().filter(c => c.id === channel.id)[0]; - if (descriptor && descriptor.file && descriptor.log) { + if (descriptor?.file) { return descriptor; } } diff --git a/src/vs/workbench/contrib/output/browser/outputServices.ts b/src/vs/workbench/contrib/output/browser/outputServices.ts index 42d6e2bbd4e..27f04dabcc0 100644 --- a/src/vs/workbench/contrib/output/browser/outputServices.ts +++ b/src/vs/workbench/contrib/output/browser/outputServices.ts @@ -9,7 +9,7 @@ import { IDisposable, dispose, Disposable } from 'vs/base/common/lifecycle'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; import { Registry } from 'vs/platform/registry/common/platform'; -import { IOutputChannel, IOutputService, OUTPUT_VIEW_ID, OUTPUT_SCHEME, LOG_MIME, OUTPUT_MIME, OutputChannelUpdateMode, IOutputChannelDescriptor, Extensions, IOutputChannelRegistry, ACTIVE_OUTPUT_CHANNEL_CONTEXT, CONTEXT_ACTIVE_LOG_OUTPUT } from 'vs/workbench/services/output/common/output'; +import { IOutputChannel, IOutputService, OUTPUT_VIEW_ID, OUTPUT_SCHEME, LOG_MIME, OUTPUT_MIME, OutputChannelUpdateMode, IOutputChannelDescriptor, Extensions, IOutputChannelRegistry, ACTIVE_OUTPUT_CHANNEL_CONTEXT, CONTEXT_ACTIVE_FILE_OUTPUT } from 'vs/workbench/services/output/common/output'; import { OutputLinkProvider } from 'vs/workbench/contrib/output/browser/outputLinkProvider'; import { ITextModelService, ITextModelContentProvider } from 'vs/editor/common/services/resolverService'; import { ITextModel } from 'vs/editor/common/model'; @@ -73,7 +73,7 @@ export class OutputService extends Disposable implements IOutputService, ITextMo readonly onActiveOutputChannel: Event = this._onActiveOutputChannel.event; private readonly activeOutputChannelContext: IContextKey; - private readonly activeLogOutputChannelContext: IContextKey; + private readonly activeFileOutputChannelContext: IContextKey; constructor( @IStorageService private readonly storageService: IStorageService, @@ -90,7 +90,7 @@ export class OutputService extends Disposable implements IOutputService, ITextMo this.activeOutputChannelContext.set(this.activeChannelIdInStorage); this._register(this.onActiveOutputChannel(channel => this.activeOutputChannelContext.set(channel))); - this.activeLogOutputChannelContext = CONTEXT_ACTIVE_LOG_OUTPUT.bindTo(contextKeyService); + this.activeFileOutputChannelContext = CONTEXT_ACTIVE_FILE_OUTPUT.bindTo(contextKeyService); // Register as text model content provider for output textModelResolverService.registerTextModelContentProvider(OUTPUT_SCHEME, this); @@ -196,7 +196,7 @@ export class OutputService extends Disposable implements IOutputService, ITextMo private setActiveChannel(channel: OutputChannel | undefined): void { this.activeChannel = channel; - this.activeLogOutputChannelContext.set(!!channel?.outputChannelDescriptor?.file && channel?.outputChannelDescriptor?.log); + this.activeFileOutputChannelContext.set(!!channel?.outputChannelDescriptor?.file); if (this.activeChannel) { this.storageService.store(OUTPUT_ACTIVE_CHANNEL_KEY, this.activeChannel.id, StorageScope.WORKSPACE, StorageTarget.MACHINE); diff --git a/src/vs/workbench/contrib/output/browser/outputView.ts b/src/vs/workbench/contrib/output/browser/outputView.ts index aad161b5818..3612031dc54 100644 --- a/src/vs/workbench/contrib/output/browser/outputView.ts +++ b/src/vs/workbench/contrib/output/browser/outputView.ts @@ -118,7 +118,6 @@ export class OutputViewPane extends ViewPane { this.editor.layout(new Dimension(width, height)); } - private onDidChangeVisibility(visible: boolean): void { this.editor.setVisible(visible); if (!visible) { diff --git a/src/vs/workbench/services/output/common/output.ts b/src/vs/workbench/services/output/common/output.ts index 4ef30ef4e9d..012855aaaee 100644 --- a/src/vs/workbench/services/output/common/output.ts +++ b/src/vs/workbench/services/output/common/output.ts @@ -41,7 +41,7 @@ export const OUTPUT_VIEW_ID = 'workbench.panel.output'; export const CONTEXT_IN_OUTPUT = new RawContextKey('inOutput', false); -export const CONTEXT_ACTIVE_LOG_OUTPUT = new RawContextKey('activeLogOutput', false); +export const CONTEXT_ACTIVE_FILE_OUTPUT = new RawContextKey('activeLogOutput', false); export const CONTEXT_OUTPUT_SCROLL_LOCK = new RawContextKey(`outputView.scrollLock`, false); From dc732fc25ec2746bcf4d9cc6b1dc088954245ac4 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 4 Dec 2023 12:33:55 +0100 Subject: [PATCH 33/92] fix https://github.com/microsoft/vscode/issues/170041 (#199942) --- src/vs/workbench/api/browser/mainThreadEditor.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/api/browser/mainThreadEditor.ts b/src/vs/workbench/api/browser/mainThreadEditor.ts index 449791c204b..f6a2d942c0d 100644 --- a/src/vs/workbench/api/browser/mainThreadEditor.ts +++ b/src/vs/workbench/api/browser/mainThreadEditor.ts @@ -21,6 +21,7 @@ import { CodeEditorStateFlag, EditorState } from 'vs/editor/contrib/editorState/ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; import { SnippetParser } from 'vs/editor/contrib/snippet/browser/snippetParser'; import { MainThreadDocuments } from 'vs/workbench/api/browser/mainThreadDocuments'; +import { ISnippetEdit } from 'vs/editor/contrib/snippet/browser/snippetSession'; export interface IFocusTracker { onGainedFocus(): void; @@ -530,16 +531,11 @@ export class MainThreadTextEditor { return false; } - // cancel previous snippet mode - // snippetController.leaveSnippet(); - - // set selection, focus editor - const selections = ranges.map(r => new Selection(r.startLineNumber, r.startColumn, r.endLineNumber, r.endColumn)); - this._codeEditor.setSelections(selections); this._codeEditor.focus(); - // make modifications - snippetController.insert(template, { + // make modifications as snippet edit + const edits: ISnippetEdit[] = ranges.map(range => ({ range: Range.lift(range), template })); + snippetController.apply(edits, { overwriteBefore: 0, overwriteAfter: 0, undoStopBefore: opts.undoStopBefore, undoStopAfter: opts.undoStopAfter, clipboardText From 7e67ab1991fc57fce50d5224e64ce3b86b02d1a9 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Mon, 4 Dec 2023 14:13:37 +0100 Subject: [PATCH 34/92] aux window - allow `AUX_WINDOW_GROUP` in `openEditor(s)` to open in new window (#199945) --- .../chat/browser/actions/chatMoveActions.ts | 55 ++----------------- .../editor/browser/editorResolverService.ts | 21 +++++-- .../services/editor/browser/editorService.ts | 14 ++++- .../editor/common/editorGroupFinder.ts | 33 ++++++++--- .../services/editor/common/editorService.ts | 20 ++++--- 5 files changed, 71 insertions(+), 72 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.ts index e7b68fa51b3..834c5eca7e1 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.ts @@ -6,7 +6,7 @@ import { localize } from 'vs/nls'; import { Action2, IAction2Options, MenuId, registerAction2 } from 'vs/platform/actions/common/actions'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { ViewAction } from 'vs/workbench/browser/parts/views/viewPane'; import { ActiveEditorContext } from 'vs/workbench/common/contextkeys'; import { IViewsService } from 'vs/workbench/common/views'; @@ -19,7 +19,7 @@ import { CONTEXT_PROVIDER_EXISTS } from 'vs/workbench/contrib/chat/common/chatCo import { IChatContributionService } from 'vs/workbench/contrib/chat/common/chatContributionService'; import { IChatService } from 'vs/workbench/contrib/chat/common/chatService'; import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { ACTIVE_GROUP, AUX_WINDOW_GROUP, IEditorService } from 'vs/workbench/services/editor/common/editorService'; enum MoveToNewLocation { Editor = 'Editor', @@ -63,25 +63,11 @@ export function getMoveToAction(viewId: string, providerId: string, moveTo: Move return; } - const editorGroupService = accessor.get(IEditorGroupsService); - const instantiationService = accessor.get(IInstantiationService); const editorService = accessor.get(IEditorService); const sessionId = viewModel.sessionId; view.clear(); - switch (moveTo) { - case (MoveToNewLocation.Editor): { - await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { target: { sessionId: viewModel.sessionId }, pinned: true } }); - break; - } - case (MoveToNewLocation.Window): { - await openInNewWindow(instantiationService, editorGroupService, { target: { sessionId } }); - break; - } - default: { - throw new Error(`Unexpected move to location : ${moveTo}`); - } - } + await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { target: { sessionId }, pinned: true } }, moveTo === MoveToNewLocation.Window ? AUX_WINDOW_GROUP : ACTIVE_GROUP); } }; } @@ -156,26 +142,12 @@ async function executeMoveToAction(accessor: ServicesAccessor, moveTo: MoveToNew const viewService = accessor.get(IViewsService); const chatService = accessor.get(IChatService); const editorService = accessor.get(IEditorService); - const instantiationService = accessor.get(IInstantiationService); - const editorGroupService = accessor.get(IEditorGroupsService); const widget = widgetService.lastFocusedWidget; if (!widget || !('viewId' in widget.viewContext)) { const providerId = chatService.getProviderInfos()[0].id; - switch (moveTo) { - case (MoveToNewLocation.Editor): { - await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { target: { providerId }, pinned: true } }); - break; - } - case (MoveToNewLocation.Window): { - await openInNewWindow(instantiationService, editorGroupService, { target: { providerId } }); - break; - } - default: { - throw new Error(`Unexpected move to location : ${moveTo}`); - } - } + await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { target: { providerId }, pinned: true } }, moveTo === MoveToNewLocation.Window ? AUX_WINDOW_GROUP : ACTIVE_GROUP); return; } @@ -188,24 +160,7 @@ async function executeMoveToAction(accessor: ServicesAccessor, moveTo: MoveToNew const view = await viewService.openView(widget.viewContext.viewId) as ChatViewPane; view.clear(); - switch (moveTo) { - case (MoveToNewLocation.Editor): { - await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { target: { sessionId: sessionId }, pinned: true } }); - break; - } - case (MoveToNewLocation.Window): { - await openInNewWindow(instantiationService, editorGroupService, { target: { sessionId } }); - } - default: { - throw new Error(`Unexpected move to location : ${moveTo}`); - } - } -} - -async function openInNewWindow(intstantiationService: IInstantiationService, editorGroupService: IEditorGroupsService, options: IChatEditorOptions) { - const auxiliaryEditorPart = await editorGroupService.createAuxiliaryEditorPart(); - const chatEditorInput = intstantiationService.createInstance(ChatEditorInput, ChatEditorInput.getNewEditorUri(), options); - await auxiliaryEditorPart.activeGroup.openEditor(chatEditorInput, { pinned: true }); + await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { target: { sessionId }, pinned: true } }, moveTo === MoveToNewLocation.Window ? AUX_WINDOW_GROUP : ACTIVE_GROUP); } async function moveToSidebar(accessor: ServicesAccessor): Promise { diff --git a/src/vs/workbench/services/editor/browser/editorResolverService.ts b/src/vs/workbench/services/editor/browser/editorResolverService.ts index b8d99e5772a..6e3c55e4cc6 100644 --- a/src/vs/workbench/services/editor/browser/editorResolverService.ts +++ b/src/vs/workbench/services/editor/browser/editorResolverService.ts @@ -83,13 +83,17 @@ export class EditorResolverService extends Disposable implements IEditorResolver }); } - private resolveUntypedInputAndGroup(editor: IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): [IUntypedEditorInput, IEditorGroup, EditorActivation | undefined] | undefined { + private resolveUntypedInputAndGroup(editor: IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): Promise<[IUntypedEditorInput, IEditorGroup, EditorActivation | undefined] | undefined> | [IUntypedEditorInput, IEditorGroup, EditorActivation | undefined] | undefined { const untypedEditor = editor; // Use the untyped editor to find a group - const [group, activation] = this.instantiationService.invokeFunction(findGroup, untypedEditor, preferredGroup); - - return [untypedEditor, group, activation]; + const findGroupResult = this.instantiationService.invokeFunction(findGroup, untypedEditor, preferredGroup); + if (findGroupResult instanceof Promise) { + return findGroupResult.then(([group, activation]) => [untypedEditor, group, activation]); + } else { + const [group, activation] = findGroupResult; + return [untypedEditor, group, activation]; + } } async resolveEditor(editor: IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): Promise { @@ -103,7 +107,14 @@ export class EditorResolverService extends Disposable implements IEditorResolver return this.doResolveSideBySideEditor(editor, preferredGroup); } - const resolvedUntypedAndGroup = this.resolveUntypedInputAndGroup(editor, preferredGroup); + let resolvedUntypedAndGroup: [IUntypedEditorInput, IEditorGroup, EditorActivation | undefined] | undefined; + const resolvedUntypedAndGroupResult = this.resolveUntypedInputAndGroup(editor, preferredGroup); + if (resolvedUntypedAndGroupResult instanceof Promise) { + resolvedUntypedAndGroup = await resolvedUntypedAndGroupResult; + } else { + resolvedUntypedAndGroup = resolvedUntypedAndGroupResult; + } + if (!resolvedUntypedAndGroup) { return ResolvedStatus.NONE; } diff --git a/src/vs/workbench/services/editor/browser/editorService.ts b/src/vs/workbench/services/editor/browser/editorService.ts index 55a1329b41a..bba3ba994f9 100644 --- a/src/vs/workbench/services/editor/browser/editorService.ts +++ b/src/vs/workbench/services/editor/browser/editorService.ts @@ -540,7 +540,12 @@ export class EditorService extends Disposable implements EditorServiceImpl { // If group still isn't defined because of a disabled override we resolve it if (!group) { let activation: EditorActivation | undefined = undefined; - ([group, activation] = this.instantiationService.invokeFunction(findGroup, { editor: typedEditor, options }, preferredGroup)); + const findGroupResult = this.instantiationService.invokeFunction(findGroup, { editor: typedEditor, options }, preferredGroup); + if (findGroupResult instanceof Promise) { + ([group, activation] = await findGroupResult); + } else { + ([group, activation] = findGroupResult); + } // Mixin editor group activation if returned if (activation) { @@ -598,7 +603,12 @@ export class EditorService extends Disposable implements EditorServiceImpl { // If group still isn't defined because of a disabled override we resolve it if (!group) { - [group] = this.instantiationService.invokeFunction(findGroup, typedEditor, preferredGroup); + const findGroupResult = this.instantiationService.invokeFunction(findGroup, typedEditor, preferredGroup); + if (findGroupResult instanceof Promise) { + ([group] = await findGroupResult); + } else { + ([group] = findGroupResult); + } } // Update map of groups to editors diff --git a/src/vs/workbench/services/editor/common/editorGroupFinder.ts b/src/vs/workbench/services/editor/common/editorGroupFinder.ts index d2c24a3b112..bcae9ca0e58 100644 --- a/src/vs/workbench/services/editor/common/editorGroupFinder.ts +++ b/src/vs/workbench/services/editor/common/editorGroupFinder.ts @@ -9,26 +9,38 @@ import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation import { EditorInputWithOptions, isEditorInputWithOptions, IUntypedEditorInput, isEditorInput, EditorInputCapabilities } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { IEditorGroup, GroupsOrder, preferredSideBySideGroupDirection, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { PreferredGroup, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; +import { AUX_WINDOW_GROUP, AUX_WINDOW_GROUP_TYPE, PreferredGroup, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; /** * Finds the target `IEditorGroup` given the instructions provided * that is best for the editor and matches the preferred group if * possible. */ -export function findGroup(accessor: ServicesAccessor, editor: IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): [IEditorGroup, EditorActivation | undefined]; -export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions, preferredGroup: PreferredGroup | undefined): [IEditorGroup, EditorActivation | undefined]; -export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): [IEditorGroup, EditorActivation | undefined]; -export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): [IEditorGroup, EditorActivation | undefined] { +export function findGroup(accessor: ServicesAccessor, editor: IUntypedEditorInput, preferredGroup: Exclude | undefined): [IEditorGroup, EditorActivation | undefined]; +export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions, preferredGroup: Exclude | undefined): [IEditorGroup, EditorActivation | undefined]; +export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: Exclude | undefined): [IEditorGroup, EditorActivation | undefined]; +export function findGroup(accessor: ServicesAccessor, editor: IUntypedEditorInput, preferredGroup: AUX_WINDOW_GROUP_TYPE): Promise<[IEditorGroup, EditorActivation | undefined]>; +export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions, preferredGroup: AUX_WINDOW_GROUP_TYPE): Promise<[IEditorGroup, EditorActivation | undefined]>; +export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: AUX_WINDOW_GROUP_TYPE): Promise<[IEditorGroup, EditorActivation | undefined]>; +export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): Promise<[IEditorGroup, EditorActivation | undefined]> | [IEditorGroup, EditorActivation | undefined]; +export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): Promise<[IEditorGroup, EditorActivation | undefined]> | [IEditorGroup, EditorActivation | undefined] { const editorGroupService = accessor.get(IEditorGroupsService); const configurationService = accessor.get(IConfigurationService); const group = doFindGroup(editor, preferredGroup, editorGroupService, configurationService); + if (group instanceof Promise) { + return group.then(group => handleGroupActivation(group, editor, preferredGroup, editorGroupService)); + } + + return handleGroupActivation(group, editor, preferredGroup, editorGroupService); +} + +function handleGroupActivation(group: IEditorGroup, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined, editorGroupService: IEditorGroupsService): [IEditorGroup, EditorActivation | undefined] { // Resolve editor activation strategy let activation: EditorActivation | undefined = undefined; if ( - editorGroupService.activeGroup !== group && // only if target group is not already active + editorGroupService.activeGroup !== group && // only if target group is not already active editor.options && !editor.options.inactive && // never for inactive editors editor.options.preserveFocus && // only if preserveFocus typeof editor.options.activation !== 'number' && // only if activation is not already defined (either true or false) @@ -49,8 +61,8 @@ export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOpt return [group, activation]; } -function doFindGroup(input: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined, editorGroupService: IEditorGroupsService, configurationService: IConfigurationService): IEditorGroup { - let group: IEditorGroup | undefined; +function doFindGroup(input: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined, editorGroupService: IEditorGroupsService, configurationService: IConfigurationService): Promise | IEditorGroup { + let group: Promise | IEditorGroup | undefined; const editor = isEditorInputWithOptions(input) ? input.editor : input; const options = input.options; @@ -78,6 +90,11 @@ function doFindGroup(input: EditorInputWithOptions | IUntypedEditorInput, prefer group = candidateGroup; } + // Group: Aux Window + else if (preferredGroup === AUX_WINDOW_GROUP) { + group = editorGroupService.createAuxiliaryEditorPart().then(group => group.activeGroup); + } + // Group: Unspecified without a specific index to open else if (!options || typeof options.index !== 'number') { const groupsByLastActive = editorGroupService.getGroups(GroupsOrder.MOST_RECENTLY_ACTIVE); diff --git a/src/vs/workbench/services/editor/common/editorService.ts b/src/vs/workbench/services/editor/common/editorService.ts index 02c7f12d809..1092fd870bc 100644 --- a/src/vs/workbench/services/editor/common/editorService.ts +++ b/src/vs/workbench/services/editor/common/editorService.ts @@ -28,7 +28,13 @@ export type ACTIVE_GROUP_TYPE = typeof ACTIVE_GROUP; export const SIDE_GROUP = -2; export type SIDE_GROUP_TYPE = typeof SIDE_GROUP; -export type PreferredGroup = IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE; +/** + * Open an editor in a new auxiliary window. + */ +export const AUX_WINDOW_GROUP = -3; +export type AUX_WINDOW_GROUP_TYPE = typeof AUX_WINDOW_GROUP; + +export type PreferredGroup = IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE; export function isPreferredGroup(obj: unknown): obj is PreferredGroup { const candidate = obj as PreferredGroup | undefined; @@ -233,10 +239,10 @@ export interface IEditorService { * @returns the editor that opened or `undefined` if the operation failed or the editor was not * opened to be active. */ - openEditor(editor: IResourceEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE): Promise; - openEditor(editor: ITextResourceEditorInput | IUntitledTextResourceEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE): Promise; - openEditor(editor: IResourceDiffEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE): Promise; - openEditor(editor: IUntypedEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE): Promise; + openEditor(editor: IResourceEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE): Promise; + openEditor(editor: ITextResourceEditorInput | IUntitledTextResourceEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE): Promise; + openEditor(editor: IResourceDiffEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE): Promise; + openEditor(editor: IUntypedEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE): Promise; /** * @deprecated using this method is a sign that your editor has not adopted the editor @@ -250,7 +256,7 @@ export interface IEditorService { * If you already have an `EditorInput` in hand and must use it for opening, use `group.openEditor` * instead, via `IEditorGroupsService`. */ - openEditor(editor: EditorInput, options?: IEditorOptions, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE): Promise; + openEditor(editor: EditorInput, options?: IEditorOptions, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE): Promise; /** * Open editors in an editor group. @@ -263,7 +269,7 @@ export interface IEditorService { * @returns the editors that opened. The array can be empty or have less elements for editors * that failed to open or were instructed to open as inactive. */ - openEditors(editors: IUntypedEditorInput[], group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE, options?: IOpenEditorsOptions): Promise; + openEditors(editors: IUntypedEditorInput[], group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE, options?: IOpenEditorsOptions): Promise; /** * Replaces editors in an editor group with the provided replacement. From 3786cdcf9ef4205f799c472c54ba068541bdc5e6 Mon Sep 17 00:00:00 2001 From: Ulugbek Abdullaev Date: Mon, 4 Dec 2023 14:41:17 +0100 Subject: [PATCH 35/92] meta: settings.json: wrap lines for github-issues notebooks (#199950) --- .vscode/settings.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 98bd618b14f..7434adcf4ae 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -164,5 +164,8 @@ "vscode-notebook-renderer", "src/vs/workbench/workbench.web.main.ts", "src/vs/workbench/api/common/extHostTypes.ts" - ] + ], + "[github-issues]": { + "editor.wordWrap": "on" + } } From 56934582c36920bd45ec19be7735e9f42ff2b35f Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 4 Dec 2023 14:48:29 +0100 Subject: [PATCH 36/92] fix https://github.com/microsoft/vscode/issues/173431 (#199951) --- .../api/common/extHostLanguageFeatures.ts | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/api/common/extHostLanguageFeatures.ts b/src/vs/workbench/api/common/extHostLanguageFeatures.ts index 9093f5a90fb..927215c5cc5 100644 --- a/src/vs/workbench/api/common/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/common/extHostLanguageFeatures.ts @@ -1462,17 +1462,26 @@ class InlayHintsAdapter { if (typeof hint.label === 'string') { result.label = hint.label; } else { - result.label = hint.label.map(part => { - const result: languages.InlayHintLabelPart = { label: part.value }; - result.tooltip = typeConvert.MarkdownString.fromStrict(part.tooltip); + const parts: languages.InlayHintLabelPart[] = []; + result.label = parts; + + for (const part of hint.label) { + if (!part.value) { + console.warn('INVALID inlay hint, empty label part', this._extension.identifier.value); + continue; + } + const part2: languages.InlayHintLabelPart = { + label: part.value, + tooltip: typeConvert.MarkdownString.fromStrict(part.tooltip) + }; if (Location.isLocation(part.location)) { - result.location = typeConvert.location.from(part.location); + part2.location = typeConvert.location.from(part.location); } if (part.command) { - result.command = this._commands.toInternal(part.command, disposables); + part2.command = this._commands.toInternal(part.command, disposables); } - return result; - }); + parts.push(part2); + } } return result; } From 38347ca237cbadaadfceded7ac5eb8d8d0ffb42b Mon Sep 17 00:00:00 2001 From: Simon Siefke Date: Mon, 4 Dec 2023 15:00:02 +0100 Subject: [PATCH 37/92] fix: memory leak in color picker widget (#199815) --- .../contrib/colorPicker/browser/colorPickerWidget.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts index 5e245dfb4a2..d7fc9e51eb6 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts @@ -117,9 +117,9 @@ class CloseButton extends Disposable { const closeButton = dom.append(innerDiv, $('.button' + ThemeIcon.asCSSSelector(registerIcon('color-picker-close', Codicon.close, localize('closeIcon', 'Icon to close the color picker'))))); closeButton.classList.add('close-icon'); - this._button.onclick = () => { + this._register(dom.addDisposableListener(this._button, dom.EventType.CLICK, () => { this._onClicked.fire(); - }; + })); } } @@ -455,9 +455,9 @@ export class InsertButton extends Disposable { this._button = dom.append(container, document.createElement('button')); this._button.classList.add('insert-button'); this._button.textContent = 'Insert'; - this._button.onclick = e => { + this._register(dom.addDisposableListener(this._button, dom.EventType.CLICK, () => { this._onClicked.fire(); - }; + })); } public get button(): HTMLElement { From d5fe76749aeaa4df109911668ef5e87e3b262c02 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 4 Dec 2023 15:01:57 +0100 Subject: [PATCH 38/92] fix https://github.com/microsoft/vscode/issues/177059 (#199952) --- .../browser/inlayHintsController.ts | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts index fab60b557e3..4066095ed11 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts @@ -156,6 +156,37 @@ export class InlayHintsController implements IEditorContribution { return; } + if (options.enabled === 'on') { + // different "on" modes: always + this._activeRenderMode = RenderMode.Normal; + } else { + // different "on" modes: offUnlessPressed, or onUnlessPressed + let defaultMode: RenderMode; + let altMode: RenderMode; + if (options.enabled === 'onUnlessPressed') { + defaultMode = RenderMode.Normal; + altMode = RenderMode.Invisible; + } else { + defaultMode = RenderMode.Invisible; + altMode = RenderMode.Normal; + } + this._activeRenderMode = defaultMode; + + this._sessionDisposables.add(ModifierKeyEmitter.getInstance().event(e => { + if (!this._editor.hasModel()) { + return; + } + const newRenderMode = e.altKey && e.ctrlKey && !(e.shiftKey || e.metaKey) ? altMode : defaultMode; + if (newRenderMode !== this._activeRenderMode) { + this._activeRenderMode = newRenderMode; + const model = this._editor.getModel(); + const copies = this._copyInlayHintsWithCurrentAnchor(model); + this._updateHintsDecorators([model.getFullModelRange()], copies); + scheduler.schedule(0); + } + })); + } + // iff possible, quickly update from cache const cached = this._inlayHintsCache.get(model); if (cached) { @@ -231,37 +262,6 @@ export class InlayHintsController implements IEditorContribution { scheduler.schedule(delay); })); - if (options.enabled === 'on') { - // different "on" modes: always - this._activeRenderMode = RenderMode.Normal; - } else { - // different "on" modes: offUnlessPressed, or onUnlessPressed - let defaultMode: RenderMode; - let altMode: RenderMode; - if (options.enabled === 'onUnlessPressed') { - defaultMode = RenderMode.Normal; - altMode = RenderMode.Invisible; - } else { - defaultMode = RenderMode.Invisible; - altMode = RenderMode.Normal; - } - this._activeRenderMode = defaultMode; - - this._sessionDisposables.add(ModifierKeyEmitter.getInstance().event(e => { - if (!this._editor.hasModel()) { - return; - } - const newRenderMode = e.altKey && e.ctrlKey && !(e.shiftKey || e.metaKey) ? altMode : defaultMode; - if (newRenderMode !== this._activeRenderMode) { - this._activeRenderMode = newRenderMode; - const model = this._editor.getModel(); - const copies = this._copyInlayHintsWithCurrentAnchor(model); - this._updateHintsDecorators([model.getFullModelRange()], copies); - scheduler.schedule(0); - } - })); - } - // mouse gestures this._sessionDisposables.add(this._installDblClickGesture(() => scheduler.schedule(0))); this._sessionDisposables.add(this._installLinkGesture()); From 97082b0ca528e64fb1be0adcda9b1876fb223d05 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 4 Dec 2023 16:45:25 +0100 Subject: [PATCH 39/92] warn/report invalid code lenses but don't surface them in the UI (#199962) re https://github.com/microsoft/vscode/issues/197643 --- .../api/common/extHostLanguageFeatures.ts | 21 +++++++++++++------ .../browser/extHostLanguageFeatures.test.ts | 3 +-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/api/common/extHostLanguageFeatures.ts b/src/vs/workbench/api/common/extHostLanguageFeatures.ts index 927215c5cc5..3190f3eed84 100644 --- a/src/vs/workbench/api/common/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/common/extHostLanguageFeatures.ts @@ -34,7 +34,7 @@ import { StopWatch } from 'vs/base/common/stopwatch'; import { isCancellationError, NotImplementedError } from 'vs/base/common/errors'; import { raceCancellationError } from 'vs/base/common/async'; import { isProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; +import { ExtHostTelemetry, IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; import { localize } from 'vs/nls'; import { IAutoClosingPairConditional } from 'vs/editor/common/languages/languageConfiguration'; @@ -104,15 +104,16 @@ class DocumentSymbolAdapter { class CodeLensAdapter { - private static _badCmd: vscode.Command = { command: 'missing', title: '!!MISSING: command!!' }; - private readonly _cache = new Cache('CodeLens'); private readonly _disposables = new Map(); constructor( private readonly _documents: ExtHostDocuments, private readonly _commands: CommandsConverter, - private readonly _provider: vscode.CodeLensProvider + private readonly _provider: vscode.CodeLensProvider, + private readonly _extension: IExtensionDescription, + private readonly _extTelemetry: ExtHostTelemetry, + private readonly _logService: ILogService, ) { } async provideCodeLenses(resource: URI, token: CancellationToken): Promise { @@ -164,7 +165,15 @@ class CodeLensAdapter { // disposed in the meantime return undefined; } - symbol.command = this._commands.toInternal(resolvedLens.command ?? CodeLensAdapter._badCmd, disposables); + + if (!resolvedLens.command) { + const error = new Error('INVALID code lens resolved, lacks command: ' + this._extension.identifier.value); + this._extTelemetry.onExtensionError(this._extension.identifier, error); + this._logService.error(error); + return undefined; + } + + symbol.command = this._commands.toInternal(resolvedLens.command, disposables); return symbol; } @@ -2006,7 +2015,7 @@ export class ExtHostLanguageFeatures implements extHostProtocol.ExtHostLanguageF const handle = this._nextHandle(); const eventHandle = typeof provider.onDidChangeCodeLenses === 'function' ? this._nextHandle() : undefined; - this._adapter.set(handle, new AdapterData(new CodeLensAdapter(this._documents, this._commands.converter, provider), extension)); + this._adapter.set(handle, new AdapterData(new CodeLensAdapter(this._documents, this._commands.converter, provider, extension, this._extensionTelemetry, this._logService), extension)); this._proxy.$registerCodeLensSupport(handle, this._transformDocumentSelector(selector, extension), eventHandle); let result = this._createDisposable(handle); diff --git a/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts b/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts index a04dc9da18e..3909249dc09 100644 --- a/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts +++ b/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts @@ -286,8 +286,7 @@ suite('ExtHostLanguageFeatures', function () { assert.strictEqual(value.lenses.length, 1); const [data] = value.lenses; const symbol = await Promise.resolve(data.provider.resolveCodeLens!(model, data.symbol, CancellationToken.None)); - assert.strictEqual(symbol!.command!.id, 'missing'); - assert.strictEqual(symbol!.command!.title, '!!MISSING: command!!'); + assert.strictEqual(symbol, undefined); value.dispose(); }); From c7a0dee66fbfaf483b0ad9a3974dd1ea83e98d59 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 4 Dec 2023 08:56:05 -0800 Subject: [PATCH 40/92] Add issue grooming notebook (#199966) --- .vscode/notebooks/grooming.github-issues | 52 ++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 .vscode/notebooks/grooming.github-issues diff --git a/.vscode/notebooks/grooming.github-issues b/.vscode/notebooks/grooming.github-issues new file mode 100644 index 00000000000..59f2ec3f9b2 --- /dev/null +++ b/.vscode/notebooks/grooming.github-issues @@ -0,0 +1,52 @@ +[ + { + "kind": 1, + "language": "markdown", + "value": "#### Config\n" + }, + { + "kind": 2, + "language": "github-issues", + "value": "// list of repos we work in\n$repos=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n" + }, + { + "kind": 1, + "language": "markdown", + "value": "#### Missing Type label\n" + }, + { + "kind": 2, + "language": "github-issues", + "value": "$repos assignee:@me is:open type:issue -label:bug -label:\"info-needed\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry -label:engineering\n" + }, + { + "kind": 1, + "language": "markdown", + "value": "#### Missing Area Label\n\nFeature area labels are light or strong blue (`1d76db` or `c5def5`) and they denote a specific feature or feature area, like `editor-clipboard` or `file-explorer`\n" + }, + { + "kind": 2, + "language": "github-issues", + "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keybindings-json -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat\n" + }, + { + "kind": 1, + "language": "markdown", + "value": "### Missing Milestone\n" + }, + { + "kind": 2, + "language": "github-issues", + "value": "$repos assignee:@me is:open type:issue no:milestone -label:info-needed -label:triage-needed\n" + }, + { + "kind": 1, + "language": "markdown", + "value": "#### Not Actionable\n" + }, + { + "kind": 2, + "language": "github-issues", + "value": "$repos assignee:@me is:open label:\"info-needed\"\n" + } +] \ No newline at end of file From 23f27634a4be3cb27610b0fdef9a9c1dd4507d41 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 4 Dec 2023 18:06:27 +0100 Subject: [PATCH 41/92] fix https://github.com/microsoft/vscode/issues/188441 (#199967) --- src/vs/editor/contrib/format/browser/format.ts | 15 ++++++++++----- .../format/browser/formatActionsMultiple.ts | 18 ++++++++++-------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/vs/editor/contrib/format/browser/format.ts b/src/vs/editor/contrib/format/browser/format.ts index 2fef1059ac8..402d15f5643 100644 --- a/src/vs/editor/contrib/format/browser/format.ts +++ b/src/vs/editor/contrib/format/browser/format.ts @@ -69,13 +69,18 @@ export function getRealAndSyntheticDocumentFormattersOrdered( return result; } +export const enum FormattingKind { + File = 1, + Selection = 2 +} + export const enum FormattingMode { Explicit = 1, Silent = 2 } export interface IFormattingEditProviderSelector { - (formatter: T[], document: ITextModel, mode: FormattingMode): Promise; + (formatter: T[], document: ITextModel, mode: FormattingMode, kind: FormattingKind): Promise; } export abstract class FormattingConflicts { @@ -87,13 +92,13 @@ export abstract class FormattingConflicts { return { dispose: remove }; } - static async select(formatter: T[], document: ITextModel, mode: FormattingMode): Promise { + static async select(formatter: T[], document: ITextModel, mode: FormattingMode, kind: FormattingKind): Promise { if (formatter.length === 0) { return undefined; } const selector = Iterable.first(FormattingConflicts._selectors); if (selector) { - return await selector(formatter, document, mode); + return await selector(formatter, document, mode, kind); } return undefined; } @@ -113,7 +118,7 @@ export async function formatDocumentRangesWithSelectedProvider( const { documentRangeFormattingEditProvider: documentRangeFormattingEditProviderRegistry } = accessor.get(ILanguageFeaturesService); const model = isCodeEditor(editorOrModel) ? editorOrModel.getModel() : editorOrModel; const provider = documentRangeFormattingEditProviderRegistry.ordered(model); - const selected = await FormattingConflicts.select(provider, model, mode); + const selected = await FormattingConflicts.select(provider, model, mode, FormattingKind.Selection); if (selected) { progress.report(selected); await instaService.invokeFunction(formatDocumentRangesWithProvider, selected, editorOrModel, rangeOrRanges, token, userGesture); @@ -291,7 +296,7 @@ export async function formatDocumentWithSelectedProvider( const languageFeaturesService = accessor.get(ILanguageFeaturesService); const model = isCodeEditor(editorOrModel) ? editorOrModel.getModel() : editorOrModel; const provider = getRealAndSyntheticDocumentFormattersOrdered(languageFeaturesService.documentFormattingEditProvider, languageFeaturesService.documentRangeFormattingEditProvider, model); - const selected = await FormattingConflicts.select(provider, model, mode); + const selected = await FormattingConflicts.select(provider, model, mode, FormattingKind.File); if (selected) { progress.report(selected); await instaService.invokeFunction(formatDocumentWithProvider, selected, editorOrModel, mode, token, userGesture); diff --git a/src/vs/workbench/contrib/format/browser/formatActionsMultiple.ts b/src/vs/workbench/contrib/format/browser/formatActionsMultiple.ts index f84ae6738e4..ca4254400e7 100644 --- a/src/vs/workbench/contrib/format/browser/formatActionsMultiple.ts +++ b/src/vs/workbench/contrib/format/browser/formatActionsMultiple.ts @@ -12,7 +12,7 @@ import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { formatDocumentRangesWithProvider, formatDocumentWithProvider, getRealAndSyntheticDocumentFormattersOrdered, FormattingConflicts, FormattingMode } from 'vs/editor/contrib/format/browser/format'; +import { formatDocumentRangesWithProvider, formatDocumentWithProvider, getRealAndSyntheticDocumentFormattersOrdered, FormattingConflicts, FormattingMode, FormattingKind } from 'vs/editor/contrib/format/browser/format'; import { Range } from 'vs/editor/common/core/range'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; @@ -61,7 +61,7 @@ class DefaultFormatter extends Disposable implements IWorkbenchContribution { ) { super(); this._store.add(this._extensionService.onDidChangeExtensions(this._updateConfigValues, this)); - this._store.add(FormattingConflicts.setFormatterSelector((formatter, document, mode) => this._selectFormatter(formatter, document, mode))); + this._store.add(FormattingConflicts.setFormatterSelector((formatter, document, mode, kind) => this._selectFormatter(formatter, document, mode, kind))); this._store.add(_editorService.onDidActiveEditorChange(this._updateStatus, this)); this._store.add(_languageFeaturesService.documentFormattingEditProvider.onDidChange(this._updateStatus, this)); this._store.add(_languageFeaturesService.documentRangeFormattingEditProvider.onDidChange(this._updateStatus, this)); @@ -107,7 +107,7 @@ class DefaultFormatter extends Disposable implements IWorkbenchContribution { return s.match(/\s/) ? `'${s}'` : s; } - private async _analyzeFormatter(formatter: T[], document: ITextModel): Promise { + private async _analyzeFormatter(kind: FormattingKind, formatter: T[], document: ITextModel): Promise { const defaultFormatterId = this._configService.getValue(DefaultFormatter.configName, { resource: document.uri, overrideIdentifier: document.getLanguageId() @@ -126,7 +126,9 @@ class DefaultFormatter extends Disposable implements IWorkbenchContribution { if (extension && this._extensionEnablementService.isEnabled(toExtension(extension))) { // formatter does not target this file const langName = this._languageService.getLanguageName(document.getLanguageId()) || document.getLanguageId(); - const detail = nls.localize('miss', "Extension '{0}' is configured as formatter but it cannot format '{1}'-files", extension.displayName || extension.name, langName); + const detail = kind === FormattingKind.File + ? nls.localize('miss.1', "Extension '{0}' is configured as formatter but it cannot format '{1}'-files", extension.displayName || extension.name, langName) + : nls.localize('miss.2', "Extension '{0}' is configured as formatter but it can only format '{1}'-files as a whole, not selections or parts of it.", extension.displayName || extension.name, langName); return detail; } @@ -143,8 +145,8 @@ class DefaultFormatter extends Disposable implements IWorkbenchContribution { return message; } - private async _selectFormatter(formatter: T[], document: ITextModel, mode: FormattingMode): Promise { - const formatterOrMessage = await this._analyzeFormatter(formatter, document); + private async _selectFormatter(formatter: T[], document: ITextModel, mode: FormattingMode, kind: FormattingKind): Promise { + const formatterOrMessage = await this._analyzeFormatter(kind, formatter, document); if (typeof formatterOrMessage !== 'string') { return formatterOrMessage; } @@ -153,7 +155,7 @@ class DefaultFormatter extends Disposable implements IWorkbenchContribution { // running from a user action -> show modal dialog so that users configure // a default formatter const { confirmed } = await this._dialogService.confirm({ - message: nls.localize('miss.1', "Configure Default Formatter"), + message: nls.localize('miss', "Configure Default Formatter"), detail: formatterOrMessage, primaryButton: nls.localize({ key: 'do.config', comment: ['&& denotes a mnemonic'] }, "&&Configure...") }); @@ -213,7 +215,7 @@ class DefaultFormatter extends Disposable implements IWorkbenchContribution { const cts = new CancellationTokenSource(); this._languageStatusStore.add(toDisposable(() => cts.dispose(true))); - this._analyzeFormatter(formatter, document).then(result => { + this._analyzeFormatter(FormattingKind.File, formatter, document).then(result => { if (cts.token.isCancellationRequested) { return; } From 7bc7686565ccc4e4e871614fc0a61d0379707ba7 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Mon, 4 Dec 2023 10:33:03 -0800 Subject: [PATCH 42/92] aux window: add barrier waiting for styles to load (#199882) * wip * aux window: add barrier waiting for styles to load The debug toolbar needs to compute its size and positioning, which without this fails if executed in onDidChangeActiveContainer. The result of these changes is a new property on the ILayoutService. * address comments * address comments --------- Co-authored-by: Benjamin Pasero --- src/vs/base/common/async.ts | 1 - .../quickInput/standaloneQuickInputService.ts | 1 + .../browser/standaloneLayoutService.ts | 7 +-- .../platform/layout/browser/layoutService.ts | 7 +++ src/vs/workbench/browser/layout.ts | 10 +++- .../browser/auxiliaryWindowService.ts | 48 +++++++++++++++---- .../auxiliaryWindowService.ts | 10 ++-- .../test/browser/workbenchTestServices.ts | 1 + 8 files changed, 66 insertions(+), 19 deletions(-) diff --git a/src/vs/base/common/async.ts b/src/vs/base/common/async.ts index fe7b653a580..abc2aed919a 100644 --- a/src/vs/base/common/async.ts +++ b/src/vs/base/common/async.ts @@ -426,7 +426,6 @@ export class ThrottledDelayer { * A barrier that is initially closed and then becomes opened permanently. */ export class Barrier { - private _isOpen: boolean; private _promise: Promise; private _completePromise!: (v: boolean) => void; diff --git a/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts b/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts index 8fbc1ec6300..9897d433286 100644 --- a/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts +++ b/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts @@ -50,6 +50,7 @@ class EditorScopedQuickInputService extends QuickInputService { get onDidLayoutContainer() { return Event.map(editor.onDidLayoutChange, dimension => ({ container: widget.getDomNode(), dimension })); }, get onDidChangeActiveContainer() { return Event.None; }, get onDidAddContainer() { return Event.None; }, + get whenActiveContainerStylesLoaded() { return Promise.resolve(); }, get mainContainerOffset() { return { top: 0, quickPickTop: 0 }; }, get activeContainerOffset() { return { top: 0, quickPickTop: 0 }; }, focus: () => editor.focus() diff --git a/src/vs/editor/standalone/browser/standaloneLayoutService.ts b/src/vs/editor/standalone/browser/standaloneLayoutService.ts index c928577670f..cc946b22b97 100644 --- a/src/vs/editor/standalone/browser/standaloneLayoutService.ts +++ b/src/vs/editor/standalone/browser/standaloneLayoutService.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import * as dom from 'vs/base/browser/dom'; +import { mainWindow } from 'vs/base/browser/window'; +import { coalesce, firstOrDefault } from 'vs/base/common/arrays'; import { Event } from 'vs/base/common/event'; -import { ILayoutService, ILayoutOffsetInfo } from 'vs/platform/layout/browser/layoutService'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { coalesce, firstOrDefault } from 'vs/base/common/arrays'; -import { mainWindow } from 'vs/base/browser/window'; +import { ILayoutOffsetInfo, ILayoutService } from 'vs/platform/layout/browser/layoutService'; class StandaloneLayoutService implements ILayoutService { declare readonly _serviceBrand: undefined; @@ -19,6 +19,7 @@ class StandaloneLayoutService implements ILayoutService { readonly onDidLayoutContainer = Event.None; readonly onDidChangeActiveContainer = Event.None; readonly onDidAddContainer = Event.None; + readonly whenActiveContainerStylesLoaded = Promise.resolve(); get mainContainer(): HTMLElement { return firstOrDefault(this._codeEditorService.listCodeEditors())?.getContainerDomNode() ?? mainWindow.document.body; diff --git a/src/vs/platform/layout/browser/layoutService.ts b/src/vs/platform/layout/browser/layoutService.ts index 3f9b354ae22..6fad206c73e 100644 --- a/src/vs/platform/layout/browser/layoutService.ts +++ b/src/vs/platform/layout/browser/layoutService.ts @@ -94,6 +94,13 @@ export interface ILayoutService { */ readonly activeContainerOffset: ILayoutOffsetInfo; + /** + * A promise resolved when the stylesheets for the active container have been + * loaded. Aux windows load their styles asynchronously, so there may be + * an initial delay before resolution happens. + */ + readonly whenActiveContainerStylesLoaded: Promise; + /** * Focus the primary component of the active container. */ diff --git a/src/vs/workbench/browser/layout.ts b/src/vs/workbench/browser/layout.ts index 5ba8b083b88..4d6849924e4 100644 --- a/src/vs/workbench/browser/layout.ts +++ b/src/vs/workbench/browser/layout.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; +import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; import { Event, Emitter } from 'vs/base/common/event'; import { EventType, addDisposableListener, getClientArea, position, size, IDimension, isAncestorUsingFlowTo, computeScreenAwareSize, getActiveDocument, getWindows, getActiveWindow, focusWindow, isActiveDocument, getWindow, getWindowId, getActiveElement } from 'vs/base/browser/dom'; import { onDidChangeFullscreen, isFullscreen, isWCOEnabled } from 'vs/base/browser/browser'; @@ -212,6 +212,11 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi return this.computeContainerOffset(getWindow(this.activeContainer)); } + get whenActiveContainerStylesLoaded() { + const active = this.activeContainer; + return this.auxWindowStylesLoaded.get(active) || Promise.resolve(); + } + private computeContainerOffset(targetWindow: Window) { let top = 0; let quickPickTop = 0; @@ -240,6 +245,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi //#endregion private readonly parts = new Map(); + private readonly auxWindowStylesLoaded = new Map>(); private initialized = false; private workbenchGrid!: SerializableGrid; @@ -382,9 +388,11 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi // Auxiliary windows this._register(this.auxiliaryWindowService.onDidOpenAuxiliaryWindow(({ window, disposables }) => { const eventDisposables = disposables.add(new DisposableStore()); + this.auxWindowStylesLoaded.set(window.container, window.whenStylesHaveLoaded); this._onDidAddContainer.fire({ container: window.container, disposables: eventDisposables }); disposables.add(window.onDidLayout(dimension => this.handleContainerDidLayout(window.container, dimension))); + disposables.add(toDisposable(() => this.auxWindowStylesLoaded.delete(window.container))); })); } diff --git a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts index a4639125b9b..fe1e0c19c90 100644 --- a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts +++ b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts @@ -20,6 +20,7 @@ import Severity from 'vs/base/common/severity'; import { BaseWindow } from 'vs/workbench/browser/window'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { Barrier } from 'vs/base/common/async'; export const IAuxiliaryWindowService = createDecorator('auxiliaryWindowService'); @@ -45,6 +46,7 @@ export interface IAuxiliaryWindow extends IDisposable { readonly onDidLayout: Event; readonly onWillClose: Event; + readonly whenStylesHaveLoaded: Promise; readonly window: CodeWindow; readonly container: HTMLElement; @@ -63,13 +65,17 @@ export class AuxiliaryWindow extends BaseWindow implements IAuxiliaryWindow { private readonly _onWillDispose = this._register(new Emitter()); readonly onWillDispose = this._onWillDispose.event; + readonly whenStylesHaveLoaded: Promise; + constructor( readonly window: CodeWindow, readonly container: HTMLElement, + stylesHaveLoaded: Barrier, @IConfigurationService private readonly configurationService: IConfigurationService, ) { super(window); + this.whenStylesHaveLoaded = stylesHaveLoaded.wait().then(() => { }); this.registerListeners(); } @@ -165,9 +171,9 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili ensureCodeWindow(targetWindow, resolvedWindowId); const containerDisposables = new DisposableStore(); - const container = this.createContainer(targetWindow, containerDisposables); + const { container, stylesLoaded } = this.createContainer(targetWindow, containerDisposables); - const auxiliaryWindow = this.createAuxiliaryWindow(targetWindow, container); + const auxiliaryWindow = this.createAuxiliaryWindow(targetWindow, container, stylesLoaded); const registryDisposables = new DisposableStore(); this.windows.set(targetWindow.vscodeWindowId, auxiliaryWindow); @@ -201,8 +207,8 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili return auxiliaryWindow; } - protected createAuxiliaryWindow(targetWindow: CodeWindow, container: HTMLElement): AuxiliaryWindow { - return new AuxiliaryWindow(targetWindow, container, this.configurationService); + protected createAuxiliaryWindow(targetWindow: CodeWindow, container: HTMLElement, stylesLoaded: Barrier): AuxiliaryWindow { + return new AuxiliaryWindow(targetWindow, container, stylesLoaded, this.configurationService); } private async openWindow(options?: IAuxiliaryWindowOpenOptions): Promise { @@ -257,13 +263,13 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili return BrowserAuxiliaryWindowService.WINDOW_IDS++; } - protected createContainer(auxiliaryWindow: CodeWindow, disposables: DisposableStore): HTMLElement { + protected createContainer(auxiliaryWindow: CodeWindow, disposables: DisposableStore): { stylesLoaded: Barrier; container: HTMLElement } { this.patchMethods(auxiliaryWindow); this.applyMeta(auxiliaryWindow); - this.applyCSS(auxiliaryWindow, disposables); - - return this.applyHTML(auxiliaryWindow, disposables); + const { stylesLoaded } = this.applyCSS(auxiliaryWindow, disposables); + const container = this.applyHTML(auxiliaryWindow, disposables); + return { stylesLoaded, container }; } protected patchMethods(auxiliaryWindow: CodeWindow): void { @@ -292,24 +298,44 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili } } - protected applyCSS(auxiliaryWindow: CodeWindow, disposables: DisposableStore): void { + protected applyCSS(auxiliaryWindow: CodeWindow, disposables: DisposableStore) { mark('code/auxiliaryWindow/willApplyCSS'); const mapOriginalToClone = new Map(); - function cloneNode(originalNode: Node): void { + const stylesLoaded = new Barrier(); + stylesLoaded.wait().then(() => mark('code/auxiliaryWindow/didLoadCSSStyles')); + + let pendingLinkSettles = 0; + function onLinkSettled(_event?: globalThis.Event) { + // network errors from loading stylesheets will be written to the console + // already, we probably don't need to log them manually. + if (!--pendingLinkSettles) { + stylesLoaded.open(); + } + } + + function cloneNode(originalNode: Element): void { if (isGlobalStylesheet(originalNode)) { return; // global stylesheets are handled by `cloneGlobalStylesheets` below } const clonedNode = auxiliaryWindow.document.head.appendChild(originalNode.cloneNode(true)); + if (originalNode.tagName === 'LINK') { + pendingLinkSettles++; + disposables.add(addDisposableListener(clonedNode, 'load', onLinkSettled)); + disposables.add(addDisposableListener(clonedNode, 'error', onLinkSettled)); + } + mapOriginalToClone.set(originalNode, clonedNode); } // Clone all style elements and stylesheet links from the window to the child window + pendingLinkSettles++; // outer increment handles cases where there's nothing to load, and ensures it can't settle prematurely for (const originalNode of mainWindow.document.head.querySelectorAll('link[rel="stylesheet"], style')) { cloneNode(originalNode); } + onLinkSettled(); // Global stylesheets in are cloned in a special way because the mutation // observer is not firing for changes done via `style.sheet` API. Only text changes @@ -356,6 +382,8 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili })); mark('code/auxiliaryWindow/didApplyCSS'); + + return { stylesLoaded }; } private applyHTML(auxiliaryWindow: CodeWindow, disposables: DisposableStore): HTMLElement { diff --git a/src/vs/workbench/services/auxiliaryWindow/electron-sandbox/auxiliaryWindowService.ts b/src/vs/workbench/services/auxiliaryWindow/electron-sandbox/auxiliaryWindowService.ts index 96b3075ad95..10251fbb2c9 100644 --- a/src/vs/workbench/services/auxiliaryWindow/electron-sandbox/auxiliaryWindowService.ts +++ b/src/vs/workbench/services/auxiliaryWindow/electron-sandbox/auxiliaryWindowService.ts @@ -18,6 +18,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { NativeWindow } from 'vs/workbench/electron-sandbox/window'; import { ShutdownReason } from 'vs/workbench/services/lifecycle/common/lifecycle'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { Barrier } from 'vs/base/common/async'; type NativeCodeWindow = CodeWindow & { readonly vscode: ISandboxGlobals; @@ -30,11 +31,12 @@ export class NativeAuxiliaryWindow extends AuxiliaryWindow { constructor( window: CodeWindow, container: HTMLElement, + stylesHaveLoaded: Barrier, @IConfigurationService configurationService: IConfigurationService, @INativeHostService private readonly nativeHostService: INativeHostService, @IInstantiationService private readonly instantiationService: IInstantiationService ) { - super(window, container, configurationService); + super(window, container, stylesHaveLoaded, configurationService); } protected override async confirmBeforeClose(e: BeforeUnloadEvent): Promise { @@ -73,7 +75,7 @@ export class NativeAuxiliaryWindowService extends BrowserAuxiliaryWindowService return windowId; } - protected override createContainer(auxiliaryWindow: NativeCodeWindow, disposables: DisposableStore): HTMLElement { + protected override createContainer(auxiliaryWindow: NativeCodeWindow, disposables: DisposableStore) { // Zoom level const windowConfig = this.configurationService.getValue(); @@ -100,8 +102,8 @@ export class NativeAuxiliaryWindowService extends BrowserAuxiliaryWindowService }; } - protected override createAuxiliaryWindow(targetWindow: CodeWindow, container: HTMLElement): AuxiliaryWindow { - return new NativeAuxiliaryWindow(targetWindow, container, this.configurationService, this.nativeHostService, this.instantiationService); + protected override createAuxiliaryWindow(targetWindow: CodeWindow, container: HTMLElement, stylesHaveLoaded: Barrier,): AuxiliaryWindow { + return new NativeAuxiliaryWindow(targetWindow, container, stylesHaveLoaded, this.configurationService, this.nativeHostService, this.instantiationService); } } diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index c3d93488f4d..ca32d3629f8 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -593,6 +593,7 @@ export class TestLayoutService implements IWorkbenchLayoutService { activeContainerDimension: IDimension = { width: 800, height: 600 }; mainContainerOffset: ILayoutOffsetInfo = { top: 0, quickPickTop: 0 }; activeContainerOffset: ILayoutOffsetInfo = { top: 0, quickPickTop: 0 }; + whenActiveContainerStylesLoaded = Promise.resolve(); mainContainer: HTMLElement = mainWindow.document.body; containers = [mainWindow.document.body]; From 397bf0fd1c44efac737e880fab13ffe425bb4fe1 Mon Sep 17 00:00:00 2001 From: Aaron Munger Date: Mon, 4 Dec 2023 11:07:16 -0800 Subject: [PATCH 43/92] remove theme participant (#199975) --- .../browser/interactive.contribution.ts | 42 +++++++------------ 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/src/vs/workbench/contrib/interactive/browser/interactive.contribution.ts b/src/vs/workbench/contrib/interactive/browser/interactive.contribution.ts index 92add5ea20e..24ca46450ed 100644 --- a/src/vs/workbench/contrib/interactive/browser/interactive.contribution.ts +++ b/src/vs/workbench/contrib/interactive/browser/interactive.contribution.ts @@ -34,8 +34,7 @@ import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiati import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { ILogService } from 'vs/platform/log/common/log'; import { Registry } from 'vs/platform/registry/common/platform'; -import { contrastBorder, listInactiveSelectionBackground, registerColor, transparent } from 'vs/platform/theme/common/colorRegistry'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; +import { contrastBorder, ifDefinedThenElse, listInactiveSelectionBackground, registerColor } from 'vs/platform/theme/common/colorRegistry'; import { EditorPaneDescriptor, IEditorPaneRegistry } from 'vs/workbench/browser/editor'; import { Extensions as WorkbenchExtensions, IWorkbenchContribution, IWorkbenchContributionsRegistry } from 'vs/workbench/common/contributions'; import { EditorExtensions, EditorsOrder, IEditorFactoryRegistry, IEditorSerializer, IUntypedEditorInput } from 'vs/workbench/common/editor'; @@ -759,33 +758,20 @@ registerAction2(class extends Action2 { } }); -registerThemingParticipant((theme) => { - registerColor('interactive.activeCodeBorder', { - dark: theme.getColor(peekViewBorder) ?? '#007acc', - light: theme.getColor(peekViewBorder) ?? '#007acc', - hcDark: contrastBorder, - hcLight: contrastBorder - }, localize('interactive.activeCodeBorder', 'The border color for the current interactive code cell when the editor has focus.')); +registerColor('interactive.activeCodeBorder', { + dark: ifDefinedThenElse(peekViewBorder, peekViewBorder, '#007acc'), + light: ifDefinedThenElse(peekViewBorder, peekViewBorder, '#007acc'), + hcDark: contrastBorder, + hcLight: contrastBorder +}, localize('interactive.activeCodeBorder', 'The border color for the current interactive code cell when the editor has focus.')); - // registerColor('interactive.activeCodeBackground', { - // dark: (theme.getColor(peekViewEditorBackground) ?? Color.fromHex('#001F33')).transparent(0.25), - // light: (theme.getColor(peekViewEditorBackground) ?? Color.fromHex('#F2F8FC')).transparent(0.25), - // hc: Color.black - // }, localize('interactive.activeCodeBackground', 'The background color for the current interactive code cell when the editor has focus.')); - - registerColor('interactive.inactiveCodeBorder', { - dark: theme.getColor(listInactiveSelectionBackground) ?? transparent(listInactiveSelectionBackground, 1), - light: theme.getColor(listInactiveSelectionBackground) ?? transparent(listInactiveSelectionBackground, 1), - hcDark: PANEL_BORDER, - hcLight: PANEL_BORDER - }, localize('interactive.inactiveCodeBorder', 'The border color for the current interactive code cell when the editor does not have focus.')); - - // registerColor('interactive.inactiveCodeBackground', { - // dark: (theme.getColor(peekViewResultsBackground) ?? Color.fromHex('#252526')).transparent(0.25), - // light: (theme.getColor(peekViewResultsBackground) ?? Color.fromHex('#F3F3F3')).transparent(0.25), - // hc: Color.black - // }, localize('interactive.inactiveCodeBackground', 'The backgorund color for the current interactive code cell when the editor does not have focus.')); -}); +registerColor('interactive.inactiveCodeBorder', { + //dark: theme.getColor(listInactiveSelectionBackground) ?? transparent(listInactiveSelectionBackground, 1), + dark: ifDefinedThenElse(listInactiveSelectionBackground, listInactiveSelectionBackground, '#37373D'), + light: ifDefinedThenElse(listInactiveSelectionBackground, listInactiveSelectionBackground, '#E4E6F1'), + hcDark: PANEL_BORDER, + hcLight: PANEL_BORDER +}, localize('interactive.inactiveCodeBorder', 'The border color for the current interactive code cell when the editor does not have focus.')); Registry.as(ConfigurationExtensions.Configuration).registerConfiguration({ id: 'interactiveWindow', From 3c6b75d54b1c4423f51879f1e1522d852e0a1987 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 4 Dec 2023 13:45:14 -0600 Subject: [PATCH 44/92] fix #199959 --- src/vs/editor/contrib/hover/browser/contentHover.ts | 4 ++-- src/vs/workbench/services/hover/browser/hoverWidget.ts | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/vs/editor/contrib/hover/browser/contentHover.ts b/src/vs/editor/contrib/hover/browser/contentHover.ts index 4f9c0ce1997..a33aba3a394 100644 --- a/src/vs/editor/contrib/hover/browser/contentHover.ts +++ b/src/vs/editor/contrib/hover/browser/contentHover.ts @@ -782,9 +782,9 @@ export class ContentHoverWidget extends ResizableContentWidget { this._hover.containerDomNode.focus(); } hoverData.colorPicker?.layout(); - // The aria label overrides the label, so if we add to it, add the contents of the hover - const accessibleViewHint = getHoverAccessibleViewHint(this._configurationService.getValue('accessibility.verbosity.hover') === true && this._accessibilityService.isScreenReaderOptimized(), this._keybindingService.lookupKeybinding('editor.action.accessibleView')?.getAriaLabel() ?? ''); + const hoverFocused = this._hover.containerDomNode.ownerDocument.activeElement === this._hover.containerDomNode; + const accessibleViewHint = hoverFocused && getHoverAccessibleViewHint(this._configurationService.getValue('accessibility.verbosity.hover') === true && this._accessibilityService.isScreenReaderOptimized(), this._keybindingService.lookupKeybinding('editor.action.accessibleView')?.getAriaLabel() ?? ''); if (accessibleViewHint) { this._hover.contentsDomNode.ariaLabel = this._hover.contentsDomNode.textContent + ', ' + accessibleViewHint; } diff --git a/src/vs/workbench/services/hover/browser/hoverWidget.ts b/src/vs/workbench/services/hover/browser/hoverWidget.ts index a3d6e9d8a02..a29612cb2d7 100644 --- a/src/vs/workbench/services/hover/browser/hoverWidget.ts +++ b/src/vs/workbench/services/hover/browser/hoverWidget.ts @@ -302,7 +302,8 @@ export class HoverWidget extends Widget { public render(container: HTMLElement): void { container.appendChild(this._hoverContainer); - const accessibleViewHint = getHoverAccessibleViewHint(this._configurationService.getValue('accessibility.verbosity.hover') === true && this._accessibilityService.isScreenReaderOptimized(), this._keybindingService.lookupKeybinding('editor.action.accessibleView')?.getAriaLabel()); + const hoverFocused = this._hoverContainer.contains(this._hoverContainer.ownerDocument.activeElement); + const accessibleViewHint = hoverFocused && getHoverAccessibleViewHint(this._configurationService.getValue('accessibility.verbosity.hover') === true && this._accessibilityService.isScreenReaderOptimized(), this._keybindingService.lookupKeybinding('editor.action.accessibleView')?.getAriaLabel()); if (accessibleViewHint) { status(accessibleViewHint); From 81ea8669f26c75b85775c55c29df94dd5755907a Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Mon, 4 Dec 2023 12:14:25 -0800 Subject: [PATCH 45/92] eng: support runGlob in browser unit tests (#199979) Fixes #183507 --- test/unit/browser/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/unit/browser/index.js b/test/unit/browser/index.js index 304579792ee..322e5b7d510 100644 --- a/test/unit/browser/index.js +++ b/test/unit/browser/index.js @@ -26,6 +26,7 @@ const minimist = require('minimist'); * @type {{ * run: string; * grep: string; + * runGlob: string; * browser: string; * reporter: string; * 'reporter-options': string; @@ -38,7 +39,7 @@ const minimist = require('minimist'); */ const args = minimist(process.argv.slice(2), { boolean: ['build', 'debug', 'sequential', 'help'], - string: ['run', 'grep', 'browser', 'reporter', 'reporter-options', 'tfs'], + string: ['run', 'grep', 'runGlob', 'browser', 'reporter', 'reporter-options', 'tfs'], default: { build: false, browser: ['chromium', 'firefox', 'webkit'], @@ -47,6 +48,7 @@ const args = minimist(process.argv.slice(2), { }, alias: { grep: ['g', 'f'], + runGlob: ['glob', 'runGrep'], debug: ['debug-browser'], help: 'h' }, @@ -125,7 +127,7 @@ const testModules = (async function () { } else { // glob patterns (--glob) const defaultGlob = '**/*.test.js'; - const pattern = args.run || defaultGlob; + const pattern = args.runGlob || defaultGlob; isDefaultModules = pattern === defaultGlob; promise = new Promise((resolve, reject) => { From bce2ab95d85ccd6c294e52856f340aa2021b49fe Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 4 Dec 2023 14:34:15 -0600 Subject: [PATCH 46/92] add to grooming labels --- .vscode/notebooks/grooming.github-issues | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vscode/notebooks/grooming.github-issues b/.vscode/notebooks/grooming.github-issues index 59f2ec3f9b2..2def64b73e9 100644 --- a/.vscode/notebooks/grooming.github-issues +++ b/.vscode/notebooks/grooming.github-issues @@ -27,7 +27,7 @@ { "kind": 2, "language": "github-issues", - "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keybindings-json -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat\n" + "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keybindings-json -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat -label:panel-chat -label:audio-cue\n" }, { "kind": 1, From 08f6a254784304be2886c885ad5b76bc90f40480 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 4 Dec 2023 14:36:39 -0600 Subject: [PATCH 47/92] add tasks --- .vscode/notebooks/grooming.github-issues | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vscode/notebooks/grooming.github-issues b/.vscode/notebooks/grooming.github-issues index 2def64b73e9..d52d794421f 100644 --- a/.vscode/notebooks/grooming.github-issues +++ b/.vscode/notebooks/grooming.github-issues @@ -27,7 +27,7 @@ { "kind": 2, "language": "github-issues", - "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keybindings-json -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat -label:panel-chat -label:audio-cue\n" + "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keybindings-json -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat -label:panel-chat -label:audio-cue -label:tasks\n" }, { "kind": 1, From 7e764e8640194168e815d627a68a7a154383e2dc Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 4 Dec 2023 14:40:32 -0600 Subject: [PATCH 48/92] add error-list --- .vscode/notebooks/grooming.github-issues | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vscode/notebooks/grooming.github-issues b/.vscode/notebooks/grooming.github-issues index d52d794421f..d3657cc191a 100644 --- a/.vscode/notebooks/grooming.github-issues +++ b/.vscode/notebooks/grooming.github-issues @@ -27,7 +27,7 @@ { "kind": 2, "language": "github-issues", - "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keybindings-json -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat -label:panel-chat -label:audio-cue -label:tasks\n" + "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keybindings-json -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat -label:panel-chat -label:audio-cue -label:tasks -label:error-list\n" }, { "kind": 1, From e5e9a6556e8dd4f5c60074b0a9466be4b490ac29 Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Mon, 4 Dec 2023 14:23:08 -0700 Subject: [PATCH 49/92] Remove extra console.log (#199985) --- src/vs/workbench/api/test/browser/extHostTelemetry.test.ts | 2 -- test/unit/electron/renderer.js | 1 - 2 files changed, 3 deletions(-) diff --git a/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts b/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts index 40e8224f45f..2738586b97d 100644 --- a/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts +++ b/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts @@ -250,8 +250,6 @@ suite('ExtHostTelemetry', function () { logger.logUsage('test-event', { 'test-data': 'test-data' }); // Initial header is logged then the event - const logs = loggerService.createLogger().logs; - console.log(logs[0]); assert.strictEqual(loggerService.createLogger().logs.length, 3); assert.ok(loggerService.createLogger().logs[2].startsWith('test-extension/test-event')); }); diff --git a/test/unit/electron/renderer.js b/test/unit/electron/renderer.js index e271c1e78ae..e1e826be4b6 100644 --- a/test/unit/electron/renderer.js +++ b/test/unit/electron/renderer.js @@ -195,7 +195,6 @@ function loadTests(opts) { 'issue #149130: vscode freezes because of Bracket Pair Colorization', // https://github.com/microsoft/vscode/issues/192440 'property limits', // https://github.com/microsoft/vscode/issues/192443 'Error events', // https://github.com/microsoft/vscode/issues/192443 - 'Ensure output channel is logged to', // https://github.com/microsoft/vscode/issues/192443 'guards calls after runs are ended' // https://github.com/microsoft/vscode/issues/192468 ]); From 3a2995df60ac3faf994e62ab909145a3c2b29da4 Mon Sep 17 00:00:00 2001 From: Don Jayamanne Date: Tue, 5 Dec 2023 11:37:26 +1100 Subject: [PATCH 50/92] Ignore endgame plan from missing type lables (#199994) --- .vscode/notebooks/grooming.github-issues | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vscode/notebooks/grooming.github-issues b/.vscode/notebooks/grooming.github-issues index d3657cc191a..54ed3b6b05c 100644 --- a/.vscode/notebooks/grooming.github-issues +++ b/.vscode/notebooks/grooming.github-issues @@ -17,7 +17,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open type:issue -label:bug -label:\"info-needed\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry -label:engineering\n" + "value": "$repos assignee:@me is:open type:issue -label:bug -label:\"info-needed\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry -label:engineering -label:endgame-plan\n" }, { "kind": 1, From c0c1dce86b7188fd63edaf86d69c154fc281f83c Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Mon, 4 Dec 2023 16:37:54 -0800 Subject: [PATCH 51/92] debug: support debug toolbar in aux window (#199997) Finishes some work from Friday. Fixes #198913 --- .../contrib/debug/browser/debugToolBar.ts | 74 +++++++++++++------ 1 file changed, 53 insertions(+), 21 deletions(-) diff --git a/src/vs/workbench/contrib/debug/browser/debugToolBar.ts b/src/vs/workbench/contrib/debug/browser/debugToolBar.ts index 01e9ae71db7..b9327dbdced 100644 --- a/src/vs/workbench/contrib/debug/browser/debugToolBar.ts +++ b/src/vs/workbench/contrib/debug/browser/debugToolBar.ts @@ -11,7 +11,7 @@ import { Action, IAction, IRunEvent, WorkbenchActionExecutedClassification, Work import * as arrays from 'vs/base/common/arrays'; import { RunOnceScheduler } from 'vs/base/common/async'; import * as errors from 'vs/base/common/errors'; -import { DisposableStore, dispose, IDisposable } from 'vs/base/common/lifecycle'; +import { DisposableStore, dispose, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; import { URI } from 'vs/base/common/uri'; import 'vs/css!./media/debugToolBar'; import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; @@ -38,7 +38,8 @@ import * as icons from 'vs/workbench/contrib/debug/browser/debugIcons'; import { CONTEXT_DEBUG_STATE, CONTEXT_FOCUSED_SESSION_IS_ATTACH, CONTEXT_FOCUSED_SESSION_IS_NO_DEBUG, CONTEXT_IN_DEBUG_MODE, CONTEXT_MULTI_SESSION_DEBUG, CONTEXT_STEP_BACK_SUPPORTED, CONTEXT_SUSPEND_DEBUGGEE_SUPPORTED, CONTEXT_TERMINATE_DEBUGGEE_SUPPORTED, IDebugConfiguration, IDebugService, State, VIEWLET_ID } from 'vs/workbench/contrib/debug/common/debug'; import { EditorTabsMode, IWorkbenchLayoutService, LayoutSettings, Parts } from 'vs/workbench/services/layout/browser/layoutService'; import { Codicon } from 'vs/base/common/codicons'; -import { mainWindow } from 'vs/base/browser/window'; +import { CodeWindow, mainWindow } from 'vs/base/browser/window'; +import { clamp } from 'vs/base/common/numbers'; const DEBUG_TOOLBAR_POSITION_KEY = 'debug.actionswidgetposition'; const DEBUG_TOOLBAR_Y_KEY = 'debug.actionswidgety'; @@ -57,6 +58,8 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { private isBuilt = false; private readonly stopActionViewItemDisposables = this._register(new DisposableStore()); + /** coordinate of the debug toolbar per aux window */ + private readonly auxWindowCoordinates = new WeakMap(); constructor( @INotificationService private readonly notificationService: INotificationService, @@ -148,30 +151,31 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { // log in telemetry this.telemetryService.publicLog2('workbenchActionExecuted', { id: e.action.id, from: 'debugActionsWidget' }); })); - this._register(dom.addDisposableListener(mainWindow, dom.EventType.RESIZE, () => this.setCoordinates())); this._register(dom.addDisposableGenericMouseUpListener(this.dragArea, (event: MouseEvent) => { const mouseClickEvent = new StandardMouseEvent(dom.getWindow(this.dragArea), event); + const activeWindow = dom.getWindow(this.layoutService.activeContainer); if (mouseClickEvent.detail === 2) { // double click on debug bar centers it again #8250 const widgetWidth = this.$el.clientWidth; - this.setCoordinates(0.5 * mainWindow.innerWidth - 0.5 * widgetWidth, 0); + this.setCoordinates(0.5 * activeWindow.innerWidth - 0.5 * widgetWidth, 0); this.storePosition(); } })); this._register(dom.addDisposableGenericMouseDownListener(this.dragArea, (event: MouseEvent) => { this.dragArea.classList.add('dragged'); + const activeWindow = dom.getWindow(this.layoutService.activeContainer); - const mouseMoveListener = dom.addDisposableGenericMouseMoveListener(mainWindow, (e: MouseEvent) => { - const mouseMoveEvent = new StandardMouseEvent(mainWindow, e); + const mouseMoveListener = dom.addDisposableGenericMouseMoveListener(activeWindow, (e: MouseEvent) => { + const mouseMoveEvent = new StandardMouseEvent(activeWindow, e); // Prevent default to stop editor selecting text #8524 mouseMoveEvent.preventDefault(); // Reduce x by width of drag handle to reduce jarring #16604 this.setCoordinates(mouseMoveEvent.posx - 14, mouseMoveEvent.posy - 14); }); - const mouseUpListener = dom.addDisposableGenericMouseUpListener(mainWindow, (e: MouseEvent) => { + const mouseUpListener = dom.addDisposableGenericMouseUpListener(activeWindow, (e: MouseEvent) => { this.storePosition(); this.dragArea.classList.remove('dragged'); @@ -182,18 +186,36 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { this._register(this.layoutService.onDidChangePartVisibility(() => this.setYCoordinate())); this._register(browser.PixelRatio.onDidChange(() => this.setYCoordinate())); + + const resizeListener = this._register(new MutableDisposable()); + + this._register(this.layoutService.onDidChangeActiveContainer(() => { + this._yRange = undefined; + + // note: we intentionally don't read the activeContainer before the + // `then` clause to avoid any races due to quickly switching windows. + this.layoutService.whenActiveContainerStylesLoaded.then(() => { + if (this.isBuilt) { + this.layoutService.activeContainer.appendChild(this.$el); + this.setCoordinates(); + } + + resizeListener.value = this._register(dom.addDisposableListener( + dom.getWindow(this.layoutService.activeContainer), dom.EventType.RESIZE, () => this.setYCoordinate())); + }); + })); } private storePosition(): void { - const left = dom.getComputedStyle(this.$el).left; - if (left) { - const position = parseFloat(left) / mainWindow.innerWidth; - this.storageService.store(DEBUG_TOOLBAR_POSITION_KEY, position, StorageScope.PROFILE, StorageTarget.MACHINE); - } - if (this.yCoordinate) { + const activeWindow = dom.getWindow(this.layoutService.activeContainer); + const isMainWindow = this.layoutService.activeContainer === this.layoutService.mainContainer; + + const left = this.$el.getBoundingClientRect().left / activeWindow.innerWidth; + if (isMainWindow) { + this.storageService.store(DEBUG_TOOLBAR_POSITION_KEY, left, StorageScope.PROFILE, StorageTarget.MACHINE); this.storageService.store(DEBUG_TOOLBAR_Y_KEY, this.yCoordinate, StorageScope.PROFILE, StorageTarget.MACHINE); } else { - this.storageService.remove(DEBUG_TOOLBAR_Y_KEY, StorageScope.PROFILE); + this.auxWindowCoordinates.set(activeWindow, { x: left, y: this.yCoordinate }); } } @@ -222,20 +244,30 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { if (!this.isVisible) { return; } + const widgetWidth = this.$el.clientWidth; + const currentWindow = dom.getWindow(this.layoutService.activeContainer); + const isMainWindow = currentWindow === mainWindow; + if (x === undefined) { - const positionPercentage = this.storageService.get(DEBUG_TOOLBAR_POSITION_KEY, StorageScope.PROFILE); - x = positionPercentage !== undefined ? parseFloat(positionPercentage) * mainWindow.innerWidth : (0.5 * mainWindow.innerWidth - 0.5 * widgetWidth); + const positionPercentage = isMainWindow + ? Number(this.storageService.get(DEBUG_TOOLBAR_POSITION_KEY, StorageScope.PROFILE)) + : this.auxWindowCoordinates.get(currentWindow)?.x; + x = positionPercentage !== undefined + ? positionPercentage * currentWindow.innerWidth + : (0.5 * currentWindow.innerWidth - 0.5 * widgetWidth); } - x = Math.max(0, Math.min(x, mainWindow.innerWidth - widgetWidth)); // do not allow the widget to overflow on the right + x = clamp(x, 0, currentWindow.innerWidth - widgetWidth); // do not allow the widget to overflow on the right this.$el.style.left = `${x}px`; if (y === undefined) { - y = this.storageService.getNumber(DEBUG_TOOLBAR_Y_KEY, StorageScope.PROFILE, 0); + y = isMainWindow + ? this.storageService.getNumber(DEBUG_TOOLBAR_Y_KEY, StorageScope.PROFILE) + : this.auxWindowCoordinates.get(currentWindow)?.y; } - this.setYCoordinate(y); + this.setYCoordinate(y || 0); } private setYCoordinate(y = this.yCoordinate): void { @@ -248,7 +280,7 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { private _yRange: [number, number] | undefined; private get yRange(): [number, number] { if (!this._yRange) { - const isTitleBarVisible = this.layoutService.isVisible(Parts.TITLEBAR_PART, mainWindow); + const isTitleBarVisible = this.layoutService.isVisible(Parts.TITLEBAR_PART, dom.getWindow(this.layoutService.activeContainer)); const yMin = isTitleBarVisible ? 0 : this.layoutService.mainContainerOffset.top; let yMax = 0; @@ -275,7 +307,7 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { } if (!this.isBuilt) { this.isBuilt = true; - this.layoutService.mainContainer.appendChild(this.$el); + this.layoutService.activeContainer.appendChild(this.$el); } this.isVisible = true; From 2b1cff02efe6e826f8af31b06faa1d28dbf8cf34 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Tue, 5 Dec 2023 08:42:01 +0100 Subject: [PATCH 52/92] aux window - copy over more meta and icon tags (#200006) --- src/vs/base/browser/dom.ts | 14 +++++++-- .../browser/auxiliaryWindowService.ts | 29 ++++++++++++------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index b611afafbb6..c29ece9d7b5 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -1031,9 +1031,17 @@ export const sharedMutationObserver = new class { }; export function createMetaElement(container: HTMLElement = mainWindow.document.head): HTMLMetaElement { - const meta = document.createElement('meta'); - container.appendChild(meta); - return meta; + return createHeadElement('meta', container) as HTMLMetaElement; +} + +export function createLinkElement(container: HTMLElement = mainWindow.document.head): HTMLLinkElement { + return createHeadElement('link', container) as HTMLLinkElement; +} + +function createHeadElement(tagName: string, container: HTMLElement = mainWindow.document.head): HTMLElement { + const element = document.createElement(tagName); + container.appendChild(element); + return element; } let _sharedStyleSheet: HTMLStyleElement | null = null; diff --git a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts index fe1e0c19c90..3bb124ffa6f 100644 --- a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts +++ b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts @@ -6,7 +6,7 @@ import { localize } from 'vs/nls'; import { mark } from 'vs/base/common/performance'; import { Emitter, Event } from 'vs/base/common/event'; -import { Dimension, EventHelper, EventType, ModifierKeyEmitter, addDisposableListener, cloneGlobalStylesheets, copyAttributes, createMetaElement, getActiveWindow, getClientArea, getWindowId, isGlobalStylesheet, position, registerWindow, sharedMutationObserver, size, trackAttributes } from 'vs/base/browser/dom'; +import { Dimension, EventHelper, EventType, ModifierKeyEmitter, addDisposableListener, cloneGlobalStylesheets, copyAttributes, createLinkElement, createMetaElement, getActiveWindow, getClientArea, getWindowId, isGlobalStylesheet, position, registerWindow, sharedMutationObserver, size, trackAttributes } from 'vs/base/browser/dom'; import { CodeWindow, ensureCodeWindow, mainWindow } from 'vs/base/browser/window'; import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; @@ -283,19 +283,26 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili } private applyMeta(auxiliaryWindow: CodeWindow): void { - const metaCharset = createMetaElement(auxiliaryWindow.document.head); - metaCharset.setAttribute('charset', 'utf-8'); + for (const metaTag of ['meta[charset="utf-8"]', 'meta[http-equiv="Content-Security-Policy"]', 'meta[name="viewport"]', 'meta[name="theme-color"]']) { + const metaElement = mainWindow.document.querySelector(metaTag); + if (metaElement) { + const clonedMetaElement = createMetaElement(auxiliaryWindow.document.head); + copyAttributes(metaElement, clonedMetaElement); - const originalCSPMetaTag = mainWindow.document.querySelector('meta[http-equiv="Content-Security-Policy"]'); - if (originalCSPMetaTag) { - const csp = createMetaElement(auxiliaryWindow.document.head); - copyAttributes(originalCSPMetaTag, csp); - - const content = csp.getAttribute('content'); - if (content) { - csp.setAttribute('content', content.replace(/(script-src[^\;]*)/, `script-src 'none'`)); + if (metaTag === 'meta[http-equiv="Content-Security-Policy"]') { + const content = clonedMetaElement.getAttribute('content'); + if (content) { + clonedMetaElement.setAttribute('content', content.replace(/(script-src[^\;]*)/, `script-src 'none'`)); + } + } } } + + const originalIconLinkTag = mainWindow.document.querySelector('link[rel="icon"]'); + if (originalIconLinkTag) { + const icon = createLinkElement(auxiliaryWindow.document.head); + copyAttributes(originalIconLinkTag, icon); + } } protected applyCSS(auxiliaryWindow: CodeWindow, disposables: DisposableStore) { From 1ac14a7f706a2d393a25f3bfe3f144c5a0d72efd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=93=E8=89=AF?= <1204183885@qq.com> Date: Tue, 5 Dec 2023 15:43:00 +0800 Subject: [PATCH 53/92] fix: console format of fetchUrl (#198909) * fix: console format of fetchUrl * compile --------- Co-authored-by: Benjamin Pasero --- build/lib/fetch.js | 2 +- build/lib/fetch.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/lib/fetch.js b/build/lib/fetch.js index 71dbfd0ce42..01bee2f081a 100644 --- a/build/lib/fetch.js +++ b/build/lib/fetch.js @@ -36,7 +36,7 @@ async function fetchUrl(url, options, retries = 10, retryDelay = 1000) { try { let startTime = 0; if (verbose) { - log(`Start fetching ${ansiColors.magenta(url)}${retries !== 10 ? `(${10 - retries} retry}` : ''}`); + log(`Start fetching ${ansiColors.magenta(url)}${retries !== 10 ? ` (${10 - retries} retry)` : ''}`); startTime = new Date().getTime(); } const controller = new AbortController(); diff --git a/build/lib/fetch.ts b/build/lib/fetch.ts index 58803c34836..c076408fab5 100644 --- a/build/lib/fetch.ts +++ b/build/lib/fetch.ts @@ -46,7 +46,7 @@ export async function fetchUrl(url: string, options: IFetchOptions, retries = 10 try { let startTime = 0; if (verbose) { - log(`Start fetching ${ansiColors.magenta(url)}${retries !== 10 ? `(${10 - retries} retry}` : ''}`); + log(`Start fetching ${ansiColors.magenta(url)}${retries !== 10 ? ` (${10 - retries} retry)` : ''}`); startTime = new Date().getTime(); } const controller = new AbortController(); From 38518f236e71a3159ee4aad64147967f0b19159e Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Tue, 5 Dec 2023 09:18:57 +0100 Subject: [PATCH 54/92] debt - typecheck our top level JS files (#166844) (#200007) * debt - typecheck our top level JS files (#166844) * fix build --- src/bootstrap-fork.js | 7 ++++++- src/bootstrap-window.js | 9 +++++++++ src/main.js | 2 ++ src/tsconfig.json | 6 ++++++ src/tsec.exemptions.json | 1 + src/vs/base/common/product.ts | 3 +++ src/vs/platform/environment/common/argv.ts | 1 + src/vs/platform/environment/node/argv.ts | 1 + src/vs/platform/environment/test/node/argv.test.ts | 8 ++++---- 9 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/bootstrap-fork.js b/src/bootstrap-fork.js index 036522f23ce..9de1e6f0d15 100644 --- a/src/bootstrap-fork.js +++ b/src/bootstrap-fork.js @@ -56,6 +56,9 @@ function pipeLoggingToParent() { * @param {ArrayLike} args */ function safeToArray(args) { + /** + * @type {string[]} + */ const seen = []; const argsArray = []; @@ -178,7 +181,7 @@ function pipeLoggingToParent() { Object.defineProperty(stream, 'write', { set: () => { }, - get: () => (chunk, encoding, callback) => { + get: () => (/** @type {string | Buffer | Uint8Array} */ chunk, /** @type {BufferEncoding | undefined} */ encoding, /** @type {((err?: Error | undefined) => void) | undefined} */ callback) => { buf += chunk.toString(encoding); const eol = buf.length > MAX_STREAM_BUFFER_LENGTH ? buf.length : buf.lastIndexOf('\n'); if (eol !== -1) { @@ -239,7 +242,9 @@ function configureCrashReporter() { const crashReporterProcessType = process.env['VSCODE_CRASH_REPORTER_PROCESS_TYPE']; if (crashReporterProcessType) { try { + // @ts-ignore if (process['crashReporter'] && typeof process['crashReporter'].addExtraParameter === 'function' /* Electron only */) { + // @ts-ignore process['crashReporter'].addExtraParameter('processType', crashReporterProcessType); } } catch (error) { diff --git a/src/bootstrap-window.js b/src/bootstrap-window.js index 6334d62afc5..85409cc5a21 100644 --- a/src/bootstrap-window.js +++ b/src/bootstrap-window.js @@ -20,6 +20,7 @@ // Browser else { + // @ts-ignore globalThis.MonacoBootstrapWindow = factory(); } }(this, function () { @@ -71,12 +72,16 @@ }; const isDev = !!safeProcess.env['VSCODE_DEV']; const enableDeveloperKeybindings = isDev || forceEnableDeveloperKeybindings; + /** + * @type {() => void | undefined} + */ let developerDeveloperKeybindingsDisposable; if (enableDeveloperKeybindings) { developerDeveloperKeybindingsDisposable = registerDeveloperKeybindings(disallowReloadKeybinding); } // Get the nls configuration into the process.env as early as possible + // @ts-ignore const nlsConfig = globalThis.MonacoBootstrap.setupNLS(); let locale = nlsConfig.availableLanguages['*'] || 'en'; @@ -90,6 +95,10 @@ window['MonacoEnvironment'] = {}; + /** + * @typedef {any} LoaderConfig + */ + /** @type {LoaderConfig} */ const loaderConfig = { baseUrl: `${bootstrapLib.fileUriFromPath(configuration.appRoot, { isWindows: safeProcess.platform === 'win32', scheme: 'vscode-file', fallbackAuthority: 'vscode-app' })}/out`, 'vs/nls': nlsConfig, diff --git a/src/main.js b/src/main.js index 7087474bcee..a632301fe9d 100644 --- a/src/main.js +++ b/src/main.js @@ -513,6 +513,7 @@ function registerListeners() { * @type {string[]} */ const macOpenFiles = []; + // @ts-ignore global['macOpenFiles'] = macOpenFiles; app.on('open-file', function (event, path) { macOpenFiles.push(path); @@ -539,6 +540,7 @@ function registerListeners() { app.on('open-url', onOpenUrl); }); + // @ts-ignore global['getOpenUrls'] = function () { app.removeListener('open-url', onOpenUrl); diff --git a/src/tsconfig.json b/src/tsconfig.json index 56ca209276b..1e0c8b14a1a 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -25,7 +25,13 @@ "include": [ "./bootstrap.js", "./bootstrap-amd.js", + "./bootstrap-fork.js", + "./bootstrap-node.js", + "./bootstrap-window.js", + "./cli.js", + "./main.js", "./server-main.js", + "./server-cli.js", "./typings", "./vs/**/*.ts", "vscode-dts/vscode.proposed.*.d.ts", diff --git a/src/tsec.exemptions.json b/src/tsec.exemptions.json index eb8405c96cb..5fef171569e 100644 --- a/src/tsec.exemptions.json +++ b/src/tsec.exemptions.json @@ -14,6 +14,7 @@ "vs/workbench/services/keybinding/test/node/keyboardMapperTestUtils.ts" ], "ban-trustedtypes-createpolicy": [ + "bootstrap-window.js", "vs/amdX.ts", "vs/base/browser/trustedTypes.ts", "vs/base/worker/workerMain.ts", diff --git a/src/vs/base/common/product.ts b/src/vs/base/common/product.ts index 61a1623d76d..3cdab02a17b 100644 --- a/src/vs/base/common/product.ts +++ b/src/vs/base/common/product.ts @@ -226,8 +226,11 @@ export type IFileContentCondition = (IFileLanguageCondition | IFilePathCondition export interface IAppCenterConfiguration { readonly 'win32-x64': string; + readonly 'win32-arm64': string; readonly 'linux-x64': string; readonly 'darwin': string; + readonly 'darwin-universal': string; + readonly 'darwin-arm64': string; } export interface IConfigBasedExtensionTip { diff --git a/src/vs/platform/environment/common/argv.ts b/src/vs/platform/environment/common/argv.ts index f205cc30439..54bd029eddc 100644 --- a/src/vs/platform/environment/common/argv.ts +++ b/src/vs/platform/environment/common/argv.ts @@ -115,6 +115,7 @@ export interface NativeParsedArgs { 'profile'?: string; 'profile-temp'?: boolean; 'disable-chromium-sandbox'?: boolean; + sandbox?: boolean; 'enable-coi'?: boolean; diff --git a/src/vs/platform/environment/node/argv.ts b/src/vs/platform/environment/node/argv.ts index 79046c7fa20..1457aa1ed29 100644 --- a/src/vs/platform/environment/node/argv.ts +++ b/src/vs/platform/environment/node/argv.ts @@ -121,6 +121,7 @@ export const OPTIONS: OptionDescriptions> = { 'inspect-brk-extensions': { type: 'string', allowEmptyValue: true, deprecates: ['debugBrkPluginHost'], args: 'port', cat: 't', description: localize('inspect-brk-extensions', "Allow debugging and profiling of extensions with the extension host being paused after start. Check the developer tools for the connection URI.") }, 'disable-gpu': { type: 'boolean', cat: 't', description: localize('disableGPU', "Disable GPU hardware acceleration.") }, 'disable-chromium-sandbox': { type: 'boolean', cat: 't', description: localize('disableChromiumSandbox', "Use this option only when there is requirement to launch the application as sudo user on Linux or when running as an elevated user in an applocker environment on Windows.") }, + 'sandbox': { type: 'boolean' }, 'ms-enable-electron-run-as-node': { type: 'boolean', global: true }, 'telemetry': { type: 'boolean', cat: 't', description: localize('telemetry', "Shows all telemetry events which VS code collects.") }, diff --git a/src/vs/platform/environment/test/node/argv.test.ts b/src/vs/platform/environment/test/node/argv.test.ts index b0d9a5661f4..20f1e237aa4 100644 --- a/src/vs/platform/environment/test/node/argv.test.ts +++ b/src/vs/platform/environment/test/node/argv.test.ts @@ -112,13 +112,13 @@ suite('parseArgs', () => { _: string[]; } - const options1: OptionDescriptions = { + const options1 = { 'testcmd': c('A test command', { testArg: o('A test command option'), _: { type: 'string[]' } }), _: { type: 'string[]' } - }; + } satisfies OptionDescriptions; assertParse( options1, ['testcmd', '--testArg=foo'], @@ -142,13 +142,13 @@ suite('parseArgs', () => { _: string[]; } - const options2: OptionDescriptions = { + const options2 = { 'testcmd': c('A test command', { testArg: o('A test command option') }), testX: { type: 'boolean', global: true, description: '' }, _: { type: 'string[]' } - }; + } satisfies OptionDescriptions; assertParse( options2, ['testcmd', '--testArg=foo', '--testX'], From c93a2d9e3951ab1d32392bbb3152198de8f0d5c8 Mon Sep 17 00:00:00 2001 From: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Date: Tue, 5 Dec 2023 10:49:42 +0100 Subject: [PATCH 55/92] Engineering - update feature labels (#200016) --- .vscode/notebooks/grooming.github-issues | 2 +- .vscode/notebooks/my-work.github-issues | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.vscode/notebooks/grooming.github-issues b/.vscode/notebooks/grooming.github-issues index 54ed3b6b05c..2d4ca60063d 100644 --- a/.vscode/notebooks/grooming.github-issues +++ b/.vscode/notebooks/grooming.github-issues @@ -27,7 +27,7 @@ { "kind": 2, "language": "github-issues", - "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keybindings-json -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat -label:panel-chat -label:audio-cue -label:tasks -label:error-list\n" + "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keybindings-json -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat -label:panel-chat -label:audio-cue -label:tasks -label:error-list -label:winget\n" }, { "kind": 1, diff --git a/.vscode/notebooks/my-work.github-issues b/.vscode/notebooks/my-work.github-issues index 07df761e355..5de4a3e1144 100644 --- a/.vscode/notebooks/my-work.github-issues +++ b/.vscode/notebooks/my-work.github-issues @@ -102,7 +102,7 @@ { "kind": 2, "language": "github-issues", - "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:code-lens -label:command-center -label:comments -label:config -label:context-keys -label:custom-editors -label:debug -label:debug-console -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-sticky-scroll-decorations -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet-parse -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extension-signature -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:icon-brand -label:icons-product -label:icons-widget -label:inlay-hints -label:inline-chat -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:javascript -label:json -label:json-sorting -label:keybindings -label:keybindings-editor -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:multi-monitor -label:native-file-dialog -label:network -label:notebook -label:notebook-accessibility -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commands -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-sticky-scroll -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:panel-chat -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:quickpick-chat -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-desktop -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-search -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:system-context-menu -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:unc -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-documents -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-auxwindow -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-feedback -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-voice -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom" + "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:code-lens -label:command-center -label:comments -label:config -label:context-keys -label:custom-editors -label:debug -label:debug-console -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-sticky-scroll-decorations -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet-parse -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extension-signature -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:icon-brand -label:icons-product -label:icons-widget -label:inlay-hints -label:inline-chat -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:javascript -label:json -label:json-sorting -label:keybindings -label:keybindings-editor -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:multi-monitor -label:native-file-dialog -label:network -label:notebook -label:notebook-accessibility -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commands -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-sticky-scroll -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:panel-chat -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:quickpick-chat -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-desktop -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-search -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:system-context-menu -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:unc -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-documents -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-auxwindow -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-feedback -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-voice -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:error-list -label:winget" }, { "kind": 1, From 1466cbfcdf232a4fd145769a1831b184bde3981d Mon Sep 17 00:00:00 2001 From: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Date: Tue, 5 Dec 2023 10:52:01 +0100 Subject: [PATCH 56/92] SCM - delete scmInputBoxActionButton proposal (#200012) --- extensions/git/package.json | 1 - extensions/git/src/api/api1.ts | 9 +- extensions/git/src/api/git.d.ts | 7 - extensions/git/src/commands.ts | 20 -- extensions/git/src/commitMessageProvider.ts | 188 ------------------ extensions/git/src/model.ts | 25 +-- extensions/git/src/repository.ts | 101 ---------- extensions/git/tsconfig.json | 1 - src/vs/workbench/api/browser/mainThreadSCM.ts | 25 +-- .../workbench/api/common/extHost.protocol.ts | 7 - src/vs/workbench/api/common/extHostSCM.ts | 40 +--- .../contrib/scm/browser/scmViewPane.ts | 1 - src/vs/workbench/contrib/scm/common/scm.ts | 9 - .../common/extensionsApiProposals.ts | 1 - ...code.proposed.scmInputBoxActionButton.d.ts | 19 -- 15 files changed, 7 insertions(+), 447 deletions(-) delete mode 100644 extensions/git/src/commitMessageProvider.ts delete mode 100644 src/vscode-dts/vscode.proposed.scmInputBoxActionButton.d.ts diff --git a/extensions/git/package.json b/extensions/git/package.json index d3b0cd4aeb7..e7c316cb07b 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -24,7 +24,6 @@ "tabInputTextMerge", "timeline", "contribMergeEditorMenus", - "scmInputBoxActionButton", "contribSourceControlInputBoxMenu" ], "categories": [ diff --git a/extensions/git/src/api/api1.ts b/extensions/git/src/api/api1.ts index 623d9fe30fb..747a2ada11b 100644 --- a/extensions/git/src/api/api1.ts +++ b/extensions/git/src/api/api1.ts @@ -5,7 +5,7 @@ import { Model } from '../model'; import { Repository as BaseRepository, Resource } from '../repository'; -import { InputBox, Git, API, Repository, Remote, RepositoryState, Branch, ForcePushMode, Ref, Submodule, Commit, Change, RepositoryUIState, Status, LogOptions, APIState, CommitOptions, RefType, CredentialsProvider, BranchQuery, PushErrorHandler, PublishEvent, FetchOptions, RemoteSourceProvider, RemoteSourcePublisher, PostCommitCommandsProvider, RefQuery, BranchProtectionProvider, InitOptions, CommitMessageProvider } from './git'; +import { InputBox, Git, API, Repository, Remote, RepositoryState, Branch, ForcePushMode, Ref, Submodule, Commit, Change, RepositoryUIState, Status, LogOptions, APIState, CommitOptions, RefType, CredentialsProvider, BranchQuery, PushErrorHandler, PublishEvent, FetchOptions, RemoteSourceProvider, RemoteSourcePublisher, PostCommitCommandsProvider, RefQuery, BranchProtectionProvider, InitOptions } from './git'; import { Event, SourceControlInputBox, Uri, SourceControl, Disposable, commands, CancellationToken } from 'vscode'; import { combinedDisposable, mapEvent } from '../util'; import { toGitUri } from '../uri'; @@ -345,13 +345,6 @@ export class ApiImpl implements API { return this._model.registerBranchProtectionProvider(root, provider); } - /** - * @deprecated See https://github.com/microsoft/vscode/issues/195474 - */ - registerCommitMessageProvider(provider: CommitMessageProvider): Disposable { - return this._model.registerCommitMessageProvider(provider); - } - constructor(private _model: Model) { } } diff --git a/extensions/git/src/api/git.d.ts b/extensions/git/src/api/git.d.ts index a9a49a95141..9fe777689e3 100644 --- a/extensions/git/src/api/git.d.ts +++ b/extensions/git/src/api/git.d.ts @@ -312,12 +312,6 @@ export interface BranchProtectionProvider { provideBranchProtection(): BranchProtection[]; } -export interface CommitMessageProvider { - readonly title: string; - readonly icon?: Uri | { light: Uri, dark: Uri } | ThemeIcon; - provideCommitMessage(repository: Repository, changes: string[], cancellationToken?: CancellationToken): Promise; -} - export type APIState = 'uninitialized' | 'initialized'; export interface PublishEvent { @@ -345,7 +339,6 @@ export interface API { registerPostCommitCommandsProvider(provider: PostCommitCommandsProvider): Disposable; registerPushErrorHandler(handler: PushErrorHandler): Disposable; registerBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable; - registerCommitMessageProvider(provider: CommitMessageProvider): Disposable; } export interface GitExtension { diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index 3eb213ecea0..2ed3c5fd5b6 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -3631,26 +3631,6 @@ export class CommandCenter { } } - @command('git.generateCommitMessage', { repository: true }) - async generateCommitMessage(repository: Repository): Promise { - if (!repository || !this.model.commitMessageProvider) { - return; - } - - await window.withProgress({ location: ProgressLocation.SourceControl }, async () => { - await repository.generateCommitMessage(); - }); - } - - @command('git.generateCommitMessageCancel', { repository: true }) - generateCommitMessageCancel(repository: Repository): void { - if (!repository || !this.model.commitMessageProvider) { - return; - } - - repository.generateCommitMessageCancel(); - } - @command('git.viewChanges', { repository: true }) viewChanges(repository: Repository): void { this._viewChanges('Git: Changes', repository.workingTreeGroup.resourceStates); diff --git a/extensions/git/src/commitMessageProvider.ts b/extensions/git/src/commitMessageProvider.ts deleted file mode 100644 index 02b8c097a50..00000000000 --- a/extensions/git/src/commitMessageProvider.ts +++ /dev/null @@ -1,188 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { CancellationToken, Disposable, Event, EventEmitter, Uri, workspace, ThemeIcon, l10n, SourceControlInputBoxActionButton } from 'vscode'; -import { CommitMessageProvider, Status, Repository as ApiRepository } from './api/git'; -import { Repository } from './repository'; -import { dispose } from './util'; - -export interface ICommitMessageProviderRegistry { - readonly onDidChangeCommitMessageProvider: Event; - - commitMessageProvider: CommitMessageProvider | undefined; - registerCommitMessageProvider(provider: CommitMessageProvider): Disposable; -} - -export class TestCommitMessageProvider implements CommitMessageProvider { - - readonly icon = new ThemeIcon('rocket'); - readonly title = 'Generate Commit Message (Test)'; - - private readonly _changesMap = new Map(); - - async provideCommitMessage(repository: ApiRepository, changes: string[], token: CancellationToken): Promise { - console.log('Repository: ', repository.rootUri.fsPath); - - if (token.isCancellationRequested) { - return undefined; - } - - return new Promise(resolve => { - token.onCancellationRequested(() => resolve(undefined)); - - setTimeout(() => { - const attemptCount = this.getAttemptCount(repository, changes); - this._changesMap.set(repository.rootUri.fsPath, [changes, attemptCount]); - - resolve(`Test commit message (Attempt No. ${attemptCount})`); - }, 5000); - }); - } - - private getAttemptCount(repository: ApiRepository, changes: string[]): number { - const [previousChanges, previousCount] = this._changesMap.get(repository.rootUri.fsPath) ?? [[], 1]; - if (previousChanges.length !== changes.length) { - return 1; - } - - for (let index = 0; index < changes.length; index++) { - if (previousChanges[index] !== changes[index]) { - return 1; - } - } - - return previousCount + 1; - } - -} - -interface ActionButtonState { - readonly isGenerating: boolean; - readonly enabled: boolean; -} - -export class GenerateCommitMessageActionButton { - - private _onDidChange = new EventEmitter(); - get onDidChange(): Event { return this._onDidChange.event; } - - private _state: ActionButtonState; - get state() { return this._state; } - set state(state: ActionButtonState) { - if (this._state.enabled === state.enabled && - this._state.isGenerating === state.isGenerating) { - return; - } - - this._state = state; - this._onDidChange.fire(); - } - - get button(): SourceControlInputBoxActionButton | undefined { - if (this.commitMessageProviderRegistry.commitMessageProvider === undefined) { - return undefined; - } - - return this.state.isGenerating ? - { - icon: new ThemeIcon('debug-stop'), - command: { - title: l10n.t('Cancel'), - command: 'git.generateCommitMessageCancel', - arguments: [this.repository.sourceControl] - }, - enabled: this.state.enabled, - } : - { - icon: this.commitMessageProviderRegistry.commitMessageProvider.icon ?? new ThemeIcon('sparkle'), - command: { - title: this.commitMessageProviderRegistry.commitMessageProvider.title, - command: 'git.generateCommitMessage', - arguments: [this.repository.sourceControl] - }, - enabled: this.state.enabled - }; - } - - private disposables: Disposable[] = []; - - constructor( - private readonly repository: Repository, - private readonly commitMessageProviderRegistry: ICommitMessageProviderRegistry - ) { - this._state = { - enabled: false, - isGenerating: false - }; - - const root = Uri.file(repository.root); - this.disposables.push(workspace.onDidChangeConfiguration(e => { - if (e.affectsConfiguration('git.enableSmartCommit', root) || - e.affectsConfiguration('git.smartCommitChanges', root) || - e.affectsConfiguration('git.suggestSmartCommit', root)) { - this.onDidChangeSmartCommitSettings(); - } - })); - repository.onDidRunGitStatus(this.onDidRunGitStatus, this, this.disposables); - repository.onDidStartCommitMessageGeneration(this.onDidStartCommitMessageGeneration, this, this.disposables); - repository.onDidEndCommitMessageGeneration(this.onDidEndCommitMessageGeneration, this, this.disposables); - commitMessageProviderRegistry.onDidChangeCommitMessageProvider(this.onDidChangeCommitMessageProvider, this, this.disposables); - } - - private onDidChangeCommitMessageProvider(): void { - this._onDidChange.fire(); - } - - private onDidStartCommitMessageGeneration(): void { - this.state = { ...this.state, isGenerating: true }; - } - - private onDidEndCommitMessageGeneration(): void { - this.state = { ...this.state, isGenerating: false }; - } - - private onDidChangeSmartCommitSettings(): void { - this.state = { - ...this.state, - enabled: this.repositoryHasChangesToCommit() - }; - } - - private onDidRunGitStatus(): void { - this.state = { - ...this.state, - enabled: this.repositoryHasChangesToCommit() - }; - } - - private repositoryHasChangesToCommit(): boolean { - const config = workspace.getConfiguration('git', Uri.file(this.repository.root)); - const enableSmartCommit = config.get('enableSmartCommit') === true; - const suggestSmartCommit = config.get('suggestSmartCommit') === true; - const smartCommitChanges = config.get<'all' | 'tracked'>('smartCommitChanges', 'all'); - - const resources = [...this.repository.indexGroup.resourceStates]; - - if ( - // Smart commit enabled (all) - (enableSmartCommit && smartCommitChanges === 'all') || - // Smart commit disabled, smart suggestion enabled - (!enableSmartCommit && suggestSmartCommit) - ) { - resources.push(...this.repository.workingTreeGroup.resourceStates); - } - - // Smart commit enabled (tracked only) - if (enableSmartCommit && smartCommitChanges === 'tracked') { - resources.push(...this.repository.workingTreeGroup.resourceStates.filter(r => r.type !== Status.UNTRACKED)); - } - - return resources.length !== 0; - } - - dispose(): void { - this.disposables = dispose(this.disposables); - } -} diff --git a/extensions/git/src/model.ts b/extensions/git/src/model.ts index 4632cd83bb3..ccab4e07857 100644 --- a/extensions/git/src/model.ts +++ b/extensions/git/src/model.ts @@ -12,14 +12,13 @@ import { Git } from './git'; import * as path from 'path'; import * as fs from 'fs'; import { fromGitUri } from './uri'; -import { APIState as State, CredentialsProvider, PushErrorHandler, PublishEvent, RemoteSourcePublisher, PostCommitCommandsProvider, BranchProtectionProvider, CommitMessageProvider } from './api/git'; +import { APIState as State, CredentialsProvider, PushErrorHandler, PublishEvent, RemoteSourcePublisher, PostCommitCommandsProvider, BranchProtectionProvider } from './api/git'; import { Askpass } from './askpass'; import { IPushErrorHandlerRegistry } from './pushError'; import { ApiRepository } from './api/api1'; import { IRemoteSourcePublisherRegistry } from './remotePublisher'; import { IPostCommitCommandsProviderRegistry } from './postCommitCommands'; import { IBranchProtectionProviderRegistry } from './branchProtection'; -import { ICommitMessageProviderRegistry } from './commitMessageProvider'; class RepositoryPick implements QuickPickItem { @memoize get label(): string { @@ -171,7 +170,7 @@ class UnsafeRepositoriesManager { } } -export class Model implements IRepositoryResolver, IBranchProtectionProviderRegistry, ICommitMessageProviderRegistry, IRemoteSourcePublisherRegistry, IPostCommitCommandsProviderRegistry, IPushErrorHandlerRegistry { +export class Model implements IRepositoryResolver, IBranchProtectionProviderRegistry, IRemoteSourcePublisherRegistry, IPostCommitCommandsProviderRegistry, IPushErrorHandlerRegistry { private _onDidOpenRepository = new EventEmitter(); readonly onDidOpenRepository: Event = this._onDidOpenRepository.event; @@ -238,14 +237,6 @@ export class Model implements IRepositoryResolver, IBranchProtectionProviderRegi private pushErrorHandlers = new Set(); - private _commitMessageProvider: CommitMessageProvider | undefined; - get commitMessageProvider(): CommitMessageProvider | undefined { - return this._commitMessageProvider; - } - - private _onDidChangeCommitMessageProvider = new EventEmitter(); - readonly onDidChangeCommitMessageProvider = this._onDidChangeCommitMessageProvider.event; - private _unsafeRepositoriesManager: UnsafeRepositoriesManager; get unsafeRepositories(): string[] { return this._unsafeRepositoriesManager.repositories; @@ -587,7 +578,7 @@ export class Model implements IRepositoryResolver, IBranchProtectionProviderRegi // Open repository const [dotGit, repositoryRootRealPath] = await Promise.all([this.git.getRepositoryDotGit(repositoryRoot), this.getRepositoryRootRealPath(repositoryRoot)]); - const repository = new Repository(this.git.open(repositoryRoot, repositoryRootRealPath, dotGit, this.logger), this, this, this, this, this, this, this.globalState, this.logger, this.telemetryReporter); + const repository = new Repository(this.git.open(repositoryRoot, repositoryRootRealPath, dotGit, this.logger), this, this, this, this, this, this.globalState, this.logger, this.telemetryReporter); this.open(repository); this._closedRepositoriesManager.deleteRepository(repository.root); @@ -948,16 +939,6 @@ export class Model implements IRepositoryResolver, IBranchProtectionProviderRegi return toDisposable(() => this.pushErrorHandlers.delete(handler)); } - registerCommitMessageProvider(provider: CommitMessageProvider): Disposable { - this._commitMessageProvider = provider; - this._onDidChangeCommitMessageProvider.fire(); - - return toDisposable(() => { - this._commitMessageProvider = undefined; - this._onDidChangeCommitMessageProvider.fire(); - }); - } - getPushErrorHandlers(): PushErrorHandler[] { return [...this.pushErrorHandlers]; } diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index a7897b26fd8..05f95ebd28f 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -24,7 +24,6 @@ import { IPostCommitCommandsProviderRegistry, CommitCommandsCenter } from './pos import { Operation, OperationKind, OperationManager, OperationResult } from './operation'; import { GitBranchProtectionProvider, IBranchProtectionProviderRegistry } from './branchProtection'; import { GitHistoryProvider } from './historyProvider'; -import { GenerateCommitMessageActionButton, ICommitMessageProviderRegistry } from './commitMessageProvider'; const timeout = (millis: number) => new Promise(c => setTimeout(c, millis)); @@ -34,47 +33,6 @@ function getIconUri(iconName: string, theme: string): Uri { return Uri.file(path.join(iconsRootPath, theme, `${iconName}.svg`)); } -function wrapCommitMessage(message: string, subjectLineLength: number, bodyLineLength: number): string { - const messageLinesWrapped: string[] = []; - const messageLines = message.split(/\r?\n/g); - - for (let index = 0; index < messageLines.length; index++) { - const messageLine = messageLines[index]; - const threshold = index === 0 ? subjectLineLength : bodyLineLength; - - if (messageLine.length <= threshold) { - messageLinesWrapped.push(messageLine); - continue; - } - - let position = 0; - const lineSegments: string[] = []; - while (messageLine.length - position > threshold) { - const lastSpaceBeforeThreshold = messageLine.lastIndexOf(' ', position + threshold); - if (lastSpaceBeforeThreshold !== -1 && lastSpaceBeforeThreshold > position) { - lineSegments.push(...[messageLine.substring(position, lastSpaceBeforeThreshold), '\n']); - position = lastSpaceBeforeThreshold + 1; - } else { - // Find first space after threshold - const firstSpaceAfterThreshold = messageLine.indexOf(' ', position); - if (firstSpaceAfterThreshold !== -1) { - lineSegments.push(...[messageLine.substring(position, firstSpaceAfterThreshold), '\n']); - position = firstSpaceAfterThreshold + 1; - } else { - lineSegments.push(messageLine.substring(position)); - position = messageLine.length; - } - } - } - if (position < messageLine.length) { - lineSegments.push(messageLine.substring(position)); - } - messageLinesWrapped.push(lineSegments.join('')); - } - - return messageLinesWrapped.join('\n'); -} - export const enum RepositoryState { Idle, Disposed @@ -845,7 +803,6 @@ export class Repository implements Disposable { private commitCommandCenter: CommitCommandsCenter; private resourceCommandResolver = new ResourceCommandResolver(this); private updateModelStateCancellationTokenSource: CancellationTokenSource | undefined; - private generateCommitMessageCancellationTokenSource: CancellationTokenSource | undefined; private disposables: Disposable[] = []; constructor( @@ -855,7 +812,6 @@ export class Repository implements Disposable { remoteSourcePublisherRegistry: IRemoteSourcePublisherRegistry, postCommitCommandsProviderRegistry: IPostCommitCommandsProviderRegistry, private readonly branchProtectionProviderRegistry: IBranchProtectionProviderRegistry, - private readonly commitMessageProviderRegistry: ICommitMessageProviderRegistry, globalState: Memento, private readonly logger: LogOutputChannel, private telemetryReporter: TelemetryReporter @@ -901,11 +857,6 @@ export class Repository implements Disposable { this._sourceControl.acceptInputCommand = { command: 'git.commit', title: l10n.t('Commit'), arguments: [this._sourceControl] }; this._sourceControl.inputBox.validateInput = this.validateInput.bind(this); - const inputActionButton = new GenerateCommitMessageActionButton(this, commitMessageProviderRegistry); - this.disposables.push(inputActionButton); - inputActionButton.onDidChange(() => this._sourceControl.inputBox.actionButton = inputActionButton.button); - this._sourceControl.inputBox.actionButton = inputActionButton.button; - this.disposables.push(this._sourceControl); this.updateInputBoxPlaceholder(); @@ -2086,58 +2037,6 @@ export class Repository implements Disposable { }); } - async generateCommitMessage(): Promise { - if (!this.commitMessageProviderRegistry.commitMessageProvider) { - return; - } - - this._onDidStartCommitMessageGeneration.fire(); - this.generateCommitMessageCancellationTokenSource?.cancel(); - this.generateCommitMessageCancellationTokenSource = new CancellationTokenSource(); - - try { - const diff: string[] = []; - if (this.indexGroup.resourceStates.length !== 0) { - for (const file of this.indexGroup.resourceStates.map(r => r.resourceUri.fsPath)) { - diff.push(await this.diffIndexWithHEAD(file)); - } - } else { - for (const file of this.workingTreeGroup.resourceStates.map(r => r.resourceUri.fsPath)) { - diff.push(await this.diffWithHEAD(file)); - } - } - - if (diff.length === 0) { - return; - } - - const token = this.generateCommitMessageCancellationTokenSource.token; - const provider = this.commitMessageProviderRegistry.commitMessageProvider; - const commitMessage = await provider.provideCommitMessage(new ApiRepository(this), diff, token); - if (commitMessage) { - const config = workspace.getConfiguration('git'); - const subjectLineLength = config.get('inputValidationSubjectLength', null); - const bodyLineLength = config.get('inputValidationLength', 50); - - this.inputBox.value = wrapCommitMessage(commitMessage, subjectLineLength ?? bodyLineLength, bodyLineLength); - } - } - catch (err) { - this.logger.error(err); - } - finally { - this._onDidEndCommitMessageGeneration.fire(); - } - } - - generateCommitMessageCancel(): void { - this.generateCommitMessageCancellationTokenSource?.cancel(); - this.generateCommitMessageCancellationTokenSource?.dispose(); - this.generateCommitMessageCancellationTokenSource = undefined; - - this._onDidEndCommitMessageGeneration.fire(); - } - // Parses output of `git check-ignore -v -z` and returns only those paths // that are actually ignored by git. // Matches to a negative pattern (starting with '!') are filtered out. diff --git a/extensions/git/tsconfig.json b/extensions/git/tsconfig.json index 022beed0bcb..d5fdbd539da 100644 --- a/extensions/git/tsconfig.json +++ b/extensions/git/tsconfig.json @@ -13,7 +13,6 @@ "../../src/vscode-dts/vscode.proposed.diffCommand.d.ts", "../../src/vscode-dts/vscode.proposed.scmActionButton.d.ts", "../../src/vscode-dts/vscode.proposed.scmHistoryProvider.d.ts", - "../../src/vscode-dts/vscode.proposed.scmInputBoxActionButton.d.ts", "../../src/vscode-dts/vscode.proposed.scmSelectedProvider.d.ts", "../../src/vscode-dts/vscode.proposed.scmValidation.d.ts", "../../src/vscode-dts/vscode.proposed.tabInputTextMerge.d.ts", diff --git a/src/vs/workbench/api/browser/mainThreadSCM.ts b/src/vs/workbench/api/browser/mainThreadSCM.ts index 25ec522a3a1..854c872257a 100644 --- a/src/vs/workbench/api/browser/mainThreadSCM.ts +++ b/src/vs/workbench/api/browser/mainThreadSCM.ts @@ -7,7 +7,7 @@ import { URI, UriComponents } from 'vs/base/common/uri'; import { Event, Emitter } from 'vs/base/common/event'; import { IDisposable, DisposableStore, combinedDisposable, dispose } from 'vs/base/common/lifecycle'; import { ISCMService, ISCMRepository, ISCMProvider, ISCMResource, ISCMResourceGroup, ISCMResourceDecorations, IInputValidation, ISCMViewService, InputValidationType, ISCMActionButtonDescriptor } from 'vs/workbench/contrib/scm/common/scm'; -import { ExtHostContext, MainThreadSCMShape, ExtHostSCMShape, SCMProviderFeatures, SCMRawResourceSplices, SCMGroupFeatures, MainContext, SCMHistoryItemGroupDto, SCMInputActionButtonDto } from '../common/extHost.protocol'; +import { ExtHostContext, MainThreadSCMShape, ExtHostSCMShape, SCMProviderFeatures, SCMRawResourceSplices, SCMGroupFeatures, MainContext, SCMHistoryItemGroupDto } from '../common/extHost.protocol'; import { Command } from 'vs/editor/common/languages'; import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; import { CancellationToken } from 'vs/base/common/cancellation'; @@ -22,19 +22,6 @@ import { Codicon } from 'vs/base/common/codicons'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { basename } from 'vs/base/common/resources'; -function getSCMInputBoxActionButtonIcon(actionButton: SCMInputActionButtonDto): URI | { light: URI; dark: URI } | ThemeIcon | undefined { - if (!actionButton.icon) { - return undefined; - } else if (URI.isUri(actionButton.icon)) { - return URI.revive(actionButton.icon); - } else if (ThemeIcon.isThemeIcon(actionButton.icon)) { - return actionButton.icon; - } else { - const icon = actionButton.icon as { light: UriComponents; dark: UriComponents }; - return { light: URI.revive(icon.light), dark: URI.revive(icon.dark) }; - } -} - function getIconFromIconDto(iconDto?: UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon): URI | { light: URI; dark: URI } | ThemeIcon | undefined { if (iconDto === undefined) { return undefined; @@ -623,16 +610,6 @@ export class MainThreadSCM implements MainThreadSCMShape { repository.input.visible = visible; } - $setInputBoxActionButton(sourceControlHandle: number, actionButton?: SCMInputActionButtonDto | null | undefined): void { - const repository = this._repositories.get(sourceControlHandle); - - if (!repository) { - return; - } - - repository.input.actionButton = actionButton ? { ...actionButton, icon: getSCMInputBoxActionButtonIcon(actionButton) } : undefined; - } - $showValidationMessage(sourceControlHandle: number, message: string | IMarkdownString, type: InputValidationType) { const repository = this._repositories.get(sourceControlHandle); if (!repository) { diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 40e2e999ec8..592372edbe6 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -1421,12 +1421,6 @@ export interface SCMActionButtonDto { enabled: boolean; } -export interface SCMInputActionButtonDto { - command: ICommandDto; - icon?: UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon; - enabled: boolean; -} - export interface SCMGroupFeatures { hideWhenEmpty?: boolean; } @@ -1496,7 +1490,6 @@ export interface MainThreadSCMShape extends IDisposable { $setInputBoxPlaceholder(sourceControlHandle: number, placeholder: string): void; $setInputBoxEnablement(sourceControlHandle: number, enabled: boolean): void; $setInputBoxVisibility(sourceControlHandle: number, visible: boolean): void; - $setInputBoxActionButton(sourceControlHandle: number, actionButton?: SCMInputActionButtonDto | null): void; $showValidationMessage(sourceControlHandle: number, message: string | IMarkdownString, type: InputValidationType): void; $setValidationProviderIsEnabled(sourceControlHandle: number, enabled: boolean): void; diff --git a/src/vs/workbench/api/common/extHostSCM.ts b/src/vs/workbench/api/common/extHostSCM.ts index e51541a30fa..74372613449 100644 --- a/src/vs/workbench/api/common/extHostSCM.ts +++ b/src/vs/workbench/api/common/extHostSCM.ts @@ -58,19 +58,6 @@ function getIconResource(decorations?: vscode.SourceControlResourceThemableDecor } } -function getInputBoxActionButtonIcon(actionButton?: vscode.SourceControlInputBoxActionButton): UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon | undefined { - if (!actionButton?.icon) { - return undefined; - } else if (URI.isUri(actionButton.icon)) { - return actionButton.icon; - } else if (ThemeIcon.isThemeIcon(actionButton.icon)) { - return actionButton.icon; - } else { - const icon = actionButton.icon as { light: URI; dark: URI }; - return { light: icon.light, dark: icon.dark }; - } -} - function getHistoryItemIconDto(historyItem: vscode.SourceControlHistoryItem): UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon | undefined { if (!historyItem.icon) { return undefined; @@ -331,36 +318,13 @@ export class ExtHostSCMInputBox implements vscode.SourceControlInputBox { this.#proxy.$setInputBoxVisibility(this._sourceControlHandle, visible); } - private _actionButton: vscode.SourceControlInputBoxActionButton | undefined; - private _actionButtonDisposables = new MutableDisposable(); - - get actionButton(): vscode.SourceControlInputBoxActionButton | undefined { - checkProposedApiEnabled(this._extension, 'scmInputBoxActionButton'); - return this._actionButton; - } - - set actionButton(actionButton: vscode.SourceControlInputBoxActionButton | undefined) { - checkProposedApiEnabled(this._extension, 'scmInputBoxActionButton'); - this._actionButtonDisposables.value = new DisposableStore(); - - this._actionButton = actionButton; - - const internal = actionButton !== undefined ? - { - command: this._commands.converter.toInternal(actionButton.command, this._actionButtonDisposables.value), - icon: getInputBoxActionButtonIcon(actionButton), - enabled: actionButton.enabled - } : undefined; - this.#proxy.$setInputBoxActionButton(this._sourceControlHandle, internal ?? null); - } - get document(): vscode.TextDocument { checkProposedApiEnabled(this._extension, 'scmTextDocument'); return this.#extHostDocuments.getDocument(this._documentUri); } - constructor(private _extension: IExtensionDescription, private _commands: ExtHostCommands, _extHostDocuments: ExtHostDocuments, proxy: MainThreadSCMShape, private _sourceControlHandle: number, private _documentUri: URI) { + constructor(private _extension: IExtensionDescription, _extHostDocuments: ExtHostDocuments, proxy: MainThreadSCMShape, private _sourceControlHandle: number, private _documentUri: URI) { this.#extHostDocuments = _extHostDocuments; this.#proxy = proxy; } @@ -702,7 +666,7 @@ class ExtHostSourceControl implements vscode.SourceControl { query: _rootUri ? `rootUri=${encodeURIComponent(_rootUri.toString())}` : undefined }); - this._inputBox = new ExtHostSCMInputBox(_extension, _commands, _extHostDocuments, this.#proxy, this.handle, inputBoxDocumentUri); + this._inputBox = new ExtHostSCMInputBox(_extension, _extHostDocuments, this.#proxy, this.handle, inputBoxDocumentUri); this.#proxy.$registerSourceControl(this.handle, _id, _label, _rootUri, inputBoxDocumentUri); } diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts index 06db83e807a..7bb2b9bc442 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts @@ -2912,7 +2912,6 @@ export class SCMViewPane extends ViewPane { const repositoryDisposables = new DisposableStore(); repositoryDisposables.add(repository.provider.onDidChange(() => this.updateChildren(repository))); - repositoryDisposables.add(repository.input.onDidChangeActionButton(() => this.updateChildren(repository))); repositoryDisposables.add(repository.input.onDidChangeVisibility(() => this.updateChildren(repository))); repositoryDisposables.add(repository.provider.onDidChangeResourceGroups(() => this.updateChildren(repository))); diff --git a/src/vs/workbench/contrib/scm/common/scm.ts b/src/vs/workbench/contrib/scm/common/scm.ts index 7040ee2df1f..46ea1f2303c 100644 --- a/src/vs/workbench/contrib/scm/common/scm.ts +++ b/src/vs/workbench/contrib/scm/common/scm.ts @@ -111,12 +111,6 @@ export interface ISCMInputChangeEvent { readonly reason?: SCMInputChangeReason; } -export interface ISCMInputActionButtonDescriptor { - command: Command; - icon?: URI | { light: URI; dark: URI } | ThemeIcon; - enabled: boolean; -} - export interface ISCMActionButtonDescriptor { command: Command; secondaryCommands?: Command[][]; @@ -149,9 +143,6 @@ export interface ISCMInput { visible: boolean; readonly onDidChangeVisibility: Event; - actionButton: ISCMInputActionButtonDescriptor | undefined; - readonly onDidChangeActionButton: Event; - setFocus(): void; readonly onDidChangeFocus: Event; diff --git a/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts b/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts index 79467b47ff6..45eb9782709 100644 --- a/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts +++ b/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts @@ -81,7 +81,6 @@ export const allApiProposals = Object.freeze({ saveEditor: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.saveEditor.d.ts', scmActionButton: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.scmActionButton.d.ts', scmHistoryProvider: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.scmHistoryProvider.d.ts', - scmInputBoxActionButton: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.scmInputBoxActionButton.d.ts', scmSelectedProvider: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.scmSelectedProvider.d.ts', scmTextDocument: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.scmTextDocument.d.ts', scmValidation: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.scmValidation.d.ts', diff --git a/src/vscode-dts/vscode.proposed.scmInputBoxActionButton.d.ts b/src/vscode-dts/vscode.proposed.scmInputBoxActionButton.d.ts deleted file mode 100644 index 890cadaab91..00000000000 --- a/src/vscode-dts/vscode.proposed.scmInputBoxActionButton.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -declare module 'vscode' { - // https://github.com/microsoft/vscode/issues/195474 - - export interface SourceControlInputBoxActionButton { - readonly command: Command; - readonly enabled: boolean; - readonly icon?: Uri | { light: Uri; dark: Uri } | ThemeIcon; - } - - export interface SourceControlInputBox { - actionButton?: SourceControlInputBoxActionButton; - } - -} From 95147456e499613748ceb03a3e82e7b31c3323f6 Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Tue, 5 Dec 2023 11:11:58 +0000 Subject: [PATCH 57/92] Fix tree item order when reveal is the cause of getChildren (#200022) Fixes #191511 --- src/vs/workbench/api/common/extHostTreeViews.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/vs/workbench/api/common/extHostTreeViews.ts b/src/vs/workbench/api/common/extHostTreeViews.ts index 51d394e431d..2ea75f8b775 100644 --- a/src/vs/workbench/api/common/extHostTreeViews.ts +++ b/src/vs/workbench/api/common/extHostTreeViews.ts @@ -658,14 +658,17 @@ class ExtHostTreeView extends Disposable { return undefined; } - const items = await Promise.all(coalesce(elements || []).map(async element => { - const item = await this.dataProvider.getTreeItem(element); - return item && !cts.token.isCancellationRequested ? this.createAndRegisterTreeNode(element, item, parentNode) : null; + const coalescedElements = coalesce(elements || []); + const treeItems = await Promise.all(coalesce(coalescedElements).map(element => { + return this.dataProvider.getTreeItem(element); })); if (cts.token.isCancellationRequested) { return undefined; } + // createAndRegisterTreeNodes adds the nodes to a cache. This must be done sync so that they get added in the correct order. + const items = treeItems.map((item, index) => item ? this.createAndRegisterTreeNode(coalescedElements[index], item, parentNode) : null); + return coalesce(items); } finally { cts.dispose(); From 1835eb7684097f600922040156c25438e662018c Mon Sep 17 00:00:00 2001 From: Nathan Garside Date: Tue, 5 Dec 2023 11:25:46 +0000 Subject: [PATCH 58/92] Add syntax highlighting for `*.repo` files (#199859) Add syntax highlighting for *.repo files --- extensions/ini/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions/ini/package.json b/extensions/ini/package.json index ac1a59e8af5..a8b332a74ec 100644 --- a/extensions/ini/package.json +++ b/extensions/ini/package.json @@ -35,7 +35,8 @@ ".gitattributes", ".gitconfig", ".gitmodules", - ".editorconfig" + ".editorconfig", + ".repo" ], "filenames": [ "gitconfig", From 50f8622d72e902036249d3977ffa3edb9a261f88 Mon Sep 17 00:00:00 2001 From: DiscreteTom Date: Tue, 5 Dec 2023 20:42:14 +0800 Subject: [PATCH 59/92] fix #193746 (#197523) * fix #193746 * add tests for #193746 --- src/vs/base/common/htmlContent.ts | 24 +++++++--- .../base/test/common/markdownString.test.ts | 45 +++++++++++++++++++ 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/src/vs/base/common/htmlContent.ts b/src/vs/base/common/htmlContent.ts index d16621579af..0b57e625295 100644 --- a/src/vs/base/common/htmlContent.ts +++ b/src/vs/base/common/htmlContent.ts @@ -71,11 +71,7 @@ export class MarkdownString implements IMarkdownString { } appendCodeblock(langId: string, code: string): MarkdownString { - this.value += '\n```'; - this.value += langId; - this.value += '\n'; - this.value += code; - this.value += '\n```\n'; + this.value += `\n${appendEscapedMarkdownCodeBlockFence(code, langId)}\n`; return this; } @@ -143,6 +139,24 @@ export function escapeMarkdownSyntaxTokens(text: string): string { return text.replace(/[\\`*_{}[\]()#+\-!~]/g, '\\$&'); // CodeQL [SM02383] Backslash is escaped in the character class } +/** + * @see https://github.com/microsoft/vscode/issues/193746 + */ +export function appendEscapedMarkdownCodeBlockFence(code: string, langId: string) { + const longestFenceLength = + code.match(/^`+/gm)?.reduce((a, b) => (a.length > b.length ? a : b)).length ?? + 0; + const desiredFenceLength = + longestFenceLength >= 3 ? longestFenceLength + 1 : 3; + + // the markdown result + return [ + `${'`'.repeat(desiredFenceLength)}${langId}`, + code, + `${'`'.repeat(desiredFenceLength)}`, + ].join('\n'); +} + export function escapeDoubleQuotes(input: string) { return input.replace(/"/g, '"'); } diff --git a/src/vs/base/test/common/markdownString.test.ts b/src/vs/base/test/common/markdownString.test.ts index b008091a46f..a23573f610a 100644 --- a/src/vs/base/test/common/markdownString.test.ts +++ b/src/vs/base/test/common/markdownString.test.ts @@ -62,6 +62,51 @@ suite('MarkdownString', () => { ); }); + suite('appendCodeBlock', () => { + function assertCodeBlock(lang: string, code: string, result: string) { + const mds = new MarkdownString(); + mds.appendCodeblock(lang, code); + assert.strictEqual(mds.value, result); + } + + test('common cases', () => { + // no backticks + assertCodeBlock('ts', 'const a = 1;', `\n${[ + '```ts', + 'const a = 1;', + '```' + ].join('\n')}\n`); + // backticks + assertCodeBlock('ts', 'const a = `1`;', `\n${[ + '```ts', + 'const a = `1`;', + '```' + ].join('\n')}\n`); + }); + + // @see https://github.com/microsoft/vscode/issues/193746 + test('escape fence', () => { + // fence in the first line + assertCodeBlock('md', '```\n```', `\n${[ + '````md', + '```\n```', + '````' + ].join('\n')}\n`); + // fence in the middle of code + assertCodeBlock('md', '\n\n```\n```', `\n${[ + '````md', + '\n\n```\n```', + '````' + ].join('\n')}\n`); + // longer fence at the end of code + assertCodeBlock('md', '```\n```\n````\n````', `\n${[ + '`````md', + '```\n```\n````\n````', + '`````' + ].join('\n')}\n`); + }); + }); + suite('ThemeIcons', () => { suite('Support On', () => { From fcd07faf111139578d0645293c89112a26929df0 Mon Sep 17 00:00:00 2001 From: Alexandru Dima Date: Tue, 5 Dec 2023 13:54:38 +0100 Subject: [PATCH 60/92] Fix modifyPosition implementation (#200027) Fix modifyPosition implementation (#193262) --- .../editor/common/viewModel/viewModelImpl.ts | 3 ++- .../browser/viewModel/viewModelImpl.test.ts | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/vs/editor/common/viewModel/viewModelImpl.ts b/src/vs/editor/common/viewModel/viewModelImpl.ts index 4e6f4b8650f..ff5f4eef6f6 100644 --- a/src/vs/editor/common/viewModel/viewModelImpl.ts +++ b/src/vs/editor/common/viewModel/viewModelImpl.ts @@ -806,7 +806,8 @@ export class ViewModel extends Disposable implements IViewModel { public modifyPosition(position: Position, offset: number): Position { const modelPosition = this.coordinatesConverter.convertViewPositionToModelPosition(position); - return this.model.modifyPosition(modelPosition, offset); + const resultModelPosition = this.model.modifyPosition(modelPosition, offset); + return this.coordinatesConverter.convertModelPositionToViewPosition(resultModelPosition); } public deduceModelPositionRelativeToViewPosition(viewAnchorPosition: Position, deltaOffset: number, lineFeedCnt: number): Position { diff --git a/src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts b/src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts index 0f602b4e95e..4b515f974b2 100644 --- a/src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts +++ b/src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts @@ -355,4 +355,22 @@ suite('ViewModel', () => { } ); }); + + test('issue #193262: Incorrect implementation of modifyPosition', () => { + testViewModel( + [ + 'just some text' + ], + { + wordWrap: 'wordWrapColumn', + wordWrapColumn: 5 + }, + (viewModel, model) => { + assert.deepStrictEqual( + new Position(3, 1), + viewModel.modifyPosition(new Position(3, 2), -1) + ); + } + ); + }); }); From a2faf3240802e4f50070e149e5812ac4bcdd25a8 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 5 Dec 2023 14:18:42 +0100 Subject: [PATCH 61/92] fix https://github.com/microsoft/vscode/issues/174496 (#200030) --- .../contrib/suggest/browser/suggestWidgetRenderer.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.ts b/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.ts index 0a6faccef30..431f3b4964f 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.ts @@ -45,9 +45,14 @@ const _completionItemColor = new class ColorExtractor { out[0] = item.completion.detail; return true; } - if (typeof item.completion.documentation === 'string') { - const match = ColorExtractor._regexRelaxed.exec(item.completion.documentation); - if (match && (match.index === 0 || match.index + match[0].length === item.completion.documentation.length)) { + + if (item.completion.documentation) { + const value = typeof item.completion.documentation === 'string' + ? item.completion.documentation + : item.completion.documentation.value; + + const match = ColorExtractor._regexRelaxed.exec(value); + if (match && (match.index === 0 || match.index + match[0].length === value.length)) { out[0] = match[0]; return true; } From d8e218558bcd481ca8121be2c71f697a8f4fc01a Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Tue, 5 Dec 2023 14:13:21 +0100 Subject: [PATCH 62/92] Fixes #190953 --- .../editor/contrib/inlayHints/browser/inlayHintsController.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts index 4066095ed11..5a1847e81bd 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts @@ -257,6 +257,8 @@ export class InlayHintsController implements IEditorContribution { } })); this._sessionDisposables.add(this._editor.onDidChangeModelContent((e) => { + cts?.cancel(); + // update less aggressive when typing const delay = Math.max(scheduler.delay, 1250); scheduler.schedule(delay); From 65d0130a5c09ad99a0b35e1d3cb67deac8f6190f Mon Sep 17 00:00:00 2001 From: Alexandru Dima Date: Tue, 5 Dec 2023 14:32:13 +0100 Subject: [PATCH 63/92] Pass in disposable store to disposableTimeout (#200031) Pass in disposable store to disposableTimeout (#193613) --- src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts b/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts index 4979526e24f..d56720dcebd 100644 --- a/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts +++ b/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts @@ -192,7 +192,7 @@ export class MarkerHoverParticipant implements IEditorHoverParticipant quickfixPlaceholderElement.textContent = nls.localize('checkingForQuickFixes', "Checking for quick fixes..."), 200)); + const updatePlaceholderDisposable = this.recentMarkerCodeActionsInfo && !this.recentMarkerCodeActionsInfo.hasCodeActions ? Disposable.None : disposableTimeout(() => quickfixPlaceholderElement.textContent = nls.localize('checkingForQuickFixes', "Checking for quick fixes..."), 200, disposables); if (!quickfixPlaceholderElement.textContent) { // Have some content in here to avoid flickering quickfixPlaceholderElement.textContent = String.fromCharCode(0xA0); //   From 0ccae8afbdb17e47365f51a987146b9354eacca9 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Tue, 5 Dec 2023 14:45:25 +0100 Subject: [PATCH 64/92] Build failed (fix #200032) (#200037) --- src/cli.js | 1 + src/main.js | 1 + src/vs/platform/environment/test/node/argv.test.ts | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cli.js b/src/cli.js index dd5ea5351ec..a8aaa1f0d54 100644 --- a/src/cli.js +++ b/src/cli.js @@ -19,6 +19,7 @@ const bootstrapNode = require('./bootstrap-node'); const product = require('../product.json'); // Enable portable support +// @ts-ignore bootstrapNode.configurePortable(product); // Enable ASAR support diff --git a/src/main.js b/src/main.js index a632301fe9d..17507dc73da 100644 --- a/src/main.js +++ b/src/main.js @@ -24,6 +24,7 @@ const { getUserDataPath } = require('./vs/platform/environment/node/userDataPath const { stripComments } = require('./vs/base/common/stripComments'); const { getUNCHost, addUNCHostToAllowlist } = require('./vs/base/node/unc'); /** @type {Partial} */ +// @ts-ignore const product = require('../product.json'); const { app, protocol, crashReporter, Menu } = require('electron'); diff --git a/src/vs/platform/environment/test/node/argv.test.ts b/src/vs/platform/environment/test/node/argv.test.ts index 20f1e237aa4..e3f75f2cde3 100644 --- a/src/vs/platform/environment/test/node/argv.test.ts +++ b/src/vs/platform/environment/test/node/argv.test.ts @@ -118,7 +118,7 @@ suite('parseArgs', () => { _: { type: 'string[]' } }), _: { type: 'string[]' } - } satisfies OptionDescriptions; + } as OptionDescriptions; assertParse( options1, ['testcmd', '--testArg=foo'], @@ -148,7 +148,7 @@ suite('parseArgs', () => { }), testX: { type: 'boolean', global: true, description: '' }, _: { type: 'string[]' } - } satisfies OptionDescriptions; + } as OptionDescriptions; assertParse( options2, ['testcmd', '--testArg=foo', '--testX'], From 0e2cfb716452b185de3eb248c8d6fbb5ef4a969d Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Tue, 5 Dec 2023 14:50:42 +0100 Subject: [PATCH 65/92] Minor improvements, reduce duplication --- src/vs/base/browser/canIUse.ts | 2 +- .../browser/controller/pointerHandler.ts | 64 +++++++------------ 2 files changed, 25 insertions(+), 41 deletions(-) diff --git a/src/vs/base/browser/canIUse.ts b/src/vs/base/browser/canIUse.ts index c126a33b45b..60261a974d0 100644 --- a/src/vs/base/browser/canIUse.ts +++ b/src/vs/base/browser/canIUse.ts @@ -43,5 +43,5 @@ export const BrowserFeatures = { // 'ontouchstart' in window always evaluates to true with typescript's modern typings. This causes `window` to be // `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast touch: 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0, - pointerEvents: mainWindow.PointerEvent && ('ontouchstart' in mainWindow || navigator.maxTouchPoints > 0 || navigator.maxTouchPoints > 0) + pointerEvents: mainWindow.PointerEvent && ('ontouchstart' in mainWindow || navigator.maxTouchPoints > 0) }; diff --git a/src/vs/editor/browser/controller/pointerHandler.ts b/src/vs/editor/browser/controller/pointerHandler.ts index fb3aa645670..632156865be 100644 --- a/src/vs/editor/browser/controller/pointerHandler.ts +++ b/src/vs/editor/browser/controller/pointerHandler.ts @@ -59,27 +59,7 @@ export class PointerEventHandler extends MouseHandler { event.preventDefault(); this.viewHelper.focusTextArea(); - const target = this._createMouseTarget(new EditorMouseEvent(event, false, this.viewHelper.viewDomNode), false); - - if (target.position) { - // this.viewController.moveTo(target.position); - this.viewController.dispatchMouse({ - position: target.position, - mouseColumn: target.position.column, - startedOnLineNumbers: false, - revealType: NavigationCommandRevealType.Minimal, - mouseDownCount: event.tapCount, - inSelectionMode: false, - altKey: false, - ctrlKey: false, - metaKey: false, - shiftKey: false, - - leftButton: false, - middleButton: false, - onInjectedText: target.type === MouseTargetType.CONTENT_TEXT && target.detail.injectedText !== null - }); - } + this._dispatchGesture(event, /*inSelectionMode*/false); } private onChange(event: GestureEvent): void { @@ -87,24 +67,28 @@ export class PointerEventHandler extends MouseHandler { this._context.viewModel.viewLayout.deltaScrollNow(-event.translationX, -event.translationY); } if (this._lastPointerType === 'pen') { - const target = this._createMouseTarget(new EditorMouseEvent(event, false, this.viewHelper.viewDomNode), false); - if (target.position) { - this.viewController.dispatchMouse({ - position: target.position, - mouseColumn: target.position.column, - startedOnLineNumbers: false, - revealType: NavigationCommandRevealType.Minimal, - mouseDownCount: event.tapCount, - inSelectionMode: true, - altKey: false, - ctrlKey: false, - metaKey: false, - shiftKey: false, - leftButton: false, - middleButton: false, - onInjectedText: target.type === MouseTargetType.CONTENT_TEXT && target.detail.injectedText !== null - }); - } + this._dispatchGesture(event, /*inSelectionMode*/true); + } + } + + private _dispatchGesture(event: GestureEvent, inSelectionMode: boolean): void { + const target = this._createMouseTarget(new EditorMouseEvent(event, false, this.viewHelper.viewDomNode), false); + if (target.position) { + this.viewController.dispatchMouse({ + position: target.position, + mouseColumn: target.position.column, + startedOnLineNumbers: false, + revealType: NavigationCommandRevealType.Minimal, + mouseDownCount: event.tapCount, + inSelectionMode, + altKey: false, + ctrlKey: false, + metaKey: false, + shiftKey: false, + leftButton: false, + middleButton: false, + onInjectedText: target.type === MouseTargetType.CONTENT_TEXT && target.detail.injectedText !== null + }); } } @@ -156,7 +140,7 @@ export class PointerHandler extends Disposable { constructor(context: ViewContext, viewController: ViewController, viewHelper: IPointerHandlerHelper) { super(); - if ((BrowserFeatures.pointerEvents)) { + if (BrowserFeatures.pointerEvents) { this.handler = this._register(new PointerEventHandler(context, viewController, viewHelper)); } else if (mainWindow.TouchEvent) { this.handler = this._register(new TouchHandler(context, viewController, viewHelper)); From bb2a74bc73737e09fe876ca73ee97a4d3ba87202 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 5 Dec 2023 14:55:59 +0100 Subject: [PATCH 66/92] fix https://github.com/microsoft/vscode/issues/177591 (#200040) --- .../suggest/browser/suggestController.ts | 12 ++++- .../test/browser/suggestController.test.ts | 52 +++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/vs/editor/contrib/suggest/browser/suggestController.ts b/src/vs/editor/contrib/suggest/browser/suggestController.ts index d33ce936fe5..1ead2fb39ee 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestController.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestController.ts @@ -353,7 +353,17 @@ export class SuggestController implements IEditorContribution { const scrollState = StableEditorScrollState.capture(this.editor); this.editor.executeEdits( 'suggestController.additionalTextEdits.sync', - item.completion.additionalTextEdits.map(edit => EditOperation.replaceMove(Range.lift(edit.range), edit.text)) + item.completion.additionalTextEdits.map(edit => { + let range = Range.lift(edit.range); + if (range.startLineNumber === item.position.lineNumber && range.startColumn > item.position.column) { + // shift additional edit when it is "after" the completion insertion position + const columnDelta = this.editor.getPosition()!.column - item.position.column; + const startColumnDelta = columnDelta; + const endColumnDelta = Range.spansMultipleLines(range) ? 0 : columnDelta; + range = new Range(range.startLineNumber, range.startColumn + startColumnDelta, range.endLineNumber, range.endColumn + endColumnDelta); + } + return EditOperation.replaceMove(range, edit.text); + }) ); scrollState.restoreRelativeVerticalPositionOfCursor(this.editor); diff --git a/src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts b/src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts index f24030cb93e..381e2663d3e 100644 --- a/src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts @@ -616,4 +616,56 @@ suite('SuggestController', function () { await p2; }); + + test('Ranges where additionalTextEdits are applied are not appropriate when characters are typed #177591', async function () { + disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { + _debugDisplayName: 'test', + provideCompletionItems(doc, pos) { + return { + suggestions: [{ + kind: CompletionItemKind.Snippet, + label: 'aaa', + insertText: 'aaa', + range: Range.fromPositions(pos), + additionalTextEdits: [{ + range: Range.fromPositions(pos.delta(0, 10)), + text: 'aaa' + }] + }] + }; + } + })); + + { // PART1 - no typing + editor.setValue(`123456789123456789`); + editor.setSelection(new Selection(1, 1, 1, 1)); + const p1 = Event.toPromise(controller.model.onDidSuggest); + controller.triggerSuggest(); + + const e = await p1; + assert.strictEqual(e.completionModel.items.length, 1); + assert.strictEqual(e.completionModel.items[0].textLabel, 'aaa'); + + controller.acceptSelectedSuggestion(false, false); + + assert.strictEqual(editor.getValue(), 'aaa1234567891aaa23456789'); + } + + { // PART2 - typing + editor.setValue(`123456789123456789`); + editor.setSelection(new Selection(1, 1, 1, 1)); + const p1 = Event.toPromise(controller.model.onDidSuggest); + controller.triggerSuggest(); + + const e = await p1; + assert.strictEqual(e.completionModel.items.length, 1); + assert.strictEqual(e.completionModel.items[0].textLabel, 'aaa'); + + editor.trigger('keyboard', 'type', { text: 'aa' }); + + controller.acceptSelectedSuggestion(false, false); + + assert.strictEqual(editor.getValue(), 'aaa1234567891aaa23456789'); + } + }); }); From 838acd0f20f99113b23e585c2ddc20549308b7d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Mangeonjean?= Date: Tue, 5 Dec 2023 15:05:37 +0100 Subject: [PATCH 67/92] Take into account models created beforehand (#199652) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: take into account model created beforehand Co-authored-by: LoĂŻc Mangeonjean --- .../contrib/semanticTokens/browser/documentSemanticTokens.ts | 5 +++++ src/vs/workbench/contrib/search/browser/searchModel.ts | 1 + 2 files changed, 6 insertions(+) diff --git a/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts b/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts index 10ad6211d76..72e01d3330a 100644 --- a/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts +++ b/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts @@ -59,6 +59,11 @@ export class DocumentSemanticTokensFeature extends Disposable { } } }; + modelService.getModels().forEach(model => { + if (isSemanticColoringEnabled(model, themeService, configurationService)) { + register(model); + } + }); this._register(modelService.onModelAdded((model) => { if (isSemanticColoringEnabled(model, themeService, configurationService)) { register(model); diff --git a/src/vs/workbench/contrib/search/browser/searchModel.ts b/src/vs/workbench/contrib/search/browser/searchModel.ts index 82b4121cf6a..69f0df2bacd 100644 --- a/src/vs/workbench/contrib/search/browser/searchModel.ts +++ b/src/vs/workbench/contrib/search/browser/searchModel.ts @@ -1608,6 +1608,7 @@ export class SearchResult extends Disposable { super(); this._rangeHighlightDecorations = this.instantiationService.createInstance(RangeHighlightDecorations); + this.modelService.getModels().forEach(model => this.onModelAdded(model)); this._register(this.modelService.onModelAdded(model => this.onModelAdded(model))); this._register(this.notebookEditorService.onDidAddNotebookEditor(widget => { From c7be45d50f447652943f37f23f3e44763276d33a Mon Sep 17 00:00:00 2001 From: Yesterday17 Date: Tue, 5 Dec 2023 22:06:09 +0800 Subject: [PATCH 68/92] fix ExtHostLabelService typo (#198855) --- src/vs/workbench/api/common/extHost.api.impl.ts | 2 +- src/vs/workbench/api/common/extHost.protocol.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index 9d5fe872e94..dedd24fa4bb 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -194,7 +194,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I const extHostShare = rpcProtocol.set(ExtHostContext.ExtHostShare, new ExtHostShare(rpcProtocol, uriTransformer)); const extHostComment = rpcProtocol.set(ExtHostContext.ExtHostComments, createExtHostComments(rpcProtocol, extHostCommands, extHostDocuments)); const extHostProgress = rpcProtocol.set(ExtHostContext.ExtHostProgress, new ExtHostProgress(rpcProtocol.getProxy(MainContext.MainThreadProgress))); - const extHostLabelService = rpcProtocol.set(ExtHostContext.ExtHosLabelService, new ExtHostLabelService(rpcProtocol)); + const extHostLabelService = rpcProtocol.set(ExtHostContext.ExtHostLabelService, new ExtHostLabelService(rpcProtocol)); const extHostTheming = rpcProtocol.set(ExtHostContext.ExtHostTheming, new ExtHostTheming(rpcProtocol)); const extHostAuthentication = rpcProtocol.set(ExtHostContext.ExtHostAuthentication, new ExtHostAuthentication(rpcProtocol)); const extHostTimeline = rpcProtocol.set(ExtHostContext.ExtHostTimeline, new ExtHostTimeline(rpcProtocol, extHostCommands)); diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 592372edbe6..bb3e2374f88 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -2826,7 +2826,7 @@ export const ExtHostContext = { ExtHostUriOpeners: createProxyIdentifier('ExtHostUriOpeners'), ExtHostProfileContentHandlers: createProxyIdentifier('ExtHostProfileContentHandlers'), ExtHostOutputService: createProxyIdentifier('ExtHostOutputService'), - ExtHosLabelService: createProxyIdentifier('ExtHostLabelService'), + ExtHostLabelService: createProxyIdentifier('ExtHostLabelService'), ExtHostNotebook: createProxyIdentifier('ExtHostNotebook'), ExtHostNotebookDocuments: createProxyIdentifier('ExtHostNotebookDocuments'), ExtHostNotebookEditors: createProxyIdentifier('ExtHostNotebookEditors'), From d13bfe535a277d9191b9d8d75c506d7d53c5f6c1 Mon Sep 17 00:00:00 2001 From: Simon Siefke Date: Tue, 5 Dec 2023 15:07:19 +0100 Subject: [PATCH 69/92] fix: memory leak in defaultWorkerFactory (#198710) --- src/vs/base/browser/defaultWorkerFactory.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/vs/base/browser/defaultWorkerFactory.ts b/src/vs/base/browser/defaultWorkerFactory.ts index 4f42810f0bd..71391b063f3 100644 --- a/src/vs/base/browser/defaultWorkerFactory.ts +++ b/src/vs/base/browser/defaultWorkerFactory.ts @@ -7,6 +7,7 @@ import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; import { onUnexpectedError } from 'vs/base/common/errors'; import { COI } from 'vs/base/common/network'; import { IWorker, IWorkerCallback, IWorkerFactory, logOnceWebWorkerWarning } from 'vs/base/common/worker/simpleWorker'; +import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; const ttPolicy = createTrustedTypesPolicy('defaultWorkerFactory', { createScriptURL: value => value }); @@ -84,13 +85,14 @@ function isPromiseLike(obj: any): obj is PromiseLike { * A worker that uses HTML5 web workers so that is has * its own global scope and its own thread. */ -class WebWorker implements IWorker { +class WebWorker extends Disposable implements IWorker { private readonly id: number; private readonly label: string; private worker: Promise | null; constructor(moduleId: string, id: number, label: string, onMessageCallback: IWorkerCallback, onErrorCallback: (err: any) => void) { + super(); this.id = id; this.label = label; const workerOrPromise = getWorker(label); @@ -109,6 +111,15 @@ class WebWorker implements IWorker { w.addEventListener('error', onErrorCallback); } }); + this._register(toDisposable(() => { + this.worker?.then(w => { + w.onmessage = null; + w.onmessageerror = null; + w.removeEventListener('error', onErrorCallback); + w.terminate(); + }); + this.worker = null; + })); } public getId(): number { @@ -126,10 +137,7 @@ class WebWorker implements IWorker { }); } - public dispose(): void { - this.worker?.then(w => w.terminate()); - this.worker = null; - } + } export class DefaultWorkerFactory implements IWorkerFactory { From af8451a41e536832c3c7dab74da6eff42e332419 Mon Sep 17 00:00:00 2001 From: Joyce Gu <31866996+JoyceGu@users.noreply.github.com> Date: Tue, 5 Dec 2023 06:11:06 -0800 Subject: [PATCH 70/92] add JS Vector DB libraries (#199980) add Vector DB libraries --- .../tags/electron-sandbox/workspaceTagsService.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/vs/workbench/contrib/tags/electron-sandbox/workspaceTagsService.ts b/src/vs/workbench/contrib/tags/electron-sandbox/workspaceTagsService.ts index 7fb30ccbbb6..cc7ab8af2ae 100644 --- a/src/vs/workbench/contrib/tags/electron-sandbox/workspaceTagsService.ts +++ b/src/vs/workbench/contrib/tags/electron-sandbox/workspaceTagsService.ts @@ -59,11 +59,16 @@ const ModulesToLookFor = [ 'aws-amplify', 'azure', 'azure-storage', + 'chroma', + 'faiss', 'firebase', '@google-cloud/common', 'heroku-cli', 'langchain', + 'milvus', 'openai', + 'pinecone', + 'qdrant', // Office and Sharepoint packages '@microsoft/teams-js', '@microsoft/office-js', @@ -463,8 +468,13 @@ export class WorkspaceTagsService implements IWorkspaceTagsService { "workspace.npm.playwright-firefox" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.playwright-webkit" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.cypress" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, + "workspace.npm.chroma" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, + "workspace.npm.faiss" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.langchain" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, + "workspace.npm.milvus" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.openai" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, + "workspace.npm.pinecone" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, + "workspace.npm.qdrant" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.nightwatch" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.protractor" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.puppeteer" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, From b0d60e8e2e90bc9d7913611c176d14b8eb91b532 Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Tue, 5 Dec 2023 14:17:02 +0000 Subject: [PATCH 71/92] Add the new Less grammar back in (#200043) This reverts commit 95c05bf57b5e98320bf61f67438b14109495ddf0. --- extensions/less/build/update-grammar.js | 19 + extensions/less/cgmanifest.json | 6 +- extensions/less/package.json | 2 +- extensions/less/syntaxes/less.tmLanguage.json | 5367 +++++++++++- extensions/theme-defaults/themes/dark_vs.json | 14 +- .../theme-defaults/themes/hc_black.json | 14 +- .../theme-defaults/themes/hc_light.json | 9 +- .../theme-defaults/themes/light_vs.json | 9 +- .../themes/quietlight-color-theme.json | 3 +- .../tomorrow-night-blue-color-theme.json | 5 +- .../test/colorize-results/14119_less.json | 90 +- .../test-cssvariables_less.json | 366 +- .../test-cssvariables_scss.json | 96 +- .../colorize-results/test-variables_css.json | 96 +- .../test/colorize-results/test_css.json | 368 +- .../test/colorize-results/test_less.json | 7560 +++++++++-------- .../test/colorize-results/test_scss.json | 2192 ++--- 17 files changed, 10470 insertions(+), 5746 deletions(-) create mode 100644 extensions/less/build/update-grammar.js diff --git a/extensions/less/build/update-grammar.js b/extensions/less/build/update-grammar.js new file mode 100644 index 00000000000..d0b2ec9025f --- /dev/null +++ b/extensions/less/build/update-grammar.js @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +var updateGrammar = require('vscode-grammar-updater'); + +function adaptLess(grammar) { + grammar.name = 'Less'; + grammar.scopeName = 'source.css.less'; +} + +async function updateGrammars() { + await updateGrammar.update('radium-v/Better-Less', 'Syntaxes/Better%20Less.tmLanguage', './syntaxes/less.tmLanguage.json', adaptLess, 'master'); +} + +updateGrammars(); + diff --git a/extensions/less/cgmanifest.json b/extensions/less/cgmanifest.json index 1951ef04bee..663e1cc4daf 100644 --- a/extensions/less/cgmanifest.json +++ b/extensions/less/cgmanifest.json @@ -5,12 +5,12 @@ "type": "git", "git": { "name": "language-less", - "repositoryUrl": "https://github.com/atom/language-less", - "commitHash": "87d4d59e8de6796b506b81a16e1dc1fafc99d30f" + "repositoryUrl": "https://github.com/radium-v/Better-Less", + "commitHash": "05de79f600227201e35f07a49f07acce80e49dbf" } }, "license": "MIT", - "version": "0.34.2" + "version": "0.6.1" } ], "version": 1 diff --git a/extensions/less/package.json b/extensions/less/package.json index 5974be71933..96301ba0fd1 100644 --- a/extensions/less/package.json +++ b/extensions/less/package.json @@ -9,7 +9,7 @@ "vscode": "*" }, "scripts": { - "update-grammar": "node ../node_modules/vscode-grammar-updater/bin atom/language-less grammars/less.cson ./syntaxes/less.tmLanguage.json" + "update-grammar": "node ./build/update-grammar.js" }, "contributes": { "languages": [ diff --git a/extensions/less/syntaxes/less.tmLanguage.json b/extensions/less/syntaxes/less.tmLanguage.json index 3f0b88a29d7..3d2c6bdaeb0 100644 --- a/extensions/less/syntaxes/less.tmLanguage.json +++ b/extensions/less/syntaxes/less.tmLanguage.json @@ -1,183 +1,155 @@ { "information_for_contributors": [ - "This file has been converted from https://github.com/atom/language-less/blob/master/grammars/less.cson", + "This file has been converted from https://github.com/radium-v/Better-Less/blob/master/Syntaxes/Better%20Less.tmLanguage", "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/atom/language-less/commit/87d4d59e8de6796b506b81a16e1dc1fafc99d30f", + "version": "https://github.com/radium-v/Better-Less/commit/05de79f600227201e35f07a49f07acce80e49dbf", "name": "Less", "scopeName": "source.css.less", "patterns": [ { - "include": "#strings" + "include": "#comment-block" }, { + "include": "#less-namespace-accessors" + }, + { + "include": "#less-extend" + }, + { + "include": "#at-rules" + }, + { + "include": "#less-variable-assignment" + }, + { + "include": "#property-list" + }, + { + "include": "#selector" + } + ], + "repository": { + "angle-type": { "captures": { "1": { - "name": "entity.other.attribute-name.class.mixin.css" + "name": "keyword.other.unit.less" } }, - "match": "(\\.[_a-zA-Z][a-zA-Z0-9_-]*(?=\\())" + "match": "(?i:[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))(deg|grad|rad|turn))\\b", + "name": "constant.numeric.less" }, - { + "at-charset": { + "begin": "\\s*((@)charset\\b)\\s*", "captures": { "1": { - "name": "entity.other.attribute-name.class.css" + "name": "keyword.control.at-rule.charset.less" }, "2": { - "name": "punctuation.definition.entity.css" - }, - "4": { - "name": "variable.other.interpolation.less" - } - }, - "match": "((\\.)([_a-zA-Z]|(@{[a-zA-Z0-9_-]+}))[a-zA-Z0-9_-]*)" - }, - { - "captures": { - "0": { - "name": "entity.other.attribute-name.parent-selector.css" - }, - "1": { - "name": "punctuation.definition.entity.css" - } - }, - "match": "(&)[a-zA-Z0-9_-]*" - }, - { - "begin": "(format|local|url|attr|counter|counters)\\s*(\\()", - "beginCaptures": { - "1": { - "name": "support.function.misc.css" - }, - "2": { - "name": "punctuation.section.function.css" - } - }, - "end": "\\)", - "endCaptures": { - "0": { - "name": "punctuation.section.function.css" + "name": "punctuation.definition.keyword.less" } }, + "end": "\\s*((?=;|$))", + "name": "meta.at-rule.charset.less", "patterns": [ { - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.css" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.css" - } - }, - "name": "string.quoted.single.css", - "patterns": [ - { - "match": "\\\\.", - "name": "constant.character.escape.css" - } - ] - }, - { - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.css" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.css" - } - }, - "name": "string.quoted.double.css", - "patterns": [ - { - "match": "\\\\(\\d{1,6}|.)", - "name": "constant.character.escape.css" - } - ] - }, - { - "match": "[^'\") \\t]+", - "name": "variable.parameter.misc.css" + "include": "#literal-string" } ] }, - { - "match": "(#)([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\\b(?!.*?(?(['\"])(?:[^\\\\]|\\\\.)*?(\\6)))))?\\s*(\\])", - "name": "meta.attribute-selector.css" + "end": "\\s*(\\})", + "endCaptures": { + "1": { + "name": "punctuation.definition.block.begin.less" + } + }, + "name": "meta.at-rule.counter-style.less", + "patterns": [ + { + "include": "#comment-block" + }, + { + "include": "#rule-list" + } + ] }, - { - "begin": "((@)import\\b)", + "at-custom-media": { + "begin": "(?=\\s*@custom-media\\b)", + "end": "\\s*(?=;)", + "name": "meta.at-rule.custom-media.less", + "patterns": [ + { + "captures": { + "0": { + "name": "punctuation.section.property-list.less" + } + }, + "match": "\\s*;" + }, + { + "captures": { + "1": { + "name": "keyword.control.at-rule.custom-media.less" + }, + "2": { + "name": "punctuation.definition.keyword.less" + }, + "3": { + "name": "support.constant.custom-media.less" + } + }, + "match": "\\s*((@)custom-media)(?=.*?)" + }, + { + "include": "#media-query-list" + } + ] + }, + "at-font-face": { + "begin": "\\s*((@)font-face)\\s*(?=\\{|$)", + "captures": { + "1": { + "name": "keyword.control.at-rule.font-face.less" + }, + "2": { + "name": "punctuation.definition.keyword.less" + } + }, + "end": "\\s*(\\})", + "endCaptures": { + "1": { + "name": "punctuation.definition.block.end.less" + } + }, + "name": "meta.at-rule.font-face.less", + "patterns": [ + { + "include": "#comment-block" + }, + { + "include": "#rule-list" + } + ] + }, + "at-import": { + "begin": "\\s*((@)import\\b)\\s*", "beginCaptures": { "1": { "name": "keyword.control.at-rule.import.less" @@ -186,357 +158,4860 @@ "name": "punctuation.definition.keyword.less" } }, - "end": ";", + "end": "\\;", "endCaptures": { "0": { - "name": "punctuation.terminator.rule.css" + "name": "punctuation.terminator.rule.less" } }, - "name": "meta.at-rule.import.css", + "name": "meta.at-rule.import.less", "patterns": [ { - "match": "(?<=\\(|,|\\s)\\b(reference|optional|once|multiple|less|inline)\\b(?=\\)|,)", - "name": "keyword.control.import.option.less" + "include": "#url-function" }, { - "include": "#brace_round" + "include": "#less-variables" }, { - "include": "source.css#commas" - }, - { - "include": "#strings" - } - ] - }, - { - "captures": { - "1": { - "name": "keyword.control.at-rule.fontface.css" - }, - "2": { - "name": "punctuation.definition.keyword.css" - } - }, - "match": "^\\s*((@)font-face\\b)", - "name": "meta.at-rule.fontface.css" - }, - { - "captures": { - "1": { - "name": "keyword.control.at-rule.media.css" - }, - "2": { - "name": "punctuation.definition.keyword.css" - } - }, - "match": "^\\s*((@)media\\b)", - "name": "meta.at-rule.media.css" - }, - { - "include": "source.css#media-features" - }, - { - "match": "\\b(tv|tty|screen|projection|print|handheld|embossed|braille|aural|all)\\b", - "name": "support.constant.media-type.media.css" - }, - { - "match": "\\b(portrait|landscape)\\b", - "name": "support.constant.property-value.media-property.media.css" - }, - { - "captures": { - "1": { - "name": "support.function.less" - } - }, - "match": "(\\.[a-zA-Z0-9_-]+)\\s*(;|\\()" - }, - { - "begin": "(^[ \\t]+)?(?=//)", - "beginCaptures": { - "1": { - "name": "punctuation.whitespace.comment.leading.less" - } - }, - "end": "(?!\\G)", - "patterns": [ - { - "begin": "//", - "beginCaptures": { - "0": { - "name": "punctuation.definition.comment.less" - } - }, - "end": "\\n", - "name": "comment.line.double-slash.less" - } - ] - }, - { - "match": "(@|\\-\\-)[\\w-]+(?=\\s*)", - "name": "variable.other.less", - "captures": { - "1": { - "name": "punctuation.definition.variable.less" - } - } - }, - { - "include": "#variable_interpolation" - }, - { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.section.property-list.begin.bracket.curly.css" - } - }, - "end": "}", - "endCaptures": { - "0": { - "name": "punctuation.section.property-list.end.bracket.curly.css" - } - }, - "name": "meta.property-list.css", - "patterns": [ - { - "include": "source.css#pseudo-elements" - }, - { - "include": "source.css#pseudo-classes" - }, - { - "include": "source.css#tag-names" - }, - { - "include": "source.css#commas" - }, - { - "include": "#variable_interpolation" - }, - { - "include": "source.css#property-names" - }, - { - "include": "#property_values" - }, - { - "include": "$self" - } - ] - }, - { - "match": "\\!\\s*important", - "name": "keyword.other.important.css" - }, - { - "match": "\\*|\\/|\\-|\\+|~|=|<=|>=|<|>", - "name": "keyword.operator.less" - }, - { - "match": "\\b(not|and|when)\\b", - "name": "keyword.control.logical.operator.less" - }, - { - "include": "source.css#tag-names" - }, - { - "match": "(?)=?))\\s*" + }, + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.group.less", + "patterns": [ + { + "include": "#less-logical-comparisons" + } + ] + }, + { + "match": "\\btrue|false\\b", + "name": "constant.language.less" + }, + { + "match": ",", + "name": "punctuation.separator.less" + }, + { + "include": "#property-values" + }, + { + "include": "#selectors" + }, + { + "include": "#unquoted-string" + } + ] + }, + "less-math": { + "patterns": [ + { + "match": "[-\\+\\*\\/]", + "name": "keyword.operator.arithmetic.less" + }, + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.group.less", + "patterns": [ + { + "include": "#less-math" + } + ] + }, + { + "include": "#numeric-values" + }, + { + "include": "#less-variables" + } + ] + }, + "less-math-functions": { + "patterns": [ + { + "begin": "\\b(ceil|floor|percentage|round|sqrt|abs|a?(sin|cos|tan))(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.math.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#less-variables" + }, + { + "include": "#numeric-values" + } + ] + } + ] + }, + { + "captures": { + "2": { + "name": "support.function.math.less" + }, + "3": { + "name": "punctuation.definition.group.begin.less" + }, + "4": { + "name": "punctuation.definition.group.end.less" + } + }, + "match": "((pi)(\\()(\\)))", + "name": "meta.function-call.less" + }, + { + "begin": "\\b(pow|m(od|in|ax))(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.math.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#less-variables" + }, + { + "include": "#numeric-values" + }, + { + "include": "#comma-delimiter" + } + ] + } + ] + } + ] + }, + "less-misc-functions": { + "patterns": [ + { + "begin": "\\b(color)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.color.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#literal-string" + } + ] + } + ] + }, + { + "begin": "\\b(image-(size|width|height))(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.image.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#literal-string" + }, + { + "include": "#unquoted-string" + } + ] + } + ] + }, + { + "begin": "\\b(convert|unit)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.convert.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#less-variables" + }, + { + "include": "#dimensions" + }, + { + "include": "#numeric-values" + }, + { + "include": "#literal-string" + }, + { + "include": "#comma-delimiter" + }, + { + "match": "((c|m)?m|in|p(t|c|x)|m?s|g?rad|deg|turn|%|r?em|ex|ch)", + "name": "keyword.other.unit.less" + } + ] + } + ] + }, + { + "begin": "\\b(data-uri)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.data-uri.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#less-variables" + }, + { + "include": "#literal-string" + }, + { + "captures": { + "1": { + "name": "punctuation.separator.less" + } + }, + "match": "\\s*(?:(,))" + } + ] + } + ] + }, + { + "captures": { + "2": { + "name": "punctuation.definition.group.begin.less" + }, + "3": { + "name": "punctuation.definition.group.end.less" + } + }, + "match": "\\b(default(\\()(\\)))\\b", + "name": "support.function.default.less" + }, + { + "begin": "\\b(get-unit)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.get-unit.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#dimensions" + } + ] + } + ] + }, + { + "begin": "\\b(svg-gradient)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.svg-gradient.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#angle-type" + }, + { + "include": "#comma-delimiter" + }, + { + "include": "#color-values" + }, + { + "include": "#percentage-type" + }, + { + "include": "#length-type" + }, + { + "match": "\\bto\\b", + "name": "keyword.other.less" + }, + { + "match": "\\b(top|right|bottom|left|center)\\b", + "name": "support.constant.property-value.less" + }, + { + "match": "\\b(at|circle|ellipse)\\b", + "name": "keyword.other.less" + } + ] + } + ] + } + ] + }, + "less-mixin-guards": { + "patterns": [ + { + "begin": "\\s*(and|not|or)?\\s*(?=\\()", + "beginCaptures": { + "1": { + "name": "keyword.operator.logical.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "name": "meta.group.less", + "patterns": [ + { + "include": "#less-variable-comparison" + }, + { + "captures": { + "1": { + "name": "meta.group.less" + }, + "2": { + "name": "punctuation.definition.group.begin.less" + }, + "3": { + "name": "punctuation.definition.group.end.less" + } + }, + "match": "default((\\()(\\)))", + "name": "support.function.default.less" + }, + { + "include": "#property-values" + }, + { + "include": "#less-logical-comparisons" + }, + { + "include": "$self" + } + ] + } + ] + } + ] + }, + "less-namespace-accessors": { + "patterns": [ + { + "begin": "(?=\\s*when\\b)", + "end": "\\s*(?:(,)|(?=[{;]))", + "endCaptures": { + "1": { + "name": "punctuation.definition.block.end.less" + } + }, + "name": "meta.conditional.guarded-namespace.less", + "patterns": [ + { + "captures": { + "1": { + "name": "keyword.control.conditional.less" + }, + "2": { + "name": "punctuation.definition.keyword.less" + } + }, + "match": "\\s*(when)(?=.*?)" + }, + { + "include": "#less-mixin-guards" + }, + { + "include": "#comma-delimiter" + }, + { + "begin": "\\s*(\\{)", + "beginCaptures": { + "1": { + "name": "punctuation.section.property-list.begin.less" + } + }, + "end": "(?=\\})", + "name": "meta.block.less", + "patterns": [ + { + "include": "#rule-list-body" + } + ] + }, + { + "include": "#selectors" + } + ] + }, + { + "begin": "(\\()", + "beginCaptures": { + "1": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(\\))", + "endCaptures": { + "1": { + "name": "punctuation.definition.group.end.less" + }, + "2": { + "name": "punctuation.terminator.rule.less" + } + }, + "name": "meta.group.less", + "patterns": [ + { + "include": "#less-variable-assignment" + }, + { + "include": "#comma-delimiter" + }, + { + "captures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "match": "\\s*(;)|(?=[})])" + }, + { + "include": "#property-values" + }, + { + "include": "#rule-list-body" + } + ] + } + ] + }, + "less-number-units": { + "patterns": [ + { + "match": "\\b((c|m)?m|in|p(t|c)|m?s|g?rad|deg|turn)\\b", + "name": "keyword.other.unit.less" + }, + { + "match": "\\b(r?em|ex|ch|vw|vh|vmin|vmax|cm|mm|q|in|pt|pc|px|fr|s|ms|Hz|kHz|dpi|dpcm|dppx|deg|grad|rad|turn)\\b" + } + ] + }, + "less-string-functions": { + "patterns": [ + { + "begin": "\\b(e(scape)?)(?=\\()\\b", + "beginCaptures": { + "1": { + "name": "support.function.escape.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#less-variables" + }, + { + "include": "#comma-delimiter" + }, + { + "include": "#literal-string" + }, + { + "include": "#unquoted-string" + } + ] + } + ] + }, + { + "begin": "\\s*(%)(?=\\()\\s*", + "beginCaptures": { + "1": { + "name": "support.function.format.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#less-variables" + }, + { + "include": "#comma-delimiter" + }, + { + "include": "#literal-string" + }, + { + "include": "#property-values" + } + ] + } + ] + }, + { + "begin": "\\b(replace)(?=\\()\\b", + "beginCaptures": { + "1": { + "name": "support.function.replace.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#less-variables" + }, + { + "include": "#comma-delimiter" + }, + { + "include": "#literal-string" + }, + { + "include": "#property-values" + } + ] + } + ] + } + ] + }, + "less-strings": { + "patterns": [ + { + "begin": "(~)('|\")", + "beginCaptures": { + "1": { + "name": "constant.character.escape.less" + }, + "2": { + "name": "punctuation.definition.string.begin.less" + } + }, + "contentName": "markup.raw.inline.less", + "end": "('|\")|(\\n)", + "endCaptures": { + "1": { + "name": "punctuation.definition.string.end.less" + }, + "2": { + "name": "invalid.illegal.newline.less" + } + }, + "name": "string.quoted.other.less", + "patterns": [ + { + "include": "#string-content" + } + ] + } + ] + }, + "less-type-functions": { + "patterns": [ + { + "begin": "\\b(is(number|string|color|keyword|url|pixel|em|percentage|ruleset))(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.type.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#property-values" + } + ] + } + ] + }, + { + "begin": "\\b(isunit)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.type.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#property-values" + }, + { + "include": "#comma-delimiter" + }, + { + "match": "(?x)\\b((?i:em|ex|ch|rem)|(?i:vw|vh|vmin|vmax)|(?i:cm|mm|q|in|pt|pc|px|fr)|(?i:deg|grad|rad|turn)|(?i:s|ms)|(?i:Hz|kHz)|(?i:dpi|dpcm|dppx))\\b", + "name": "keyword.other.unit.less" + } + ] + } + ] + }, + { + "begin": "\\b(isdefined)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.type.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#less-variables" + } + ] + } + ] + } + ] + }, + "less-variable-assignment": { + "patterns": [ + { + "begin": "(@)(-?(?:[[-\\w][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[-\\w][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*)", + "beginCaptures": { + "0": { + "name": "variable.other.readwrite.less" + }, + "1": { + "name": "punctuation.definition.variable.less" + }, + "2": { + "name": "support.other.variable.less" + } + }, + "end": "\\s*(;|(\\.{3})|(?=\\)))", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + }, + "2": { + "name": "keyword.operator.spread.less" + } + }, + "name": "meta.property-value.less", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "match": "(((\\+_?)?):)([\\s\\t]*)" + }, + { + "include": "#property-values" + }, + { + "include": "#comma-delimiter" + }, + { + "include": "#property-list" + }, + { + "include": "#unquoted-string" + } + ] + } + ] + }, + "less-variable-comparison": { + "patterns": [ + { + "begin": "(@{1,2})([-]?([_a-z]|[^\\x{00}-\\x{7F}]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[-\\w][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*)", + "beginCaptures": { + "0": { + "name": "variable.other.readwrite.less" + }, + "1": { + "name": "punctuation.definition.variable.less" + }, + "2": { + "name": "support.other.variable.less" + } + }, + "end": "\\s*(?=\\))", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "patterns": [ + { + "captures": { + "1": { + "name": "keyword.operator.logical.less" + } + }, + "match": "\\s*(=|((<|>)=?))\\s*" + }, + { + "match": "\\btrue\\b", + "name": "constant.language.less" + }, + { + "include": "#property-values" + }, + { + "include": "#selectors" + }, + { + "include": "#unquoted-string" + }, + { + "match": ",", + "name": "punctuation.separator.less" + } + ] + } + ] + }, + "less-variable-interpolation": { + "captures": { + "1": { + "name": "punctuation.definition.variable.less" + }, + "2": { + "name": "punctuation.definition.expression.less" + }, + "3": { + "name": "support.other.variable.less" + }, + "4": { + "name": "punctuation.definition.expression.less" + } + }, + "match": "(@)(\\{)([-\\w]+)(\\})", + "name": "variable.other.readwrite.less" + }, + "less-variables": { + "captures": { + "1": { + "name": "punctuation.definition.variable.less" + }, + "2": { + "name": "support.other.variable.less" + } + }, + "match": "\\s*(@@?)([-\\w]+)", + "name": "variable.other.readwrite.less" + }, + "literal-string": { + "patterns": [ + { + "begin": "'", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.less" + } + }, + "end": "(')|(\\n)", + "endCaptures": { + "1": { + "name": "punctuation.definition.string.end.less" + }, + "2": { + "name": "invalid.illegal.newline.less" + } + }, + "name": "string.quoted.single.less", + "patterns": [ + { + "include": "#string-content" + } + ] + }, + { + "begin": "\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.less" + } + }, + "end": "(\")|(\\n)", + "endCaptures": { + "1": { + "name": "punctuation.definition.string.end.less" + }, + "2": { + "name": "invalid.illegal.newline.less" + } + }, + "name": "string.quoted.double.less", + "patterns": [ + { + "include": "#string-content" + } + ] + }, + { + "include": "#less-strings" + } + ] + }, + "local-function": { + "begin": "\\b(local)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.font-face.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#unquoted-string" + } + ] + } + ] + }, + "media-query": { + "begin": "\\s*(only|not)?\\s*(all|aural|braille|embossed|handheld|print|projection|screen|tty|tv)?", + "beginCaptures": { + "1": { + "name": "keyword.operator.logic.media.less" + }, + "2": { + "name": "support.constant.media.less" + } + }, + "end": "\\s*(?:(,)|(?=[{;]))", + "endCaptures": { + "1": { + "name": "punctuation.definition.arbitrary-repetition.less" + } + }, + "patterns": [ + { + "include": "#less-variables" + }, + { + "include": "#custom-property-name" + }, + { + "begin": "\\s*(and)?\\s*(\\()\\s*", + "beginCaptures": { + "1": { + "name": "keyword.operator.logic.media.less" + }, + "2": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.group.less", + "patterns": [ + { + "begin": "((-webkit-|-o-)?((min|max)-)?(-moz-)?(((device-)?(height|width|aspect-ratio|pixel-ratio))|(color(-index)?)|monochrome|resolution))|grid|scan|orientation\\s*(?=[:)])", + "beginCaptures": { + "0": { + "name": "support.type.property-name.media.less" + }, + "2": { + "name": "support.type.vendor-prefix.less" + }, + "5": { + "name": "support.type.vendor-prefix.less" + } + }, + "end": "(((\\+_?)?):)|(?=\\))", + "endCaptures": { + "1": { + "name": "punctuation.separator.key-value.less" + } + } + }, + { + "match": "\\b(portrait|landscape|progressive|interlace)", + "name": "support.constant.property-value.less" + }, + { + "captures": { + "1": { + "name": "constant.numeric.less" + }, + "2": { + "name": "keyword.operator.arithmetic.less" + }, + "3": { + "name": "constant.numeric.less" + } + }, + "match": "\\s*(\\d+)(/)(\\d+)" + }, + { + "include": "#less-math" + } + ] + } + ] + }, + "media-query-list": { + "begin": "\\s*(?=[^{;])", + "end": "\\s*(?=[{;])", + "patterns": [ + { + "include": "#media-query" + } + ] + }, + "minmax-function": { + "begin": "\\b(minmax)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.grid.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#less-variables" + }, + { + "include": "#length-type" + }, + { + "include": "#comma-delimiter" + }, + { + "match": "\\b(max-content|min-content)\\b", + "name": "support.constant.property-value.less" + } + ] + } + ] + }, + "number-type": { + "match": "[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))", + "name": "constant.numeric.less" + }, + "numeric-values": { + "patterns": [ + { + "include": "#dimensions" + }, + { + "include": "#percentage-type" + }, + { + "include": "#number-type" + } + ] + }, + "percentage-type": { + "captures": { + "1": { + "name": "keyword.other.unit.less" + } + }, + "match": "[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))(%)", + "name": "constant.numeric.less" + }, + "property-list": { + "patterns": [ + { + "begin": "(?=(?=[^;]*)\\{)", + "end": "\\}", + "endCaptures": { + "0": { + "name": "punctuation.definition.block.end.less" + } + }, + "patterns": [ + { + "include": "#rule-list" + } + ] + } + ] + }, + "property-value-constants": { + "patterns": [ + { + "match": "(?x)\\b(\n absolute|active|add\n |all(-(petite|small)-caps|-scroll)?\n |alpha(betic)?\n |alternate(-reverse)?\n |always|annotation|antialiased|at\n |auto(hiding-scrollbar)?\n |avoid(-column|-page|-region)?\n |background(-color|-image|-position|-size)?\n |backwards|balance|baseline|below|bevel|bicubic|bidi-override|blink\n |block(-line-height)?\n |blur\n |bold(er)?\n |border(-bottom|-left|-right|-top)?-(color|radius|width|style)\n |border-(bottom|top)-(left|right)-radius\n |border-image(-outset|-repeat|-slice|-source|-width)?\n |border(-bottom|-left|-right|-top|-collapse|-spacing|-box)?\n |both|bottom\n |box(-shadow)?\n |break-(all|word)\n |brightness\n |butt(on)?\n |capitalize\n |cent(er|ral)\n |char(acter-variant)?\n |cjk-ideographic|clip|clone|close-quote\n |closest-(corner|side)\n |col-resize|collapse\n |color(-stop|-burn|-dodge)?\n |column((-count|-gap|-reverse|-rule(-color|-width)?|-width)|s)?\n |common-ligatures|condensed|consider-shifts|contain\n |content(-box|s)?\n |contextual|contrast|cover\n |crisp(-e|E)dges\n |crop\n |cross(hair)?\n |da(rken|shed)\n |default|dense|diagonal-fractions|difference|disabled\n |discretionary-ligatures|disregard-shifts\n |distribute(-all-lines|-letter|-space)?\n |dotted|double|drop-shadow\n |(nwse|nesw|ns|ew|sw|se|nw|ne|w|s|e|n)-resize\n |ease(-in-out|-in|-out)?\n |element|ellipsis|embed|end|EndColorStr|evenodd\n |exclu(de(-ruby)?|sion)\n |expanded\n |(extra|semi|ultra)-(condensed|expanded)\n |farthest-(corner|side)?\n |fill(-box|-opacity)?\n |filter|fixed|flat\n |flex((-basis|-end|-grow|-shrink|-start)|box)?\n |flip|flood-color\n |font(-size(-adjust)?|-stretch|-weight)?\n |forwards\n |from(-image)?\n |full-width|geometricPrecision|glyphs|gradient|grayscale\n |grid(-height)?\n |groove|hand|hanging|hard-light|height|help|hidden|hide\n |historical-(forms|ligatures)\n |horizontal(-tb)?\n |hue\n |ideograph(-alpha|-numeric|-parenthesis|-space|ic)\n |inactive|include-ruby|infinite|inherit|initial\n |inline(-block|-box|-flex(box)?|-line-height|-table)?\n |inset|inside\n |inter(-ideograph|-word|sect)\n |invert|isolat(e|ion)|italic\n |jis(04|78|83|90)\n |justify(-all)?\n |keep-all\n |large[r]?\n |last|layout|left|letter-spacing\n |light(e[nr]|ing-color)\n |line(-edge|-height|-through)?\n |linear(-gradient|RGB)?\n |lining-nums|list-item|local|loose|lowercase|lr-tb|ltr\n |lumin(osity|ance)|manual\n |manipulation\n |margin(-bottom|-box|-left|-right|-top)?\n |marker(-offset|s)?\n |mathematical\n |max-(content|height|lines|size|width)\n |medium|middle\n |min-(content|height|width)\n |miter|mixed|move|multiply|newspaper\n |no-(change|clip|(close|open)-quote|(common|discretionary|historical)-ligatures|contextual|drop|repeat)\n |none|nonzero|normal|not-allowed|nowrap|oblique\n |offset(-after|-before|-end|-start)?\n |oldstyle-nums|opacity|open-quote\n |optimize(Legibility|Precision|Quality|Speed)\n |order|ordinal|ornaments\n |outline(-color|-offset|-width)?\n |outset|outside|over(line|-edge|lay)\n |padding(-bottom|-box|-left|-right|-top|-box)?\n |page|painted|paused\n |pan-(x|left|right|y|up|down)\n |perspective-origin\n |petite-caps|pixelated|pointer\n |pinch-zoom\n |pre(-line|-wrap)?\n |preserve-3d\n |progid:DXImageTransform.Microsoft.(Alpha|Blur|dropshadow|gradient|Shadow)\n |progress\n |proportional-(nums|width)\n |radial-gradient|recto|region|relative\n |repeat(-[xy])?\n |repeating-(linear|radial)-gradient\n |replaced|reset-size|reverse|ridge|right\n |round\n |row(-resize|-reverse)?\n |rtl|ruby|running|saturat(e|ion)|screen\n |scroll(-position|bar)?\n |separate|sepia\n |scale-down\n |shape-(image-threshold|margin|outside)\n |show\n |sideways(-lr|-rl)?\n |simplified\n |size\n |slashed-zero|slice\n |small(-caps|er)?\n |smooth|snap|solid|soft-light\n |space(-around|-between)?\n |span|sRGB\n |stack(ed-fractions)?\n |start(ColorStr)?\n |static\n |step-(end|start)\n |sticky\n |stop-(color|opacity)\n |stretch|strict\n |stroke(-box|-dash(array|offset)|-miterlimit|-opacity|-width)?\n |style(set)?\n |stylistic\n |sub(grid|pixel-antialiased|tract)?\n |super|swash\n |table(-caption|-cell|(-column|-footer|-header|-row)-group|-column|-row)?\n |tabular-nums|tb-rl\n |text((-bottom|-(decoration|emphasis)-color|-indent|-(over|under)-edge|-shadow|-size(-adjust)?|-top)|field)?\n |thi(ck|n)\n |titling-ca(ps|se)\n |to[p]?\n |touch|traditional\n |transform(-origin)?\n |under(-edge|line)?\n |unicase|unset|uppercase|upright\n |use-(glyph-orientation|script)\n |verso\n |vertical(-align|-ideographic|-lr|-rl|-text)?\n |view-box\n |viewport-fill(-opacity)?\n |visibility\n |visible(Fill|Painted|Stroke)?\n |wait|wavy|weight|whitespace|(device-)?width|word-spacing\n |wrap(-reverse)?\n |x{1,2}-(large|small)\n |z-index|zero\n |zoom(-in|-out)?\n |((?xi:arabic-indic|armenian|bengali|cambodian|circle|cjk-decimal|cjk-earthly-branch|cjk-heavenly-stem|decimal-leading-zero|decimal|devanagari|disclosure-closed|disclosure-open|disc|ethiopic-numeric|georgian|gujarati|gurmukhi|hebrew|hiragana-iroha|hiragana|japanese-formal|japanese-informal|kannada|katakana-iroha|katakana|khmer|korean-hangul-formal|korean-hanja-formal|korean-hanja-informal|lao|lower-alpha|lower-armenian|lower-greek|lower-latin|lower-roman|malayalam|mongolian|myanmar|oriya|persian|simp-chinese-formal|simp-chinese-informal|square|tamil|telugu|thai|tibetan|trad-chinese-formal|trad-chinese-informal|upper-alpha|upper-armenian|upper-latin|upper-roman)))\\b", + "name": "support.constant.property-value.less" + }, + { + "match": "\\b(?i:sans-serif|serif|monospace|fantasy|cursive)\\b(?=\\s*[;,\\n}])", + "name": "support.constant.font-name.less" + } + ] + }, + "property-values": { + "patterns": [ + { + "include": "#comment-block" + }, + { + "include": "#vendor-prefix" + }, + { + "include": "#builtin-functions" + }, + { + "include": "#color-functions" + }, + { + "include": "#less-math" + }, + { + "include": "#less-functions" + }, + { + "include": "#less-variables" + }, + { + "include": "#unicode-range" + }, + { + "include": "#numeric-values" + }, + { + "include": "#color-values" + }, + { + "include": "#property-value-constants" + }, + { + "include": "#literal-string" + }, + { + "captures": { + "1": { + "name": "punctuation.separator.less" + } + }, + "match": "(\\!)\\s*important", + "name": "keyword.other.important.less" + } + ] + }, + "pseudo-classes": { + "patterns": [ + { + "begin": "(:)(dir|lang)(?=\\()", + "captures": { + "1": { + "name": "punctuation.definition.entity.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "entity.other.attribute-name.pseudo-class.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#unquoted-string" + } + ] + } + ] + }, + { + "begin": "(:)(not)(?=\\()", + "captures": { + "1": { + "name": "punctuation.definition.entity.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "entity.other.attribute-name.pseudo-class.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#selectors" + } + ] + } + ] + }, + { + "begin": "(:)(nth(-last)?-(child|of-type))(?=\\()", + "captures": { + "1": { + "name": "punctuation.definition.entity.less" + }, + "2": { + "name": "entity.other.attribute-name.pseudo-class.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "name": "meta.group.less", + "patterns": [ + { + "match": "\\b(even|odd)\\b", + "name": "keyword.other.pseudo-class.less" + }, + { + "captures": { + "1": { + "name": "keyword.other.unit.less" + } + }, + "match": "(?:[-+]?(?:\\d+)?(n)(\\s*[-+]\\s*\\d+)?|[-+]?\\s*\\d+)", + "name": "constant.numeric.less" + }, + { + "include": "#less-math" + }, + { + "include": "#less-strings" + }, + { + "include": "#less-variable-interpolation" + } + ] + } + ] + }, + { + "begin": "(:)(host-context)(?=\\()", + "captures": { + "1": { + "name": "punctuation.definition.entity.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "entity.other.attribute-name.pseudo-class.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#selectors" + } + ] + } + ] + }, + { + "captures": { + "1": { + "name": "punctuation.definition.entity.less" + }, + "2": { + "name": "entity.other.attribute-name.pseudo-class.less" + } + }, + "match": "(:)(active|any|checked|default|disabled|empty|enabled|first(-(child|of-type))?|fullscreen|focus|host|hover|indeterminate|in-range|invalid|last-(child|of-type)|left|link|only-(child|of-type)|optional|out-of-range|read-(only|write)|required|right|root|scope|target|valid|visited)", + "name": "meta.function-call.less" + } + ] + }, + "pseudo-elements": { + "patterns": [ + { + "begin": "(::)(slotted)(?=\\()", + "captures": { + "1": { + "name": "punctuation.definition.entity.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "entity.other.attribute-name.pseudo-class.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#selectors" + } + ] + } + ] + }, + { + "captures": { + "1": { + "name": "punctuation.definition.entity.less" + }, + "2": { + "name": "punctuation.definition.entity.less" + }, + "3": { + "name": "support.type.vendor-prefix.less" + } + }, + "match": "(?:(:{1,2})(?:before|after|first-line|first-letter)|(::)(-(?:moz|ms|webkit)-)?(?:(-?(?:[[-\\w][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[-\\w][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*)))\\b", + "name": "entity.other.attribute-name.pseudo-element.less" + } + ] + }, + "qualified-name": { + "captures": { + "1": { + "name": "entity.name.constant.less" + }, + "2": { + "name": "entity.name.namespace.wildcard.less" + }, + "3": { + "name": "punctuation.separator.namespace.less" + } + }, + "match": "(?:(-?(?:[[-\\w][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[_a-zA-Z][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*)|(\\*))?([|])(?!=)" + }, + "regexp-function": { + "begin": "\\b(regexp)(?=\\()", + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "support.function.regexp.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "name": "meta.function-call.less", + "patterns": [ + { + "include": "#literal-string" + } + ] + } + ] + }, + "resolution-type": { + "captures": { + "1": { + "name": "keyword.other.unit.less" + } + }, + "match": "(?i:[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))(dpi|dpcm|dppx))\\b", + "name": "constant.numeric.less" + }, + "rule-list": { + "patterns": [ + { + "begin": "\\{", + "beginCaptures": { + "0": { + "name": "punctuation.definition.block.begin.less" + } + }, + "end": "(?=\\s*\\})", + "name": "meta.property-list.less", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "match": "\\s*(;)|(?=[})])" + }, + { + "include": "#rule-list-body" + }, + { + "include": "#less-extend" + } + ] + } + ] + }, + "rule-list-body": { + "patterns": [ + { + "include": "#comment-block" + }, + { + "include": "#comment-line" + }, + { + "include": "#at-rules" + }, + { + "include": "#less-variable-assignment" + }, + { + "include": "#less-variable-interpolation" + }, + { + "begin": "(?=[-a-z])", + "end": "$|(?![-a-z])", + "patterns": [ + { + "include": "#vendor-prefix" + }, + { + "include": "#custom-property-name" + }, + { + "include": "#filter-function" + }, + { + "captures": { + "1": { + "name": "keyword.other.custom-property.prefix.less" + }, + "2": { + "name": "support.type.custom-property.name.less" + } + }, + "match": "\\b(var-)(-?(?:[[-\\w][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[_a-zA-Z][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*)(?=\\s)", + "name": "invalid.deprecated.custom-property.less" + }, + { + "begin": "\\bfont(-family)?(?!-)\\b", + "beginCaptures": { + "0": { + "name": "support.type.property-name.less" + } + }, + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "name": "meta.property-name.less", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "match": "(((\\+_?)?):)([\\s\\t]*)" + }, + { + "include": "#property-values" + }, + { + "match": "-?(?:[[_a-zA-Z][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[-\\w][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*(\\s+-?(?:[[_a-zA-Z][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[-\\w][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*)*", + "name": "string.unquoted.less" + }, + { + "match": ",", + "name": "punctuation.separator.less" + } + ] + }, + { + "begin": "\\banimation(-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function))?\\b", + "beginCaptures": { + "0": { + "name": "support.type.property-name.less" + } + }, + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "patterns": [ + { + "begin": "(((\\+_?)?):)(?=[\\s\\t]*)", + "beginCaptures": { + "1": { + "name": "punctuation.separator.key-value.less" + } + }, + "captures": { + "1": { + "name": "punctuation.definition.arbitrary-repetition.less" + } + }, + "contentName": "meta.property-value.less", + "end": "(?=\\s*(;)|(?=[})]))", + "patterns": [ + { + "match": "\\b(linear|ease(-in)?(-out)?|step-(start|end)|none|forwards|backwards|both|normal|alternate(-reverse)?|reverse|running|paused)\\b", + "name": "support.constant.property-value.less" + }, + { + "include": "#cubic-bezier-function" + }, + { + "include": "#steps-function" + }, + { + "include": "#time-type" + }, + { + "include": "#number-type" + }, + { + "match": "-?(?:[_a-zA-Z]|[^\\x{00}-\\x{7F}]|(?:(:?\\\\[0-9a-f]{1,6}(\\r\\n|[\\s\\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-f]))(?:[-_a-zA-Z0-9]|[^\\x{00}-\\x{7F}]|(?:(:?\\\\[0-9a-f]{1,6}(\\r\\n|[\\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-f]))*", + "name": "variable.other.constant.animation-name.less" + }, + { + "include": "#literal-string" + }, + { + "include": "#property-values" + }, + { + "match": "\\s*(?:(,))" + } + ] + } + ] + }, + { + "begin": "\\b(transition(-(property|duration|delay|timing-function))?)\\b", + "beginCaptures": { + "0": { + "name": "meta.property-name.less" + }, + "1": { + "name": "support.type.property-name.less" + } + }, + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "match": "(((\\+_?)?):)([\\s\\t]*)" + }, + { + "include": "#time-type" + }, + { + "include": "#property-values" + }, + { + "include": "#cubic-bezier-function" + }, + { + "include": "#steps-function" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.arbitrary-repetition.less" + } + }, + "match": "\\s*(?:(,))" + } + ] + }, + { + "begin": "\\bfilter\\b", + "beginCaptures": { + "0": { + "name": "support.type.property-name.less" + } + }, + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "name": "meta.property-name.less", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "match": "(((\\+_?)?):)([\\s\\t]*)" + }, + { + "match": "\\b(inherit|initial|unset|none)\\b", + "name": "meta.property-value.less" + }, + { + "include": "#filter-functions" + } + ] + }, + { + "begin": "\\bwill-change\\b", + "beginCaptures": { + "0": { + "name": "support.type.property-name.less" + } + }, + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "name": "meta.property-name.less", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "match": "(((\\+_?)?):)([\\s\\t]*)" + }, + { + "match": "unset|initial|inherit|will-change|auto|scroll-position|contents", + "name": "invalid.illegal.property-value.less" + }, + { + "match": "-?(?:[[-\\w][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[_a-zA-Z][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*", + "name": "support.constant.property-value.less" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.arbitrary-repetition.less" + } + }, + "match": "\\s*(?:(,))" + } + ] + }, + { + "begin": "\\bcounter-(increment|(re)?set)\\b", + "beginCaptures": { + "0": { + "name": "support.type.property-name.less" + } + }, + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "name": "meta.property-name.less", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "match": "(((\\+_?)?):)([\\s\\t]*)" + }, + { + "match": "-?(?:[[-\\w][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[_a-zA-Z][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*", + "name": "entity.name.constant.counter-name.less" + }, + { + "include": "#integer-type" + }, + { + "match": "unset|initial|inherit|auto", + "name": "invalid.illegal.property-value.less" + } + ] + }, + { + "match": "(?x)\\b( accent-height | align-content | align-items | align-self | alignment-baseline | all | animation-timing-function | animation-play-state | animation-name | animation-iteration-count | animation-fill-mode | animation-duration | animation-direction | animation-delay | animation | appearance | ascent | azimuth | backface-visibility | background-size | background-repeat-y | background-repeat-x | background-repeat | background-position-y | background-position-x | background-position | background-origin | background-image | background-color | background-clip | background-blend-mode | background-attachment | background | baseline-shift | begin | bias | blend-mode | border-((top|right|bottom|left)-)?(width|style|color) | border-(top|bottom)-(right|left)-radius | border-image-(width|source|slice|repeat|outset) | border-(top|right|bottom|left|collapse|image|radius|spacing) | border | bottom | box-(align|decoration-break|direction|flex|ordinal-group|orient|pack|shadow|sizing) | break-(after|before|inside) | caption-side | clear | clip-path | clip-rule | clip | color(-(interpolation(-filters)?|profile|rendering))? | columns | column-(break-before|count|fill|gap|(rule(-(color|style|width))?)|span|width) | contain | content | counter-(increment|reset) | cursor | (c|d|f)(x|y) | direction | display | divisor | dominant-baseline | dur | elevation | empty-cells | enable-background | end | fallback | fill(-(opacity|rule))? | filter | flex(-(align|basis|direction|flow|grow|item-align|line-pack|negative|order|pack|positive|preferred-size|shrink|wrap))? | float | flood-(color|opacity) | font-display | font-family | font-feature-settings | font-kerning | font-language-override | font-size(-adjust)? | font-smoothing | font-stretch | font-style | font-synthesis | font-variant(-(alternates|caps|east-asian|ligatures|numeric|position))? | font-weight | font | fr | glyph-orientation-(horizontal|vertical) | grid-(area|gap) | grid-auto-(columns|flow|rows) | grid-(column|row)(-(end|gap|start))? | grid-template(-(areas|columns|rows))? | height | hyphens | image-(orientation|rendering|resolution) | isolation | justify-content | kerning | left | letter-spacing | lighting-color | line-(box-contain|break|clamp|height) | list-style(-(image|position|type))? | margin(-(bottom|left|right|top))? | marker(-(end|mid|start))? | mask(-(clip||composite|image|origin|position|repeat|size|type))? | (max|min)-(height|width) | mix-blend-mode | nbsp-mode | negative | object-(fit|position) | opacity | operator | order | orphans | outline(-(color|offset|style|width))? | overflow(-(scrolling|wrap|x|y))? | pad(ding(-(bottom|left|right|top))?)? | page(-break-(after|before|inside))? | paint-order | pause(-(after|before))? | perspective(-origin(-(x|y))?)? | pitch(-range)? | pointer-events | position | prefix | quotes | range | resize | right | rotate | scale | scroll-behavior | shape-(image-threshold|margin|outside|rendering) | size | speak(-as)? | src | stop-(color|opacity) | stroke(-(dash(array|offset)|line(cap|join)|miterlimit|opacity|width))? | suffix | symbols | system | tab-size | table-layout | tap-highlight-color | text-align(-last)? | text-decoration(-(color|line|style))? | text-emphasis(-(color|position|style))? | text-(anchor|fill-color|height|indent|justify|orientation|overflow|rendering|shadow|transform|underline-position) | top | touch-action | transform(-origin(-(x|y))?) | transform(-style)? | transition(-(delay|duration|property|timing-function))? | translate | unicode-(bidi|range) | user-(drag|select) | vertical-align | visibility | white-space | widows | width | will-change | word-(break|spacing|wrap) | writing-mode | z-index | zoom )\\b", + "name": "support.type.property-name.less" + }, + { + "include": "$self" + } + ] + }, + { + "begin": "\\b(((\\+_?)?):)([\\s\\t]*)", + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "contentName": "meta.property-value.less", + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "patterns": [ + { + "include": "#property-values" + } + ] }, { "include": "$self" } ] }, - "less_builtin_functions": { - "match": "\\b(abs|acos|alpha|argb|asin|atan|average|blue|calc|ceil|color|contrast|convert|convert|cos|darken|data-uri|desaturate|difference|e|escape|exclusion|extract|fade|fadein|fadeout|floor|format|green|greyscale|hardlight|hsl|hsla|hsv|hsva|hsvhue|hsvsaturation|hsvvalue|hue|length|lighten|lightness|luma|max|min|mix|mod|multiply|negation|overlay|percentage|pi|pow|red|replace|round|saturate|saturation|screen|sin|softlight|spin|sqrt|tan|unit)\\b", - "name": "support.function.any-method.builtin.less" + "selector": { + "patterns": [ + { + "begin": "(?=[>~+/\\.*#a-zA-Z\\[&]|(\\:{1,2}[^\\s])|@\\{)", + "contentName": "meta.selector.less", + "end": "(?=@(?!\\{)|[{;])", + "patterns": [ + { + "include": "#comment-line" + }, + { + "include": "#selectors" + }, + { + "include": "#less-namespace-accessors" + }, + { + "include": "#less-variable-interpolation" + }, + { + "captures": { + "1": { + "name": "punctuation.separator.less" + } + }, + "match": "(\\!)\\s*important", + "name": "keyword.other.important.less" + } + ] + } + ] + }, + "selectors": { + "patterns": [ + { + "match": "\\b([a-z](?:(?:[-_a-z0-9\\x{00B7}]|\\\\\\.|[[\\x{00C0}-\\x{00D6}][\\x{00D8}-\\x{00F6}][\\x{00F8}-\\x{02FF}][\\x{0300}-\\x{037D}][\\x{037F}-\\x{1FFF}][\\x{200C}-\\x{200D}][\\x{203F}-\\x{2040}][\\x{2070}-\\x{218F}][\\x{2C00}-\\x{2FEF}][\\x{3001}-\\x{D7FF}][\\x{F900}-\\x{FDCF}][\\x{FDF0}-\\x{FFFD}][\\x{10000}-\\x{EFFFF}]]))*-(?:(?:[-_a-z0-9\\x{00B7}]|\\\\\\.|[[\\x{00C0}-\\x{00D6}][\\x{00D8}-\\x{00F6}][\\x{00F8}-\\x{02FF}][\\x{0300}-\\x{037D}][\\x{037F}-\\x{1FFF}][\\x{200C}-\\x{200D}][\\x{203F}-\\x{2040}][\\x{2070}-\\x{218F}][\\x{2C00}-\\x{2FEF}][\\x{3001}-\\x{D7FF}][\\x{F900}-\\x{FDCF}][\\x{FDF0}-\\x{FFFD}][\\x{10000}-\\x{EFFFF}]]))*)\\b", + "name": "entity.name.tag.custom.less" + }, + { + "match": "(?x)\\b( a | abbr | acronym | address | applet | area | article | aside | audio | b | base | basefont | bdi | bdo | big | blockquote | body | br | button | canvas | caption | circle | cite | clipPath | code | col | colgroup | content | data | dataList | dd | defs | del | details | dfn | dialog | dir | div | dl | dt | element | ellipse | em | embed | eventsource | fieldset | figcaption | figure | filter | footer | foreignObject | form | frame | frameset | g | glyph | glyphRef | h1 | h2 | h3 | h4 | h5 | h6 | head | header | hgroup | hr | html | i | iframe | image | img | input | ins | isindex | kbd | keygen | label | legend | li | line | linearGradient | link | main | map | mark | marker | mask | menu | meta | meter | nav | noframes | noscript | object | ol | optgroup | option | output | p | param | path | pattern | picture | polygon | polyline | pre | progress | q | radialGradient | rect | rp | ruby | rt | rtc | s | samp | script | section | select | shadow | small | source | span | stop | strike | strong | style | sub | summary | sup | svg | switch | symbol | table | tbody | td | template | textarea | textPath | tfoot | th | thead | time | title | tr | track | tref | tspan | tt | u | ul | use | var | video | wbr | xmp )\\b", + "name": "entity.name.tag.less" + }, + { + "begin": "(\\.)", + "beginCaptures": { + "1": { + "name": "punctuation.definition.entity.less" + } + }, + "end": "(?![-\\w]|[^\\x{00}-\\x{9f}]|\\\\([A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9])|(\\@(?=\\{)))", + "name": "entity.other.attribute-name.class.less", + "patterns": [ + { + "include": "#less-variable-interpolation" + } + ] + }, + { + "begin": "(#)", + "beginCaptures": { + "1": { + "name": "punctuation.definition.entity.less" + } + }, + "end": "(?![-\\w]|[^\\x{00}-\\x{9f}]|\\\\([A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9])|(\\@(?=\\{)))", + "name": "entity.other.attribute-name.id.less", + "patterns": [ + { + "include": "#less-variable-interpolation" + } + ] + }, + { + "begin": "(&)", + "beginCaptures": { + "1": { + "name": "punctuation.definition.entity.less" + } + }, + "contentName": "entity.other.attribute-name.parent.less", + "end": "(?![-\\w]|[^\\x{00}-\\x{9f}]|\\\\([A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9])|(\\@(?=\\{)))", + "name": "entity.other.attribute-name.parent.less", + "patterns": [ + { + "include": "#less-variable-interpolation" + }, + { + "include": "#selectors" + } + ] + }, + { + "include": "#pseudo-elements" + }, + { + "include": "#pseudo-classes" + }, + { + "include": "#less-extend" + }, + { + "match": "(?!\\+_?:)(?:>{1,3}|[~+])(?![>~+;}])", + "name": "punctuation.separator.combinator.less" + }, + { + "match": "((?:>{1,3}|[~+])){2,}", + "name": "invalid.illegal.combinator.less" + }, + { + "match": "\\/deep\\/", + "name": "invalid.illegal.combinator.less" + }, + { + "begin": "\\[", + "captures": { + "0": { + "name": "punctuation.definition.entity.less" + } + }, + "end": "\\]", + "name": "meta.attribute-selector.less", + "patterns": [ + { + "include": "#less-variable-interpolation" + }, + { + "include": "#qualified-name" + }, + { + "match": "(-?(?:[[_a-zA-Z][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[-\\w][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*)", + "name": "entity.other.attribute-name.less" + }, + { + "begin": "\\s*([~*|^$]?=)\\s*", + "captures": { + "1": { + "name": "keyword.operator.attribute-selector.less" + } + }, + "end": "(?=(\\s|\\]))", + "patterns": [ + { + "include": "#less-variable-interpolation" + }, + { + "match": "[^\\s\\]\\['\"]", + "name": "string.unquoted.less" + }, + { + "include": "#literal-string" + }, + { + "captures": { + "1": { + "name": "keyword.other.less" + } + }, + "match": "(?:\\s+([iI]))?" + }, + { + "match": "\\]", + "name": "punctuation.definition.entity.less" + } + ] + } + ] + }, + { + "captures": { + "1": { + "name": "punctuation.definition.arbitrary-repetition.less" + } + }, + "match": "\\s*(?:(,))" + }, + { + "match": "\\*", + "name": "entity.name.tag.wildcard.less" + } + ] + }, + "shape-functions": { + "patterns": [ + { + "begin": "\\b(rect)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.shape.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "match": "\\bauto\\b", + "name": "support.constant.property-value.less" + }, + { + "include": "#length-type" + }, + { + "include": "#comma-delimiter" + } + ] + } + ] + }, + { + "begin": "\\b(inset)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.shape.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "match": "\\bround\\b", + "name": "keyword.other.less" + }, + { + "include": "#length-type" + }, + { + "include": "#percentage-type" + } + ] + } + ] + }, + { + "begin": "\\b(circle|ellipse)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.shape.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "match": "\\bat\\b", + "name": "keyword.other.less" + }, + { + "match": "\\b(top|right|bottom|left|center|closest-side|farthest-side)\\b", + "name": "support.constant.property-value.less" + }, + { + "include": "#length-type" + }, + { + "include": "#percentage-type" + } + ] + } + ] + }, + { + "begin": "\\b(polygon)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.shape.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "match": "\\b(nonzero|evenodd)\\b", + "name": "support.constant.property-value.less" + }, + { + "include": "#length-type" + }, + { + "include": "#percentage-type" + } + ] + } + ] + } + ] + }, + "steps-function": { + "begin": "\\b(steps)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.timing.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#comma-delimiter" + }, + { + "include": "#integer-type" + }, + { + "match": "(end|middle|start)", + "name": "support.keyword.timing-direction.less" + } + ] + } + ] + }, + "string-content": { + "patterns": [ + { + "include": "#less-variable-interpolation" + }, + { + "match": "\\\\\\s*\\n", + "name": "constant.character.escape.newline.less" + }, + { + "match": "\\\\(\\h{1,6}|.)", + "name": "constant.character.escape.less" + } + ] + }, + "symbols-function": { + "begin": "\\b(symbols)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.counter.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "match": "\\b(cyclic|numeric|alphabetic|symbolic|fixed)\\b", + "name": "support.constant.symbol-type.less" + }, + { + "include": "#comma-delimiter" + }, + { + "include": "#literal-string" + }, + { + "include": "#image-type" + } + ] + } + ] + }, + "time-type": { + "captures": { + "1": { + "name": "keyword.other.unit.less" + } + }, + "match": "(?i:[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))(s|ms))\\b", + "name": "constant.numeric.less" + }, + "transform-functions": { + "patterns": [ + { + "begin": "\\b(matrix3d|scale3d|matrix|scale)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#comma-delimiter" + }, + { + "include": "#number-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(translate(3d)?)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#comma-delimiter" + }, + { + "include": "#percentage-type" + }, + { + "include": "#length-type" + }, + { + "include": "#number-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(translate[XY])(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#percentage-type" + }, + { + "include": "#length-type" + }, + { + "include": "#number-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(rotate[XYZ]?|skew[XY])(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#angle-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#calc-function" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(skew)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#comma-delimiter" + }, + { + "include": "#angle-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#calc-function" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(translateZ|perspective)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#length-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#calc-function" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(rotate3d)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#comma-delimiter" + }, + { + "include": "#angle-type" + }, + { + "include": "#number-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#calc-function" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(scale[XYZ])(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#comma-delimiter" + }, + { + "include": "#number-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#calc-function" + }, + { + "include": "#var-function" + } + ] + } + ] + } + ] + }, + "unicode-range": { + "captures": { + "1": { + "name": "support.constant.unicode-range.prefix.less" + }, + "2": { + "name": "constant.codepoint-range.less" + }, + "3": { + "name": "punctuation.section.range.less" + } + }, + "match": "(?i)(u\\+)([0-9a-f?]{1,6}(?:(-)[0-9a-f]{1,6})?)", + "name": "support.unicode-range.less" + }, + "unquoted-string": { + "match": "[^\\s'\"]", + "name": "string.unquoted.less" + }, + "url-function": { + "begin": "\\b(url)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.url.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#less-variables" + }, + { + "include": "#literal-string" + }, + { + "include": "#unquoted-string" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + "var-function": { + "patterns": [ + { + "begin": "\\b(var)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.var.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.function-call.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "patterns": [ + { + "include": "#comma-delimiter" + }, + { + "include": "#custom-property-name" + }, + { + "include": "#less-variables" + } + ] + } + ] + } + ] + }, + "vendor-prefix": { + "match": "-(?:webkit|moz(-osx)?|ms|o)-", + "name": "support.type.vendor-prefix.less" } } } \ No newline at end of file diff --git a/extensions/theme-defaults/themes/dark_vs.json b/extensions/theme-defaults/themes/dark_vs.json index 54d69be0068..543e4efcecd 100644 --- a/extensions/theme-defaults/themes/dark_vs.json +++ b/extensions/theme-defaults/themes/dark_vs.json @@ -94,7 +94,10 @@ } }, { - "scope": "entity.name.tag.css", + "scope": [ + "entity.name.tag.css", + "entity.name.tag.less" + ], "settings": { "foreground": "#d7ba7d" } @@ -108,10 +111,11 @@ { "scope": [ "entity.other.attribute-name.class.css", - "entity.other.attribute-name.class.mixin.css", + "source.css entity.other.attribute-name.class", "entity.other.attribute-name.id.css", "entity.other.attribute-name.parent-selector.css", - "entity.other.attribute-name.pseudo-class.css", + "entity.other.attribute-name.parent.less", + "source.css entity.other.attribute-name.pseudo-class", "entity.other.attribute-name.pseudo-element.css", "source.css.less entity.other.attribute-name.id", "entity.other.attribute-name.scss" @@ -306,9 +310,7 @@ "scope": [ "support.type.vendored.property-name", "support.type.property-name", - "variable.css", - "variable.scss", - "variable.other.less", + "source.css variable", "source.coffee.embedded" ], "settings": { diff --git a/extensions/theme-defaults/themes/hc_black.json b/extensions/theme-defaults/themes/hc_black.json index 46ac7e671f8..ebb49d98644 100644 --- a/extensions/theme-defaults/themes/hc_black.json +++ b/extensions/theme-defaults/themes/hc_black.json @@ -86,7 +86,10 @@ } }, { - "scope": "entity.name.tag.css", + "scope": [ + "entity.name.tag.css", + "entity.name.tag.less" + ], "settings": { "foreground": "#d7ba7d" } @@ -100,10 +103,11 @@ { "scope": [ "entity.other.attribute-name.class.css", - "entity.other.attribute-name.class.mixin.css", + "source.css entity.other.attribute-name.class", "entity.other.attribute-name.id.css", "entity.other.attribute-name.parent-selector.css", - "entity.other.attribute-name.pseudo-class.css", + "entity.other.attribute-name.parent.less", + "source.css entity.other.attribute-name.pseudo-class", "entity.other.attribute-name.pseudo-element.css", "source.css.less entity.other.attribute-name.id", "entity.other.attribute-name.scss" @@ -266,9 +270,7 @@ "scope": [ "support.type.vendored.property-name", "support.type.property-name", - "variable.css", - "variable.scss", - "variable.other.less", + "source.css variable", "source.coffee.embedded" ], "settings": { diff --git a/extensions/theme-defaults/themes/hc_light.json b/extensions/theme-defaults/themes/hc_light.json index aaf0e2f9cf3..460f26ad738 100644 --- a/extensions/theme-defaults/themes/hc_light.json +++ b/extensions/theme-defaults/themes/hc_light.json @@ -80,10 +80,11 @@ { "scope": [ "entity.other.attribute-name.class.css", - "entity.other.attribute-name.class.mixin.css", + "source.css entity.other.attribute-name.class", "entity.other.attribute-name.id.css", "entity.other.attribute-name.parent-selector.css", - "entity.other.attribute-name.pseudo-class.css", + "entity.other.attribute-name.parent.less", + "source.css entity.other.attribute-name.pseudo-class", "entity.other.attribute-name.pseudo-element.css", "source.css.less entity.other.attribute-name.id", "entity.other.attribute-name.scss" @@ -279,9 +280,7 @@ "scope": [ "support.type.vendored.property-name", "support.type.property-name", - "variable.css", - "variable.scss", - "variable.other.less", + "source.css variable", "source.coffee.embedded" ], "settings": { diff --git a/extensions/theme-defaults/themes/light_vs.json b/extensions/theme-defaults/themes/light_vs.json index b093cc73ca3..c67d2932a16 100644 --- a/extensions/theme-defaults/themes/light_vs.json +++ b/extensions/theme-defaults/themes/light_vs.json @@ -114,10 +114,11 @@ { "scope": [ "entity.other.attribute-name.class.css", - "entity.other.attribute-name.class.mixin.css", + "source.css entity.other.attribute-name.class", "entity.other.attribute-name.id.css", "entity.other.attribute-name.parent-selector.css", - "entity.other.attribute-name.pseudo-class.css", + "entity.other.attribute-name.parent.less", + "source.css entity.other.attribute-name.pseudo-class", "entity.other.attribute-name.pseudo-element.css", "source.css.less entity.other.attribute-name.id", "entity.other.attribute-name.scss" @@ -327,9 +328,7 @@ "scope": [ "support.type.vendored.property-name", "support.type.property-name", - "variable.css", - "variable.scss", - "variable.other.less", + "source.css variable", "source.coffee.embedded" ], "settings": { diff --git a/extensions/theme-quietlight/themes/quietlight-color-theme.json b/extensions/theme-quietlight/themes/quietlight-color-theme.json index 3705ed48608..0b6cd0be740 100644 --- a/extensions/theme-quietlight/themes/quietlight-color-theme.json +++ b/extensions/theme-quietlight/themes/quietlight-color-theme.json @@ -252,7 +252,8 @@ "meta.selector", "meta.selector entity", "meta.selector entity punctuation", - "entity.name.tag.css" + "entity.name.tag.css", + "entity.name.tag.less" ], "settings": { "foreground": "#7A3E9D" diff --git a/extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json b/extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json index 840a1764bf1..28fb8cd7f28 100644 --- a/extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json +++ b/extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json @@ -140,7 +140,10 @@ }, { "name": "Keyword, Storage", - "scope": "keyword, storage, storage.type, entity.name.tag.css", + "scope": [ + "keyword, storage, storage.type, entity.name.tag.css", + "entity.name.tag.less" + ], "settings": { "fontStyle": "", "foreground": "#EBBBFF" diff --git a/extensions/vscode-colorize-tests/test/colorize-results/14119_less.json b/extensions/vscode-colorize-tests/test/colorize-results/14119_less.json index befc3ca8321..66807538fed 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/14119_less.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/14119_less.json @@ -1,7 +1,7 @@ [ { "c": "#", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id punctuation.definition.entity.css", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less punctuation.definition.entity.less", "r": { "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", "light_plus": "source.css.less entity.other.attribute-name.id: #800000", @@ -15,7 +15,7 @@ }, { "c": "f", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less", "r": { "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", "light_plus": "source.css.less entity.other.attribute-name.id: #800000", @@ -29,7 +29,7 @@ }, { "c": "(", - "t": "source.css.less meta.brace.round.css", + "t": "source.css.less meta.selector.less meta.group.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -43,35 +43,35 @@ }, { "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "hm", - "t": "source.css.less variable.other.less", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ":", - "t": "source.css.less punctuation.separator.key-value.css", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -85,7 +85,7 @@ }, { "c": " ", - "t": "source.css.less", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -99,7 +99,7 @@ }, { "c": "\"", - "t": "source.css.less string.quoted.double.css punctuation.definition.string.begin.css", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less string.quoted.double.less punctuation.definition.string.begin.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -113,7 +113,7 @@ }, { "c": "broken highlighting in VS Code", - "t": "source.css.less string.quoted.double.css", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less string.quoted.double.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -127,7 +127,7 @@ }, { "c": "\"", - "t": "source.css.less string.quoted.double.css punctuation.definition.string.end.css", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less string.quoted.double.less punctuation.definition.string.end.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -141,7 +141,7 @@ }, { "c": ")", - "t": "source.css.less meta.brace.round.css", + "t": "source.css.less meta.selector.less meta.group.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -155,7 +155,7 @@ }, { "c": " ", - "t": "source.css.less", + "t": "source.css.less meta.selector.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -169,7 +169,7 @@ }, { "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -183,7 +183,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -197,21 +197,21 @@ }, { "c": "content", - "t": "source.css.less meta.property-list.css entity.name.tag.css", + "t": "source.css.less meta.property-list.less support.type.property-name.less", "r": { - "dark_plus": "entity.name.tag.css: #D7BA7D", - "light_plus": "entity.name.tag: #800000", - "dark_vs": "entity.name.tag.css: #D7BA7D", - "light_vs": "entity.name.tag: #800000", - "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_modern": "entity.name.tag.css: #D7BA7D", - "hc_light": "entity.name.tag: #0F4A85", - "light_modern": "entity.name.tag: #800000" + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" } }, { "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -225,7 +225,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -239,7 +239,7 @@ }, { "c": "\"", - "t": "source.css.less meta.property-list.css meta.property-value.css string.quoted.double.css punctuation.definition.string.begin.css", + "t": "source.css.less meta.property-list.less meta.property-value.less string.quoted.double.less punctuation.definition.string.begin.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -253,7 +253,7 @@ }, { "c": "\"", - "t": "source.css.less meta.property-list.css meta.property-value.css string.quoted.double.css punctuation.definition.string.end.css", + "t": "source.css.less meta.property-list.less meta.property-value.less string.quoted.double.less punctuation.definition.string.end.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -267,7 +267,7 @@ }, { "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -281,7 +281,7 @@ }, { "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", + "t": "source.css.less punctuation.definition.block.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_less.json b/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_less.json index 859e808c155..856f013541b 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_less.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_less.json @@ -1,35 +1,35 @@ [ { "c": ":", - "t": "source.css.less entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", + "t": "source.css.less meta.selector.less meta.function-call.less punctuation.definition.entity.less", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { "c": "root", - "t": "source.css.less entity.other.attribute-name.pseudo-class.css", + "t": "source.css.less meta.selector.less meta.function-call.less entity.other.attribute-name.pseudo-class.less", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": " ", - "t": "source.css.less", + "t": "source.css.less meta.selector.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -43,7 +43,7 @@ }, { "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -57,7 +57,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -71,35 +71,35 @@ }, { "c": "--", - "t": "source.css.less meta.property-list.css variable.other.less punctuation.definition.variable.less", + "t": "source.css.less meta.property-list.less support.type.custom-property.less punctuation.definition.custom-property.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "support.type: #4EC9B0", + "light_plus": "support.type: #267F99", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { "c": "spacing-unit", - "t": "source.css.less meta.property-list.css variable.other.less", + "t": "source.css.less meta.property-list.less support.type.custom-property.less support.type.custom-property.name.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "support.type: #4EC9B0", + "light_plus": "support.type: #267F99", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -113,7 +113,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -127,7 +127,7 @@ }, { "c": "6", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", + "t": "source.css.less meta.property-list.less meta.property-value.less constant.numeric.less", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #098658", @@ -141,7 +141,7 @@ }, { "c": "px", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.px.css", + "t": "source.css.less meta.property-list.less meta.property-value.less constant.numeric.less keyword.other.unit.less", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #098658", @@ -155,7 +155,7 @@ }, { "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -169,7 +169,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -183,35 +183,35 @@ }, { "c": "--", - "t": "source.css.less meta.property-list.css variable.other.less punctuation.definition.variable.less", + "t": "source.css.less meta.property-list.less support.type.custom-property.less punctuation.definition.custom-property.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "support.type: #4EC9B0", + "light_plus": "support.type: #267F99", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { "c": "cell-padding", - "t": "source.css.less meta.property-list.css variable.other.less", + "t": "source.css.less meta.property-list.less support.type.custom-property.less support.type.custom-property.name.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "support.type: #4EC9B0", + "light_plus": "support.type: #267F99", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -225,7 +225,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -239,7 +239,7 @@ }, { "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -253,7 +253,7 @@ }, { "c": "4", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less constant.numeric.less", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #098658", @@ -267,7 +267,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -281,7 +281,7 @@ }, { "c": "*", - "t": "source.css.less meta.property-list.css meta.property-value.css keyword.operator.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less keyword.operator.arithmetic.less", "r": { "dark_plus": "keyword.operator: #D4D4D4", "light_plus": "keyword.operator: #000000", @@ -294,8 +294,8 @@ } }, { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", + "c": " var", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -307,23 +307,9 @@ "light_modern": "default: #3B3B3B" } }, - { - "c": "var", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css support.function.misc.css", - "r": { - "dark_plus": "support.function: #DCDCAA", - "light_plus": "support.function: #795E26", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA", - "dark_modern": "support.function: #DCDCAA", - "hc_light": "support.function: #5E2CBC", - "light_modern": "support.function: #795E26" - } - }, { "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css punctuation.section.function.begin.bracket.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less meta.group.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -336,22 +322,50 @@ } }, { - "c": "--spacing-unit", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css variable.argument.css", + "c": "--", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less meta.group.less keyword.operator.arithmetic.less", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css punctuation.section.function.end.bracket.round.css", + "c": "spacing", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less meta.group.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "-", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less meta.group.less keyword.operator.arithmetic.less", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" + } + }, + { + "c": "unit", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less meta.group.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -365,7 +379,21 @@ }, { "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less meta.group.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -379,7 +407,7 @@ }, { "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -393,7 +421,7 @@ }, { "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", + "t": "source.css.less punctuation.definition.block.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -407,21 +435,21 @@ }, { "c": "body", - "t": "source.css.less entity.name.tag.css", + "t": "source.css.less meta.selector.less entity.name.tag.less", "r": { - "dark_plus": "entity.name.tag.css: #D7BA7D", + "dark_plus": "entity.name.tag.less: #D7BA7D", "light_plus": "entity.name.tag: #800000", - "dark_vs": "entity.name.tag.css: #D7BA7D", + "dark_vs": "entity.name.tag.less: #D7BA7D", "light_vs": "entity.name.tag: #800000", - "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_modern": "entity.name.tag.css: #D7BA7D", + "hc_black": "entity.name.tag.less: #D7BA7D", + "dark_modern": "entity.name.tag.less: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", "light_modern": "entity.name.tag: #800000" } }, { "c": " ", - "t": "source.css.less", + "t": "source.css.less meta.selector.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -435,7 +463,7 @@ }, { "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -449,7 +477,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -463,7 +491,7 @@ }, { "c": "padding-left", - "t": "source.css.less meta.property-list.css support.type.property-name.css", + "t": "source.css.less meta.property-list.less support.type.property-name.less", "r": { "dark_plus": "support.type.property-name: #9CDCFE", "light_plus": "support.type.property-name: #E50000", @@ -477,7 +505,7 @@ }, { "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -491,7 +519,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -505,7 +533,7 @@ }, { "c": "calc", - "t": "source.css.less meta.property-list.css meta.property-value.css support.function.any-method.builtin.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less support.function.calc.less", "r": { "dark_plus": "support.function: #DCDCAA", "light_plus": "support.function: #795E26", @@ -519,7 +547,7 @@ }, { "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -533,7 +561,7 @@ }, { "c": "4", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #098658", @@ -547,7 +575,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -561,7 +589,7 @@ }, { "c": "*", - "t": "source.css.less meta.property-list.css meta.property-value.css keyword.operator.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less keyword.operator.arithmetic.less", "r": { "dark_plus": "keyword.operator: #D4D4D4", "light_plus": "keyword.operator: #000000", @@ -575,7 +603,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -589,7 +617,7 @@ }, { "c": "var", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css support.function.misc.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less support.function.var.less", "r": { "dark_plus": "support.function: #DCDCAA", "light_plus": "support.function: #795E26", @@ -603,7 +631,7 @@ }, { "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css punctuation.section.function.begin.bracket.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -616,22 +644,36 @@ } }, { - "c": "--spacing-unit", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css variable.argument.css", + "c": "--", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less support.type.custom-property.less punctuation.definition.custom-property.less", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", + "dark_plus": "support.type: #4EC9B0", + "light_plus": "support.type: #267F99", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" + } + }, + { + "c": "spacing-unit", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less support.type.custom-property.less support.type.custom-property.name.less", + "r": { + "dark_plus": "support.type: #4EC9B0", + "light_plus": "support.type: #267F99", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { "c": ",", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css punctuation.separator.list.comma.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less punctuation.separator.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -644,50 +686,8 @@ } }, { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "5", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": "px", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css constant.numeric.css keyword.other.unit.px.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css punctuation.section.function.end.bracket.round.css", + "c": " 5px", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -701,7 +701,21 @@ }, { "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -715,7 +729,7 @@ }, { "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -729,7 +743,7 @@ }, { "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", + "t": "source.css.less punctuation.definition.block.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_scss.json b/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_scss.json index f5cddc27d06..e78169f5e01 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_scss.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_scss.json @@ -3,28 +3,28 @@ "c": ":", "t": "source.css.scss entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "root", "t": "source.css.scss entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -73,14 +73,14 @@ "c": "--spacing-unit", "t": "source.css.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -171,14 +171,14 @@ "c": "--cell-padding", "t": "source.css.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -311,14 +311,14 @@ "c": "--spacing-unit", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -591,14 +591,14 @@ "c": "--spacing-unit", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-variables_css.json b/extensions/vscode-colorize-tests/test/colorize-results/test-variables_css.json index 8819269523a..a20f8fe4a3b 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-variables_css.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-variables_css.json @@ -3,28 +3,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "root", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -73,14 +73,14 @@ "c": "--spacing-unit", "t": "source.css meta.property-list.css variable.css", "r": { - "dark_plus": "variable.css: #9CDCFE", - "light_plus": "variable.css: #E50000", - "dark_vs": "variable.css: #9CDCFE", - "light_vs": "variable.css: #E50000", - "hc_black": "variable.css: #D4D4D4", - "dark_modern": "variable.css: #9CDCFE", - "hc_light": "variable.css: #264F78", - "light_modern": "variable.css: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -171,14 +171,14 @@ "c": "--cell-padding", "t": "source.css meta.property-list.css variable.css", "r": { - "dark_plus": "variable.css: #9CDCFE", - "light_plus": "variable.css: #E50000", - "dark_vs": "variable.css: #9CDCFE", - "light_vs": "variable.css: #E50000", - "hc_black": "variable.css: #D4D4D4", - "dark_modern": "variable.css: #9CDCFE", - "hc_light": "variable.css: #264F78", - "light_modern": "variable.css: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -283,14 +283,14 @@ "c": "--spacing-unit", "t": "source.css meta.property-list.css meta.property-value.css meta.function.variable.css variable.argument.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -563,14 +563,14 @@ "c": "--spacing-unit", "t": "source.css meta.property-list.css meta.property-value.css meta.function.calc.css meta.function.variable.css variable.argument.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_css.json b/extensions/vscode-colorize-tests/test/colorize-results/test_css.json index 78a5ca00d07..8d4b8a2a981 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_css.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_css.json @@ -1501,14 +1501,14 @@ "c": "blossoms.jpg", "t": "source.css meta.property-list.css meta.property-value.css meta.function.url.css variable.parameter.url.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -3601,28 +3601,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "link", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -3951,28 +3951,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "visited", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -4385,28 +4385,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "hover", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -4441,28 +4441,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "focus", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -4497,28 +4497,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "active", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -5071,14 +5071,14 @@ "c": "zen-bg.jpg", "t": "source.css meta.property-list.css meta.property-value.css meta.function.url.css variable.parameter.url.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6023,14 +6023,14 @@ "c": "h1.gif", "t": "source.css meta.property-list.css meta.property-value.css meta.function.url.css variable.parameter.url.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -8879,28 +8879,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "link", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -8963,28 +8963,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "visited", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -9929,14 +9929,14 @@ "c": "paper-bg.jpg", "t": "source.css meta.property-list.css meta.property-value.css meta.function.url.css variable.parameter.url.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10447,28 +10447,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "link", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -10699,28 +10699,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "visited", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -11049,14 +11049,14 @@ "c": "cr2.gif", "t": "source.css meta.property-list.css meta.property-value.css meta.function.url.css variable.parameter.url.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_less.json b/extensions/vscode-colorize-tests/test/colorize-results/test_less.json index 6937f0e26dc..08d8b9f4fb5 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_less.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_less.json @@ -1,7 +1,7 @@ [ { "c": "@", - "t": "source.css.less meta.at-rule.import.css keyword.control.at-rule.import.less punctuation.definition.keyword.less", + "t": "source.css.less meta.at-rule.import.less keyword.control.at-rule.import.less punctuation.definition.keyword.less", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -15,7 +15,7 @@ }, { "c": "import", - "t": "source.css.less meta.at-rule.import.css keyword.control.at-rule.import.less", + "t": "source.css.less meta.at-rule.import.less keyword.control.at-rule.import.less", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -29,7 +29,7 @@ }, { "c": " ", - "t": "source.css.less meta.at-rule.import.css", + "t": "source.css.less meta.at-rule.import.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -43,7 +43,7 @@ }, { "c": "\"", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css punctuation.definition.string.begin.css", + "t": "source.css.less meta.at-rule.import.less string.quoted.double.less punctuation.definition.string.begin.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -57,7 +57,7 @@ }, { "c": "mystyle.css", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css", + "t": "source.css.less meta.at-rule.import.less string.quoted.double.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -71,7 +71,7 @@ }, { "c": "\"", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css punctuation.definition.string.end.css", + "t": "source.css.less meta.at-rule.import.less string.quoted.double.less punctuation.definition.string.end.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -85,7 +85,7 @@ }, { "c": ";", - "t": "source.css.less meta.at-rule.import.css punctuation.terminator.rule.css", + "t": "source.css.less meta.at-rule.import.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -99,7 +99,7 @@ }, { "c": "@", - "t": "source.css.less meta.at-rule.import.css keyword.control.at-rule.import.less punctuation.definition.keyword.less", + "t": "source.css.less meta.at-rule.import.less keyword.control.at-rule.import.less punctuation.definition.keyword.less", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -113,7 +113,7 @@ }, { "c": "import", - "t": "source.css.less meta.at-rule.import.css keyword.control.at-rule.import.less", + "t": "source.css.less meta.at-rule.import.less keyword.control.at-rule.import.less", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -126,8 +126,8 @@ } }, { - "c": " url", - "t": "source.css.less meta.at-rule.import.css", + "c": " ", + "t": "source.css.less meta.at-rule.import.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -139,9 +139,23 @@ "light_modern": "default: #3B3B3B" } }, + { + "c": "url", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less support.function.url.less", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" + } + }, { "c": "(", - "t": "source.css.less meta.at-rule.import.css meta.brace.round.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -155,7 +169,7 @@ }, { "c": "\"", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css punctuation.definition.string.begin.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less string.quoted.double.less punctuation.definition.string.begin.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -169,7 +183,7 @@ }, { "c": "mystyle.css", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less string.quoted.double.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -183,7 +197,7 @@ }, { "c": "\"", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css punctuation.definition.string.end.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less string.quoted.double.less punctuation.definition.string.end.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -197,7 +211,7 @@ }, { "c": ")", - "t": "source.css.less meta.at-rule.import.css meta.brace.round.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -211,7 +225,7 @@ }, { "c": ";", - "t": "source.css.less meta.at-rule.import.css punctuation.terminator.rule.css", + "t": "source.css.less meta.at-rule.import.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -225,7 +239,7 @@ }, { "c": "@", - "t": "source.css.less meta.at-rule.import.css keyword.control.at-rule.import.less punctuation.definition.keyword.less", + "t": "source.css.less meta.at-rule.import.less keyword.control.at-rule.import.less punctuation.definition.keyword.less", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -239,7 +253,7 @@ }, { "c": "import", - "t": "source.css.less meta.at-rule.import.css keyword.control.at-rule.import.less", + "t": "source.css.less meta.at-rule.import.less keyword.control.at-rule.import.less", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -252,8 +266,8 @@ } }, { - "c": " url", - "t": "source.css.less meta.at-rule.import.css", + "c": " ", + "t": "source.css.less meta.at-rule.import.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -265,9 +279,23 @@ "light_modern": "default: #3B3B3B" } }, + { + "c": "url", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less support.function.url.less", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" + } + }, { "c": "(", - "t": "source.css.less meta.at-rule.import.css meta.brace.round.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -281,7 +309,7 @@ }, { "c": "\"", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css punctuation.definition.string.begin.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less string.quoted.double.less punctuation.definition.string.begin.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -295,7 +323,7 @@ }, { "c": "bluish.css", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less string.quoted.double.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -309,7 +337,7 @@ }, { "c": "\"", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css punctuation.definition.string.end.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less string.quoted.double.less punctuation.definition.string.end.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -323,7 +351,7 @@ }, { "c": ")", - "t": "source.css.less meta.at-rule.import.css meta.brace.round.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -336,8 +364,8 @@ } }, { - "c": " projection", - "t": "source.css.less meta.at-rule.import.css", + "c": " ", + "t": "source.css.less meta.at-rule.import.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -349,9 +377,23 @@ "light_modern": "default: #3B3B3B" } }, + { + "c": "projection", + "t": "source.css.less meta.at-rule.import.less support.constant.media.less", + "r": { + "dark_plus": "support.constant.media: #CE9178", + "light_plus": "support.constant.media: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "support.constant.media: #0451A5", + "hc_black": "support.constant.media: #CE9178", + "dark_modern": "support.constant.media: #CE9178", + "hc_light": "support.constant.media: #0451A5", + "light_modern": "support.constant.media: #0451A5" + } + }, { "c": ",", - "t": "source.css.less meta.at-rule.import.css punctuation.separator.list.comma.css", + "t": "source.css.less meta.at-rule.import.less punctuation.definition.arbitrary-repetition.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -364,8 +406,8 @@ } }, { - "c": " tv", - "t": "source.css.less meta.at-rule.import.css", + "c": " ", + "t": "source.css.less meta.at-rule.import.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -377,9 +419,23 @@ "light_modern": "default: #3B3B3B" } }, + { + "c": "tv", + "t": "source.css.less meta.at-rule.import.less support.constant.media.less", + "r": { + "dark_plus": "support.constant.media: #CE9178", + "light_plus": "support.constant.media: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "support.constant.media: #0451A5", + "hc_black": "support.constant.media: #CE9178", + "dark_modern": "support.constant.media: #CE9178", + "hc_light": "support.constant.media: #0451A5", + "light_modern": "support.constant.media: #0451A5" + } + }, { "c": ";", - "t": "source.css.less meta.at-rule.import.css punctuation.terminator.rule.css", + "t": "source.css.less meta.at-rule.import.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -393,35 +449,35 @@ }, { "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "base", - "t": "source.css.less variable.other.less", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ":", - "t": "source.css.less punctuation.separator.key-value.css", + "t": "source.css.less meta.property-value.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -435,7 +491,7 @@ }, { "c": " ", - "t": "source.css.less", + "t": "source.css.less meta.property-value.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -448,1114 +504,36 @@ } }, { - "c": "#f938ab", - "t": "source.css.less constant.other.rgb-value.css", + "c": "#", + "t": "source.css.less meta.property-value.less constant.other.color.rgb-value.less punctuation.definition.constant.less", "r": { - "dark_plus": "constant.other.rgb-value: #CE9178", - "light_plus": "constant.other.rgb-value: #0451A5", + "dark_plus": "constant.other.color.rgb-value: #CE9178", + "light_plus": "constant.other.color.rgb-value: #0451A5", "dark_vs": "default: #D4D4D4", - "light_vs": "constant.other.rgb-value: #0451A5", - "hc_black": "constant.other.rgb-value: #CE9178", - "dark_modern": "constant.other.rgb-value: #CE9178", - "hc_light": "constant.other.rgb-value: #0451A5", - "light_modern": "constant.other.rgb-value: #0451A5" + "light_vs": "constant.other.color.rgb-value: #0451A5", + "hc_black": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", + "hc_light": "constant.other.color.rgb-value: #0451A5", + "light_modern": "constant.other.color.rgb-value: #0451A5" + } + }, + { + "c": "f938ab", + "t": "source.css.less meta.property-value.less constant.other.color.rgb-value.less", + "r": { + "dark_plus": "constant.other.color.rgb-value: #CE9178", + "light_plus": "constant.other.color.rgb-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "constant.other.color.rgb-value: #0451A5", + "hc_black": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", + "hc_light": "constant.other.color.rgb-value: #0451A5", + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { "c": ";", - "t": "source.css.less punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": ".box-shadow", - "t": "source.css.less entity.other.attribute-name.class.mixin.css", - "r": { - "dark_plus": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.class.mixin.css: #800000", - "dark_vs": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.mixin.css: #800000", - "hc_black": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.class.mixin.css: #0F4A85", - "light_modern": "entity.other.attribute-name.class.mixin.css: #800000" - } - }, - { - "c": "(", - "t": "source.css.less meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "style", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ",", - "t": "source.css.less punctuation.separator.list.comma.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "c", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ")", - "t": "source.css.less meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "when", - "t": "source.css.less keyword.control.logical.operator.less", - "r": { - "dark_plus": "keyword.control: #C586C0", - "light_plus": "keyword.control: #AF00DB", - "dark_vs": "keyword.control: #569CD6", - "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0", - "dark_modern": "keyword.control: #C586C0", - "hc_light": "keyword.control: #B5200D", - "light_modern": "keyword.control: #AF00DB" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "(", - "t": "source.css.less meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "iscolor", - "t": "source.css.less support.function.type-checking.less", - "r": { - "dark_plus": "support.function: #DCDCAA", - "light_plus": "support.function: #795E26", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA", - "dark_modern": "support.function: #DCDCAA", - "hc_light": "support.function: #5E2CBC", - "light_modern": "support.function: #795E26" - } - }, - { - "c": "(", - "t": "source.css.less meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "c", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "))", - "t": "source.css.less meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "border-radius", - "t": "source.css.less meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "style", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "c", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": ".box-shadow", - "t": "source.css.less entity.other.attribute-name.class.mixin.css", - "r": { - "dark_plus": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.class.mixin.css: #800000", - "dark_vs": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.mixin.css: #800000", - "hc_black": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.class.mixin.css: #0F4A85", - "light_modern": "entity.other.attribute-name.class.mixin.css: #800000" - } - }, - { - "c": "(", - "t": "source.css.less meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "style", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ",", - "t": "source.css.less punctuation.separator.list.comma.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "alpha", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "50", - "t": "source.css.less constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": "%", - "t": "source.css.less constant.numeric.css keyword.other.unit.percentage.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ")", - "t": "source.css.less meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "when", - "t": "source.css.less keyword.control.logical.operator.less", - "r": { - "dark_plus": "keyword.control: #C586C0", - "light_plus": "keyword.control: #AF00DB", - "dark_vs": "keyword.control: #569CD6", - "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0", - "dark_modern": "keyword.control: #C586C0", - "hc_light": "keyword.control: #B5200D", - "light_modern": "keyword.control: #AF00DB" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "(", - "t": "source.css.less meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "isnumber", - "t": "source.css.less support.function.type-checking.less", - "r": { - "dark_plus": "support.function: #DCDCAA", - "light_plus": "support.function: #795E26", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA", - "dark_modern": "support.function: #DCDCAA", - "hc_light": "support.function: #5E2CBC", - "light_modern": "support.function: #795E26" - } - }, - { - "c": "(", - "t": "source.css.less meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "alpha", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "))", - "t": "source.css.less meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": ".box-shadow", - "t": "source.css.less meta.property-list.css entity.other.attribute-name.class.mixin.css", - "r": { - "dark_plus": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.class.mixin.css: #800000", - "dark_vs": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.mixin.css: #800000", - "hc_black": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.class.mixin.css: #0F4A85", - "light_modern": "entity.other.attribute-name.class.mixin.css: #800000" - } - }, - { - "c": "(", - "t": "source.css.less meta.property-list.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less meta.property-list.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "style", - "t": "source.css.less meta.property-list.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ",", - "t": "source.css.less meta.property-list.css punctuation.separator.list.comma.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "rgba", - "t": "source.css.less meta.property-list.css meta.function.color.css support.function.misc.css", - "r": { - "dark_plus": "support.function: #DCDCAA", - "light_plus": "support.function: #795E26", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA", - "dark_modern": "support.function: #DCDCAA", - "hc_light": "support.function: #5E2CBC", - "light_modern": "support.function: #795E26" - } - }, - { - "c": "(", - "t": "source.css.less meta.property-list.css meta.function.color.css punctuation.section.function.begin.bracket.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "0", - "t": "source.css.less meta.property-list.css meta.function.color.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": ",", - "t": "source.css.less meta.property-list.css meta.function.color.css punctuation.separator.list.comma.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.function.color.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "0", - "t": "source.css.less meta.property-list.css meta.function.color.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": ",", - "t": "source.css.less meta.property-list.css meta.function.color.css punctuation.separator.list.comma.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.function.color.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "0", - "t": "source.css.less meta.property-list.css meta.function.color.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": ",", - "t": "source.css.less meta.property-list.css meta.function.color.css punctuation.separator.list.comma.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " @", - "t": "source.css.less meta.property-list.css meta.function.color.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "alpha", - "t": "source.css.less meta.property-list.css meta.function.color.css support.constant.property-value.css", - "r": { - "dark_plus": "support.constant.property-value: #CE9178", - "light_plus": "support.constant.property-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "support.constant.property-value: #0451A5", - "hc_black": "support.constant.property-value: #CE9178", - "dark_modern": "support.constant.property-value: #CE9178", - "hc_light": "support.constant.property-value: #0451A5", - "light_modern": "support.constant.property-value: #0451A5" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.function.color.css punctuation.section.function.end.bracket.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", + "t": "source.css.less meta.property-value.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1569,35 +547,287 @@ }, { "c": ".", - "t": "source.css.less entity.other.attribute-name.class.css punctuation.definition.entity.css", + "t": "source.css.less meta.selector.less entity.other.attribute-name.class.less punctuation.definition.entity.less", "r": { - "dark_plus": "entity.other.attribute-name.class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.class.css: #800000", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "entity.other.attribute-name.class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" } }, { - "c": "box", - "t": "source.css.less entity.other.attribute-name.class.css", + "c": "box-shadow", + "t": "source.css.less meta.selector.less entity.other.attribute-name.class.less", "r": { - "dark_plus": "entity.other.attribute-name.class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.class.css: #800000", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "entity.other.attribute-name.class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "(", + "t": "source.css.less meta.selector.less meta.group.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "style", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ",", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less punctuation.separator.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { "c": " ", - "t": "source.css.less", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "c", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ")", + "t": "source.css.less meta.selector.less meta.group.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "when", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less keyword.control.conditional.less", + "r": { + "dark_plus": "keyword.control: #C586C0", + "light_plus": "keyword.control: #AF00DB", + "dark_vs": "keyword.control: #569CD6", + "light_vs": "keyword.control: #0000FF", + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "(", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "iscolor", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less support.function.type.less", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" + } + }, + { + "c": "(", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "c", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ")", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ")", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1611,7 +841,7 @@ }, { "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1625,7 +855,7 @@ }, { "c": "\t", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1638,8 +868,8 @@ } }, { - "c": "color", - "t": "source.css.less meta.property-list.css support.type.property-name.css", + "c": "border-radius", + "t": "source.css.less meta.property-list.less support.type.property-name.less", "r": { "dark_plus": "support.type.property-name: #9CDCFE", "light_plus": "support.type.property-name: #E50000", @@ -1653,7 +883,7 @@ }, { "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1667,7 +897,931 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "style", + "t": "source.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "c", + "t": "source.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "}", + "t": "source.css.less punctuation.definition.block.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ".", + "t": "source.css.less meta.selector.less entity.other.attribute-name.class.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "box-shadow", + "t": "source.css.less meta.selector.less entity.other.attribute-name.class.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "(", + "t": "source.css.less meta.selector.less meta.group.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "style", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ",", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less punctuation.separator.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "alpha", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "50", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": "%", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ")", + "t": "source.css.less meta.selector.less meta.group.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "when", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less keyword.control.conditional.less", + "r": { + "dark_plus": "keyword.control: #C586C0", + "light_plus": "keyword.control: #AF00DB", + "dark_vs": "keyword.control: #569CD6", + "light_vs": "keyword.control: #0000FF", + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "(", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "isnumber", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less support.function.type.less", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" + } + }, + { + "c": "(", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "alpha", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ")", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ")", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "{", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ".", + "t": "source.css.less meta.property-list.less meta.selector.less entity.other.attribute-name.class.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "box-shadow", + "t": "source.css.less meta.property-list.less meta.selector.less entity.other.attribute-name.class.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "(", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "style", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ",", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less punctuation.separator.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "rgba", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less support.function.color.less", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" + } + }, + { + "c": "(", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "0", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": ",", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less punctuation.separator.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "0", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": ",", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less punctuation.separator.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "0", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": ",", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less punctuation.separator.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "alpha", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "}", + "t": "source.css.less punctuation.definition.block.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ".", + "t": "source.css.less meta.selector.less entity.other.attribute-name.class.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "box", + "t": "source.css.less meta.selector.less entity.other.attribute-name.class.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "{", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "color", + "t": "source.css.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1681,7 +1835,7 @@ }, { "c": "saturate", - "t": "source.css.less meta.property-list.css meta.property-value.css support.function.any-method.builtin.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less support.function.color-operation.less", "r": { "dark_plus": "support.function: #DCDCAA", "light_plus": "support.function: #795E26", @@ -1695,7 +1849,7 @@ }, { "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1709,35 +1863,35 @@ }, { "c": "@", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less variable.other.readwrite.less punctuation.definition.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "base", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less variable.other.readwrite.less support.other.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ",", - "t": "source.css.less meta.property-list.css meta.property-value.css punctuation.separator.list.comma.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.separator.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1751,7 +1905,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1765,7 +1919,7 @@ }, { "c": "5", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #098658", @@ -1779,7 +1933,7 @@ }, { "c": "%", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.percentage.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less keyword.other.unit.less", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #098658", @@ -1793,7 +1947,7 @@ }, { "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1807,7 +1961,7 @@ }, { "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1821,7 +1975,7 @@ }, { "c": "\t", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1835,7 +1989,7 @@ }, { "c": "border-color", - "t": "source.css.less meta.property-list.css support.type.property-name.css", + "t": "source.css.less meta.property-list.less support.type.property-name.less", "r": { "dark_plus": "support.type.property-name: #9CDCFE", "light_plus": "support.type.property-name: #E50000", @@ -1849,7 +2003,7 @@ }, { "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1863,7 +2017,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1877,2443 +2031,7 @@ }, { "c": "lighten", - "t": "source.css.less meta.property-list.css meta.property-value.css support.constant.property-value.css", - "r": { - "dark_plus": "support.constant.property-value: #CE9178", - "light_plus": "support.constant.property-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "support.constant.property-value: #0451A5", - "hc_black": "support.constant.property-value: #CE9178", - "dark_modern": "support.constant.property-value: #CE9178", - "hc_light": "support.constant.property-value: #0451A5", - "light_modern": "support.constant.property-value: #0451A5" - } - }, - { - "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "base", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ",", - "t": "source.css.less meta.property-list.css meta.property-value.css punctuation.separator.list.comma.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "30", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": "%", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.percentage.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "div", - "t": "source.css.less meta.property-list.css entity.name.tag.css", - "r": { - "dark_plus": "entity.name.tag.css: #D7BA7D", - "light_plus": "entity.name.tag: #800000", - "dark_vs": "entity.name.tag.css: #D7BA7D", - "light_vs": "entity.name.tag: #800000", - "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_modern": "entity.name.tag.css: #D7BA7D", - "hc_light": "entity.name.tag: #0F4A85", - "light_modern": "entity.name.tag: #800000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "{", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t\t", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": ".box-shadow", - "t": "source.css.less meta.property-list.css meta.property-list.css entity.other.attribute-name.class.mixin.css", - "r": { - "dark_plus": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.class.mixin.css: #800000", - "dark_vs": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.mixin.css: #800000", - "hc_black": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.class.mixin.css: #0F4A85", - "light_modern": "entity.other.attribute-name.class.mixin.css: #800000" - } - }, - { - "c": "((", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "0", - "t": "source.css.less meta.property-list.css meta.property-list.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "0", - "t": "source.css.less meta.property-list.css meta.property-list.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "5", - "t": "source.css.less meta.property-list.css meta.property-list.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": "px", - "t": "source.css.less meta.property-list.css meta.property-list.css constant.numeric.css keyword.other.unit.px.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": ",", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.separator.list.comma.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "30", - "t": "source.css.less meta.property-list.css meta.property-list.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": "%", - "t": "source.css.less meta.property-list.css meta.property-list.css constant.numeric.css keyword.other.unit.percentage.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "}", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "#", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id punctuation.definition.entity.css", - "r": { - "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_plus": "source.css.less entity.other.attribute-name.id: #800000", - "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_vs": "source.css.less entity.other.attribute-name.id: #800000", - "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", - "light_modern": "source.css.less entity.other.attribute-name.id: #800000" - } - }, - { - "c": "header", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id", - "r": { - "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_plus": "source.css.less entity.other.attribute-name.id: #800000", - "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_vs": "source.css.less entity.other.attribute-name.id: #800000", - "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", - "light_modern": "source.css.less entity.other.attribute-name.id: #800000" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "h1", - "t": "source.css.less meta.property-list.css entity.name.tag.css", - "r": { - "dark_plus": "entity.name.tag.css: #D7BA7D", - "light_plus": "entity.name.tag: #800000", - "dark_vs": "entity.name.tag.css: #D7BA7D", - "light_vs": "entity.name.tag: #800000", - "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_modern": "entity.name.tag.css: #D7BA7D", - "hc_light": "entity.name.tag: #0F4A85", - "light_modern": "entity.name.tag: #800000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "{", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t\t", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "font-size", - "t": "source.css.less meta.property-list.css meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "26", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-value.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": "px", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.px.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t\t", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "font-weight", - "t": "source.css.less meta.property-list.css meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "bold", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-value.css support.constant.property-value.css", - "r": { - "dark_plus": "support.constant.property-value: #CE9178", - "light_plus": "support.constant.property-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "support.constant.property-value: #0451A5", - "hc_black": "support.constant.property-value: #CE9178", - "dark_modern": "support.constant.property-value: #CE9178", - "hc_light": "support.constant.property-value: #0451A5", - "light_modern": "support.constant.property-value: #0451A5" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "}", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "p", - "t": "source.css.less meta.property-list.css entity.name.tag.css", - "r": { - "dark_plus": "entity.name.tag.css: #D7BA7D", - "light_plus": "entity.name.tag: #800000", - "dark_vs": "entity.name.tag.css: #D7BA7D", - "light_vs": "entity.name.tag: #800000", - "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_modern": "entity.name.tag.css: #D7BA7D", - "hc_light": "entity.name.tag: #0F4A85", - "light_modern": "entity.name.tag: #800000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "{", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "font-size", - "t": "source.css.less meta.property-list.css meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "12", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-value.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": "px", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.px.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t\t", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "a", - "t": "source.css.less meta.property-list.css meta.property-list.css entity.name.tag.css", - "r": { - "dark_plus": "entity.name.tag.css: #D7BA7D", - "light_plus": "entity.name.tag: #800000", - "dark_vs": "entity.name.tag.css: #D7BA7D", - "light_vs": "entity.name.tag: #800000", - "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_modern": "entity.name.tag.css: #D7BA7D", - "hc_light": "entity.name.tag: #0F4A85", - "light_modern": "entity.name.tag: #800000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "{", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "text-decoration", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "none", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-value.css support.constant.property-value.css", - "r": { - "dark_plus": "support.constant.property-value: #CE9178", - "light_plus": "support.constant.property-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "support.constant.property-value: #0451A5", - "hc_black": "support.constant.property-value: #CE9178", - "dark_modern": "support.constant.property-value: #CE9178", - "hc_light": "support.constant.property-value: #0451A5", - "light_modern": "support.constant.property-value: #0451A5" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t\t\t", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "&", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css entity.other.attribute-name.parent-selector.css punctuation.definition.entity.css", - "r": { - "dark_plus": "entity.other.attribute-name.parent-selector.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.parent-selector.css: #800000", - "dark_vs": "entity.other.attribute-name.parent-selector.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.parent-selector.css: #800000", - "hc_black": "entity.other.attribute-name.parent-selector.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.parent-selector.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.parent-selector.css: #0F4A85", - "light_modern": "entity.other.attribute-name.parent-selector.css: #800000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", - "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" - } - }, - { - "c": "hover", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css entity.other.attribute-name.pseudo-class.css", - "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "{", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "border-width", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "1", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css meta.property-value.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": "px", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.px.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "}", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t\t", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "}", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "}", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "the-border", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "1", - "t": "source.css.less constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": "px", - "t": "source.css.less constant.numeric.css keyword.other.unit.px.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ";", - "t": "source.css.less punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "base-color", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "#111", - "t": "source.css.less constant.other.rgb-value.css", - "r": { - "dark_plus": "constant.other.rgb-value: #CE9178", - "light_plus": "constant.other.rgb-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "constant.other.rgb-value: #0451A5", - "hc_black": "constant.other.rgb-value: #CE9178", - "dark_modern": "constant.other.rgb-value: #CE9178", - "hc_light": "constant.other.rgb-value: #0451A5", - "light_modern": "constant.other.rgb-value: #0451A5" - } - }, - { - "c": ";", - "t": "source.css.less punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "red", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "#842210", - "t": "source.css.less constant.other.rgb-value.css", - "r": { - "dark_plus": "constant.other.rgb-value: #CE9178", - "light_plus": "constant.other.rgb-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "constant.other.rgb-value: #0451A5", - "hc_black": "constant.other.rgb-value: #CE9178", - "dark_modern": "constant.other.rgb-value: #CE9178", - "hc_light": "constant.other.rgb-value: #0451A5", - "light_modern": "constant.other.rgb-value: #0451A5" - } - }, - { - "c": ";", - "t": "source.css.less punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "#", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id punctuation.definition.entity.css", - "r": { - "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_plus": "source.css.less entity.other.attribute-name.id: #800000", - "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_vs": "source.css.less entity.other.attribute-name.id: #800000", - "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", - "light_modern": "source.css.less entity.other.attribute-name.id: #800000" - } - }, - { - "c": "header", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id", - "r": { - "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_plus": "source.css.less entity.other.attribute-name.id: #800000", - "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_vs": "source.css.less entity.other.attribute-name.id: #800000", - "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", - "light_modern": "source.css.less entity.other.attribute-name.id: #800000" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "color", - "t": "source.css.less meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "base-color", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "*", - "t": "source.css.less meta.property-list.css meta.property-value.css keyword.operator.less", - "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4", - "dark_modern": "keyword.operator: #D4D4D4", - "hc_light": "keyword.operator: #000000", - "light_modern": "keyword.operator: #000000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "3", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "border-left", - "t": "source.css.less meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "the-border", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "border-right", - "t": "source.css.less meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "the-border", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "*", - "t": "source.css.less meta.property-list.css meta.property-value.css keyword.operator.less", - "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4", - "dark_modern": "keyword.operator: #D4D4D4", - "hc_light": "keyword.operator: #000000", - "light_modern": "keyword.operator: #000000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "2", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", - "r": { - "dark_plus": "constant.numeric: #B5CEA8", - "light_plus": "constant.numeric: #098658", - "dark_vs": "constant.numeric: #B5CEA8", - "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8", - "dark_modern": "constant.numeric: #B5CEA8", - "hc_light": "constant.numeric: #096D48", - "light_modern": "constant.numeric: #098658" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "#", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id punctuation.definition.entity.css", - "r": { - "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_plus": "source.css.less entity.other.attribute-name.id: #800000", - "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_vs": "source.css.less entity.other.attribute-name.id: #800000", - "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", - "light_modern": "source.css.less entity.other.attribute-name.id: #800000" - } - }, - { - "c": "footer", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id", - "r": { - "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_plus": "source.css.less entity.other.attribute-name.id: #800000", - "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_vs": "source.css.less entity.other.attribute-name.id: #800000", - "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", - "light_modern": "source.css.less entity.other.attribute-name.id: #800000" - } - }, - { - "c": " ", - "t": "source.css.less", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "color", - "t": "source.css.less meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "@", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "base-color", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "+", - "t": "source.css.less meta.property-list.css meta.property-value.css keyword.operator.less", - "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4", - "dark_modern": "keyword.operator: #D4D4D4", - "hc_light": "keyword.operator: #000000", - "light_modern": "keyword.operator: #000000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "#003300", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.other.rgb-value.css", - "r": { - "dark_plus": "constant.other.rgb-value: #CE9178", - "light_plus": "constant.other.rgb-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "constant.other.rgb-value: #0451A5", - "hc_black": "constant.other.rgb-value: #CE9178", - "dark_modern": "constant.other.rgb-value: #CE9178", - "hc_light": "constant.other.rgb-value: #0451A5", - "light_modern": "constant.other.rgb-value: #0451A5" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "\t", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "border-color", - "t": "source.css.less meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_modern": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_modern": "default: #3B3B3B" - } - }, - { - "c": "desaturate", - "t": "source.css.less meta.property-list.css meta.property-value.css support.function.any-method.builtin.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less support.function.color-operation.less", "r": { "dark_plus": "support.function: #DCDCAA", "light_plus": "support.function: #795E26", @@ -4327,7 +2045,7 @@ }, { "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -4341,35 +2059,35 @@ }, { "c": "@", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less variable.other.readwrite.less punctuation.definition.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { - "c": "red", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", + "c": "base", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less variable.other.readwrite.less support.other.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ",", - "t": "source.css.less meta.property-list.css meta.property-value.css punctuation.separator.list.comma.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.separator.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -4383,7 +2101,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -4396,8 +2114,8 @@ } }, { - "c": "10", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", + "c": "30", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #098658", @@ -4411,7 +2129,7 @@ }, { "c": "%", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.percentage.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less keyword.other.unit.less", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #098658", @@ -4425,7 +2143,7 @@ }, { "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -4439,7 +2157,329 @@ }, { "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "div", + "t": "source.css.less meta.property-list.less meta.selector.less entity.name.tag.less", + "r": { + "dark_plus": "entity.name.tag.less: #D7BA7D", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag.less: #D7BA7D", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag.less: #D7BA7D", + "dark_modern": "entity.name.tag.less: #D7BA7D", + "hc_light": "entity.name.tag: #0F4A85", + "light_modern": "entity.name.tag: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.selector.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "{", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.definition.block.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t\t", + "t": "source.css.less meta.property-list.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ".", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less entity.other.attribute-name.class.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "box-shadow", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less entity.other.attribute-name.class.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "(", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "(", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "0", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "0", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "5", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": "px", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ",", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less punctuation.separator.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "30", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": "%", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -4453,7 +2493,2177 @@ }, { "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", + "t": "source.css.less meta.property-list.less punctuation.definition.block.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "}", + "t": "source.css.less punctuation.definition.block.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "#", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_plus": "source.css.less entity.other.attribute-name.id: #800000", + "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_vs": "source.css.less entity.other.attribute-name.id: #800000", + "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" + } + }, + { + "c": "header", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less", + "r": { + "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_plus": "source.css.less entity.other.attribute-name.id: #800000", + "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_vs": "source.css.less entity.other.attribute-name.id: #800000", + "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "{", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "h1", + "t": "source.css.less meta.property-list.less meta.selector.less entity.name.tag.less", + "r": { + "dark_plus": "entity.name.tag.less: #D7BA7D", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag.less: #D7BA7D", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag.less: #D7BA7D", + "dark_modern": "entity.name.tag.less: #D7BA7D", + "hc_light": "entity.name.tag: #0F4A85", + "light_modern": "entity.name.tag: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.selector.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "{", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.definition.block.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t\t", + "t": "source.css.less meta.property-list.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "font-size", + "t": "source.css.less meta.property-list.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "26", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": "px", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t\t", + "t": "source.css.less meta.property-list.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "font-weight", + "t": "source.css.less meta.property-list.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "bold", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less support.constant.property-value.less", + "r": { + "dark_plus": "support.constant.property-value: #CE9178", + "light_plus": "support.constant.property-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "support.constant.property-value: #0451A5", + "hc_black": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", + "hc_light": "support.constant.property-value: #0451A5", + "light_modern": "support.constant.property-value: #0451A5" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "}", + "t": "source.css.less meta.property-list.less punctuation.definition.block.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "p", + "t": "source.css.less meta.property-list.less meta.selector.less entity.name.tag.less", + "r": { + "dark_plus": "entity.name.tag.less: #D7BA7D", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag.less: #D7BA7D", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag.less: #D7BA7D", + "dark_modern": "entity.name.tag.less: #D7BA7D", + "hc_light": "entity.name.tag: #0F4A85", + "light_modern": "entity.name.tag: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.selector.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "{", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.definition.block.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "font-size", + "t": "source.css.less meta.property-list.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "12", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": "px", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t\t", + "t": "source.css.less meta.property-list.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "a", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less entity.name.tag.less", + "r": { + "dark_plus": "entity.name.tag.less: #D7BA7D", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag.less: #D7BA7D", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag.less: #D7BA7D", + "dark_modern": "entity.name.tag.less: #D7BA7D", + "hc_light": "entity.name.tag: #0F4A85", + "light_modern": "entity.name.tag: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "{", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less punctuation.definition.block.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "text-decoration", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "none", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-value.less support.constant.property-value.less", + "r": { + "dark_plus": "support.constant.property-value: #CE9178", + "light_plus": "support.constant.property-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "support.constant.property-value: #0451A5", + "hc_black": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", + "hc_light": "support.constant.property-value: #0451A5", + "light_modern": "support.constant.property-value: #0451A5" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t\t\t", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "&", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.selector.less entity.other.attribute-name.parent.less punctuation.definition.entity.less", + "r": { + "dark_plus": "entity.other.attribute-name.parent.less: #D7BA7D", + "light_plus": "entity.other.attribute-name.parent.less: #800000", + "dark_vs": "entity.other.attribute-name.parent.less: #D7BA7D", + "light_vs": "entity.other.attribute-name.parent.less: #800000", + "hc_black": "entity.other.attribute-name.parent.less: #D7BA7D", + "dark_modern": "entity.other.attribute-name.parent.less: #D7BA7D", + "hc_light": "entity.other.attribute-name.parent.less: #0F4A85", + "light_modern": "entity.other.attribute-name.parent.less: #800000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.selector.less meta.function-call.less punctuation.definition.entity.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "hover", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.selector.less meta.function-call.less entity.other.attribute-name.pseudo-class.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.selector.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "{", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less punctuation.definition.block.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "border-width", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "1", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-value.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": "px", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-value.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "}", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less punctuation.definition.block.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t\t", + "t": "source.css.less meta.property-list.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "}", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.definition.block.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "}", + "t": "source.css.less meta.property-list.less punctuation.definition.block.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "}", + "t": "source.css.less punctuation.definition.block.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "the-border", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-value.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-value.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "1", + "t": "source.css.less meta.property-value.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": "px", + "t": "source.css.less meta.property-value.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-value.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "base-color", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-value.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-value.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "#", + "t": "source.css.less meta.property-value.less constant.other.color.rgb-value.less punctuation.definition.constant.less", + "r": { + "dark_plus": "constant.other.color.rgb-value: #CE9178", + "light_plus": "constant.other.color.rgb-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "constant.other.color.rgb-value: #0451A5", + "hc_black": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", + "hc_light": "constant.other.color.rgb-value: #0451A5", + "light_modern": "constant.other.color.rgb-value: #0451A5" + } + }, + { + "c": "111", + "t": "source.css.less meta.property-value.less constant.other.color.rgb-value.less", + "r": { + "dark_plus": "constant.other.color.rgb-value: #CE9178", + "light_plus": "constant.other.color.rgb-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "constant.other.color.rgb-value: #0451A5", + "hc_black": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", + "hc_light": "constant.other.color.rgb-value: #0451A5", + "light_modern": "constant.other.color.rgb-value: #0451A5" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-value.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "red", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-value.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-value.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "#", + "t": "source.css.less meta.property-value.less constant.other.color.rgb-value.less punctuation.definition.constant.less", + "r": { + "dark_plus": "constant.other.color.rgb-value: #CE9178", + "light_plus": "constant.other.color.rgb-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "constant.other.color.rgb-value: #0451A5", + "hc_black": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", + "hc_light": "constant.other.color.rgb-value: #0451A5", + "light_modern": "constant.other.color.rgb-value: #0451A5" + } + }, + { + "c": "842210", + "t": "source.css.less meta.property-value.less constant.other.color.rgb-value.less", + "r": { + "dark_plus": "constant.other.color.rgb-value: #CE9178", + "light_plus": "constant.other.color.rgb-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "constant.other.color.rgb-value: #0451A5", + "hc_black": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", + "hc_light": "constant.other.color.rgb-value: #0451A5", + "light_modern": "constant.other.color.rgb-value: #0451A5" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-value.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "#", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_plus": "source.css.less entity.other.attribute-name.id: #800000", + "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_vs": "source.css.less entity.other.attribute-name.id: #800000", + "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" + } + }, + { + "c": "header", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less", + "r": { + "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_plus": "source.css.less entity.other.attribute-name.id: #800000", + "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_vs": "source.css.less entity.other.attribute-name.id: #800000", + "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "{", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "color", + "t": "source.css.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "(", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "base-color", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "*", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less keyword.operator.arithmetic.less", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "3", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "border-left", + "t": "source.css.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "the-border", + "t": "source.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "border-right", + "t": "source.css.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "(", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "the-border", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "*", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less keyword.operator.arithmetic.less", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "2", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "}", + "t": "source.css.less punctuation.definition.block.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "#", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_plus": "source.css.less entity.other.attribute-name.id: #800000", + "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_vs": "source.css.less entity.other.attribute-name.id: #800000", + "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" + } + }, + { + "c": "footer", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less", + "r": { + "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_plus": "source.css.less entity.other.attribute-name.id: #800000", + "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_vs": "source.css.less entity.other.attribute-name.id: #800000", + "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "{", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "color", + "t": "source.css.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "(", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "base-color", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "+", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less keyword.operator.arithmetic.less", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" + } + }, + { + "c": " #", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "003300", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "\t", + "t": "source.css.less meta.property-list.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "border-color", + "t": "source.css.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "desaturate", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less support.function.color-operation.less", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" + } + }, + { + "c": "(", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.begin.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "red", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ",", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.separator.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "10", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less", + "r": { + "dark_plus": "constant.numeric: #B5CEA8", + "light_plus": "constant.numeric: #098658", + "dark_vs": "constant.numeric: #B5CEA8", + "light_vs": "constant.numeric: #098658", + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" + } + }, + { + "c": "%", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.end.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "}", + "t": "source.css.less punctuation.definition.block.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_scss.json b/extensions/vscode-colorize-tests/test/colorize-results/test_scss.json index 843cf288784..933ebf2ba5c 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_scss.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_scss.json @@ -1333,28 +1333,28 @@ "c": ":", "t": "source.css.scss meta.property-list.scss meta.property-list.scss entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "hover", "t": "source.css.scss meta.property-list.scss meta.property-list.scss entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -3615,14 +3615,14 @@ "c": "$width", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -3699,14 +3699,14 @@ "c": "$width", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -3895,14 +3895,14 @@ "c": "$localvar", "t": "source.css.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4035,14 +4035,14 @@ "c": "$width", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4077,14 +4077,14 @@ "c": "$font-size", "t": "source.css.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4175,14 +4175,14 @@ "c": "$line-height", "t": "source.css.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4315,42 +4315,42 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$font-size", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4371,42 +4371,42 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$line-height", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4441,14 +4441,14 @@ "c": "$name", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4497,14 +4497,14 @@ "c": "$attr", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4595,42 +4595,42 @@ "c": "#{", "t": "source.css.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$name", "t": "source.css.scss entity.other.attribute-name.class.css variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4679,42 +4679,42 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$attr", "t": "source.css.scss meta.property-list.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4875,14 +4875,14 @@ "c": "$grid-background-column-color", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6093,14 +6093,14 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss meta.property-value.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6121,14 +6121,14 @@ "c": " ", "t": "source.css.scss meta.property-list.scss meta.property-value.scss string.quoted.double.scss variable.interpolation.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6149,14 +6149,14 @@ "c": " ", "t": "source.css.scss meta.property-list.scss meta.property-value.scss string.quoted.double.scss variable.interpolation.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6177,14 +6177,14 @@ "c": "}", "t": "source.css.scss meta.property-list.scss meta.property-value.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6555,28 +6555,28 @@ "c": "$hue", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ":", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.parameter.url.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6639,28 +6639,28 @@ "c": "$saturation", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ":", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.parameter.url.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6737,28 +6737,28 @@ "c": "$lightness", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ":", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.parameter.url.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6891,14 +6891,14 @@ "c": "$grid-width", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6975,14 +6975,14 @@ "c": "$gutter-width", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -7129,14 +7129,14 @@ "c": "$n", "t": "source.css.scss meta.at-rule.function.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -7241,14 +7241,14 @@ "c": "$n", "t": "source.css.scss meta.property-list.scss meta.at-rule.return.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -7297,14 +7297,14 @@ "c": "$grid-width", "t": "source.css.scss meta.property-list.scss meta.at-rule.return.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -7367,14 +7367,14 @@ "c": "$n", "t": "source.css.scss meta.property-list.scss meta.at-rule.return.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -7493,14 +7493,14 @@ "c": "$gutter-width", "t": "source.css.scss meta.property-list.scss meta.at-rule.return.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -7885,14 +7885,14 @@ "c": "$family", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -8179,42 +8179,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.import.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$family", "t": "source.css.scss meta.at-rule.import.scss string.quoted.double.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.import.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10363,14 +10363,14 @@ "c": "$x", "t": "source.css.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10391,14 +10391,14 @@ "c": "$y", "t": "source.css.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10531,14 +10531,14 @@ "c": "$x", "t": "source.css.scss meta.property-list.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10671,42 +10671,42 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.at-rule.warn.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$x", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.at-rule.warn.scss string.quoted.double.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.at-rule.warn.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10769,14 +10769,14 @@ "c": "$x", "t": "source.css.scss meta.property-list.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10881,14 +10881,14 @@ "c": "$x", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -11021,14 +11021,14 @@ "c": "$y", "t": "source.css.scss meta.property-list.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -11161,42 +11161,42 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.at-rule.warn.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$y", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.at-rule.warn.scss string.quoted.double.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.at-rule.warn.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -11259,14 +11259,14 @@ "c": "$y", "t": "source.css.scss meta.property-list.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -11371,14 +11371,14 @@ "c": "$y", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -11567,14 +11567,14 @@ "c": "$x", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -11651,14 +11651,14 @@ "c": "$y", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -12771,14 +12771,14 @@ "c": "$type", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -12925,14 +12925,14 @@ "c": "$type", "t": "source.css.scss meta.property-list.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -13373,14 +13373,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.for.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -13569,42 +13569,42 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$i", "t": "source.css.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -13765,14 +13765,14 @@ "c": "$i", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -13919,14 +13919,14 @@ "c": "$animal", "t": "source.css.scss meta.at-rule.each.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14045,42 +14045,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$animal", "t": "source.css.scss meta.at-rule.each.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14241,42 +14241,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss string.quoted.single.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$animal", "t": "source.css.scss meta.at-rule.each.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss string.quoted.single.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss string.quoted.single.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14423,14 +14423,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14521,14 +14521,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14661,42 +14661,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14857,14 +14857,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14927,14 +14927,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14969,14 +14969,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15179,14 +15179,14 @@ "c": "$total", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.function.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15221,14 +15221,14 @@ "c": "$a", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.function.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15333,14 +15333,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.at-rule.for.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15445,14 +15445,14 @@ "c": "$total", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.at-rule.for.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15585,14 +15585,14 @@ "c": "$a", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15739,14 +15739,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15781,14 +15781,14 @@ "c": "$total", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15907,14 +15907,14 @@ "c": "$z", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -16215,14 +16215,14 @@ "c": "$grid", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.at-rule.return.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -17209,14 +17209,14 @@ "c": "$color", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -17237,14 +17237,14 @@ "c": "$width", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -17461,14 +17461,14 @@ "c": "$color", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -17545,14 +17545,14 @@ "c": "$width", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -18007,14 +18007,14 @@ "c": "$shadows", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -18133,14 +18133,14 @@ "c": "$shadows", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -18217,14 +18217,14 @@ "c": "$shadows", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -18301,14 +18301,14 @@ "c": "$shadows", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -18959,14 +18959,14 @@ "c": "$text", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -18987,14 +18987,14 @@ "c": "$background", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -19015,14 +19015,14 @@ "c": "$border", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -19127,14 +19127,14 @@ "c": "$text", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -19211,14 +19211,14 @@ "c": "$background", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -19295,14 +19295,14 @@ "c": "$border", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -19337,14 +19337,14 @@ "c": "$values", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -19631,14 +19631,14 @@ "c": "$values", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.at-rule.include.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -20247,14 +20247,14 @@ "c": "logo.gif", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.parameter.url.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -20373,14 +20373,14 @@ "c": "$attr", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -21423,14 +21423,14 @@ "c": "$foo", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -22543,14 +22543,14 @@ "c": "$a", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -22697,42 +22697,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$a", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.other.attribute-name.class.css variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -22809,42 +22809,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$a", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -23831,42 +23831,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$d", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -23929,42 +23929,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$d", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -24069,42 +24069,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$d", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -24181,42 +24181,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$d", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -24237,42 +24237,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$d", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -24363,42 +24363,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$d", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -26505,14 +26505,14 @@ "c": "$var1", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -26603,14 +26603,14 @@ "c": "$var2", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { From 5202e7bd7ba2c7c294dd54f0e525f413de8c8cbd Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 5 Dec 2023 07:14:01 -0800 Subject: [PATCH 72/92] Warn on opaque needsTransparency colors, expose to workbench fixes #200050 --- src/vs/platform/theme/common/colorRegistry.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/vs/platform/theme/common/colorRegistry.ts b/src/vs/platform/theme/common/colorRegistry.ts index c7ecd0485b4..2eab35be3ad 100644 --- a/src/vs/platform/theme/common/colorRegistry.ts +++ b/src/vs/platform/theme/common/colorRegistry.ts @@ -88,9 +88,10 @@ export interface IColorRegistry { * Register a color to the registry. * @param id The color id as used in theme description files * @param defaults The default values + * @param needsTransparency Whether the color requires transparency * @description the description */ - registerColor(id: string, defaults: ColorDefaults, description: string): ColorIdentifier; + registerColor(id: string, defaults: ColorDefaults, description: string, needsTransparency?: boolean): ColorIdentifier; /** * Register a color to the registry. @@ -139,6 +140,10 @@ class ColorRegistry implements IColorRegistry { if (deprecationMessage) { propertySchema.deprecationMessage = deprecationMessage; } + if (needsTransparency) { + propertySchema.pattern = '^#(?:(?[0-9a-fA-f]{3}[0-9a-eA-E])|(?:[0-9a-fA-F]{6}(?:(?![fF]{2})(?:[0-9a-fA-F]{2}))))?$'; + propertySchema.patternErrorMessage = 'This color must be transparent or it will obscure the selection'; + } this.colorSchema.properties[id] = propertySchema; this.colorReferenceSchema.enum.push(id); this.colorReferenceSchema.enumDescriptions.push(description); From 93c589cfc6aab0f9bca1e49cc22cf2c7cbc424c1 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 5 Dec 2023 07:17:25 -0800 Subject: [PATCH 73/92] Use a generic error message --- src/vs/platform/theme/common/colorRegistry.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/platform/theme/common/colorRegistry.ts b/src/vs/platform/theme/common/colorRegistry.ts index 2eab35be3ad..303c4577fa6 100644 --- a/src/vs/platform/theme/common/colorRegistry.ts +++ b/src/vs/platform/theme/common/colorRegistry.ts @@ -142,7 +142,7 @@ class ColorRegistry implements IColorRegistry { } if (needsTransparency) { propertySchema.pattern = '^#(?:(?[0-9a-fA-f]{3}[0-9a-eA-E])|(?:[0-9a-fA-F]{6}(?:(?![fF]{2})(?:[0-9a-fA-F]{2}))))?$'; - propertySchema.patternErrorMessage = 'This color must be transparent or it will obscure the selection'; + propertySchema.patternErrorMessage = 'This color must be transparent or it will obscure content'; } this.colorSchema.properties[id] = propertySchema; this.colorReferenceSchema.enum.push(id); From c733e05d942a2ed212167e184fc2c293618b0688 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 5 Dec 2023 07:20:39 -0800 Subject: [PATCH 74/92] Adopt needsTransparency in terminal --- .../contrib/terminal/common/terminalColorRegistry.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/common/terminalColorRegistry.ts b/src/vs/workbench/contrib/terminal/common/terminalColorRegistry.ts index 15e5cef62aa..34fa7dea75f 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalColorRegistry.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalColorRegistry.ts @@ -77,7 +77,7 @@ export const TERMINAL_FIND_MATCH_BACKGROUND_COLOR = registerColor('terminal.find // Use regular selection background in high contrast with a thick border hcDark: null, hcLight: '#0F4A85' -}, nls.localize('terminal.findMatchBackground', 'Color of the current search match in the terminal. The color must not be opaque so as not to hide underlying terminal content.')); +}, nls.localize('terminal.findMatchBackground', 'Color of the current search match in the terminal. The color must not be opaque so as not to hide underlying terminal content.'), true); export const TERMINAL_HOVER_HIGHLIGHT_BACKGROUND_COLOR = registerColor('terminal.hoverHighlightBackground', { dark: transparent(editorHoverHighlight, 0.5), light: transparent(editorHoverHighlight, 0.5), @@ -95,7 +95,7 @@ export const TERMINAL_FIND_MATCH_HIGHLIGHT_BACKGROUND_COLOR = registerColor('ter light: editorFindMatchHighlight, hcDark: null, hcLight: null -}, nls.localize('terminal.findMatchHighlightBackground', 'Color of the other search matches in the terminal. The color must not be opaque so as not to hide underlying terminal content.')); +}, nls.localize('terminal.findMatchHighlightBackground', 'Color of the other search matches in the terminal. The color must not be opaque so as not to hide underlying terminal content.'), true); export const TERMINAL_FIND_MATCH_HIGHLIGHT_BORDER_COLOR = registerColor('terminal.findMatchHighlightBorder', { dark: null, light: null, @@ -113,7 +113,7 @@ export const TERMINAL_DRAG_AND_DROP_BACKGROUND = registerColor('terminal.dropBac light: EDITOR_DRAG_AND_DROP_BACKGROUND, hcDark: EDITOR_DRAG_AND_DROP_BACKGROUND, hcLight: EDITOR_DRAG_AND_DROP_BACKGROUND -}, nls.localize('terminal.dragAndDropBackground', "Background color when dragging on top of terminals. The color should have transparency so that the terminal contents can still shine through.")); +}, nls.localize('terminal.dragAndDropBackground', "Background color when dragging on top of terminals. The color should have transparency so that the terminal contents can still shine through."), true); export const TERMINAL_TAB_ACTIVE_BORDER = registerColor('terminal.tab.activeBorder', { dark: TAB_ACTIVE_BORDER, light: TAB_ACTIVE_BORDER, From ea0e5cda39f15f987a162ff39da18a541d989676 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Tue, 5 Dec 2023 17:39:13 +0100 Subject: [PATCH 75/92] Fixes #192440 --- .../editor/common/services/semanticTokensProviderStyling.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/vs/editor/common/services/semanticTokensProviderStyling.ts b/src/vs/editor/common/services/semanticTokensProviderStyling.ts index e08d06038bb..f248e0e23c2 100644 --- a/src/vs/editor/common/services/semanticTokensProviderStyling.ts +++ b/src/vs/editor/common/services/semanticTokensProviderStyling.ts @@ -105,21 +105,21 @@ export class SemanticTokensProviderStyling { public warnOverlappingSemanticTokens(lineNumber: number, startColumn: number): void { if (!this._hasWarnedOverlappingTokens) { this._hasWarnedOverlappingTokens = true; - console.warn(`Overlapping semantic tokens detected at lineNumber ${lineNumber}, column ${startColumn}`); + this._logService.warn(`Overlapping semantic tokens detected at lineNumber ${lineNumber}, column ${startColumn}`); } } public warnInvalidLengthSemanticTokens(lineNumber: number, startColumn: number): void { if (!this._hasWarnedInvalidLengthTokens) { this._hasWarnedInvalidLengthTokens = true; - console.warn(`Semantic token with invalid length detected at lineNumber ${lineNumber}, column ${startColumn}`); + this._logService.warn(`Semantic token with invalid length detected at lineNumber ${lineNumber}, column ${startColumn}`); } } public warnInvalidEditStart(previousResultId: string | undefined, resultId: string | undefined, editIndex: number, editStart: number, maxExpectedStart: number): void { if (!this._hasWarnedInvalidEditStart) { this._hasWarnedInvalidEditStart = true; - console.warn(`Invalid semantic tokens edit detected (previousResultId: ${previousResultId}, resultId: ${resultId}) at edit #${editIndex}: The provided start offset ${editStart} is outside the previous data (length ${maxExpectedStart}).`); + this._logService.warn(`Invalid semantic tokens edit detected (previousResultId: ${previousResultId}, resultId: ${resultId}) at edit #${editIndex}: The provided start offset ${editStart} is outside the previous data (length ${maxExpectedStart}).`); } } From cafbf86532bae621d165f8733b2e9de5896a90c0 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 5 Dec 2023 18:00:28 +0100 Subject: [PATCH 76/92] add failing/skipped test for https://github.com/microsoft/vscode/issues/187055 (#200055) --- src/vs/base/test/common/filters.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/vs/base/test/common/filters.test.ts b/src/vs/base/test/common/filters.test.ts index c80a6f84132..df8d25f3dab 100644 --- a/src/vs/base/test/common/filters.test.ts +++ b/src/vs/base/test/common/filters.test.ts @@ -498,6 +498,11 @@ suite('Filters', () => { assertTopScore(fuzzyScore, '_lineS', 0, '_lineS', '_lines'); }); + test.skip('Bad completion ranking changes valid variable name to class name when pressing "." #187055', function () { + assertTopScore(fuzzyScore, 'a', 1, 'A', 'a'); + assertTopScore(fuzzyScore, 'theme', 1, 'Theme', 'theme'); + }); + test('HTML closing tag proposal filtered out #38880', function () { assertMatches('\t\t<', '\t\t', '^\t^\t^', fuzzyScore, { patternPos: 0 }); assertMatches('\t\t<', '\t\t', '\t\t^', fuzzyScore, { patternPos: 2 }); From 4b6c84ef9c541ccb13bc21d897ee0f41cd6a1bf5 Mon Sep 17 00:00:00 2001 From: Andrea Mah <31675041+andreamah@users.noreply.github.com> Date: Tue, 5 Dec 2023 09:35:36 -0800 Subject: [PATCH 77/92] add `css.format.spaceAroundSelectorSeparator: true` to the workspace and add spacing around `>` (#199993) --- .vscode/settings.json | 3 +- .../base/browser/ui/iconLabel/iconlabel.css | 2 +- .../codelens/browser/codelensWidget.css | 12 +- .../contrib/suggest/browser/media/suggest.css | 106 +++--- .../activitybar/media/activityaction.css | 2 +- .../parts/editor/media/breadcrumbscontrol.css | 18 +- .../contrib/comments/browser/media/review.css | 4 +- .../browser/media/extensionActions.css | 14 +- .../browser/media/runtimeExtensionsEditor.css | 2 +- .../contrib/inlineChat/browser/inlineChat.css | 2 +- .../browser/media/languageStatus.css | 26 +- .../notebook/browser/media/notebook.css | 2 +- .../browser/media/notebookCellChat.css | 2 +- .../browser/media/notebookFolding.css | 2 +- .../remote/browser/media/remoteViewlet.css | 2 +- .../browser/media/gettingStarted.css | 328 +++++++++--------- .../browser/media/walkThroughPart.css | 4 +- .../suggest/browser/media/suggest.css | 66 ++-- .../browser/media/userDataProfileView.css | 22 +- 19 files changed, 310 insertions(+), 309 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 7434adcf4ae..163f114e7d7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -167,5 +167,6 @@ ], "[github-issues]": { "editor.wordWrap": "on" - } + }, + "css.format.spaceAroundSelectorSeparator": true, } diff --git a/src/vs/base/browser/ui/iconLabel/iconlabel.css b/src/vs/base/browser/ui/iconLabel/iconlabel.css index c847aecee2f..47f8891703c 100644 --- a/src/vs/base/browser/ui/iconLabel/iconlabel.css +++ b/src/vs/base/browser/ui/iconLabel/iconlabel.css @@ -51,7 +51,7 @@ opacity: 0.5; } -.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-suffix-container>.label-suffix { +.monaco-icon-label > .monaco-icon-label-container > .monaco-icon-suffix-container > .label-suffix { opacity: .7; white-space: pre; } diff --git a/src/vs/editor/contrib/codelens/browser/codelensWidget.css b/src/vs/editor/contrib/codelens/browser/codelensWidget.css index ce61f837ef5..14711df31af 100644 --- a/src/vs/editor/contrib/codelens/browser/codelensWidget.css +++ b/src/vs/editor/contrib/codelens/browser/codelensWidget.css @@ -16,24 +16,24 @@ font-family: var(--vscode-editorCodeLens-fontFamily), var(--vscode-editorCodeLens-fontFamilyDefault); } -.monaco-editor .codelens-decoration>span, -.monaco-editor .codelens-decoration>a { +.monaco-editor .codelens-decoration > span, +.monaco-editor .codelens-decoration > a { user-select: none; -webkit-user-select: none; white-space: nowrap; vertical-align: sub; } -.monaco-editor .codelens-decoration>a { +.monaco-editor .codelens-decoration > a { text-decoration: none; } -.monaco-editor .codelens-decoration>a:hover { +.monaco-editor .codelens-decoration > a:hover { cursor: pointer; color: var(--vscode-editorLink-activeForeground) !important; } -.monaco-editor .codelens-decoration>a:hover .codicon { +.monaco-editor .codelens-decoration > a:hover .codicon { color: var(--vscode-editorLink-activeForeground) !important; } @@ -45,7 +45,7 @@ font-size: var(--vscode-editorCodeLens-fontSize); } -.monaco-editor .codelens-decoration>a:hover .codicon::before { +.monaco-editor .codelens-decoration > a:hover .codicon::before { cursor: pointer; } diff --git a/src/vs/editor/contrib/suggest/browser/media/suggest.css b/src/vs/editor/contrib/suggest/browser/media/suggest.css index bac06376685..597fa5411b3 100644 --- a/src/vs/editor/contrib/suggest/browser/media/suggest.css +++ b/src/vs/editor/contrib/suggest/browser/media/suggest.css @@ -71,24 +71,24 @@ margin-right: 0.3em; } -.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row>.contents>.main>.right>.readMore, -.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore { +.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row > .contents > .main > .right > .readMore, +.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label > .contents > .main > .right > .readMore { display: none; } -.monaco-editor .suggest-widget.with-status-bar:not(.docs-side) .monaco-list .monaco-list-row:hover>.contents>.main>.right.can-expand-details>.details-label { +.monaco-editor .suggest-widget.with-status-bar:not(.docs-side) .monaco-list .monaco-list-row:hover > .contents > .main > .right.can-expand-details > .details-label { width: 100%; } /* Styles for Message element for when widget is loading or is empty */ -.monaco-editor .suggest-widget>.message { +.monaco-editor .suggest-widget > .message { padding-left: 22px; } /** Styles for the list element **/ -.monaco-editor .suggest-widget>.tree { +.monaco-editor .suggest-widget > .tree { height: 100%; width: 100%; } @@ -120,14 +120,14 @@ color: var(--vscode-editorSuggestWidget-selectedIconForeground); } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents { flex: 1; height: 100%; overflow: hidden; padding-left: 2px; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main { display: flex; overflow: hidden; text-overflow: ellipsis; @@ -135,12 +135,12 @@ justify-content: space-between; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left, -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left, +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right { display: flex; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.focused)>.contents>.main .monaco-icon-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.focused) > .contents > .main .monaco-icon-label { color: var(--vscode-editorSuggestWidget-foreground); } @@ -148,48 +148,48 @@ font-weight: bold; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main .monaco-highlighted-label .highlight { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main .monaco-highlighted-label .highlight { color: var(--vscode-editorSuggestWidget-highlightForeground); } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused>.contents>.main .monaco-highlighted-label .highlight { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused > .contents > .main .monaco-highlighted-label .highlight { color: var(--vscode-editorSuggestWidget-focusHighlightForeground); } /** ReadMore Icon styles **/ -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close, -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore::before { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .codicon-close, +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .readMore::before { color: inherit; opacity: 1; font-size: 14px; cursor: pointer; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .codicon-close { position: absolute; top: 6px; right: 2px; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close:hover, -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:hover { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .codicon-close:hover, +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .readMore:hover { opacity: 1; } /** signature, qualifier, type/details opacity **/ -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { opacity: 0.7; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .signature-label { overflow: hidden; text-overflow: ellipsis; opacity: 0.6; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .qualifier-label { margin-left: 12px; opacity: 0.4; font-size: 85%; @@ -201,7 +201,7 @@ /** Type Info and icon next to the label in the focused completion item **/ -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { font-size: 85%; margin-left: 1.1em; overflow: hidden; @@ -209,58 +209,58 @@ white-space: nowrap; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label>.monaco-tokenized-source { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label > .monaco-tokenized-source { display: inline; } /** Details: if using CompletionItem#details, show on focus **/ -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { display: none; } -.monaco-editor .suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label { +.monaco-editor .suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused > .contents > .main > .right > .details-label { display: inline; } /** Details: if using CompletionItemLabel#details, always show **/ -.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.right>.details-label, -.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label)>.contents>.main>.right>.details-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label) > .contents > .main > .right > .details-label, +.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label) > .contents > .main > .right > .details-label { display: inline; } /** Ellipsis on hover **/ -.monaco-editor .suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right.can-expand-details>.details-label { +.monaco-editor .suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover > .contents > .main > .right.can-expand-details > .details-label { width: calc(100% - 26px); } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left { flex-shrink: 1; flex-grow: 1; overflow: hidden; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.monaco-icon-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .monaco-icon-label { flex-shrink: 0; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.left>.monaco-icon-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label) > .contents > .main > .left > .monaco-icon-label { max-width: 100%; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.left>.monaco-icon-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label > .contents > .main > .left > .monaco-icon-label { flex-shrink: 1; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right { overflow: hidden; flex-shrink: 4; max-width: 70%; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .readMore { display: inline-block; position: absolute; right: 10px; @@ -271,23 +271,23 @@ /** Do NOT display ReadMore when docs is side/below **/ -.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row>.contents>.main>.right>.readMore { +.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row > .contents > .main > .right > .readMore { display: none !important; } /** Do NOT display ReadMore when using plain CompletionItemLabel (details/documentation might not be resolved) **/ -.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.right>.readMore { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label > .contents > .main > .right > .readMore { display: none; } /** Focused item can show ReadMore, but can't when docs is side/below **/ -.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused.string-label > .contents > .main > .right > .readMore { display: inline-block; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right>.readMore { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused:hover > .contents > .main > .right > .readMore { visibility: visible; } @@ -298,7 +298,7 @@ text-decoration: unset; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated>.monaco-icon-label-container>.monaco-icon-name-container { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated > .monaco-icon-label-container > .monaco-icon-name-container { text-decoration: line-through; } @@ -372,17 +372,17 @@ display: none; } -.monaco-editor .suggest-details>.monaco-scrollable-element { +.monaco-editor .suggest-details > .monaco-scrollable-element { flex: 1; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body { box-sizing: border-box; height: 100%; width: 100%; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .type { flex: 2; overflow: hidden; text-overflow: ellipsis; @@ -392,55 +392,55 @@ padding: 4px 0 12px 5px; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type.auto-wrap { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .type.auto-wrap { white-space: normal; word-break: break-all; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs { margin: 0; padding: 4px 5px; white-space: pre-wrap; } -.monaco-editor .suggest-details.no-type>.monaco-scrollable-element>.body>.docs { +.monaco-editor .suggest-details.no-type > .monaco-scrollable-element > .body > .docs { margin-right: 24px; overflow: hidden; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs { padding: 0; white-space: initial; min-height: calc(1rem + 8px); } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div, -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>span:not(:empty) { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs > div, +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs > span:not(:empty) { padding: 4px 5px; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:first-child { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs > div > p:first-child { margin-top: 0; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:last-child { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs > div > p:last-child { margin-bottom: 0; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .monaco-tokenized-source { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs .monaco-tokenized-source { white-space: pre; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs .code { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs .code { white-space: pre-wrap; word-wrap: break-word; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .codicon { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs .codicon { vertical-align: sub; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>p:empty { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > p:empty { display: none; } diff --git a/src/vs/workbench/browser/parts/activitybar/media/activityaction.css b/src/vs/workbench/browser/parts/activitybar/media/activityaction.css index abba016e91d..99df125f3a8 100644 --- a/src/vs/workbench/browser/parts/activitybar/media/activityaction.css +++ b/src/vs/workbench/browser/parts/activitybar/media/activityaction.css @@ -234,7 +234,7 @@ /* Right aligned */ -.monaco-workbench .activitybar.right>.content :not(.monaco-menu)>.monaco-action-bar .profile-badge, +.monaco-workbench .activitybar.right > .content :not(.monaco-menu) > .monaco-action-bar .profile-badge, .monaco-workbench .activitybar.right > .content :not(.monaco-menu) > .monaco-action-bar .badge { left: auto; right: 0; diff --git a/src/vs/workbench/browser/parts/editor/media/breadcrumbscontrol.css b/src/vs/workbench/browser/parts/editor/media/breadcrumbscontrol.css index 3b8bac4565d..ec3ef9c9c13 100644 --- a/src/vs/workbench/browser/parts/editor/media/breadcrumbscontrol.css +++ b/src/vs/workbench/browser/parts/editor/media/breadcrumbscontrol.css @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -.monaco-workbench .part.editor>.content .editor-group-container .breadcrumbs-control.hidden { +.monaco-workbench .part.editor > .content .editor-group-container .breadcrumbs-control.hidden { display: none; } -.monaco-workbench .part.editor>.content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.selected .monaco-icon-label, -.monaco-workbench .part.editor>.content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.focused .monaco-icon-label { +.monaco-workbench .part.editor > .content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.selected .monaco-icon-label, +.monaco-workbench .part.editor > .content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.focused .monaco-icon-label { text-decoration-line: underline; } -.monaco-workbench .part.editor>.content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.selected .hint-more, -.monaco-workbench .part.editor>.content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.focused .hint-more { +.monaco-workbench .part.editor > .content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.selected .hint-more, +.monaco-workbench .part.editor > .content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.focused .hint-more { text-decoration-line: underline; } @@ -41,22 +41,22 @@ flex-direction: column; } -.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree>.input { +.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree > .input { padding: 5px 9px; position: relative; box-sizing: border-box; height: 36px; } -.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree>.tree { +.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree > .tree { height: calc(100% - 36px); } -.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree.inactive>.input { +.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree.inactive > .input { display: none; } -.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree.inactive>.tree { +.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree.inactive > .tree { height: 100%; } diff --git a/src/vs/workbench/contrib/comments/browser/media/review.css b/src/vs/workbench/contrib/comments/browser/media/review.css index b2ce28c5e14..cad293ca09e 100644 --- a/src/vs/workbench/contrib/comments/browser/media/review.css +++ b/src/vs/workbench/contrib/comments/browser/media/review.css @@ -298,8 +298,8 @@ width: auto; } -.review-widget .body .comment-additional-actions .button-bar>.monaco-text-button, -.review-widget .body .comment-additional-actions .button-bar>.monaco-button-dropdown { +.review-widget .body .comment-additional-actions .button-bar > .monaco-text-button, +.review-widget .body .comment-additional-actions .button-bar > .monaco-button-dropdown { margin: 0 10px 0 0; } diff --git a/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css b/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css index 4ae58e118a1..b2eaa27034a 100644 --- a/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css +++ b/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css @@ -10,12 +10,12 @@ text-overflow: ellipsis; } -.monaco-action-bar .action-item>.action-label.extension-action.label, -.monaco-action-bar .action-dropdown-item>.action-label.extension-action.label { +.monaco-action-bar .action-item > .action-label.extension-action.label, +.monaco-action-bar .action-dropdown-item > .action-label.extension-action.label { padding: 0 5px; } -.monaco-action-bar .action-dropdown-item>.monaco-dropdown .action-label { +.monaco-action-bar .action-dropdown-item > .monaco-dropdown .action-label { padding: 0; } @@ -36,7 +36,7 @@ } .monaco-action-bar .action-item .action-label.extension-action.label, -.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator { +.monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator { background-color: var(--vscode-extensionButton-background) !important; } @@ -48,12 +48,12 @@ background-color: var(--vscode-extensionButton-hoverBackground) !important; } -.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator>div { +.monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator > div { background-color: var(--vscode-extensionButton-separator); } .monaco-action-bar .action-item .action-label.extension-action.label.prominent, -.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator.prominent { +.monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator.prominent { background-color: var(--vscode-extensionButton-prominentBackground); } @@ -69,7 +69,7 @@ border: 1px solid var(--vscode-contrastBorder); } -.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator { +.monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator { border-top: 1px solid var(--vscode-contrastBorder); border-bottom: 1px solid var(--vscode-contrastBorder); } diff --git a/src/vs/workbench/contrib/extensions/browser/media/runtimeExtensionsEditor.css b/src/vs/workbench/contrib/extensions/browser/media/runtimeExtensionsEditor.css index e1c4ea5afd2..7187efb1757 100644 --- a/src/vs/workbench/contrib/extensions/browser/media/runtimeExtensionsEditor.css +++ b/src/vs/workbench/contrib/extensions/browser/media/runtimeExtensionsEditor.css @@ -31,7 +31,7 @@ text-align: right; } -.runtime-extensions-editor .extension .desc>.msg>span:not(:last-child)::after { +.runtime-extensions-editor .extension .desc > .msg > span:not(:last-child)::after { content: '\2022'; padding: 0 4px; opacity: .8; diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChat.css b/src/vs/workbench/contrib/inlineChat/browser/inlineChat.css index 6d16be3ce3a..9e4e77cfe38 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChat.css +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChat.css @@ -93,7 +93,7 @@ } /* UGLY - fighting against workbench styles */ -.monaco-workbench .part.editor>.content .monaco-editor .inline-chat .progress .monaco-progress-container { +.monaco-workbench .part.editor > .content .monaco-editor .inline-chat .progress .monaco-progress-container { top: 0; } diff --git a/src/vs/workbench/contrib/languageStatus/browser/media/languageStatus.css b/src/vs/workbench/contrib/languageStatus/browser/media/languageStatus.css index da152cb9208..f7fb23f59c6 100644 --- a/src/vs/workbench/contrib/languageStatus/browser/media/languageStatus.css +++ b/src/vs/workbench/contrib/languageStatus/browser/media/languageStatus.css @@ -25,7 +25,7 @@ } } -.monaco-workbench .statusbar DIV#status\.languageStatus A>SPAN.codicon.wiggle { +.monaco-workbench .statusbar DIV#status\.languageStatus A > SPAN.codicon.wiggle { animation-duration: .8s; animation-iteration-count: 1; animation-name: wiggle; @@ -62,60 +62,60 @@ border-bottom: 1px solid var(--vscode-notifications-border); } -.monaco-workbench .hover-language-status>.severity { +.monaco-workbench .hover-language-status > .severity { padding-right: 8px; flex: 1; margin: auto; display: none; } -.monaco-workbench .hover-language-status>.severity.sev3 { +.monaco-workbench .hover-language-status > .severity.sev3 { color: var(--vscode-notificationsErrorIcon-foreground) } -.monaco-workbench .hover-language-status>.severity.sev2 { +.monaco-workbench .hover-language-status > .severity.sev2 { color: var(--vscode-notificationsInfoIcon-foreground) } -.monaco-workbench .hover-language-status>.severity.show { +.monaco-workbench .hover-language-status > .severity.show { display: inherit; } -.monaco-workbench .hover-language-status>.element { +.monaco-workbench .hover-language-status > .element { display: flex; justify-content: space-between; vertical-align: middle; flex-grow: 100; } -.monaco-workbench .hover-language-status>.element>.left>.detail:not(:empty)::before { +.monaco-workbench .hover-language-status > .element > .left > .detail:not(:empty)::before { content: '\2013'; padding: 0 4px; opacity: 0.6; } -.monaco-workbench .hover-language-status>.element>.left>.label:empty { +.monaco-workbench .hover-language-status > .element > .left > .label:empty { display: none; } -.monaco-workbench .hover-language-status>.element .left { +.monaco-workbench .hover-language-status > .element .left { margin: auto 0; } -.monaco-workbench .hover-language-status>.element .right { +.monaco-workbench .hover-language-status > .element .right { margin: auto 0; display: flex; } -.monaco-workbench .hover-language-status>.element .right:not(:empty) { +.monaco-workbench .hover-language-status > .element .right:not(:empty) { padding-left: 16px; } -.monaco-workbench .hover-language-status>.element .right .monaco-link { +.monaco-workbench .hover-language-status > .element .right .monaco-link { margin: auto 0; white-space: nowrap; } -.monaco-workbench .hover-language-status>.element .right .monaco-action-bar:not(:first-child) { +.monaco-workbench .hover-language-status > .element .right .monaco-action-bar:not(:first-child) { padding-left: 8px; } diff --git a/src/vs/workbench/contrib/notebook/browser/media/notebook.css b/src/vs/workbench/contrib/notebook/browser/media/notebook.css index c22bc652ca7..309b3b4ef84 100644 --- a/src/vs/workbench/contrib/notebook/browser/media/notebook.css +++ b/src/vs/workbench/contrib/notebook/browser/media/notebook.css @@ -258,7 +258,7 @@ text-align: center; } -.monaco-workbench .notebookOverlay>.cell-list-container>.monaco-list>.monaco-scrollable-element>.monaco-list-rows>.monaco-list-row .cell-statusbar-hidden .execution-count-label { +.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .cell-statusbar-hidden .execution-count-label { line-height: 15px; } diff --git a/src/vs/workbench/contrib/notebook/browser/media/notebookCellChat.css b/src/vs/workbench/contrib/notebook/browser/media/notebookCellChat.css index 5c0081e507d..fda2877f566 100644 --- a/src/vs/workbench/contrib/notebook/browser/media/notebookCellChat.css +++ b/src/vs/workbench/contrib/notebook/browser/media/notebookCellChat.css @@ -97,7 +97,7 @@ } /* UGLY - fighting against workbench styles */ -.monaco-workbench .part.editor>.content .monaco-editor .inline-chat .progress .monaco-progress-container { +.monaco-workbench .part.editor > .content .monaco-editor .inline-chat .progress .monaco-progress-container { top: 0; } diff --git a/src/vs/workbench/contrib/notebook/browser/media/notebookFolding.css b/src/vs/workbench/contrib/notebook/browser/media/notebookFolding.css index 8dc8d7eb123..7433c9a7eb2 100644 --- a/src/vs/workbench/contrib/notebook/browser/media/notebookFolding.css +++ b/src/vs/workbench/contrib/notebook/browser/media/notebookFolding.css @@ -43,7 +43,7 @@ padding: 4px 4px 4px 4px; } -.monaco-workbench .notebookOverlay>.cell-list-container .notebook-folded-hint { +.monaco-workbench .notebookOverlay > .cell-list-container .notebook-folded-hint { position: absolute; user-select: none; } diff --git a/src/vs/workbench/contrib/remote/browser/media/remoteViewlet.css b/src/vs/workbench/contrib/remote/browser/media/remoteViewlet.css index ef32cf43f39..4ebb0d89702 100644 --- a/src/vs/workbench/contrib/remote/browser/media/remoteViewlet.css +++ b/src/vs/workbench/contrib/remote/browser/media/remoteViewlet.css @@ -13,7 +13,7 @@ flex-wrap: nowrap; } -.remote-help-content .monaco-list .monaco-list-row .remote-help-tree-node-item>.remote-help-tree-node-item-icon { +.remote-help-content .monaco-list .monaco-list-row .remote-help-tree-node-item > .remote-help-tree-node-item-icon { background-size: 16px; background-position: left center; background-repeat: no-repeat; diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/media/gettingStarted.css b/src/vs/workbench/contrib/welcomeGettingStarted/browser/media/gettingStarted.css index 0790a628607..2a31a8ba681 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/media/gettingStarted.css +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/media/gettingStarted.css @@ -8,7 +8,7 @@ background-image: url('../../../../browser/media/code-icon.svg'); } -.monaco-workbench .part.editor>.content .gettingStartedContainer { +.monaco-workbench .part.editor > .content .gettingStartedContainer { box-sizing: border-box; line-height: 22px; position: relative; @@ -20,26 +20,26 @@ outline: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.loading { +.monaco-workbench .part.editor > .content .gettingStartedContainer.loading { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer img { +.monaco-workbench .part.editor > .content .gettingStartedContainer img { max-width: 100%; max-height: 100%; object-fit: contain; pointer-events: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer { +.monaco-workbench .part.editor > .content .gettingStartedContainer { font-size: 13px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStarted { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStarted { height: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer h1 { +.monaco-workbench .part.editor > .content .gettingStartedContainer h1 { padding: 5px 0 0; margin: 0; border: none; @@ -48,24 +48,24 @@ white-space: nowrap; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .title { +.monaco-workbench .part.editor > .content .gettingStartedContainer .title { margin-top: 1em; margin-bottom: 1em; flex: 1 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .subtitle { +.monaco-workbench .part.editor > .content .gettingStartedContainer .subtitle { margin-top: .6em; font-size: 2em; display: block; } -.monaco-workbench.hc-black .part.editor>.content .gettingStartedContainer .subtitle, -.monaco-workbench.hc-light .part.editor>.content .gettingStartedContainer .subtitle { +.monaco-workbench.hc-black .part.editor > .content .gettingStartedContainer .subtitle, +.monaco-workbench.hc-light .part.editor > .content .gettingStartedContainer .subtitle { font-weight: 200; } -.monaco-workbench .part.editor>.content .gettingStartedContainer h2 { +.monaco-workbench .part.editor > .content .gettingStartedContainer h2 { font-weight: 400; margin-top: 0; margin-bottom: 5px; @@ -73,12 +73,12 @@ line-height: initial; } -.monaco-workbench .part.editor>.content .gettingStartedContainer a:focus { +.monaco-workbench .part.editor > .content .gettingStartedContainer a:focus { outline: 1px solid -webkit-focus-ring-color; outline-offset: -1px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide { width: 100%; height: 100%; padding: 0; @@ -88,23 +88,23 @@ top: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories { padding: 12px 24px; } /* duplicated until the getting-started specific setting is removed */ -.monaco-workbench .part.editor>.content .gettingStartedContainer.animatable .gettingStartedSlide { +.monaco-workbench .part.editor > .content .gettingStartedContainer.animatable .gettingStartedSlide { /* keep consistant with SLIDE_TRANSITION_TIME_MS in gettingStarted.ts */ transition: left 0.25s, opacity 0.25s; } -.monaco-workbench.reduce-motion .part.editor>.content .gettingStartedContainer .gettingStartedSlide, -.monaco-workbench.reduce-motion .part.editor>.content .gettingStartedContainer.animatable .gettingStartedSlide { +.monaco-workbench.reduce-motion .part.editor > .content .gettingStartedContainer .gettingStartedSlide, +.monaco-workbench.reduce-motion .part.editor > .content .gettingStartedContainer.animatable .gettingStartedSlide { /* keep consistant with SLIDE_TRANSITION_TIME_MS in gettingStarted.ts */ transition: left 0.0s, opacity 0.0s; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer { display: grid; height: 100%; max-width: 1200px; @@ -117,73 +117,73 @@ ". footer footer footer ."; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-constrained .gettingStartedSlideCategories>.gettingStartedCategoriesContainer { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-constrained .gettingStartedSlideCategories > .gettingStartedCategoriesContainer { grid-template-rows: auto min-content minmax(min-content, auto) min-content; grid-template-columns: 1fr; grid-template-areas: "header" "left-column" "right-column" "footer"; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.height-constrained .gettingStartedSlideCategories>.gettingStartedCategoriesContainer { +.monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained .gettingStartedSlideCategories > .gettingStartedCategoriesContainer { grid-template-rows: auto minmax(min-content, auto) min-content; grid-template-areas: "header" "left-column right-column" "footer footer"; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.height-constrained.width-constrained .gettingStartedSlideCategories>.gettingStartedCategoriesContainer { +.monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained.width-constrained .gettingStartedSlideCategories > .gettingStartedCategoriesContainer { grid-template-rows: min-content minmax(min-content, auto) min-content; grid-template-columns: 1fr; grid-template-areas: "left-column" "right-column" "footer"; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-constrained .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.header, .monaco-workbench .part.editor>.content .gettingStartedContainer.height-constrained .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.header { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-constrained .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .header, .monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .header { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories li.showWalkthroughsEntry { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories li.showWalkthroughsEntry { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.noWalkthroughs .gettingStartedSlideCategories li.showWalkthroughsEntry, .gettingStartedContainer.noExtensions { +.monaco-workbench .part.editor > .content .gettingStartedContainer.noWalkthroughs .gettingStartedSlideCategories li.showWalkthroughsEntry, .gettingStartedContainer.noExtensions { display: unset; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>* { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > * { overflow: hidden; text-overflow: ellipsis; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.categories-column>div { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .categories-column > div { margin-bottom: 32px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.categories-column-left { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .categories-column-left { grid-area: left-column; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.categories-column-right { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .categories-column-right { grid-area: right-column; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.header { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .header { grid-area: header; align-self: end; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.footer { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .footer { grid-area: footer; justify-self: center; text-align: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .categories-slide-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .categories-slide-container { width: 90%; max-width: 1200px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .gap { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .gap { flex: 150px 0 1000 } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .category-title { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .category-title { margin: 4px 0 4px; font-size: 14px; font-weight: 500; @@ -194,58 +194,58 @@ white-space: nowrap; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .category-progress { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .category-progress { position: absolute; bottom: 0; left: 0; width: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category.no-progress { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category.no-progress { padding: 3px 6px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .getting-started-category.no-progress .category-progress { +.monaco-workbench .part.editor > .content .gettingStartedContainer .getting-started-category.no-progress .category-progress { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories ul { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories ul { list-style: none; margin: 0; line-height: 24px; padding-left: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories li { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories li { list-style: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .path { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .path { padding-left: 1em; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .icon-widget, -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .icon-widget, -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .featured-icon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .icon-widget, +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .icon-widget, +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .featured-icon { font-size: 20px; padding-right: 8px; position: relative; top: 3px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .codicon:not(.icon-widget, .featured-icon, .hide-category-button) { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .codicon:not(.icon-widget, .featured-icon, .hide-category-button) { margin: 0 2px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .codicon:first-child { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .codicon:first-child { margin-left: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .start-container img { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .start-container img { padding-right: 8px; position: relative; top: 3px; @@ -253,20 +253,20 @@ max-height: 16px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .keybinding-label { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .keybinding-label { padding-left: 1em; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .progress-bar-outer { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .progress-bar-outer { height: 4px; margin-top: 4px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .progress-bar-inner { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .progress-bar-inner { height: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category { width: calc(100% - 16px); font-size: 13px; box-sizing: border-box; @@ -276,36 +276,36 @@ text-align: left; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category { position: relative; border-radius: 6px; overflow: hidden; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .main-content { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .main-content { display: flex; align-items: center; justify-content: flex-start; width: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured-description-content, -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .description-content { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured-description-content, +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .description-content { text-align: left; margin-left: 28px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .description-content > .codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .description-content > .codicon { padding-right: 1px; font-size: 16px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .description-content:not(:empty){ +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .description-content:not(:empty){ margin-bottom: 8px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured-description-content:not(:empty){ +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured-description-content:not(:empty){ margin-bottom: 8px; margin-left: 32px; overflow: hidden; @@ -314,7 +314,7 @@ -webkit-box-orient: vertical; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { justify-self: flex-end; align-self: flex-start; border-radius: 4px; @@ -324,13 +324,13 @@ white-space: nowrap; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured-badge { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured-badge { position: relative; top: -4px; left: -8px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured { border-top: 30px solid var(--vscode-activityBarBadge-background); width: 30px; box-sizing: border-box; @@ -339,23 +339,23 @@ position: absolute; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured .featured-icon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured .featured-icon { top: -30px; left: 4px; font-size: 14px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .codicon.hide-category-button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .codicon.hide-category-button { margin-left: auto; top: 4px; right: 8px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category.featured .icon-widget { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category.featured .icon-widget { visibility: hidden; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category img.category-icon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category img.category-icon { padding-right: 8px; max-width: 20px; max-height: 20px; @@ -363,7 +363,7 @@ top: auto; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category img.featured-icon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category img.featured-icon { padding-right: 8px; max-width: 24px; max-height: 24px; @@ -371,80 +371,80 @@ position: relative; top: auto; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-category img.category-icon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-category img.category-icon { margin-right: 10px; margin-left: 10px; max-width: 32px; max-height: 32px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails { display: flex; flex-direction: column; overflow: hidden; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gap { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gap { flex: 150px 0 1000 } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-category { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-category { display: flex; margin-bottom: 24px; min-height: auto; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-columns .gap { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-columns .gap { flex: 150px 1 1000 } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent>.getting-started-category>.codicon-getting-started-setup { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .getting-started-category > .codicon-getting-started-setup { margin-right: 8px; font-size: 28px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-columns { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-columns { display: flex; justify-content: flex-start; padding: 40px 40px 0; max-height: calc(100% - 40px); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step { display: flex; width: 100%; overflow: hidden; border-radius: 6px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .button-container:not(:last-of-type) { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .button-container:not(:last-of-type) { margin-bottom: 6px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded { cursor: default !important; border: 1px solid var(--vscode-welcomePage-tileBorder); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded h3 { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded h3 { color: var(--vscode-walkthrough-stepTitle-foreground); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded>.codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded > .codicon { cursor: pointer !important; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded) { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded) { height: 48px; background: none; color: var(--vscode-descriptionForeground); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded):hover { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded):hover { background: var(--vscode-welcomePage-tileHoverBackground); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded) .step-title { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded) .step-title { white-space: nowrap; text-overflow: ellipsis; display: inline-block; @@ -452,66 +452,66 @@ width: inherit; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-title .codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-title .codicon { position: relative; top: 2px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-columns .getting-started-detail-left>div { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-columns .getting-started-detail-left > div { width: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded) .step-description-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded) .step-description-container { visibility: hidden; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-container { width: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description { padding-top: 8px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .actions { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .actions { margin-top: 12px; display: flex; align-items: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .shortcut-message { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .shortcut-message { display: flex; color: var(--vscode-descriptionForeground); font-size: 12px; margin-top: 12px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .shortcut-message .keybinding { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .shortcut-message .keybinding { font-weight: 600; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-next { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-next { margin-left: auto; margin-right: 10px; padding: 6px 12px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon.hidden { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon.hidden { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon-getting-started-step-unchecked, -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon-getting-started-step-checked { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon-getting-started-step-unchecked, +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon-getting-started-step-checked { margin-right: 8px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step-action { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step-action { padding: 6px 12px; font-size: 13px; margin-bottom: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-left { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-left { min-width: 330px; width: 40%; max-width: 400px; @@ -519,15 +519,15 @@ flex-direction: column; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .full-height-scrollable { +.monaco-workbench .part.editor > .content .gettingStartedContainer .full-height-scrollable { height: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-container { height: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent { height: 100%; max-width: 1200px; margin: 0 auto; @@ -543,7 +543,7 @@ ". footer footer footer ."; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-semi-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-semi-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent { max-width: 500px; grid-template-columns: auto; grid-template-rows: 30px max-content minmax(30%, max-content) minmax(30%, 1fr) auto; @@ -551,45 +551,45 @@ grid-template-areas: "back" "title" "steps" "media" "footer"; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-semi-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent.markdown { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-semi-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent.markdown { grid-template-rows: 30px max-content minmax(30%, max-content) minmax(40%, 1fr) auto; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-semi-constrained.height-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-semi-constrained.height-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent { grid-template-rows: 0 max-content minmax(25%, max-content) minmax(25%, 1fr) auto; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent>.prev-button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .prev-button { grid-area: back; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent>.getting-started-category { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .getting-started-category { grid-area: title; align-self: flex-end; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent>.steps-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .steps-container { height: 100%; grid-area: steps; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent>.getting-started-media { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .getting-started-media { grid-area: media; align-self: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent.markdown>.getting-started-media { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent.markdown > .getting-started-media { height: inherit; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent.image>.getting-started-media { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent.image > .getting-started-media { grid-area: title-start / media-start / steps-end / media-end; align-self: unset; display: flex; justify-content: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-semi-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent.image>.getting-started-media { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-semi-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent.image > .getting-started-media { grid-area: media; height: inherit; width: inherit; @@ -597,14 +597,14 @@ justify-content: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent>.getting-started-footer { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .getting-started-footer { grid-area: footer; align-self: flex-end; justify-self: center; text-align: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-right { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-right { display: flex; align-items: flex-start; justify-content: center; @@ -615,36 +615,36 @@ max-width: 800px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .index-list.getting-started .button-link { +.monaco-workbench .part.editor > .content .gettingStartedContainer .index-list.getting-started .button-link { margin: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .index-list.getting-started .see-all-walkthroughs { +.monaco-workbench .part.editor > .content .gettingStartedContainer .index-list.getting-started .see-all-walkthroughs { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.someWalkthroughsHidden .index-list.getting-started .see-all-walkthroughs { +.monaco-workbench .part.editor > .content .gettingStartedContainer.someWalkthroughsHidden .index-list.getting-started .see-all-walkthroughs { display: inline; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.noExtensions .index-list.featured-extensions { +.monaco-workbench .part.editor > .content .gettingStartedContainer.noExtensions .index-list.featured-extensions { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.noWalkthroughs .index-list.getting-started { +.monaco-workbench .part.editor > .content .gettingStartedContainer.noWalkthroughs .index-list.getting-started { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-right img { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-right img { object-fit: contain; cursor: unset; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-right img.clickable { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-right img.clickable { cursor: pointer; } -.monaco-workbench .part.editor>.content .gettingStartedContainer button { +.monaco-workbench .part.editor > .content .gettingStartedContainer button { border: none; color: inherit; text-align: left; @@ -655,21 +655,21 @@ font-family: inherit; } -.monaco-workbench .part.editor>.content .gettingStartedContainer button:hover { +.monaco-workbench .part.editor > .content .gettingStartedContainer button:hover { cursor: pointer; } /* Don't show focus outline on mouse click. Instead only show outline on keyboard focus. */ -.monaco-workbench .part.editor>.content .gettingStartedContainer button:focus { +.monaco-workbench .part.editor > .content .gettingStartedContainer button:focus { outline: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer button:focus-visible { +.monaco-workbench .part.editor > .content .gettingStartedContainer button:focus-visible { outline: 1px solid var(--vscode-focusBorder); outline-offset: -1px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .prev-button.button-link { +.monaco-workbench .part.editor > .content .gettingStartedContainer .prev-button.button-link { position: absolute; left: 40px; top: 5px; @@ -679,91 +679,91 @@ display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-semi-constrained .prev-button.button-link { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-semi-constrained .prev-button.button-link { left: 0; top: -10px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.height-constrained .prev-button.button-link { +.monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained .prev-button.button-link { left: 0; top: -10px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.height-constrained .prev-button.button-link .codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained .prev-button.button-link .codicon { font-size: 20px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.height-constrained .prev-button.button-link .moreText { +.monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained .prev-button.button-link .moreText { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .prev-button:hover { +.monaco-workbench .part.editor > .content .gettingStartedContainer .prev-button:hover { cursor: pointer; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .prev-button .codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .prev-button .codicon { position: relative; top: 3px; left: -4px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .button-link .codicon-arrow-right { +.monaco-workbench .part.editor > .content .gettingStartedContainer .button-link .codicon-arrow-right { padding-left: 4px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .button-link .codicon-check-all { +.monaco-workbench .part.editor > .content .gettingStartedContainer .button-link .codicon-check-all { padding-right: 4px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .skip { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .skip { display: block; margin: 2px auto; width: fit-content; text-align: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails h2 { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails h2 { font-size: 26px; font-weight: normal; margin: 0 0 8px 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails h2 .codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails h2 .codicon { font-size: 20px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails h3 { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails h3 { font-size: 13px; font-weight: 600; margin: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .subtitle { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .subtitle { font-size: 16px; margin: 0; padding: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStarted.showCategories .gettingStartedSlideDetails { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStarted.showCategories .gettingStartedSlideDetails { left: 100%; opacity: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStarted.showDetails .gettingStartedSlideCategories { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStarted.showDetails .gettingStartedSlideCategories { left: -100%; opacity: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStarted.showDetails .categoriesScrollbar .scrollbar.vertical { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStarted.showDetails .categoriesScrollbar .scrollbar.vertical { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .done-next-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .done-next-container { display: flex; padding: 16px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .button-link { +.monaco-workbench .part.editor > .content .gettingStartedContainer .button-link { padding: 0; background: transparent; margin: 2px; @@ -773,20 +773,20 @@ max-width: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .done-next-container .button-link { +.monaco-workbench .part.editor > .content .gettingStartedContainer .done-next-container .button-link { display: flex; align-items: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .button-link.next { +.monaco-workbench .part.editor > .content .gettingStartedContainer .button-link.next { margin-left: auto; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .button-link:hover { +.monaco-workbench .part.editor > .content .gettingStartedContainer .button-link:hover { background: transparent; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .openAWalkthrough>button, .monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .showOnStartup { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .openAWalkthrough > button, .monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .showOnStartup { text-align: center; display: flex; justify-content: center; @@ -794,7 +794,7 @@ gap: 8px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { color: inherit !important; height: 18px; width: 18px; @@ -805,45 +805,45 @@ } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox.codicon:not(.checked)::before { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox.codicon:not(.checked)::before { opacity: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.footer p { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .footer p { margin: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer .index-list.start-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer .index-list.start-container { min-height: 156px; margin-bottom: 16px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.footer>button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .footer > button { text-align: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .getting-started-category .codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .getting-started-category .codicon { top: 0px; } -.monaco-workbench .part.editor>.content .getting-started-category .codicon-star-full::before { +.monaco-workbench .part.editor > .content .getting-started-category .codicon-star-full::before { vertical-align: middle; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .hide-category-button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .hide-category-button { visibility: hidden; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .getting-started-category:focus-within .hide-category-button, -.monaco-workbench .part.editor>.content .gettingStartedContainer .getting-started-category:hover .hide-category-button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .getting-started-category:focus-within .hide-category-button, +.monaco-workbench .part.editor > .content .gettingStartedContainer .getting-started-category:hover .hide-category-button { visibility: visible; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description-container span { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description-container span { line-height: 1.3em; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description-container .monaco-button, .monaco-workbench .part.editor>.content .gettingStartedContainer .max-lines-3 { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description-container .monaco-button, .monaco-workbench .part.editor > .content .gettingStartedContainer .max-lines-3 { /* Supported everywhere: https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-line-clamp#browser_compatibility */ -webkit-line-clamp: 3; display: -webkit-box; @@ -851,7 +851,7 @@ overflow: hidden; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description-container .monaco-button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description-container .monaco-button { height: 24px; width: fit-content; display: flex; @@ -860,16 +860,16 @@ min-width: max-content; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .hide-category-button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .hide-category-button { padding: 3px; border-radius: 5px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .hide-category-button::before { +.monaco-workbench .part.editor > .content .gettingStartedContainer .hide-category-button::before { vertical-align: unset; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .hide-category-button:hover { +.monaco-workbench .part.editor > .content .gettingStartedContainer .hide-category-button:hover { background-color: var(--vscode-toolbar-hoverBackground); } @@ -980,26 +980,26 @@ background-color: var(--vscode-welcomePage-progress-foreground); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { color: var(--vscode-activityBarBadge-foreground); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured .featured-icon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured .featured-icon { color: var(--vscode-activityBarBadge-foreground); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { background-color: var(--vscode-activityBarBadge-background); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { background-color: var(--vscode-checkbox-background) !important; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { color: var(--vscode-checkbox-foreground) !important; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { border-color: var(--vscode-checkbox-border) !important; } diff --git a/src/vs/workbench/contrib/welcomeWalkthrough/browser/media/walkThroughPart.css b/src/vs/workbench/contrib/welcomeWalkthrough/browser/media/walkThroughPart.css index 22cacd37226..ed362ff32c5 100644 --- a/src/vs/workbench/contrib/welcomeWalkthrough/browser/media/walkThroughPart.css +++ b/src/vs/workbench/contrib/welcomeWalkthrough/browser/media/walkThroughPart.css @@ -159,7 +159,7 @@ border-color: var(--vscode-contrastBorder); } -.monaco-workbench .part.editor>.content .walkThroughContent .monaco-editor-background, -.monaco-workbench .part.editor>.content .walkThroughContent .margin-view-overlays { +.monaco-workbench .part.editor > .content .walkThroughContent .monaco-editor-background, +.monaco-workbench .part.editor > .content .walkThroughContent .margin-view-overlays { background: var(--vscode-walkThrough-embeddedEditorBackground); } diff --git a/src/vs/workbench/services/suggest/browser/media/suggest.css b/src/vs/workbench/services/suggest/browser/media/suggest.css index 730b6fe66d5..366f7b7d6fd 100644 --- a/src/vs/workbench/services/suggest/browser/media/suggest.css +++ b/src/vs/workbench/services/suggest/browser/media/suggest.css @@ -69,8 +69,8 @@ margin-right: 0.3em; } -.monaco-workbench .workbench-suggest-widget.with-status-bar .monaco-list .monaco-list-row>.contents>.main>.right>.readMore, -.monaco-workbench .workbench-suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore { +.monaco-workbench .workbench-suggest-widget.with-status-bar .monaco-list .monaco-list-row > .contents > .main > .right > .readMore, +.monaco-workbench .workbench-suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label > .contents > .main > .right > .readMore { display: none; } @@ -96,14 +96,14 @@ color: var(--vscode-editorSuggestWidget-selectedIconForeground); } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents { flex: 1; height: 100%; overflow: hidden; padding-left: 2px; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main { display: flex; overflow: hidden; text-overflow: ellipsis; @@ -111,12 +111,12 @@ justify-content: space-between; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left, -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left, +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right { display: flex; } -.workbench-suggest-widget .monaco-list .monaco-list-row:not(.focused)>.contents>.main .monaco-icon-label { +.workbench-suggest-widget .monaco-list .monaco-list-row:not(.focused) > .contents > .main .monaco-icon-label { color: var(--vscode-editorSuggestWidget-foreground); } @@ -124,11 +124,11 @@ font-weight: bold; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main .monaco-highlighted-label .highlight { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main .monaco-highlighted-label .highlight { color: var(--vscode-editorSuggestWidget-highlightForeground); } -.workbench-suggest-widget .monaco-list .monaco-list-row.focused>.contents>.main .monaco-highlighted-label .highlight { +.workbench-suggest-widget .monaco-list .monaco-list-row.focused > .contents > .main .monaco-highlighted-label .highlight { color: var(--vscode-editorSuggestWidget-focusHighlightForeground); } @@ -154,14 +154,14 @@ color: var(--vscode-editorSuggestWidget-selectedIconForeground); } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents { flex: 1; height: 100%; overflow: hidden; padding-left: 2px; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main { display: flex; overflow: hidden; text-overflow: ellipsis; @@ -169,12 +169,12 @@ justify-content: space-between; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left, -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left, +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right { display: flex; } -.workbench-suggest-widget .monaco-list .monaco-list-row:not(.focused)>.contents>.main .monaco-icon-label { +.workbench-suggest-widget .monaco-list .monaco-list-row:not(.focused) > .contents > .main .monaco-icon-label { color: var(--vscode-editorSuggestWidget-foreground); } @@ -182,11 +182,11 @@ font-weight: bold; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main .monaco-highlighted-label .highlight { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main .monaco-highlighted-label .highlight { color: var(--vscode-editorSuggestWidget-highlightForeground); } -.workbench-suggest-widget .monaco-list .monaco-list-row.focused>.contents>.main .monaco-highlighted-label .highlight { +.workbench-suggest-widget .monaco-list .monaco-list-row.focused > .contents > .main .monaco-highlighted-label .highlight { color: var(--vscode-editorSuggestWidget-focusHighlightForeground); } @@ -197,7 +197,7 @@ text-decoration: unset; } -.workbench-suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated>.monaco-icon-label-container>.monaco-icon-name-container { +.workbench-suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated > .monaco-icon-label-container > .monaco-icon-name-container { text-decoration: line-through; } @@ -239,17 +239,17 @@ } /** signature, qualifier, type/details opacity **/ -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { opacity: 0.7; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .signature-label { overflow: hidden; text-overflow: ellipsis; opacity: 0.6; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .qualifier-label { margin-left: 12px; opacity: 0.4; font-size: 85%; @@ -261,7 +261,7 @@ /** Type Info and icon next to the label in the focused completion item **/ -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { font-size: 85%; margin-left: 1.1em; overflow: hidden; @@ -269,59 +269,59 @@ white-space: nowrap; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label>.monaco-tokenized-source { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label > .monaco-tokenized-source { display: inline; } /** Details: if using CompletionItem#details, show on focus **/ -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { display: none; } -.workbench-suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label { +.workbench-suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused > .contents > .main > .right > .details-label { display: inline; } /** Details: if using CompletionItemLabel#details, always show **/ -.workbench-suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.right>.details-label, -.workbench-suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label)>.contents>.main>.right>.details-label { +.workbench-suggest-widget .monaco-list .monaco-list-row:not(.string-label) > .contents > .main > .right > .details-label, +.workbench-suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label) > .contents > .main > .right > .details-label { display: inline; } /** Ellipsis on hover **/ -.workbench-suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right.can-expand-details>.details-label { +.workbench-suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover > .contents > .main > .right.can-expand-details > .details-label { width: calc(100% - 26px); } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left { flex-shrink: 1; flex-grow: 1; overflow: hidden; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.monaco-icon-label { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .monaco-icon-label { flex-shrink: 0; } -.workbench-suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.left>.monaco-icon-label { +.workbench-suggest-widget .monaco-list .monaco-list-row:not(.string-label) > .contents > .main > .left > .monaco-icon-label { max-width: 100%; } -.workbench-suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.left>.monaco-icon-label { +.workbench-suggest-widget .monaco-list .monaco-list-row.string-label > .contents > .main > .left > .monaco-icon-label { flex-shrink: 1; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right { overflow: hidden; flex-shrink: 4; max-width: 70%; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .readMore { display: inline-block; position: absolute; right: 10px; diff --git a/src/vs/workbench/services/userDataProfile/browser/media/userDataProfileView.css b/src/vs/workbench/services/userDataProfile/browser/media/userDataProfileView.css index ea08aa254b2..f5de028325f 100644 --- a/src/vs/workbench/services/userDataProfile/browser/media/userDataProfileView.css +++ b/src/vs/workbench/services/userDataProfile/browser/media/userDataProfileView.css @@ -7,43 +7,43 @@ display: inherit; } -.monaco-workbench .pane>.pane-body>.profile-view-message-container { +.monaco-workbench .pane > .pane-body > .profile-view-message-container { display: flex; padding: 13px 20px 0px 20px; box-sizing: border-box; } -.monaco-workbench .pane>.pane-body>.profile-view-message-container p { +.monaco-workbench .pane > .pane-body > .profile-view-message-container p { margin-block-start: 0em; margin-block-end: 0em; } -.monaco-workbench .pane>.pane-body>.profile-view-message-container a { +.monaco-workbench .pane > .pane-body > .profile-view-message-container a { color: var(--vscode-textLink-foreground) } -.monaco-workbench .pane>.pane-body>.profile-view-message-container a:hover { +.monaco-workbench .pane > .pane-body > .profile-view-message-container a:hover { text-decoration: underline; color: var(--vscode-textLink-activeForeground) } -.monaco-workbench .pane>.pane-body>.profile-view-message-container a:active { +.monaco-workbench .pane > .pane-body > .profile-view-message-container a:active { color: var(--vscode-textLink-activeForeground) } -.monaco-workbench .pane>.pane-body>.profile-view-message-container.hide { +.monaco-workbench .pane > .pane-body > .profile-view-message-container.hide { display: none; } -.monaco-workbench .pane>.pane-body>.profile-view-buttons-container { +.monaco-workbench .pane > .pane-body > .profile-view-buttons-container { display: flex; flex-direction: column; padding: 13px 20px; box-sizing: border-box; } -.monaco-workbench .pane>.pane-body>.profile-view-buttons-container>.monaco-button, -.monaco-workbench .pane>.pane-body>.profile-view-buttons-container>.monaco-button-dropdown { +.monaco-workbench .pane > .pane-body > .profile-view-buttons-container > .monaco-button, +.monaco-workbench .pane > .pane-body > .profile-view-buttons-container > .monaco-button-dropdown { margin-block-start: 13px; margin-inline-start: 0px; margin-inline-end: 0px; @@ -52,11 +52,11 @@ margin-right: auto; } -.monaco-workbench .pane>.pane-body>.profile-view-buttons-container>.monaco-button-dropdown { +.monaco-workbench .pane > .pane-body > .profile-view-buttons-container > .monaco-button-dropdown { width: 100%; } -.monaco-workbench .pane>.pane-body>.profile-view-buttons-container>.monaco-button-dropdown>.monaco-dropdown-button { +.monaco-workbench .pane > .pane-body > .profile-view-buttons-container > .monaco-button-dropdown > .monaco-dropdown-button { display: flex; align-items: center; padding: 0 4px; From 7cd710eefe7a0a20f3f191a972ba5cc41b5a9e02 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 5 Dec 2023 18:45:49 +0100 Subject: [PATCH 78/92] make sure `vscode.executeDocumentHighlights` return an array (#200062) re https://github.com/microsoft/vscode/issues/200056 --- .../browser/wordHighlighter.ts | 5 ++-- .../test/browser/extHostApiCommands.test.ts | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts b/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts index 525af0230a0..f7bd8e2eede 100644 --- a/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts +++ b/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts @@ -253,9 +253,10 @@ function computeOccurencesMultiModel(registry: LanguageFeatureRegistry { +registerModelAndPositionCommand('_executeDocumentHighlights', async (accessor, model, position) => { const languageFeaturesService = accessor.get(ILanguageFeaturesService); - return getOccurrencesAtPosition(languageFeaturesService.documentHighlightProvider, model, position, CancellationToken.None); + const map = await getOccurrencesAtPosition(languageFeaturesService.documentHighlightProvider, model, position, CancellationToken.None); + return map?.get(model.uri); }); class WordHighlighter { diff --git a/src/vs/workbench/api/test/browser/extHostApiCommands.test.ts b/src/vs/workbench/api/test/browser/extHostApiCommands.test.ts index 35e7543d864..3a60e4c025b 100644 --- a/src/vs/workbench/api/test/browser/extHostApiCommands.test.ts +++ b/src/vs/workbench/api/test/browser/extHostApiCommands.test.ts @@ -681,6 +681,33 @@ suite('ExtHostLanguageFeatureCommands', function () { }); }); + // --- document highlights + + test('"vscode.executeDocumentHighlights" API has stopped returning DocumentHighlight[]#200056', async function () { + + + disposables.push(extHost.registerDocumentHighlightProvider(nullExtensionDescription, defaultSelector, { + provideDocumentHighlights() { + return [ + new types.DocumentHighlight(new types.Range(0, 17, 0, 25), types.DocumentHighlightKind.Read) + ]; + } + })); + + await rpcProtocol.sync(); + + return commands.executeCommand('vscode.executeDocumentHighlights', model.uri, new types.Position(0, 0)).then(values => { + assert.ok(Array.isArray(values)); + assert.strictEqual(values.length, 1); + const [first] = values; + assert.strictEqual(first.range.start.line, 0); + assert.strictEqual(first.range.start.character, 17); + assert.strictEqual(first.range.end.line, 0); + assert.strictEqual(first.range.end.character, 25); + }); + + }); + // --- outline test('Outline, back and forth', function () { From 455ca664b9dad6ad89b057cfa6e8e18062815971 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Tue, 5 Dec 2023 18:56:59 +0100 Subject: [PATCH 79/92] working copy - enable file limits when resolving (#172129) (#200009) * working copy - enable file limits when resolving (#172129) * . --- src/vs/workbench/common/editor.ts | 4 ++- .../common/editor/resourceEditorInput.ts | 32 +++++++++++++++++-- .../common/editor/textResourceEditorInput.ts | 11 ++++--- .../files/browser/editors/fileEditorInput.ts | 30 ++--------------- .../mergeEditor/browser/mergeEditorInput.ts | 6 ++-- .../notebook/browser/notebookEditor.ts | 18 +++++++++-- .../contrib/notebook/common/notebookCommon.ts | 6 ++++ .../notebook/common/notebookEditorInput.ts | 16 ++++++---- .../notebook/common/notebookEditorModel.ts | 8 +++-- .../notebookEditorModelResolverService.ts | 5 +-- .../notebookEditorModelResolverServiceImpl.ts | 13 ++++---- .../performance/browser/perfviewEditor.ts | 7 ++-- .../textfile/common/textFileEditorModel.ts | 3 +- .../common/untitledTextEditorInput.ts | 6 ++-- .../common/storedFileWorkingCopy.ts | 13 ++++++-- .../common/storedFileWorkingCopyManager.ts | 3 +- .../parts/editor/resourceEditorInput.test.ts | 6 ++-- 17 files changed, 121 insertions(+), 66 deletions(-) diff --git a/src/vs/workbench/common/editor.ts b/src/vs/workbench/common/editor.ts index 2c0acaa442a..ee6a8e501c8 100644 --- a/src/vs/workbench/common/editor.ts +++ b/src/vs/workbench/common/editor.ts @@ -928,7 +928,7 @@ export interface IFileEditorInput extends EditorInput, IEncodingSupport, ILangua isResolved(): boolean; } -export interface IFileEditorInputOptions extends ITextEditorOptions { +export interface IFileLimitedEditorInputOptions extends IEditorOptions { /** * If provided, the size of the file will be checked against the limits @@ -937,6 +937,8 @@ export interface IFileEditorInputOptions extends ITextEditorOptions { readonly limits?: IFileReadLimits; } +export interface IFileEditorInputOptions extends ITextEditorOptions, IFileLimitedEditorInputOptions { } + export function createTooLargeFileError(group: IEditorGroup, input: EditorInput, options: IEditorOptions | undefined, message: string, preferencesService: IPreferencesService): Error { return createEditorOpenError(message, [ toAction({ diff --git a/src/vs/workbench/common/editor/resourceEditorInput.ts b/src/vs/workbench/common/editor/resourceEditorInput.ts index d1d5f8c5674..6f5af0deee3 100644 --- a/src/vs/workbench/common/editor/resourceEditorInput.ts +++ b/src/vs/workbench/common/editor/resourceEditorInput.ts @@ -3,14 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Verbosity, EditorInputWithPreferredResource, EditorInputCapabilities } from 'vs/workbench/common/editor'; +import { Verbosity, EditorInputWithPreferredResource, EditorInputCapabilities, IFileLimitedEditorInputOptions } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { URI } from 'vs/base/common/uri'; -import { IFileService } from 'vs/platform/files/common/files'; +import { ByteSize, IFileReadLimits, IFileService, getLargeFileConfirmationLimit } from 'vs/platform/files/common/files'; import { ILabelService } from 'vs/platform/label/common/label'; import { dirname, isEqual } from 'vs/base/common/resources'; import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; import { IMarkdownString } from 'vs/base/common/htmlContent'; +import { isConfigured } from 'vs/platform/configuration/common/configuration'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; /** * The base class for all editor inputs that open resources. @@ -43,7 +45,8 @@ export abstract class AbstractResourceEditorInput extends EditorInput implements preferredResource: URI | undefined, @ILabelService protected readonly labelService: ILabelService, @IFileService protected readonly fileService: IFileService, - @IFilesConfigurationService protected readonly filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService protected readonly filesConfigurationService: IFilesConfigurationService, + @ITextResourceConfigurationService protected readonly textResourceConfigurationService: ITextResourceConfigurationService ) { super(); @@ -179,4 +182,27 @@ export abstract class AbstractResourceEditorInput extends EditorInput implements override isReadonly(): boolean | IMarkdownString { return this.filesConfigurationService.isReadonly(this.resource); } + + protected ensureLimits(options?: IFileLimitedEditorInputOptions): IFileReadLimits | undefined { + if (options?.limits) { + return options.limits; // respect passed in limits if any + } + + // We want to determine the large file configuration based on the best defaults + // for the resource but also respecting user settings. We only apply user settings + // if explicitly configured by the user. Otherwise we pick the best limit for the + // resource scheme. + + const defaultSizeLimit = getLargeFileConfirmationLimit(this.resource); + let configuredSizeLimit: number | undefined = undefined; + + const configuredSizeLimitMb = this.textResourceConfigurationService.inspect(this.resource, null, 'workbench.editorLargeFileConfirmation'); + if (isConfigured(configuredSizeLimitMb)) { + configuredSizeLimit = configuredSizeLimitMb.value * ByteSize.MB; // normalize to MB + } + + return { + size: configuredSizeLimit ?? defaultSizeLimit + }; + } } diff --git a/src/vs/workbench/common/editor/textResourceEditorInput.ts b/src/vs/workbench/common/editor/textResourceEditorInput.ts index 02217560ffd..8416d2cc249 100644 --- a/src/vs/workbench/common/editor/textResourceEditorInput.ts +++ b/src/vs/workbench/common/editor/textResourceEditorInput.ts @@ -18,6 +18,7 @@ import { TextResourceEditorModel } from 'vs/workbench/common/editor/textResource import { IReference } from 'vs/base/common/lifecycle'; import { createTextBufferFactory } from 'vs/editor/common/model/textModel'; import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; /** * The base class for all editor inputs that open in text editors. @@ -31,9 +32,10 @@ export abstract class AbstractTextResourceEditorInput extends AbstractResourceEd @ITextFileService protected readonly textFileService: ITextFileService, @ILabelService labelService: ILabelService, @IFileService fileService: IFileService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(resource, preferredResource, labelService, fileService, filesConfigurationService); + super(resource, preferredResource, labelService, fileService, filesConfigurationService, textResourceConfigurationService); } override save(group: GroupIdentifier, options?: ITextFileSaveOptions): Promise { @@ -104,9 +106,10 @@ export class TextResourceEditorInput extends AbstractTextResourceEditorInput imp @IEditorService editorService: IEditorService, @IFileService fileService: IFileService, @ILabelService labelService: ILabelService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(resource, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService); + super(resource, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService, textResourceConfigurationService); } override getName(): string { diff --git a/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts b/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts index 3f4b1910cf4..dd25f4509bc 100644 --- a/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts +++ b/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts @@ -9,7 +9,7 @@ import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { AbstractTextResourceEditorInput } from 'vs/workbench/common/editor/textResourceEditorInput'; import { ITextResourceEditorInput } from 'vs/platform/editor/common/editor'; import { BinaryEditorModel } from 'vs/workbench/common/editor/binaryEditorModel'; -import { ByteSize, IFileReadLimits, IFileService, getLargeFileConfirmationLimit } from 'vs/platform/files/common/files'; +import { IFileService } from 'vs/platform/files/common/files'; import { ITextFileService, TextFileEditorModelState, TextFileResolveReason, TextFileOperationError, TextFileOperationResult, ITextFileEditorModel, EncodingMode } from 'vs/workbench/services/textfile/common/textfiles'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IReference, dispose, DisposableStore } from 'vs/base/common/lifecycle'; @@ -24,7 +24,6 @@ import { Schemas } from 'vs/base/common/network'; import { createTextBufferFactory } from 'vs/editor/common/model/textModel'; import { IPathService } from 'vs/workbench/services/path/common/pathService'; import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { isConfigured } from 'vs/platform/configuration/common/configuration'; import { IMarkdownString } from 'vs/base/common/htmlContent'; const enum ForceOpenAs { @@ -99,9 +98,9 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, @IEditorService editorService: IEditorService, @IPathService private readonly pathService: IPathService, - @ITextResourceConfigurationService private readonly textResourceConfigurationService: ITextResourceConfigurationService + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(resource, preferredResource, editorService, textFileService, labelService, fileService, filesConfigurationService); + super(resource, preferredResource, editorService, textFileService, labelService, fileService, filesConfigurationService, textResourceConfigurationService); this.model = this.textFileService.files.get(resource); @@ -396,29 +395,6 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements } } - private ensureLimits(options?: IFileEditorInputOptions): IFileReadLimits | undefined { - if (options?.limits) { - return options.limits; // respect passed in limits if any - } - - // We want to determine the large file configuration based on the best defaults - // for the resource but also respecting user settings. We only apply user settings - // if explicitly configured by the user. Otherwise we pick the best limit for the - // resource scheme. - - const defaultSizeLimit = getLargeFileConfirmationLimit(this.resource); - let configuredSizeLimit: number | undefined = undefined; - - const configuredSizeLimitMb = this.textResourceConfigurationService.inspect(this.resource, null, 'workbench.editorLargeFileConfirmation'); - if (isConfigured(configuredSizeLimitMb)) { - configuredSizeLimit = configuredSizeLimitMb.value * ByteSize.MB; // normalize to MB - } - - return { - size: configuredSizeLimit ?? defaultSizeLimit - }; - } - private async doResolveAsBinary(): Promise { const model = this.instantiationService.createInstance(BinaryEditorModel, this.preferredResource, this.getName()); await model.resolve(); diff --git a/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.ts b/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.ts index e9f69bfa0ad..3304f0b90b7 100644 --- a/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.ts +++ b/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.ts @@ -8,6 +8,7 @@ import { autorun } from 'vs/base/common/observable'; import { isEqual } from 'vs/base/common/resources'; import { isDefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; import { localize } from 'vs/nls'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IFileService } from 'vs/platform/files/common/files'; @@ -60,9 +61,10 @@ export class MergeEditorInput extends AbstractTextResourceEditorInput implements @ILabelService labelService: ILabelService, @IFileService fileService: IFileService, @IConfigurationService private readonly configurationService: IConfigurationService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(result, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService); + super(result, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService, textResourceConfigurationService); } override dispose(): void { diff --git a/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts b/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts index 7bcd5a348d9..2370b8a2972 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts @@ -17,14 +17,14 @@ import { ITextResourceConfigurationService } from 'vs/editor/common/services/tex import { localize } from 'vs/nls'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IEditorOptions } from 'vs/platform/editor/common/editor'; -import { IFileService } from 'vs/platform/files/common/files'; +import { ByteSize, FileOperationError, FileOperationResult, IFileService, TooLargeFileOperationError } from 'vs/platform/files/common/files'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IStorageService } from 'vs/platform/storage/common/storage'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { Selection } from 'vs/editor/common/core/selection'; import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane'; -import { DEFAULT_EDITOR_ASSOCIATION, EditorPaneSelectionChangeReason, EditorPaneSelectionCompareResult, EditorResourceAccessor, IEditorMemento, IEditorOpenContext, IEditorPaneSelection, IEditorPaneSelectionChangeEvent, createEditorOpenError, isEditorOpenError } from 'vs/workbench/common/editor'; +import { DEFAULT_EDITOR_ASSOCIATION, EditorPaneSelectionChangeReason, EditorPaneSelectionCompareResult, EditorResourceAccessor, IEditorMemento, IEditorOpenContext, IEditorPaneSelection, IEditorPaneSelectionChangeEvent, createEditorOpenError, createTooLargeFileError, isEditorOpenError } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { SELECT_KERNEL_ID } from 'vs/workbench/contrib/notebook/browser/controller/coreActions'; import { INotebookEditorOptions, INotebookEditorPane, INotebookEditorViewState } from 'vs/workbench/contrib/notebook/browser/notebookBrowser'; @@ -46,6 +46,7 @@ import { IWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/com import { streamToBuffer } from 'vs/base/common/buffer'; import { ILogService } from 'vs/platform/log/common/log'; import { INotebookEditorWorkerService } from 'vs/workbench/contrib/notebook/common/services/notebookWorkerService'; +import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; const NOTEBOOK_EDITOR_VIEW_STATE_PREFERENCE_KEY = 'NotebookEditorViewState'; @@ -90,6 +91,7 @@ export class NotebookEditor extends EditorPane implements INotebookEditorPane { @IWorkingCopyBackupService private readonly _workingCopyBackupService: IWorkingCopyBackupService, @ILogService private readonly logService: ILogService, @INotebookEditorWorkerService private readonly _notebookEditorWorkerService: INotebookEditorWorkerService, + @IPreferencesService private readonly _preferencesService: IPreferencesService, ) { super(NotebookEditor.ID, telemetryService, themeService, storageService); this._editorMemento = this.getEditorMemento(_editorGroupService, configurationService, NOTEBOOK_EDITOR_VIEW_STATE_PREFERENCE_KEY); @@ -327,6 +329,18 @@ export class NotebookEditor extends EditorPane implements INotebookEditorPane { throw e; } + // Handle case where a file is too large to open without confirmation + if ((e).fileOperationResult === FileOperationResult.FILE_TOO_LARGE && this.group) { + let message: string; + if (e instanceof TooLargeFileOperationError) { + message = localize('notebookTooLargeForHeapErrorWithSize', "The notebook is not displayed in the notebook editor because it is very large ({0}).", ByteSize.formatSize(e.size)); + } else { + message = localize('notebookTooLargeForHeapErrorWithoutSize', "The notebook is not displayed in the notebook editor because it is very large."); + } + + throw createTooLargeFileError(this.group, input, options, message, this._preferencesService); + } + const error = createEditorOpenError(e instanceof Error ? e : new Error((e ? e.message : '')), [ toAction({ id: 'workbench.notebook.action.openInTextEditor', label: localize('notebookOpenInTextEditor', "Open in Text Editor"), run: async () => { diff --git a/src/vs/workbench/contrib/notebook/common/notebookCommon.ts b/src/vs/workbench/contrib/notebook/common/notebookCommon.ts index 99230c87970..e88290fa063 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookCommon.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookCommon.ts @@ -30,6 +30,7 @@ import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/no import { ICellRange } from 'vs/workbench/contrib/notebook/common/notebookRange'; import { IWorkingCopyBackupMeta, IWorkingCopySaveEvent } from 'vs/workbench/services/workingCopy/common/workingCopy'; import { IMarkdownString } from 'vs/base/common/htmlContent'; +import { IFileReadLimits } from 'vs/platform/files/common/files'; export const NOTEBOOK_EDITOR_ID = 'workbench.editor.notebook'; export const NOTEBOOK_DIFF_EDITOR_ID = 'workbench.editor.notebookTextDiffEditor'; @@ -787,6 +788,11 @@ export interface INotebookLoadOptions { * Go to disk bypassing any cache of the model if any. */ forceReadFromFile?: boolean; + /** + * If provided, the size of the file will be checked against the limits + * and an error will be thrown if any limit is exceeded. + */ + readonly limits?: IFileReadLimits; } export interface IResolvedNotebookEditorModel extends INotebookEditorModel { diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorInput.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorInput.ts index 1d6bba54100..8a0f53e0b8c 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorInput.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorInput.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as glob from 'vs/base/common/glob'; -import { GroupIdentifier, ISaveOptions, IMoveResult, IRevertOptions, EditorInputCapabilities, Verbosity, IUntypedEditorInput } from 'vs/workbench/common/editor'; +import { GroupIdentifier, ISaveOptions, IMoveResult, IRevertOptions, EditorInputCapabilities, Verbosity, IUntypedEditorInput, IFileLimitedEditorInputOptions } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { INotebookService, SimpleNotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/notebookService'; import { URI } from 'vs/base/common/uri'; @@ -18,7 +18,7 @@ import { ILabelService } from 'vs/platform/label/common/label'; import { Schemas } from 'vs/base/common/network'; import { IFileService } from 'vs/platform/files/common/files'; import { AbstractResourceEditorInput } from 'vs/workbench/common/editor/resourceEditorInput'; -import { IEditorOptions, IResourceEditorInput } from 'vs/platform/editor/common/editor'; +import { IResourceEditorInput } from 'vs/platform/editor/common/editor'; import { onUnexpectedError } from 'vs/base/common/errors'; import { VSBuffer } from 'vs/base/common/buffer'; import { IWorkingCopyIdentifier } from 'vs/workbench/services/workingCopy/common/workingCopy'; @@ -29,6 +29,7 @@ import { IExtensionService } from 'vs/workbench/services/extensions/common/exten import { localize } from 'vs/nls'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IMarkdownString } from 'vs/base/common/htmlContent'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; export interface NotebookEditorInputOptions { startDirty?: boolean; @@ -79,9 +80,10 @@ export class NotebookEditorInput extends AbstractResourceEditorInput { @IFileService fileService: IFileService, @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, @IExtensionService extensionService: IExtensionService, - @IEditorService editorService: IEditorService + @IEditorService editorService: IEditorService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(resource, preferredResource, labelService, fileService, filesConfigurationService); + super(resource, preferredResource, labelService, fileService, filesConfigurationService, textResourceConfigurationService); this._defaultDirtyState = !!options.startDirty; // Automatically resolve this input when the "wanted" model comes to life via @@ -281,7 +283,7 @@ export class NotebookEditorInput extends AbstractResourceEditorInput { } } - override async resolve(_options?: IEditorOptions, perf?: NotebookPerfMarks): Promise { + override async resolve(_options?: IFileLimitedEditorInputOptions, perf?: NotebookPerfMarks): Promise { if (!await this._notebookService.canResolve(this.viewType)) { return null; } @@ -293,7 +295,7 @@ export class NotebookEditorInput extends AbstractResourceEditorInput { this._sideLoadedListener.dispose(); if (!this._editorModelReference) { - const ref = await this._notebookModelResolverService.resolve(this.resource, this.viewType); + const ref = await this._notebookModelResolverService.resolve(this.resource, this.viewType, this.ensureLimits(_options)); if (this._editorModelReference) { // Re-entrant, double resolve happened. Dispose the addition references and proceed // with the truth. @@ -313,7 +315,7 @@ export class NotebookEditorInput extends AbstractResourceEditorInput { this._onDidChangeDirty.fire(); } } else { - this._editorModelReference.object.load(); + this._editorModelReference.object.load({ limits: this.ensureLimits(_options) }); } if (this.options._backupId) { diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts index cb01185b511..4e7864c0667 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts @@ -136,7 +136,10 @@ export class SimpleNotebookEditorModel extends EditorModel implements INotebookE } this._workingCopy.onDidRevert(() => this._onDidRevertUntitled.fire()); } else { - this._workingCopy = await this._workingCopyManager.resolve(this.resource, options?.forceReadFromFile ? { reload: { async: false, force: true } } : undefined); + this._workingCopy = await this._workingCopyManager.resolve(this.resource, { + limits: options?.limits, + reload: options?.forceReadFromFile ? { async: false, force: true } : undefined + }); this._workingCopyListeners.add(this._workingCopy.onDidSave(e => this._onDidSave.fire(e))); this._workingCopyListeners.add(this._workingCopy.onDidChangeOrphaned(() => this._onDidChangeOrphaned.fire())); this._workingCopyListeners.add(this._workingCopy.onDidChangeReadonly(() => this._onDidChangeReadonly.fire())); @@ -152,7 +155,8 @@ export class SimpleNotebookEditorModel extends EditorModel implements INotebookE reload: { async: !options?.forceReadFromFile, force: options?.forceReadFromFile - } + }, + limits: options?.limits }); } diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverService.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverService.ts index e2d2a6c4fe4..3eff1eb5060 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverService.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverService.ts @@ -8,6 +8,7 @@ import { URI } from 'vs/base/common/uri'; import { IResolvedNotebookEditorModel } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import { IReference } from 'vs/base/common/lifecycle'; import { Event, IWaitUntil } from 'vs/base/common/event'; +import { IFileReadLimits } from 'vs/platform/files/common/files'; export const INotebookEditorModelResolverService = createDecorator('INotebookModelResolverService'); @@ -49,6 +50,6 @@ export interface INotebookEditorModelResolverService { isDirty(resource: URI): boolean; - resolve(resource: URI, viewType?: string): Promise>; - resolve(resource: IUntitledNotebookResource, viewType: string): Promise>; + resolve(resource: URI, viewType?: string, limits?: IFileReadLimits): Promise>; + resolve(resource: IUntitledNotebookResource, viewType: string, limits?: IFileReadLimits): Promise>; } diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverServiceImpl.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverServiceImpl.ts index 9da04357e1b..bbc69d31aa2 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverServiceImpl.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverServiceImpl.ts @@ -21,6 +21,7 @@ import { NotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/noteb import { assertIsDefined } from 'vs/base/common/types'; import { CancellationToken } from 'vs/base/common/cancellation'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { IFileReadLimits } from 'vs/platform/files/common/files'; class NotebookModelReferenceCollection extends ReferenceCollection> { @@ -58,7 +59,7 @@ class NotebookModelReferenceCollection extends ReferenceCollection { + protected async createReferencedObject(key: string, viewType: string, hasAssociatedFilePath: boolean, limits?: IFileReadLimits): Promise { // Untrack as being disposed this.modelsToDispose.delete(key); @@ -77,7 +78,7 @@ class NotebookModelReferenceCollection extends ReferenceCollection>; - async resolve(resource: IUntitledNotebookResource, viewType: string): Promise>; - async resolve(arg0: URI | IUntitledNotebookResource, viewType?: string): Promise> { + async resolve(resource: URI, viewType?: string, limits?: IFileReadLimits): Promise>; + async resolve(resource: IUntitledNotebookResource, viewType: string, limits?: IFileReadLimits): Promise>; + async resolve(arg0: URI | IUntitledNotebookResource, viewType?: string, limits?: IFileReadLimits): Promise> { let resource: URI; let hasAssociatedFilePath = false; if (URI.isUri(arg0)) { @@ -235,7 +236,7 @@ export class NotebookModelResolverServiceImpl implements INotebookEditorModelRes } } - const reference = this._data.acquire(resource.toString(), viewType, hasAssociatedFilePath); + const reference = this._data.acquire(resource.toString(), viewType, hasAssociatedFilePath, limits); try { const model = await reference.object; return { diff --git a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts index e953502efac..db3605eb6bd 100644 --- a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts +++ b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts @@ -27,6 +27,7 @@ import { isWeb } from 'vs/base/common/platform'; import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; import * as perf from 'vs/base/common/performance'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; export class PerfviewContrib { @@ -59,7 +60,8 @@ export class PerfviewInput extends TextResourceEditorInput { @IEditorService editorService: IEditorService, @IFileService fileService: IFileService, @ILabelService labelService: ILabelService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { super( PerfviewInput.Uri, @@ -72,7 +74,8 @@ export class PerfviewInput extends TextResourceEditorInput { editorService, fileService, labelService, - filesConfigurationService + filesConfigurationService, + textResourceConfigurationService ); } } diff --git a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts index 4ae7f6692c6..e546ab6c566 100644 --- a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts +++ b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts @@ -443,7 +443,8 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil try { const content = await this.textFileService.readStream(this.resource, { acceptTextOnly: !allowBinary, - etag, encoding: this.preferredEncoding, + etag, + encoding: this.preferredEncoding, limits: options?.limits }); diff --git a/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts b/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts index 5780d63cce9..766081132c1 100644 --- a/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts +++ b/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts @@ -19,6 +19,7 @@ import { ITextEditorOptions } from 'vs/platform/editor/common/editor'; import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; import { ITextModelService } from 'vs/editor/common/services/resolverService'; import { dispose, IReference } from 'vs/base/common/lifecycle'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; /** * An editor input to be used for untitled text buffers. @@ -47,9 +48,10 @@ export class UntitledTextEditorInput extends AbstractTextResourceEditorInput imp @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, @IPathService private readonly pathService: IPathService, @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, - @ITextModelService private readonly textModelService: ITextModelService + @ITextModelService private readonly textModelService: ITextModelService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(model.resource, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService); + super(model.resource, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService, textResourceConfigurationService); this.registerModelListeners(model); } diff --git a/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopy.ts b/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopy.ts index 7a00e3208d8..aee59bce62b 100644 --- a/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopy.ts +++ b/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopy.ts @@ -7,7 +7,7 @@ import { localize } from 'vs/nls'; import { URI } from 'vs/base/common/uri'; import { Event, Emitter } from 'vs/base/common/event'; import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { ETAG_DISABLED, FileOperationError, FileOperationResult, IFileService, IFileStatWithMetadata, IFileStreamContent, IWriteFileOptions, NotModifiedSinceFileOperationError } from 'vs/platform/files/common/files'; +import { ETAG_DISABLED, FileOperationError, FileOperationResult, IFileReadLimits, IFileService, IFileStatWithMetadata, IFileStreamContent, IWriteFileOptions, NotModifiedSinceFileOperationError } from 'vs/platform/files/common/files'; import { ISaveOptions, IRevertOptions, SaveReason } from 'vs/workbench/common/editor'; import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; import { IWorkingCopyBackup, IWorkingCopyBackupMeta, IWorkingCopySaveEvent, WorkingCopyCapabilities } from 'vs/workbench/services/workingCopy/common/workingCopy'; @@ -262,6 +262,12 @@ export interface IStoredFileWorkingCopyResolveOptions { * Go to disk bypassing any cache of the stored file working copy if any. */ readonly forceReadFromFile?: boolean; + + /** + * If provided, the size of the file will be checked against the limits + * and an error will be thrown if any limit is exceeded. + */ + readonly limits?: IFileReadLimits; } /** @@ -571,7 +577,10 @@ export class StoredFileWorkingCopy extend // Resolve Content try { - const content = await this.fileService.readFileStream(this.resource, { etag }); + const content = await this.fileService.readFileStream(this.resource, { + etag, + limits: options?.limits + }); // Clear orphaned state when resolving was successful this.setOrphaned(false); diff --git a/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.ts b/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.ts index cfdce4134e3..f76fdd404c7 100644 --- a/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.ts +++ b/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.ts @@ -475,7 +475,8 @@ export class StoredFileWorkingCopyManager const resolveOptions: IStoredFileWorkingCopyResolveOptions = { contents: options?.contents, - forceReadFromFile: options?.reload?.force + forceReadFromFile: options?.reload?.force, + limits: options?.limits }; // Working copy exists diff --git a/src/vs/workbench/test/browser/parts/editor/resourceEditorInput.test.ts b/src/vs/workbench/test/browser/parts/editor/resourceEditorInput.test.ts index f44f395fac6..7481879807d 100644 --- a/src/vs/workbench/test/browser/parts/editor/resourceEditorInput.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/resourceEditorInput.test.ts @@ -14,6 +14,7 @@ import { EditorInputCapabilities, Verbosity } from 'vs/workbench/common/editor'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; suite('ResourceEditorInput', () => { @@ -28,9 +29,10 @@ suite('ResourceEditorInput', () => { resource: URI, @ILabelService labelService: ILabelService, @IFileService fileService: IFileService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(resource, resource, labelService, fileService, filesConfigurationService); + super(resource, resource, labelService, fileService, filesConfigurationService, textResourceConfigurationService); } } From f746843c726509a7c722962a1a5c0915ad8141b5 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 5 Dec 2023 18:59:17 +0100 Subject: [PATCH 80/92] update diff when document changes but don't auto-accept change regions (#200061) https://github.com/microsoft/vscode-copilot/issues/3206 --- .../contrib/inlineChat/browser/inlineChatStrategies.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChatStrategies.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChatStrategies.ts index e352642e2d6..90d658b07d0 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChatStrategies.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChatStrategies.ts @@ -900,6 +900,10 @@ export class LiveStrategy3 extends EditModeStrategy { } : undefined; + this._sessionStore.add(this._session.textModelN.onDidChangeContent(e => { + this._showDiff(true, true); + })); + const zoneLineNumber = this._zone.position!.lineNumber; const myDistance = zoneLineNumber <= modifiedRange.startLineNumber ? modifiedRange.startLineNumber - zoneLineNumber From 8407e97b5b33b137fc98b9314661263ce01b102d Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Tue, 5 Dec 2023 18:15:31 +0100 Subject: [PATCH 81/92] Fixes #193640 --- src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts index 5817e88059f..3fd6e543a61 100644 --- a/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts @@ -483,13 +483,13 @@ export class DiffEditorWidget extends DelegatingEditor implements IDiffEditor { return; } - const model = this._diffModel.get()?.model; - if (!model) { return; } + const model = this._diffModel.get(); + if (!model || !model.isDiffUpToDate.get()) { return; } this._editors.modified.executeEdits('diffEditor', [ { range: diff.modified.toExclusiveRange(), - text: model.original.getValueInRange(diff.original.toExclusiveRange()) + text: model.model.original.getValueInRange(diff.original.toExclusiveRange()) } ]); } From 42720590a9876b9ffa44c4999848adc084159695 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 5 Dec 2023 12:32:58 -0600 Subject: [PATCH 82/92] Fix hover showing when navigating between ActionBar sections --- src/vs/base/browser/ui/actionbar/actionbar.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/base/browser/ui/actionbar/actionbar.ts b/src/vs/base/browser/ui/actionbar/actionbar.ts index 562ef1efa5f..f72a8bbd9b6 100644 --- a/src/vs/base/browser/ui/actionbar/actionbar.ts +++ b/src/vs/base/browser/ui/actionbar/actionbar.ts @@ -201,7 +201,7 @@ export class ActionBar extends Disposable implements IActionRunner { } // Recompute focused item - else if (event.equals(KeyCode.Tab) || event.equals(KeyMod.Shift | KeyCode.Tab)) { + else if (event.equals(KeyCode.Tab) || event.equals(KeyMod.Shift | KeyCode.Tab) || event.equals(KeyCode.UpArrow) || event.equals(KeyCode.DownArrow)) { this.updateFocusedItem(); } })); From d70a46b6bd65aade0248f900a6e67a85f1c2cde2 Mon Sep 17 00:00:00 2001 From: Joyce Er Date: Tue, 5 Dec 2023 11:01:33 -0800 Subject: [PATCH 83/92] chore: update grooming notebook labels (#200070) --- .vscode/notebooks/grooming.github-issues | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.vscode/notebooks/grooming.github-issues b/.vscode/notebooks/grooming.github-issues index 2d4ca60063d..cb32618ede6 100644 --- a/.vscode/notebooks/grooming.github-issues +++ b/.vscode/notebooks/grooming.github-issues @@ -7,46 +7,46 @@ { "kind": 2, "language": "github-issues", - "value": "// list of repos we work in\n$repos=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n" + "value": "// list of repos we work in\r\n$repos=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\r\n" }, { "kind": 1, "language": "markdown", - "value": "#### Missing Type label\n" + "value": "#### Missing Type label\r\n" }, { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open type:issue -label:bug -label:\"info-needed\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry -label:engineering -label:endgame-plan\n" + "value": "$repos assignee:@me is:open type:issue -label:bug -label:\"info-needed\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry -label:engineering -label:endgame-plan\r\n" }, { "kind": 1, "language": "markdown", - "value": "#### Missing Area Label\n\nFeature area labels are light or strong blue (`1d76db` or `c5def5`) and they denote a specific feature or feature area, like `editor-clipboard` or `file-explorer`\n" + "value": "#### Missing Area Label\r\n\r\nFeature area labels are light or strong blue (`1d76db` or `c5def5`) and they denote a specific feature or feature area, like `editor-clipboard` or `file-explorer`\r\n" }, { "kind": 2, "language": "github-issues", - "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keybindings-json -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat -label:panel-chat -label:audio-cue -label:tasks -label:error-list -label:winget\n" + "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-widgets -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat -label:panel-chat -label:audio-cue -label:tasks -label:error-list -label:winget\r\n" }, { "kind": 1, "language": "markdown", - "value": "### Missing Milestone\n" + "value": "### Missing Milestone\r\n" }, { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open type:issue no:milestone -label:info-needed -label:triage-needed\n" + "value": "$repos assignee:@me is:open type:issue no:milestone -label:info-needed -label:triage-needed\r\n" }, { "kind": 1, "language": "markdown", - "value": "#### Not Actionable\n" + "value": "#### Not Actionable\r\n" }, { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open label:\"info-needed\"\n" + "value": "$repos assignee:@me is:open label:\"info-needed\"\r\n" } ] \ No newline at end of file From 58a122e39b46daeff1efd7be69105b18553b0e97 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Tue, 5 Dec 2023 20:19:56 +0100 Subject: [PATCH 84/92] Fixes https://github.com/microsoft/monaco-editor/issues/2556 --- .../diffEditor/diffEditor.contribution.ts | 11 --------- .../standalone/browser/standalone-tokens.css | 23 +++++++++++-------- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.ts b/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.ts index 986237029eb..554c842d24d 100644 --- a/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.ts +++ b/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.ts @@ -280,17 +280,6 @@ export class AccessibleDiffViewerPrev extends Action2 { export function findFocusedDiffEditor(accessor: ServicesAccessor): IDiffEditor | null { const codeEditorService = accessor.get(ICodeEditorService); const diffEditors = codeEditorService.listDiffEditors(); - const activeCodeEditor = codeEditorService.getFocusedCodeEditor() ?? codeEditorService.getActiveCodeEditor(); - if (!activeCodeEditor) { - return null; - } - - for (let i = 0, len = diffEditors.length; i < len; i++) { - const diffEditor = diffEditors[i]; - if (diffEditor.getModifiedEditor().getId() === activeCodeEditor.getId() || diffEditor.getOriginalEditor().getId() === activeCodeEditor.getId()) { - return diffEditor; - } - } const activeElement = getActiveElement(); if (activeElement) { diff --git a/src/vs/editor/standalone/browser/standalone-tokens.css b/src/vs/editor/standalone/browser/standalone-tokens.css index 0df4a9bac81..1fc85078f9e 100644 --- a/src/vs/editor/standalone/browser/standalone-tokens.css +++ b/src/vs/editor/standalone/browser/standalone-tokens.css @@ -37,14 +37,19 @@ clip-path: inset(50%); } -/*.monaco-editor.vs [tabindex="0"]:focus { - outline: 1px solid rgba(0, 122, 204, 0.4); +.monaco-editor, .monaco-diff-editor .synthetic-focus, +.monaco-editor, .monaco-diff-editor [tabindex="0"]:focus, +.monaco-editor, .monaco-diff-editor [tabindex="-1"]:focus, +.monaco-editor, .monaco-diff-editor button:focus, +.monaco-editor, .monaco-diff-editor input[type=button]:focus, +.monaco-editor, .monaco-diff-editor input[type=checkbox]:focus, +.monaco-editor, .monaco-diff-editor input[type=search]:focus, +.monaco-editor, .monaco-diff-editor input[type=text]:focus, +.monaco-editor, .monaco-diff-editor select:focus, +.monaco-editor, .monaco-diff-editor textarea:focus { + outline-width: 1px; + outline-style: solid; outline-offset: -1px; - opacity: 1 !important; + outline-color: var(--vscode-focusBorder); + opacity: 1 } - -.monaco-editor.vs-dark [tabindex="0"]:focus { - outline: 1px solid rgba(14, 99, 156, 0.6); - outline-offset: -1px; - opacity: 1 !important; -}*/ From f055b9b8b282072f1120fb24a622c7f20c5946d2 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 5 Dec 2023 11:52:29 -0800 Subject: [PATCH 85/92] Respect early returns from pre-existing bash debug traps Fixes #179483 --- .../contrib/terminal/browser/media/shellIntegration-bash.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh b/src/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh index 50ea1e39a52..b64082777be 100755 --- a/src/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh +++ b/src/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh @@ -256,8 +256,8 @@ else __vsc_preexec_all() { if [ "$__vsc_in_command_execution" = "0" ]; then __vsc_in_command_execution="1" - builtin eval "${__vsc_dbg_trap}" __vsc_preexec + builtin eval "${__vsc_dbg_trap}" fi } trap '__vsc_preexec_all "$_"' DEBUG From cc62bd1ddd500de9b19000aa263f2eaf1d9fb70e Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Tue, 5 Dec 2023 12:38:10 -0800 Subject: [PATCH 86/92] cli: allow reading exec server token from env variable (#200079) --- cli/src/commands/args.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/src/commands/args.rs b/cli/src/commands/args.rs index 7863635ae99..a69d021cab8 100644 --- a/cli/src/commands/args.rs +++ b/cli/src/commands/args.rs @@ -223,7 +223,7 @@ pub struct CommandShellArgs { #[clap(long, num_args = 0..=1, default_missing_value = "0")] pub on_port: Option, /// Require the given token string to be given in the handshake. - #[clap(long)] + #[clap(long, env = "VSCODE_CLI_REQUIRE_TOKEN")] pub require_token: Option, /// Optional parent process id. If provided, the server will be stopped when the process of the given pid no longer exists #[clap(long, hide = true)] From 4a7480c147b9fcdfde978263d39c5e19d36c07aa Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 5 Dec 2023 15:10:00 -0600 Subject: [PATCH 87/92] update focus on left/right arrow --- src/vs/base/browser/ui/actionbar/actionbar.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/base/browser/ui/actionbar/actionbar.ts b/src/vs/base/browser/ui/actionbar/actionbar.ts index f72a8bbd9b6..1db13db8b63 100644 --- a/src/vs/base/browser/ui/actionbar/actionbar.ts +++ b/src/vs/base/browser/ui/actionbar/actionbar.ts @@ -201,7 +201,7 @@ export class ActionBar extends Disposable implements IActionRunner { } // Recompute focused item - else if (event.equals(KeyCode.Tab) || event.equals(KeyMod.Shift | KeyCode.Tab) || event.equals(KeyCode.UpArrow) || event.equals(KeyCode.DownArrow)) { + else if (event.equals(KeyCode.Tab) || event.equals(KeyMod.Shift | KeyCode.Tab) || event.equals(KeyCode.UpArrow) || event.equals(KeyCode.DownArrow) || event.equals(KeyCode.LeftArrow) || event.equals(KeyCode.RightArrow)) { this.updateFocusedItem(); } })); From 703e21214e1c08036655718733a2250615c32312 Mon Sep 17 00:00:00 2001 From: netcon Date: Wed, 6 Dec 2023 05:21:18 +0800 Subject: [PATCH 88/92] fix: `workbench.editorAssociations` not work in workbench configurationDefaults (#194087) --- .../services/editor/browser/editorResolverService.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/services/editor/browser/editorResolverService.ts b/src/vs/workbench/services/editor/browser/editorResolverService.ts index 6e3c55e4cc6..91d1b7f6da9 100644 --- a/src/vs/workbench/services/editor/browser/editorResolverService.ts +++ b/src/vs/workbench/services/editor/browser/editorResolverService.ts @@ -276,11 +276,12 @@ export class EditorResolverService extends Disposable implements IEditorResolver getAllUserAssociations(): EditorAssociations { const inspectedEditorAssociations = this.configurationService.inspect<{ [fileNamePattern: string]: string }>(editorsAssociationsSettingId) || {}; + const defaultAssociations = inspectedEditorAssociations.defaultValue ?? {}; const workspaceAssociations = inspectedEditorAssociations.workspaceValue ?? {}; const userAssociations = inspectedEditorAssociations.userValue ?? {}; const rawAssociations: { [fileNamePattern: string]: string } = { ...workspaceAssociations }; - // We want to apply the user associations on top of the workspace associations but ignore duplicate keys. - for (const [key, value] of Object.entries(userAssociations)) { + // We want to apply the default associations and user associations on top of the workspace associations but ignore duplicate keys. + for (const [key, value] of Object.entries({ ...defaultAssociations, ...userAssociations })) { if (rawAssociations[key] === undefined) { rawAssociations[key] = value; } From 0d42a76e2fbbf04ab6725d68ea14fd23618fa38b Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Tue, 5 Dec 2023 14:05:26 -0800 Subject: [PATCH 89/92] debug: fix call resolveDebugConfigurationWithSubstitutedVariables with redirected type (#200080) * cli: allow reading exec server token from env variable * debug: fix call resolveDebugConfigurationWithSubstitutedVariables with redirected type Fixes #188979 --- src/vs/workbench/contrib/debug/browser/debugService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/debug/browser/debugService.ts b/src/vs/workbench/contrib/debug/browser/debugService.ts index a0e2bd56df4..9f1dad419b3 100644 --- a/src/vs/workbench/contrib/debug/browser/debugService.ts +++ b/src/vs/workbench/contrib/debug/browser/debugService.ts @@ -493,7 +493,7 @@ export class DebugService implements IDebugService { return false; } - const cfg = await this.configurationManager.resolveDebugConfigurationWithSubstitutedVariables(launch && launch.workspace ? launch.workspace.uri : undefined, type, resolvedConfig, initCancellationToken.token); + const cfg = await this.configurationManager.resolveDebugConfigurationWithSubstitutedVariables(launch && launch.workspace ? launch.workspace.uri : undefined, resolvedConfig.type, resolvedConfig, initCancellationToken.token); if (!cfg) { if (launch && type && cfg === null && !initCancellationToken.token.isCancellationRequested) { // show launch.json only for "config" being "null". await launch.openConfigFile({ preserveFocus: true, type }, initCancellationToken.token); From 56fda3234c206777d79629d2ea649281f6bf2d3f Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Tue, 5 Dec 2023 23:13:44 +0100 Subject: [PATCH 90/92] Windows: "Reopen" after crash does not work with 1 window opened (fix #199960) (#200075) --- .../windows/electron-main/windowImpl.ts | 62 ++++++++++--------- .../electron-main/windowsMainService.ts | 11 +++- 2 files changed, 43 insertions(+), 30 deletions(-) diff --git a/src/vs/platform/windows/electron-main/windowImpl.ts b/src/vs/platform/windows/electron-main/windowImpl.ts index b68fb6ebef1..36f9a65833f 100644 --- a/src/vs/platform/windows/electron-main/windowImpl.ts +++ b/src/vs/platform/windows/electron-main/windowImpl.ts @@ -839,7 +839,7 @@ export class CodeWindow extends BaseWindow implements ICodeWindow { private async destroyWindow(reopen: boolean, skipRestoreEditors: boolean): Promise { const workspace = this._config?.workspace; - // check to discard editor state first + // check to discard editor state first if (skipRestoreEditors && workspace) { try { const workspaceStorage = this.storageMainService.workspaceStorage(workspace); @@ -854,37 +854,41 @@ export class CodeWindow extends BaseWindow implements ICodeWindow { // 'close' event will not be fired on destroy(), so signal crash via explicit event this._onDidDestroy.fire(); - // make sure to destroy the window as its renderer process is gone - this._win?.destroy(); + try { + // ask the windows service to open a new fresh window if specified + if (reopen && this._config) { - // ask the windows service to open a new fresh window if specified - if (reopen && this._config) { + // We have to reconstruct a openable from the current workspace + let uriToOpen: IWorkspaceToOpen | IFolderToOpen | undefined = undefined; + let forceEmpty = undefined; + if (isSingleFolderWorkspaceIdentifier(workspace)) { + uriToOpen = { folderUri: workspace.uri }; + } else if (isWorkspaceIdentifier(workspace)) { + uriToOpen = { workspaceUri: workspace.configPath }; + } else { + forceEmpty = true; + } - // We have to reconstruct a openable from the current workspace - let uriToOpen: IWorkspaceToOpen | IFolderToOpen | undefined = undefined; - let forceEmpty = undefined; - if (isSingleFolderWorkspaceIdentifier(workspace)) { - uriToOpen = { folderUri: workspace.uri }; - } else if (isWorkspaceIdentifier(workspace)) { - uriToOpen = { workspaceUri: workspace.configPath }; - } else { - forceEmpty = true; + // Delegate to windows service + const window = firstOrDefault(await this.windowsMainService.open({ + context: OpenContext.API, + userEnv: this._config.userEnv, + cli: { + ...this.environmentMainService.args, + _: [] // we pass in the workspace to open explicitly via `urisToOpen` + }, + urisToOpen: uriToOpen ? [uriToOpen] : undefined, + forceEmpty, + forceNewWindow: true, + remoteAuthority: this.remoteAuthority + })); + window?.focus(); } - - // Delegate to windows service - const window = firstOrDefault(await this.windowsMainService.open({ - context: OpenContext.API, - userEnv: this._config.userEnv, - cli: { - ...this.environmentMainService.args, - _: [] // we pass in the workspace to open explicitly via `urisToOpen` - }, - urisToOpen: uriToOpen ? [uriToOpen] : undefined, - forceEmpty, - forceNewWindow: true, - remoteAuthority: this.remoteAuthority - })); - window?.focus(); + } finally { + // make sure to destroy the window as its renderer process is gone. do this + // after the code for reopening the window, to prevent the entire application + // from quitting when the last window closes as a result. + this._win?.destroy(); } } diff --git a/src/vs/platform/windows/electron-main/windowsMainService.ts b/src/vs/platform/windows/electron-main/windowsMainService.ts index 576725137cd..3053b0782ee 100644 --- a/src/vs/platform/windows/electron-main/windowsMainService.ts +++ b/src/vs/platform/windows/electron-main/windowsMainService.ts @@ -1495,7 +1495,7 @@ export class WindowsMainService extends Disposable implements IWindowsMainServic const disposables = new DisposableStore(); disposables.add(createdWindow.onDidSignalReady(() => this._onDidSignalReadyWindow.fire(createdWindow))); disposables.add(Event.once(createdWindow.onDidClose)(() => this.onWindowClosed(createdWindow, disposables))); - disposables.add(Event.once(createdWindow.onDidDestroy)(() => this._onDidDestroyWindow.fire(createdWindow))); + disposables.add(Event.once(createdWindow.onDidDestroy)(() => this.onWindowDestroyed(createdWindow))); disposables.add(createdWindow.onDidMaximize(() => this._onDidMaximizeWindow.fire(createdWindow))); disposables.add(createdWindow.onDidUnmaximize(() => this._onDidUnmaximizeWindow.fire(createdWindow))); disposables.add(createdWindow.onDidTriggerSystemContextMenu(({ x, y }) => this._onDidTriggerSystemContextMenu.fire({ window: createdWindow, x, y }))); @@ -1627,6 +1627,15 @@ export class WindowsMainService extends Disposable implements IWindowsMainServic disposables.dispose(); } + private onWindowDestroyed(window: ICodeWindow): void { + + // Remove from our list so that Electron can clean it up + this.windows.delete(window.id); + + // Emit + this._onDidDestroyWindow.fire(window); + } + getFocusedWindow(): ICodeWindow | undefined { const window = BrowserWindow.getFocusedWindow(); if (window) { From 4728954baa48be22d107cb459fe291ec44e0f13a Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Tue, 5 Dec 2023 20:59:47 +0100 Subject: [PATCH 91/92] Fixes #178245 --- .../linesSliceCharSequence.ts | 6 ++++- .../advanced.expected.diff.json | 8 +++++-- .../fixtures/shifting-parameters/1.tst | 1 + .../fixtures/shifting-parameters/2.tst | 1 + .../advanced.expected.diff.json | 22 +++++++++++++++++++ .../legacy.expected.diff.json | 22 +++++++++++++++++++ 6 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 src/vs/editor/test/node/diffing/fixtures/shifting-parameters/1.tst create mode 100644 src/vs/editor/test/node/diffing/fixtures/shifting-parameters/2.tst create mode 100644 src/vs/editor/test/node/diffing/fixtures/shifting-parameters/advanced.expected.diff.json create mode 100644 src/vs/editor/test/node/diffing/fixtures/shifting-parameters/legacy.expected.diff.json diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts index fe408e95581..9edc63d335f 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts @@ -92,6 +92,10 @@ export class LinesSliceCharSequence implements ISequence { // don't break between \r and \n return 0; } + if (prevCategory === CharBoundaryCategory.LineBreakLF) { + // prefer the linebreak before the change + return 150; + } let score = 0; if (prevCategory !== nextCategory) { @@ -187,7 +191,7 @@ const score: Record = { [CharBoundaryCategory.WordNumber]: 0, [CharBoundaryCategory.End]: 10, [CharBoundaryCategory.Other]: 2, - [CharBoundaryCategory.Separator]: 3, + [CharBoundaryCategory.Separator]: 30, [CharBoundaryCategory.Space]: 3, [CharBoundaryCategory.LineBreakCR]: 10, [CharBoundaryCategory.LineBreakLF]: 10, diff --git a/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json index ca938c66689..b1de25a5907 100644 --- a/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json @@ -21,8 +21,12 @@ "modifiedRange": "[7,76 -> 7,80]" }, { - "originalRange": "[12,153 -> 12,155 EOL]", - "modifiedRange": "[7,157 -> 8,1 EOL]" + "originalRange": "[12,153 -> 12,153]", + "modifiedRange": "[7,157 -> 7,181]" + }, + { + "originalRange": "[13,1 -> 13,1]", + "modifiedRange": "[8,1 -> 9,1]" }, { "originalRange": "[13,31 -> 13,31]", diff --git a/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/1.tst b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/1.tst new file mode 100644 index 00000000000..4e4a1168350 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/1.tst @@ -0,0 +1 @@ +function x(alignments: RangeMapping[]): x[] { } diff --git a/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/2.tst b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/2.tst new file mode 100644 index 00000000000..3bdfadaa26c --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/2.tst @@ -0,0 +1 @@ +function x(alignments: RangeMapping[], originalLines: string[], modifiedLines: string[]): x[] { } diff --git a/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/advanced.expected.diff.json new file mode 100644 index 00000000000..3e860d858f8 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "function x(alignments: RangeMapping[]): x[] { }\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "function x(alignments: RangeMapping[], originalLines: string[], modifiedLines: string[]): x[] { }\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,38 -> 1,38]", + "modifiedRange": "[1,38 -> 1,88]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/legacy.expected.diff.json new file mode 100644 index 00000000000..3e860d858f8 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "function x(alignments: RangeMapping[]): x[] { }\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "function x(alignments: RangeMapping[], originalLines: string[], modifiedLines: string[]): x[] { }\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,38 -> 1,38]", + "modifiedRange": "[1,38 -> 1,88]" + } + ] + } + ] +} \ No newline at end of file From 16c469a671222fda0ab186461566ec05d4698b36 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Tue, 5 Dec 2023 14:35:27 -0800 Subject: [PATCH 92/92] eng: add a lint rule for ensureNoDisposablesAreLeakedInTestSuite (#200089) Adds a lint rule that ensures ensureNoDisposablesAreLeakedInTestSuite is called in suites. It grandfathers in existing files that were lacking the call entirely. This PR also includes manual fixes to files that used the function already but were missing it in one or more suites, which the lint rule detects. --- ...code-ensure-no-disposables-leak-in-test.ts | 38 ++ .eslintrc.json | 220 ++++++++++ .../base/parts/ipc/test/node/ipc.net.test.ts | 10 +- .../test/browser/ui/list/rangeMap.test.ts | 2 + .../test/browser/ui/tree/objectTree.test.ts | 10 +- src/vs/base/test/common/event.test.ts | 415 +++++++++--------- src/vs/base/test/common/history.test.ts | 2 + src/vs/base/test/common/lifecycle.test.ts | 7 +- .../test/browser/multicursor.test.ts | 2 + .../node/extensionsScannerService.test.ts | 2 + .../test/browser/fileUserDataProvider.test.ts | 40 +- .../common/userDataSyncStoreService.test.ts | 3 + .../test/browser/extHostDocumentData.test.ts | 2 + .../chat/test/common/chatModel.test.ts | 2 + .../test/browser/notebookCommon.test.ts | 5 + .../test/browser/notebookSelection.test.ts | 3 + .../services/label/test/browser/label.test.ts | 2 + 17 files changed, 531 insertions(+), 234 deletions(-) create mode 100644 .eslintplugin/code-ensure-no-disposables-leak-in-test.ts diff --git a/.eslintplugin/code-ensure-no-disposables-leak-in-test.ts b/.eslintplugin/code-ensure-no-disposables-leak-in-test.ts new file mode 100644 index 00000000000..ae3089036a6 --- /dev/null +++ b/.eslintplugin/code-ensure-no-disposables-leak-in-test.ts @@ -0,0 +1,38 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as eslint from 'eslint'; +import { Node } from 'estree'; + +export = new class EnsureNoDisposablesAreLeakedInTestSuite implements eslint.Rule.RuleModule { + + readonly meta: eslint.Rule.RuleMetaData = { + type: 'problem', + messages: { + ensure: 'Suites should include a call to `ensureNoDisposablesAreLeakedInTestSuite()` to ensure no disposables are leaked in tests.' + } + }; + + create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener { + const config = <{ exclude: string[] }>context.options[0]; + + const needle = context.getFilename().replace(/\\/g, '/'); + if (config.exclude.some((e) => needle.endsWith(e))) { + return {}; + } + + return { + [`Program > ExpressionStatement > CallExpression[callee.name='suite']`]: (node: Node) => { + const src = context.getSourceCode().getText(node) + if (!src.includes('ensureNoDisposablesAreLeakedInTestSuite(')) { + context.report({ + node, + messageId: 'ensure', + }); + } + }, + }; + } +}; diff --git a/.eslintrc.json b/.eslintrc.json index fd88130a1e8..d6d14e5d43b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -136,6 +136,226 @@ ] } }, + { + "files": [ + "src/vs/**/*.test.ts" + ], + "rules": { + "local/code-ensure-no-disposables-leak-in-test": [ + "warn", + { + // Files should (only) be removed from the list they adopt the leak detector + "exclude": [ + "src/vs/base/parts/sandbox/test/electron-sandbox/globals.test.ts", + "src/vs/base/test/browser/browser.test.ts", + "src/vs/base/test/browser/comparers.test.ts", + "src/vs/base/test/browser/dom.test.ts", + "src/vs/base/test/browser/formattedTextRenderer.test.ts", + "src/vs/base/test/browser/hash.test.ts", + "src/vs/base/test/browser/iconLabels.test.ts", + "src/vs/base/test/browser/indexedDB.test.ts", + "src/vs/base/test/browser/ui/contextview/contextview.test.ts", + "src/vs/base/test/browser/ui/menu/menubar.test.ts", + "src/vs/base/test/browser/ui/scrollbar/scrollableElement.test.ts", + "src/vs/base/test/browser/ui/scrollbar/scrollbarState.test.ts", + "src/vs/base/test/common/arrays.test.ts", + "src/vs/base/test/common/arraysFind.test.ts", + "src/vs/base/test/common/assert.test.ts", + "src/vs/base/test/common/cache.test.ts", + "src/vs/base/test/common/charCode.test.ts", + "src/vs/base/test/common/collections.test.ts", + "src/vs/base/test/common/color.test.ts", + "src/vs/base/test/common/console.test.ts", + "src/vs/base/test/common/decorators.test.ts", + "src/vs/base/test/common/diff/diff.test.ts", + "src/vs/base/test/common/errors.test.ts", + "src/vs/base/test/common/filters.perf.test.ts", + "src/vs/base/test/common/filters.test.ts", + "src/vs/base/test/common/iconLabels.test.ts", + "src/vs/base/test/common/iterator.test.ts", + "src/vs/base/test/common/json.test.ts", + "src/vs/base/test/common/jsonEdit.test.ts", + "src/vs/base/test/common/jsonFormatter.test.ts", + "src/vs/base/test/common/keybindings.test.ts", + "src/vs/base/test/common/keyCodes.test.ts", + "src/vs/base/test/common/lazy.test.ts", + "src/vs/base/test/common/linkedList.test.ts", + "src/vs/base/test/common/linkedText.test.ts", + "src/vs/base/test/common/map.test.ts", + "src/vs/base/test/common/markdownString.test.ts", + "src/vs/base/test/common/marshalling.test.ts", + "src/vs/base/test/common/mime.test.ts", + "src/vs/base/test/common/naturalLanguage/korean.test.ts", + "src/vs/base/test/common/network.test.ts", + "src/vs/base/test/common/normalization.test.ts", + "src/vs/base/test/common/objects.test.ts", + "src/vs/base/test/common/observable.test.ts", + "src/vs/base/test/common/path.test.ts", + "src/vs/base/test/common/prefixTree.test.ts", + "src/vs/base/test/common/resources.test.ts", + "src/vs/base/test/common/resourceTree.test.ts", + "src/vs/base/test/common/scrollable.test.ts", + "src/vs/base/test/common/skipList.test.ts", + "src/vs/base/test/common/strings.test.ts", + "src/vs/base/test/common/stripComments.test.ts", + "src/vs/base/test/common/ternarySearchtree.test.ts", + "src/vs/base/test/common/tfIdf.test.ts", + "src/vs/base/test/common/types.test.ts", + "src/vs/base/test/common/uri.test.ts", + "src/vs/base/test/common/uuid.test.ts", + "src/vs/base/test/node/crypto.test.ts", + "src/vs/base/test/node/css.build.test.ts", + "src/vs/base/test/node/id.test.ts", + "src/vs/base/test/node/nodeStreams.test.ts", + "src/vs/base/test/node/port.test.ts", + "src/vs/base/test/node/powershell.test.ts", + "src/vs/base/test/node/snapshot.test.ts", + "src/vs/base/test/node/unc.test.ts", + "src/vs/code/test/electron-sandbox/issue/testReporterModel.test.ts", + "src/vs/editor/contrib/codeAction/test/browser/codeActionKeybindingResolver.test.ts", + "src/vs/editor/contrib/codeAction/test/browser/codeActionModel.test.ts", + "src/vs/editor/contrib/dropOrPasteInto/test/browser/editSort.test.ts", + "src/vs/editor/contrib/folding/test/browser/foldingModel.test.ts", + "src/vs/editor/contrib/folding/test/browser/foldingRanges.test.ts", + "src/vs/editor/contrib/folding/test/browser/indentFold.test.ts", + "src/vs/editor/contrib/folding/test/browser/indentRangeProvider.test.ts", + "src/vs/editor/contrib/gotoSymbol/test/browser/referencesModel.test.ts", + "src/vs/editor/contrib/smartSelect/test/browser/smartSelect.test.ts", + "src/vs/editor/contrib/snippet/test/browser/snippetParser.test.ts", + "src/vs/editor/contrib/snippet/test/browser/snippetSession.test.ts", + "src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts", + "src/vs/editor/contrib/suggest/test/browser/completionModel.test.ts", + "src/vs/editor/contrib/suggest/test/browser/suggestMemory.test.ts", + "src/vs/editor/test/common/services/languageService.test.ts", + "src/vs/editor/test/node/classification/typescript.test.ts", + "src/vs/editor/test/node/diffing/defaultLinesDiffComputer.test.ts", + "src/vs/editor/test/node/diffing/fixtures.test.ts", + "src/vs/platform/configuration/test/common/configuration.test.ts", + "src/vs/platform/configuration/test/common/configurationModels.test.ts", + "src/vs/platform/configuration/test/common/configurationRegistry.test.ts", + "src/vs/platform/contextkey/test/common/contextkey.test.ts", + "src/vs/platform/contextkey/test/common/parser.test.ts", + "src/vs/platform/contextkey/test/common/scanner.test.ts", + "src/vs/platform/dialogs/test/common/dialog.test.ts", + "src/vs/platform/environment/test/node/argv.test.ts", + "src/vs/platform/environment/test/node/userDataPath.test.ts", + "src/vs/platform/extensionManagement/test/common/configRemotes.test.ts", + "src/vs/platform/extensionManagement/test/common/extensionManagement.test.ts", + "src/vs/platform/extensions/test/common/extensionValidator.test.ts", + "src/vs/platform/externalTerminal/electron-main/externalTerminalService.test.ts", + "src/vs/platform/instantiation/test/common/graph.test.ts", + "src/vs/platform/instantiation/test/common/instantiationService.test.ts", + "src/vs/platform/keybinding/test/common/abstractKeybindingService.test.ts", + "src/vs/platform/keybinding/test/common/keybindingLabels.test.ts", + "src/vs/platform/keybinding/test/common/keybindingResolver.test.ts", + "src/vs/platform/markers/test/common/markerService.test.ts", + "src/vs/platform/opener/test/common/opener.test.ts", + "src/vs/platform/progress/test/common/progress.test.ts", + "src/vs/platform/registry/test/common/platform.test.ts", + "src/vs/platform/remote/test/common/remoteHosts.test.ts", + "src/vs/platform/telemetry/test/browser/1dsAppender.test.ts", + "src/vs/platform/telemetry/test/browser/telemetryService.test.ts", + "src/vs/platform/telemetry/test/common/telemetryLogAppender.test.ts", + "src/vs/platform/undoRedo/test/common/undoRedoService.test.ts", + "src/vs/platform/userDataSync/test/common/extensionsMerge.test.ts", + "src/vs/platform/userDataSync/test/common/globalStateMerge.test.ts", + "src/vs/platform/userDataSync/test/common/settingsMerge.test.ts", + "src/vs/platform/userDataSync/test/common/snippetsMerge.test.ts", + "src/vs/platform/userDataSync/test/common/userDataProfilesManifestMerge.test.ts", + "src/vs/platform/workspace/test/common/workspace.test.ts", + "src/vs/platform/workspaces/test/common/workspaces.test.ts", + "src/vs/platform/workspaces/test/electron-main/workspaces.test.ts", + "src/vs/server/test/node/serverConnectionToken.test.ts", + "src/vs/workbench/api/test/browser/extHost.api.impl.test.ts", + "src/vs/workbench/api/test/browser/extHostApiCommands.test.ts", + "src/vs/workbench/api/test/browser/extHostBulkEdits.test.ts", + "src/vs/workbench/api/test/browser/extHostCommands.test.ts", + "src/vs/workbench/api/test/browser/extHostDocumentSaveParticipant.test.ts", + "src/vs/workbench/api/test/browser/extHostMessagerService.test.ts", + "src/vs/workbench/api/test/browser/extHostTelemetry.test.ts", + "src/vs/workbench/api/test/browser/extHostTextEditor.test.ts", + "src/vs/workbench/api/test/browser/extHostTypeConverter.test.ts", + "src/vs/workbench/api/test/browser/extHostTypes.test.ts", + "src/vs/workbench/api/test/browser/extHostWorkspace.test.ts", + "src/vs/workbench/api/test/browser/mainThreadConfiguration.test.ts", + "src/vs/workbench/api/test/browser/mainThreadDocuments.test.ts", + "src/vs/workbench/api/test/common/extensionHostMain.test.ts", + "src/vs/workbench/api/test/common/extHostExtensionActivator.test.ts", + "src/vs/workbench/api/test/node/extHostTunnelService.test.ts", + "src/vs/workbench/contrib/bulkEdit/test/browser/bulkCellEdits.test.ts", + "src/vs/workbench/contrib/chat/test/common/chatWordCounter.test.ts", + "src/vs/workbench/contrib/debug/test/browser/baseDebugView.test.ts", + "src/vs/workbench/contrib/debug/test/browser/breakpoints.test.ts", + "src/vs/workbench/contrib/debug/test/browser/callStack.test.ts", + "src/vs/workbench/contrib/debug/test/browser/debugHover.test.ts", + "src/vs/workbench/contrib/debug/test/browser/repl.test.ts", + "src/vs/workbench/contrib/debug/test/common/debugModel.test.ts", + "src/vs/workbench/contrib/debug/test/node/debugger.test.ts", + "src/vs/workbench/contrib/debug/test/node/streamDebugAdapter.test.ts", + "src/vs/workbench/contrib/debug/test/node/terminals.test.ts", + "src/vs/workbench/contrib/editSessions/test/browser/editSessions.test.ts", + "src/vs/workbench/contrib/extensions/test/common/extensionQuery.test.ts", + "src/vs/workbench/contrib/extensions/test/electron-sandbox/extension.test.ts", + "src/vs/workbench/contrib/files/test/browser/explorerFileNestingTrie.test.ts", + "src/vs/workbench/contrib/files/test/browser/explorerModel.test.ts", + "src/vs/workbench/contrib/files/test/browser/explorerView.test.ts", + "src/vs/workbench/contrib/files/test/browser/fileActions.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/cellDnd.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/contrib/contributedStatusBarItemController.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/contrib/executionStatusBarItem.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/contrib/layoutActions.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/contrib/outputCopyTests.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/notebookBrowser.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/notebookExecutionService.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/notebookExecutionStateService.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/notebookTextModel.test.ts", + "src/vs/workbench/contrib/search/test/common/cacheState.test.ts", + "src/vs/workbench/contrib/search/test/common/extractRange.test.ts", + "src/vs/workbench/contrib/snippets/test/browser/snippetFile.test.ts", + "src/vs/workbench/contrib/snippets/test/browser/snippetsRegistry.test.ts", + "src/vs/workbench/contrib/snippets/test/browser/snippetsRewrite.test.ts", + "src/vs/workbench/contrib/tags/test/node/workspaceTags.test.ts", + "src/vs/workbench/contrib/tasks/test/common/problemMatcher.test.ts", + "src/vs/workbench/contrib/tasks/test/common/taskConfiguration.test.ts", + "src/vs/workbench/contrib/terminal/test/browser/terminalActions.test.ts", + "src/vs/workbench/contrib/themes/test/node/colorRegistryExport.test.ts", + "src/vs/workbench/contrib/url/test/browser/trustedDomains.test.ts", + "src/vs/workbench/contrib/welcomeGettingStarted/test/browser/gettingStartedMarkdownRenderer.test.ts", + "src/vs/workbench/services/commands/test/common/commandService.test.ts", + "src/vs/workbench/services/configuration/test/common/configurationModels.test.ts", + "src/vs/workbench/services/configurationResolver/test/electron-sandbox/configurationResolverService.test.ts", + "src/vs/workbench/services/dialogs/test/electron-sandbox/fileDialogService.test.ts", + "src/vs/workbench/services/editor/test/browser/editorResolverService.test.ts", + "src/vs/workbench/services/extensions/test/common/extensionDescriptionRegistry.test.ts", + "src/vs/workbench/services/keybinding/test/browser/keybindingIO.test.ts", + "src/vs/workbench/services/keybinding/test/node/fallbackKeyboardMapper.test.ts", + "src/vs/workbench/services/keybinding/test/node/macLinuxKeyboardMapper.test.ts", + "src/vs/workbench/services/keybinding/test/node/windowsKeyboardMapper.test.ts", + "src/vs/workbench/services/preferences/test/browser/preferencesService.test.ts", + "src/vs/workbench/services/preferences/test/common/preferencesValidation.test.ts", + "src/vs/workbench/services/search/test/browser/queryBuilder.test.ts", + "src/vs/workbench/services/search/test/common/ignoreFile.test.ts", + "src/vs/workbench/services/search/test/common/queryBuilder.test.ts", + "src/vs/workbench/services/search/test/common/replace.test.ts", + "src/vs/workbench/services/search/test/common/search.test.ts", + "src/vs/workbench/services/search/test/common/searchHelpers.test.ts", + "src/vs/workbench/services/search/test/node/ripgrepFileSearch.test.ts", + "src/vs/workbench/services/search/test/node/ripgrepTextSearchEngineUtils.test.ts", + "src/vs/workbench/services/search/test/node/textSearchManager.test.ts", + "src/vs/workbench/services/telemetry/test/browser/commonProperties.test.ts", + "src/vs/workbench/services/textfile/test/common/textFileService.io.test.ts", + "src/vs/workbench/services/textMate/test/browser/arrayOperation.test.ts", + "src/vs/workbench/services/themes/test/node/tokenStyleResolving.test.ts", + "src/vs/workbench/services/userActivity/test/browser/domActivityTracker.test.ts", + "src/vs/workbench/services/workspaces/test/browser/workspaces.test.ts", + "src/vs/workbench/services/workspaces/test/common/workspaceTrust.test.ts", + "src/vs/workbench/test/browser/quickAccess.test.ts", + "src/vs/workbench/test/browser/webview.test.ts" + ] + } + ] + } + }, { "files": [ "**/vscode.d.ts", diff --git a/src/vs/base/parts/ipc/test/node/ipc.net.test.ts b/src/vs/base/parts/ipc/test/node/ipc.net.test.ts index 8255c780ccf..0e018300cea 100644 --- a/src/vs/base/parts/ipc/test/node/ipc.net.test.ts +++ b/src/vs/base/parts/ipc/test/node/ipc.net.test.ts @@ -571,6 +571,8 @@ flakySuite('IPC, create handle', () => { suite('WebSocketNodeSocket', () => { + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + function toUint8Array(data: number[]): Uint8Array { const result = new Uint8Array(data.length); for (let i = 0; i < data.length; i++) { @@ -724,15 +726,15 @@ suite('WebSocketNodeSocket', () => { server.close(); const webSocketNodeSocket = new WebSocketNodeSocket(new NodeSocket(socket), true, null, false); - webSocketNodeSocket.onData((data) => { + ds.add(webSocketNodeSocket.onData((data) => { receivingSideOnDataCallCount++; receivingSideTotalBytes += data.byteLength; - }); + })); - webSocketNodeSocket.onClose(() => { + ds.add(webSocketNodeSocket.onClose(() => { webSocketNodeSocket.dispose(); receivingSideSocketClosedBarrier.open(); - }); + })); }); const socket = connect({ diff --git a/src/vs/base/test/browser/ui/list/rangeMap.test.ts b/src/vs/base/test/browser/ui/list/rangeMap.test.ts index 0171250324b..5b3b4a6c65f 100644 --- a/src/vs/base/test/browser/ui/list/rangeMap.test.ts +++ b/src/vs/base/test/browser/ui/list/rangeMap.test.ts @@ -361,6 +361,8 @@ suite('RangeMap', () => { suite('RangeMap with top padding', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + test('empty', () => { const rangeMap = new RangeMap(10); assert.strictEqual(rangeMap.size, 10); diff --git a/src/vs/base/test/browser/ui/tree/objectTree.test.ts b/src/vs/base/test/browser/ui/tree/objectTree.test.ts index a3e39846a5b..05594bf561a 100644 --- a/src/vs/base/test/browser/ui/tree/objectTree.test.ts +++ b/src/vs/base/test/browser/ui/tree/objectTree.test.ts @@ -250,12 +250,14 @@ suite('CompressibleObjectTree', function () { disposeTemplate(): void { } } + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + test('empty', function () { const container = document.createElement('div'); container.style.width = '200px'; container.style.height = '200px'; - const tree = new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()]); + const tree = ds.add(new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()])); tree.layout(200); assert.strictEqual(getRowsTextContent(container).length, 0); @@ -266,7 +268,7 @@ suite('CompressibleObjectTree', function () { container.style.width = '200px'; container.style.height = '200px'; - const tree = new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()]); + const tree = ds.add(new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()])); tree.layout(200); tree.setChildren(null, [ @@ -289,7 +291,7 @@ suite('CompressibleObjectTree', function () { container.style.width = '200px'; container.style.height = '200px'; - const tree = new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()]); + const tree = ds.add(new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()])); tree.layout(200); tree.setChildren(null, [ @@ -341,7 +343,7 @@ suite('CompressibleObjectTree', function () { container.style.width = '200px'; container.style.height = '200px'; - const tree = new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()]); + const tree = ds.add(new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()])); tree.layout(200); tree.setChildren(null, [ diff --git a/src/vs/base/test/common/event.test.ts b/src/vs/base/test/common/event.test.ts index 2231acac008..df7aac4363d 100644 --- a/src/vs/base/test/common/event.test.ts +++ b/src/vs/base/test/common/event.test.ts @@ -40,11 +40,17 @@ namespace Samples { this._onDidChange.fire(value); } + dispose() { + this._onDidChange.dispose(); + } + } } suite('Event utils dispose', function () { + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + let tracker = new DisposableTracker(); function assertDisposablesCount(expected: number | Array) { @@ -75,7 +81,7 @@ suite('Event utils dispose', function () { test('no leak with snapshot-utils', function () { const store = new DisposableStore(); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const evens = Event.filter(emitter.event, n => n % 2 === 0, store); assertDisposablesCount(1); // snaphot only listen when `evens` is being listened on @@ -91,7 +97,7 @@ suite('Event utils dispose', function () { test('no leak with debounce-util', function () { const store = new DisposableStore(); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l) => 0, undefined, undefined, undefined, undefined, store); assertDisposablesCount(1); // debounce only listens when `debounce` is being listened on @@ -109,13 +115,15 @@ suite('Event utils dispose', function () { suite('Event', function () { + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + const counter = new Samples.EventCounter(); setup(() => counter.reset()); test('Emitter plain', function () { - const doc = new Samples.Document3(); + const doc = ds.add(new Samples.Document3()); const subscription = doc.onDidChange(counter.onEvent, counter); @@ -133,10 +141,10 @@ suite('Event', function () { const a = (v: string) => calls.push(`a${v}`); const b = (v: string) => calls.push(`b${v}`); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); - emitter.event(a); - emitter.event(b); + ds.add(emitter.event(a)); + ds.add(emitter.event(b)); const s2 = emitter.event(a); emitter.fire('1'); @@ -150,14 +158,14 @@ suite('Event', function () { test('Emitter, dispose listener during emission', () => { for (let keepFirstMod = 1; keepFirstMod < 4; keepFirstMod++) { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const calls: number[] = []; - const disposables = Array.from({ length: 25 }, (_, n) => emitter.event(() => { + const disposables = Array.from({ length: 25 }, (_, n) => ds.add(emitter.event(() => { if (n % keepFirstMod === 0) { disposables[n].dispose(); } calls.push(n); - })); + }))); emitter.fire(); assert.deepStrictEqual(calls, Array.from({ length: 25 }, (_, n) => n)); @@ -165,14 +173,14 @@ suite('Event', function () { }); test('Emitter, dispose emitter during emission', () => { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const calls: number[] = []; - const disposables = Array.from({ length: 25 }, (_, n) => emitter.event(() => { + const disposables = Array.from({ length: 25 }, (_, n) => ds.add(emitter.event(() => { if (n === 10) { emitter.dispose(); } calls.push(n); - })); + }))); emitter.fire(); disposables.forEach(d => d.dispose()); @@ -181,15 +189,15 @@ suite('Event', function () { test('Emitter, shared delivery queue', () => { const deliveryQueue = createEventDeliveryQueue(); - const emitter1 = new Emitter({ deliveryQueue }); - const emitter2 = new Emitter({ deliveryQueue }); + const emitter1 = ds.add(new Emitter({ deliveryQueue })); + const emitter2 = ds.add(new Emitter({ deliveryQueue })); const calls: string[] = []; - emitter1.event(d => { calls.push(`${d}a`); if (d === 1) { emitter2.fire(2); } }); - emitter1.event(d => { calls.push(`${d}b`); }); + ds.add(emitter1.event(d => { calls.push(`${d}a`); if (d === 1) { emitter2.fire(2); } })); + ds.add(emitter1.event(d => { calls.push(`${d}b`); })); - emitter2.event(d => { calls.push(`${d}c`); emitter1.dispose(); }); - emitter2.event(d => { calls.push(`${d}d`); }); + ds.add(emitter2.event(d => { calls.push(`${d}c`); emitter1.dispose(); })); + ds.add(emitter2.event(d => { calls.push(`${d}d`); })); emitter1.fire(1); @@ -201,13 +209,13 @@ suite('Event', function () { test('Emitter, handles removal during 3', () => { const fn1 = stub(); const fn2 = stub(); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); - emitter.event(fn1); + ds.add(emitter.event(fn1)); const h = emitter.event(() => { h.dispose(); }); - emitter.event(fn2); + ds.add(emitter.event(fn2)); emitter.fire('foo'); assert.deepStrictEqual(fn2.args, [['foo']]); @@ -216,9 +224,9 @@ suite('Event', function () { test('Emitter, handles removal during 2', () => { const fn1 = stub(); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); - emitter.event(fn1); + ds.add(emitter.event(fn1)); const h = emitter.event(() => { h.dispose(); }); @@ -230,7 +238,7 @@ suite('Event', function () { test('Emitter, bucket', function () { const bucket: IDisposable[] = []; - const doc = new Samples.Document3(); + const doc = ds.add(new Samples.Document3()); const subscription = doc.onDidChange(counter.onEvent, counter, bucket); doc.setText('far'); @@ -251,8 +259,8 @@ suite('Event', function () { test('Emitter, store', function () { - const bucket = new DisposableStore(); - const doc = new Samples.Document3(); + const bucket = ds.add(new DisposableStore()); + const doc = ds.add(new Samples.Document3()); const subscription = doc.onDidChange(counter.onEvent, counter, bucket); doc.setText('far'); @@ -273,16 +281,16 @@ suite('Event', function () { let firstCount = 0; let lastCount = 0; - const a = new Emitter({ + const a = ds.add(new Emitter({ onWillAddFirstListener() { firstCount += 1; }, onDidRemoveLastListener() { lastCount += 1; } - }); + })); assert.strictEqual(firstCount, 0); assert.strictEqual(lastCount, 0); - let subscription1 = a.event(function () { }); - const subscription2 = a.event(function () { }); + let subscription1 = ds.add(a.event(function () { })); + const subscription2 = ds.add(a.event(function () { })); assert.strictEqual(firstCount, 1); assert.strictEqual(lastCount, 0); @@ -294,26 +302,26 @@ suite('Event', function () { assert.strictEqual(firstCount, 1); assert.strictEqual(lastCount, 1); - subscription1 = a.event(function () { }); + subscription1 = ds.add(a.event(function () { })); assert.strictEqual(firstCount, 2); assert.strictEqual(lastCount, 1); }); test('onWillRemoveListener', () => { let count = 0; - const a = new Emitter({ + const a = ds.add(new Emitter({ onWillRemoveListener() { count += 1; } - }); + })); assert.strictEqual(count, 0); - let subscription = a.event(function () { }); + let subscription = ds.add(a.event(function () { })); assert.strictEqual(count, 0); subscription.dispose(); assert.strictEqual(count, 1); - subscription = a.event(function () { }); + subscription = ds.add(a.event(function () { })); assert.strictEqual(count, 1); }); @@ -322,15 +330,15 @@ suite('Event', function () { setUnexpectedErrorHandler(() => null); try { - const a = new Emitter(); + const a = ds.add(new Emitter()); let hit = false; - a.event(function () { + ds.add(a.event(function () { // eslint-disable-next-line no-throw-literal throw 9; - }); - a.event(function () { + })); + ds.add(a.event(function () { hit = true; - }); + })); a.fire(undefined); assert.strictEqual(hit, true); @@ -343,17 +351,17 @@ suite('Event', function () { const allError: any[] = []; - const a = new Emitter({ + const a = ds.add(new Emitter({ onListenerError(e) { allError.push(e); } - }); + })); let hit = false; - a.event(function () { + ds.add(a.event(function () { // eslint-disable-next-line no-throw-literal throw 9; - }); - a.event(function () { + })); + ds.add(a.event(function () { hit = true; - }); + })); a.fire(undefined); assert.strictEqual(hit, true); assert.deepStrictEqual(allError, [9]); @@ -367,7 +375,7 @@ suite('Event', function () { } const context = {}; - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const reg1 = emitter.event(listener, context); const reg2 = emitter.event(listener, context); @@ -395,7 +403,7 @@ suite('Event', function () { } }); - emitter.event(e => { sum = e; }); + ds.add(emitter.event(e => { sum = e; })); const p = Event.toPromise(emitter.event); @@ -433,18 +441,18 @@ suite('Event', function () { }); test('Emitter - In Order Delivery', function () { - const a = new Emitter(); + const a = ds.add(new Emitter()); const listener2Events: string[] = []; - a.event(function listener1(event) { + ds.add(a.event(function listener1(event) { if (event === 'e1') { a.fire('e2'); // assert that all events are delivered at this point assert.deepStrictEqual(listener2Events, ['e1', 'e2']); } - }); - a.event(function listener2(event) { + })); + ds.add(a.event(function listener2(event) { listener2Events.push(event); - }); + })); a.fire('e1'); // assert that all events are delivered in order @@ -452,25 +460,25 @@ suite('Event', function () { }); test('Emitter, - In Order Delivery 3x', function () { - const a = new Emitter(); + const a = ds.add(new Emitter()); const listener2Events: string[] = []; - a.event(function listener1(event) { + ds.add(a.event(function listener1(event) { if (event === 'e2') { a.fire('e3'); // assert that all events are delivered at this point assert.deepStrictEqual(listener2Events, ['e1', 'e2', 'e3']); } - }); - a.event(function listener1(event) { + })); + ds.add(a.event(function listener1(event) { if (event === 'e1') { a.fire('e2'); // assert that all events are delivered at this point assert.deepStrictEqual(listener2Events, ['e1', 'e2', 'e3']); } - }); - a.event(function listener2(event) { + })); + ds.add(a.event(function listener2(event) { listener2Events.push(event); - }); + })); a.fire('e1'); // assert that all events are delivered in order @@ -478,7 +486,7 @@ suite('Event', function () { }); test('Cannot read property \'_actual\' of undefined #142204', function () { - const e = new Emitter(); + const e = ds.add(new Emitter()); const dispo = e.event(() => { }); dispo.dispose.call(undefined); // assert that disposable can be called with this }); @@ -486,6 +494,8 @@ suite('Event', function () { suite('AsyncEmitter', function () { + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + test('event has waitUntil-function', async function () { interface E extends IWaitUntil { @@ -495,11 +505,11 @@ suite('AsyncEmitter', function () { const emitter = new AsyncEmitter(); - emitter.event(e => { + ds.add(emitter.event(e => { assert.strictEqual(e.foo, true); assert.strictEqual(e.bar, 1); assert.strictEqual(typeof e.waitUntil, 'function'); - }); + })); emitter.fireAsync({ foo: true, bar: 1, }, CancellationToken.None); emitter.dispose(); @@ -515,19 +525,19 @@ suite('AsyncEmitter', function () { let globalState = 0; const emitter = new AsyncEmitter(); - emitter.event(e => { + ds.add(emitter.event(e => { e.waitUntil(timeout(10).then(_ => { assert.strictEqual(globalState, 0); globalState += 1; })); - }); + })); - emitter.event(e => { + ds.add(emitter.event(e => { e.waitUntil(timeout(1).then(_ => { assert.strictEqual(globalState, 1); globalState += 1; })); - }); + })); await emitter.fireAsync({ foo: true }, CancellationToken.None); assert.strictEqual(globalState, 2); @@ -545,7 +555,7 @@ suite('AsyncEmitter', function () { const emitter = new AsyncEmitter(); // e1 - emitter.event(e => { + ds.add(emitter.event(e => { e.waitUntil(timeout(10).then(async _ => { if (e.foo === 1) { await emitter.fireAsync({ foo: 2 }, CancellationToken.None); @@ -553,13 +563,13 @@ suite('AsyncEmitter', function () { done = true; } })); - }); + })); // e2 - emitter.event(e => { + ds.add(emitter.event(e => { events.push(e.foo); e.waitUntil(timeout(7)); - }); + })); await emitter.fireAsync({ foo: 1 }, CancellationToken.None); assert.ok(done); @@ -577,16 +587,16 @@ suite('AsyncEmitter', function () { let globalState = 0; const emitter = new AsyncEmitter(); - emitter.event(e => { + ds.add(emitter.event(e => { globalState += 1; e.waitUntil(new Promise((_r, reject) => reject(new Error()))); - }); + })); - emitter.event(e => { + ds.add(emitter.event(e => { globalState += 1; e.waitUntil(timeout(10)); e.waitUntil(timeout(20).then(() => globalState++)); // multiple `waitUntil` are supported and awaited on - }); + })); await emitter.fireAsync({ foo: true }, CancellationToken.None).then(() => { assert.strictEqual(globalState, 3); @@ -601,11 +611,13 @@ suite('AsyncEmitter', function () { suite('PausableEmitter', function () { + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + test('basic', function () { const data: number[] = []; - const emitter = new PauseableEmitter(); + const emitter = ds.add(new PauseableEmitter()); - emitter.event(e => data.push(e)); + ds.add(emitter.event(e => data.push(e))); emitter.fire(1); emitter.fire(2); @@ -614,9 +626,9 @@ suite('PausableEmitter', function () { test('pause/resume - no merge', function () { const data: number[] = []; - const emitter = new PauseableEmitter(); + const emitter = ds.add(new PauseableEmitter()); - emitter.event(e => data.push(e)); + ds.add(emitter.event(e => data.push(e))); emitter.fire(1); emitter.fire(2); assert.deepStrictEqual(data, [1, 2]); @@ -634,9 +646,9 @@ suite('PausableEmitter', function () { test('pause/resume - merge', function () { const data: number[] = []; - const emitter = new PauseableEmitter({ merge: (a) => a.reduce((p, c) => p + c, 0) }); + const emitter = ds.add(new PauseableEmitter({ merge: (a) => a.reduce((p, c) => p + c, 0) })); - emitter.event(e => data.push(e)); + ds.add(emitter.event(e => data.push(e))); emitter.fire(1); emitter.fire(2); assert.deepStrictEqual(data, [1, 2]); @@ -655,9 +667,9 @@ suite('PausableEmitter', function () { test('double pause/resume', function () { const data: number[] = []; - const emitter = new PauseableEmitter(); + const emitter = ds.add(new PauseableEmitter()); - emitter.event(e => data.push(e)); + ds.add(emitter.event(e => data.push(e))); emitter.fire(1); emitter.fire(2); assert.deepStrictEqual(data, [1, 2]); @@ -680,9 +692,9 @@ suite('PausableEmitter', function () { test('resume, no pause', function () { const data: number[] = []; - const emitter = new PauseableEmitter(); + const emitter = ds.add(new PauseableEmitter()); - emitter.event(e => data.push(e)); + ds.add(emitter.event(e => data.push(e))); emitter.fire(1); emitter.fire(2); assert.deepStrictEqual(data, [1, 2]); @@ -694,20 +706,20 @@ suite('PausableEmitter', function () { test('nested pause', function () { const data: number[] = []; - const emitter = new PauseableEmitter(); + const emitter = ds.add(new PauseableEmitter()); let once = true; - emitter.event(e => { + ds.add(emitter.event(e => { data.push(e); if (once) { emitter.pause(); once = false; } - }); - emitter.event(e => { + })); + ds.add(emitter.event(e => { data.push(e); - }); + })); emitter.pause(); emitter.fire(1); @@ -727,8 +739,8 @@ suite('PausableEmitter', function () { test('empty pause with merge', function () { const data: number[] = []; - const emitter = new PauseableEmitter({ merge: a => a[0] }); - emitter.event(e => data.push(1)); + const emitter = ds.add(new PauseableEmitter({ merge: a => a[0] })); + ds.add(emitter.event(e => data.push(1))); emitter.pause(); emitter.resume(); @@ -766,12 +778,14 @@ suite('Event utils - ensureNoDisposablesAreLeakedInTestSuite', function () { suite('Event utils', () => { + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + suite('EventBufferer', () => { test('should not buffer when not wrapped', () => { const bufferer = new EventBufferer(); const counter = new Samples.EventCounter(); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const event = bufferer.wrapEvent(emitter.event); const listener = event(counter.onEvent, counter); @@ -789,7 +803,7 @@ suite('Event utils', () => { test('should buffer when wrapped', () => { const bufferer = new EventBufferer(); const counter = new Samples.EventCounter(); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const event = bufferer.wrapEvent(emitter.event); const listener = event(counter.onEvent, counter); @@ -812,7 +826,7 @@ suite('Event utils', () => { }); test('once', () => { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); let counter1 = 0, counter2 = 0, counter3 = 0; @@ -844,7 +858,7 @@ suite('Event utils', () => { test('should buffer events', () => { const result: number[] = []; - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const event = emitter.event; const bufferedEvent = Event.buffer(event); @@ -866,7 +880,7 @@ suite('Event utils', () => { test('should buffer events on next tick', async () => { const result: number[] = []; - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const event = emitter.event; const bufferedEvent = Event.buffer(event, true); @@ -888,7 +902,7 @@ suite('Event utils', () => { test('should fire initial buffer events', () => { const result: number[] = []; - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const event = emitter.event; const bufferedEvent = Event.buffer(event, false, [-2, -1, 0]); @@ -897,7 +911,7 @@ suite('Event utils', () => { emitter.fire(3); assert.deepStrictEqual(result, [] as number[]); - bufferedEvent(num => result.push(num)); + ds.add(bufferedEvent(num => result.push(num))); assert.deepStrictEqual(result, [-2, -1, 0, 1, 2, 3]); }); }); @@ -907,10 +921,10 @@ suite('Event utils', () => { test('works', () => { const result: number[] = []; const m = new EventMultiplexer(); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); - const e1 = new Emitter(); - m.add(e1.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); assert.deepStrictEqual(result, []); @@ -921,10 +935,10 @@ suite('Event utils', () => { test('multiplexer dispose works', () => { const result: number[] = []; const m = new EventMultiplexer(); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); - const e1 = new Emitter(); - m.add(e1.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); assert.deepStrictEqual(result, []); @@ -941,10 +955,10 @@ suite('Event utils', () => { test('event dispose works', () => { const result: number[] = []; const m = new EventMultiplexer(); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); - const e1 = new Emitter(); - m.add(e1.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); assert.deepStrictEqual(result, []); @@ -961,9 +975,9 @@ suite('Event utils', () => { test('mutliplexer event dispose works', () => { const result: number[] = []; const m = new EventMultiplexer(); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); - const e1 = new Emitter(); + const e1 = ds.add(new Emitter()); const l1 = m.add(e1.event); assert.deepStrictEqual(result, []); @@ -981,14 +995,14 @@ suite('Event utils', () => { test('hot start works', () => { const result: number[] = []; const m = new EventMultiplexer(); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); - const e1 = new Emitter(); - m.add(e1.event); - const e2 = new Emitter(); - m.add(e2.event); - const e3 = new Emitter(); - m.add(e3.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); + const e2 = ds.add(new Emitter()); + ds.add(m.add(e2.event)); + const e3 = ds.add(new Emitter()); + ds.add(m.add(e3.event)); e1.fire(1); e2.fire(2); @@ -1000,14 +1014,14 @@ suite('Event utils', () => { const result: number[] = []; const m = new EventMultiplexer(); - const e1 = new Emitter(); - m.add(e1.event); - const e2 = new Emitter(); - m.add(e2.event); - const e3 = new Emitter(); - m.add(e3.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); + const e2 = ds.add(new Emitter()); + ds.add(m.add(e2.event)); + const e3 = ds.add(new Emitter()); + ds.add(m.add(e3.event)); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); e1.fire(1); e2.fire(2); @@ -1019,18 +1033,18 @@ suite('Event utils', () => { const result: number[] = []; const m = new EventMultiplexer(); - const e1 = new Emitter(); - m.add(e1.event); - const e2 = new Emitter(); - m.add(e2.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); + const e2 = ds.add(new Emitter()); + ds.add(m.add(e2.event)); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); e1.fire(1); e2.fire(2); - const e3 = new Emitter(); - m.add(e3.event); + const e3 = ds.add(new Emitter()); + ds.add(m.add(e3.event)); e3.fire(3); assert.deepStrictEqual(result, [1, 2, 3]); @@ -1040,17 +1054,17 @@ suite('Event utils', () => { const result: number[] = []; const m = new EventMultiplexer(); - const e1 = new Emitter(); - m.add(e1.event); - const e2 = new Emitter(); - m.add(e2.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); + const e2 = ds.add(new Emitter()); + ds.add(m.add(e2.event)); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); e1.fire(1); e2.fire(2); - const e3 = new Emitter(); + const e3 = ds.add(new Emitter()); const l3 = m.add(e3.event); e3.fire(3); assert.deepStrictEqual(result, [1, 2, 3]); @@ -1066,22 +1080,24 @@ suite('Event utils', () => { }); suite('DynamicListEventMultiplexer', () => { + let addEmitter: Emitter; + let removeEmitter: Emitter; const recordedEvents: number[] = []; - const addEmitter = new Emitter(); - const removeEmitter = new Emitter(); class TestItem { - readonly onTestEventEmitter = new Emitter(); + readonly onTestEventEmitter = ds.add(new Emitter()); readonly onTestEvent = this.onTestEventEmitter.event; } let items: TestItem[]; let m: DynamicListEventMultiplexer; setup(() => { + addEmitter = ds.add(new Emitter()); + removeEmitter = ds.add(new Emitter()); items = [new TestItem(), new TestItem()]; for (const [i, item] of items.entries()) { - item.onTestEvent(e => `${i}:${e}`); + ds.add(item.onTestEvent(e => `${i}:${e}`)); } m = new DynamicListEventMultiplexer(items, addEmitter.event, removeEmitter.event, e => e.onTestEvent); - m.event(e => recordedEvents.push(e)); + ds.add(m.event(e => recordedEvents.push(e))); recordedEvents.length = 0; }); teardown(() => m.dispose()); @@ -1112,11 +1128,11 @@ suite('Event utils', () => { }); test('latch', () => { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const event = Event.latch(emitter.event); const result: number[] = []; - const listener = event(num => result.push(num)); + const listener = ds.add(event(num => result.push(num))); assert.deepStrictEqual(result, []); @@ -1148,11 +1164,11 @@ suite('Event utils', () => { }); test('dispose is reentrant', () => { - const emitter = new Emitter({ + const emitter = ds.add(new Emitter({ onDidRemoveLastListener: () => { emitter.dispose(); } - }); + })); const listener = emitter.event(() => undefined); listener.dispose(); // should not crash @@ -1164,17 +1180,17 @@ suite('Event utils', () => { return new Promise(resolve => { let promise = new DeferredPromise(); - Event.fromPromise(promise.p)(e => { + ds.add(Event.fromPromise(promise.p)(e => { assert.strictEqual(e, 1); promise = new DeferredPromise(); - Event.fromPromise(promise.p)(() => { + ds.add(Event.fromPromise(promise.p)(() => { resolve(); - }); + })); promise.error(undefined); - }); + })); promise.complete(1); }); @@ -1185,16 +1201,16 @@ suite('Event utils', () => { let promise = new DeferredPromise(); promise.complete(1); - Event.fromPromise(promise.p)(e => { + ds.add(Event.fromPromise(promise.p)(e => { assert.strictEqual(e, 1); promise = new DeferredPromise(); promise.error(undefined); - Event.fromPromise(promise.p)(() => { + ds.add(Event.fromPromise(promise.p)(() => { resolve(); - }); - }); + })); + })); }); }); @@ -1202,8 +1218,8 @@ suite('Event utils', () => { suite('Relay', () => { test('should input work', () => { - const e1 = new Emitter(); - const e2 = new Emitter(); + const e1 = ds.add(new Emitter()); + const e2 = ds.add(new Emitter()); const relay = new Relay(); const result: number[] = []; @@ -1229,13 +1245,13 @@ suite('Event utils', () => { }); test('should Relay dispose work', () => { - const e1 = new Emitter(); - const e2 = new Emitter(); + const e1 = ds.add(new Emitter()); + const e2 = ds.add(new Emitter()); const relay = new Relay(); const result: number[] = []; const listener = (num: number) => result.push(num); - relay.event(listener); + ds.add(relay.event(listener)); e1.fire(1); assert.deepStrictEqual(result, []); @@ -1257,7 +1273,7 @@ suite('Event utils', () => { }); test('runAndSubscribeWithStore', () => { - const eventEmitter = new Emitter(); + const eventEmitter = ds.add(new Emitter()); const event = eventEmitter.event; let i = 0; @@ -1288,14 +1304,14 @@ suite('Event utils', () => { suite('accumulate', () => { test('should not fire after a listener is disposed with undefined or []', async () => { - const eventEmitter = new Emitter(); + const eventEmitter = ds.add(new Emitter()); const event = eventEmitter.event; const accumulated = Event.accumulate(event, 0); const calls1: number[][] = []; const calls2: number[][] = []; - const listener1 = accumulated((e) => calls1.push(e)); - accumulated((e) => calls2.push(e)); + const listener1 = ds.add(accumulated((e) => calls1.push(e))); + ds.add(accumulated((e) => calls2.push(e))); eventEmitter.fire(1); await timeout(1); @@ -1308,29 +1324,29 @@ suite('Event utils', () => { assert.deepStrictEqual(calls2, [[1]], 'should not fire after a listener is disposed with undefined or []'); }); test('should accumulate a single event', async () => { - const eventEmitter = new Emitter(); + const eventEmitter = ds.add(new Emitter()); const event = eventEmitter.event; const accumulated = Event.accumulate(event, 0); const results1 = await new Promise(r => { - accumulated(r); + ds.add(accumulated(r)); eventEmitter.fire(1); }); assert.deepStrictEqual(results1, [1]); const results2 = await new Promise(r => { - accumulated(r); + ds.add(accumulated(r)); eventEmitter.fire(2); }); assert.deepStrictEqual(results2, [2]); }); test('should accumulate multiple events', async () => { - const eventEmitter = new Emitter(); + const eventEmitter = ds.add(new Emitter()); const event = eventEmitter.event; const accumulated = Event.accumulate(event, 0); const results1 = await new Promise(r => { - accumulated(r); + ds.add(accumulated(r)); eventEmitter.fire(1); eventEmitter.fire(2); eventEmitter.fire(3); @@ -1338,7 +1354,7 @@ suite('Event utils', () => { assert.deepStrictEqual(results1, [1, 2, 3]); const results2 = await new Promise(r => { - accumulated(r); + ds.add(accumulated(r)); eventEmitter.fire(4); eventEmitter.fire(5); eventEmitter.fire(6); @@ -1351,7 +1367,7 @@ suite('Event utils', () => { suite('debounce', () => { test('simple', function (done: () => void) { - const doc = new Samples.Document3(); + const doc = ds.add(new Samples.Document3()); const onDocDidChange = Event.debounce(doc.onDidChange, (prev: string[] | undefined, cur) => { if (!prev) { @@ -1364,7 +1380,7 @@ suite('Event utils', () => { let count = 0; - onDocDidChange(keys => { + ds.add(onDocDidChange(keys => { count++; assert.ok(keys, 'was not expecting keys.'); if (count === 1) { @@ -1374,7 +1390,7 @@ suite('Event utils', () => { assert.deepStrictEqual(keys, ['4']); done(); } - }); + })); doc.setText('1'); doc.setText('2'); @@ -1383,7 +1399,7 @@ suite('Event utils', () => { test('microtask', function (done: () => void) { - const doc = new Samples.Document3(); + const doc = ds.add(new Samples.Document3()); const onDocDidChange = Event.debounce(doc.onDidChange, (prev: string[] | undefined, cur) => { if (!prev) { @@ -1396,7 +1412,7 @@ suite('Event utils', () => { let count = 0; - onDocDidChange(keys => { + ds.add(onDocDidChange(keys => { count++; assert.ok(keys, 'was not expecting keys.'); if (count === 1) { @@ -1406,7 +1422,7 @@ suite('Event utils', () => { assert.deepStrictEqual(keys, ['4']); done(); } - }); + })); doc.setText('1'); doc.setText('2'); @@ -1415,13 +1431,13 @@ suite('Event utils', () => { test('leading', async function () { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l, e) => e, 0, /*leading=*/true); let calls = 0; - debounced(() => { + ds.add(debounced(() => { calls++; - }); + })); // If the source event is fired once, the debounced (on the leading edge) event should be fired only once emitter.fire(); @@ -1431,13 +1447,13 @@ suite('Event utils', () => { }); test('leading (2)', async function () { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l, e) => e, 0, /*leading=*/true); let calls = 0; - debounced(() => { + ds.add(debounced(() => { calls++; - }); + })); // If the source event is fired multiple times, the debounced (on the leading edge) event should be fired twice emitter.fire(); @@ -1448,11 +1464,11 @@ suite('Event utils', () => { }); test('leading reset', async function () { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l, e) => l ? l + 1 : 1, 0, /*leading=*/true); const calls: number[] = []; - debounced((e) => calls.push(e)); + ds.add(debounced((e) => calls.push(e))); emitter.fire(1); emitter.fire(1); @@ -1462,11 +1478,11 @@ suite('Event utils', () => { }); test('should not flush events when a listener is disposed', async () => { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l, e) => l ? l + 1 : 1, 0); const calls: number[] = []; - const listener = debounced((e) => calls.push(e)); + const listener = ds.add(debounced((e) => calls.push(e))); emitter.fire(1); listener.dispose(); @@ -1478,11 +1494,11 @@ suite('Event utils', () => { }); test('flushOnListenerRemove - should flush events when a listener is disposed', async () => { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l, e) => l ? l + 1 : 1, 0, undefined, true); const calls: number[] = []; - const listener = debounced((e) => calls.push(e)); + const listener = ds.add(debounced((e) => calls.push(e))); emitter.fire(1); listener.dispose(); @@ -1494,11 +1510,11 @@ suite('Event utils', () => { }); test('should flush events when the emitter is disposed', async () => { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l, e) => l ? l + 1 : 1, 0); const calls: number[] = []; - debounced((e) => calls.push(e)); + ds.add(debounced((e) => calls.push(e))); emitter.fire(1); emitter.dispose(); @@ -1509,26 +1525,17 @@ suite('Event utils', () => { }); suite('chain2', () => { - let store: DisposableStore; let em: Emitter; let calls: number[]; - teardown(() => { - store.dispose(); - }); - - ensureNoDisposablesAreLeakedInTestSuite(); - setup(() => { - store = new DisposableStore(); - em = new Emitter(); - store.add(em); + em = ds.add(new Emitter()); calls = []; }); test('maps', () => { const ev = Event.chain(em.event, $ => $.map(v => v * 2)); - store.add(ev(v => calls.push(v))); + ds.add(ev(v => calls.push(v))); em.fire(1); em.fire(2); em.fire(3); @@ -1537,7 +1544,7 @@ suite('Event utils', () => { test('filters', () => { const ev = Event.chain(em.event, $ => $.filter(v => v % 2 === 0)); - store.add(ev(v => calls.push(v))); + ds.add(ev(v => calls.push(v))); em.fire(1); em.fire(2); em.fire(3); @@ -1547,7 +1554,7 @@ suite('Event utils', () => { test('reduces', () => { const ev = Event.chain(em.event, $ => $.reduce((acc, v) => acc + v, 0)); - store.add(ev(v => calls.push(v))); + ds.add(ev(v => calls.push(v))); em.fire(1); em.fire(2); em.fire(3); @@ -1557,7 +1564,7 @@ suite('Event utils', () => { test('latches', () => { const ev = Event.chain(em.event, $ => $.latch()); - store.add(ev(v => calls.push(v))); + ds.add(ev(v => calls.push(v))); em.fire(1); em.fire(1); em.fire(2); @@ -1576,7 +1583,7 @@ suite('Event utils', () => { .latch() ); - store.add(ev(v => calls.push(v))); + ds.add(ev(v => calls.push(v))); em.fire(1); em.fire(2); em.fire(3); diff --git a/src/vs/base/test/common/history.test.ts b/src/vs/base/test/common/history.test.ts index eae79bb5afa..39143609b88 100644 --- a/src/vs/base/test/common/history.test.ts +++ b/src/vs/base/test/common/history.test.ts @@ -184,6 +184,8 @@ suite('History Navigator', () => { suite('History Navigator 2', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + test('constructor', () => { const testObject = new HistoryNavigator2(['1', '2', '3', '4']); diff --git a/src/vs/base/test/common/lifecycle.test.ts b/src/vs/base/test/common/lifecycle.test.ts index 22e8ff77e0f..103009b5219 100644 --- a/src/vs/base/test/common/lifecycle.test.ts +++ b/src/vs/base/test/common/lifecycle.test.ts @@ -13,8 +13,9 @@ class Disposable implements IDisposable { dispose() { this.isDisposed = true; } } +// Leaks are allowed here since we test lifecycle stuff: +// eslint-disable-next-line local/code-ensure-no-disposables-leak-in-test suite('Lifecycle', () => { - test('dispose single disposable', () => { const disposable = new Disposable(); @@ -129,6 +130,8 @@ suite('Lifecycle', () => { }); suite('DisposableStore', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + test('dispose should call all child disposes even if a child throws on dispose', () => { const disposedValues = new Set(); @@ -221,6 +224,8 @@ suite('DisposableStore', () => { }); suite('Reference Collection', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + class Collection extends ReferenceCollection { private _count = 0; get count() { return this._count; } diff --git a/src/vs/editor/contrib/multicursor/test/browser/multicursor.test.ts b/src/vs/editor/contrib/multicursor/test/browser/multicursor.test.ts index 9d36f7ebfd8..64de23fce27 100644 --- a/src/vs/editor/contrib/multicursor/test/browser/multicursor.test.ts +++ b/src/vs/editor/contrib/multicursor/test/browser/multicursor.test.ts @@ -83,6 +83,8 @@ function fromRange(rng: Range): number[] { } suite('Multicursor selection', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + const serviceCollection = new ServiceCollection(); serviceCollection.set(IStorageService, new InMemoryStorageService()); diff --git a/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts b/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts index 8994ead0bf4..9e72c1c174a 100644 --- a/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts +++ b/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts @@ -348,6 +348,8 @@ suite('NativeExtensionsScanerService Test', () => { suite('ExtensionScannerInput', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + test('compare inputs - location', () => { const anInput = (location: URI, mtime: number | undefined) => new ExtensionScannerInput(location, mtime, undefined, undefined, false, undefined, ExtensionType.User, true, true, '1.1.1', undefined, undefined, true, undefined, {}); diff --git a/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts b/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts index ef65f7c57e5..eeeb2486c46 100644 --- a/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts +++ b/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts @@ -4,25 +4,25 @@ *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; -import { IFileService, FileChangeType, IFileChange, IFileSystemProviderWithFileReadWriteCapability, IStat, FileType, FileSystemProviderCapabilities, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileOpenOptions, IFileSystemProviderWithFileReadStreamCapability, IFileReadStreamOptions } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { FileUserDataProvider } from 'vs/platform/userData/common/fileUserDataProvider'; -import { dirname, isEqual, joinPath } from 'vs/base/common/resources'; import { VSBuffer } from 'vs/base/common/buffer'; -import { DisposableStore, IDisposable, Disposable } from 'vs/base/common/lifecycle'; -import { Emitter, Event } from 'vs/base/common/event'; -import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; -import { AbstractNativeEnvironmentService } from 'vs/platform/environment/common/environmentService'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import product from 'vs/platform/product/common/product'; -import { IUserDataProfilesService, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; import { CancellationToken } from 'vs/base/common/cancellation'; +import { Emitter, Event } from 'vs/base/common/event'; +import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; +import { Schemas } from 'vs/base/common/network'; +import { dirname, isEqual, joinPath } from 'vs/base/common/resources'; import { ReadableStreamEvents } from 'vs/base/common/stream'; +import { URI } from 'vs/base/common/uri'; +import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { AbstractNativeEnvironmentService } from 'vs/platform/environment/common/environmentService'; +import { FileService } from 'vs/platform/files/common/fileService'; +import { FileChangeType, FileSystemProviderCapabilities, FileType, IFileChange, IFileOpenOptions, IFileReadStreamOptions, IFileService, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, IStat } from 'vs/platform/files/common/files'; +import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; +import { NullLogService } from 'vs/platform/log/common/log'; +import product from 'vs/platform/product/common/product'; +import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; +import { FileUserDataProvider } from 'vs/platform/userData/common/fileUserDataProvider'; +import { IUserDataProfilesService, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; const ROOT = URI.file('tests').with({ scheme: 'vscode-tests' }); @@ -315,7 +315,7 @@ class TestFileSystemProvider implements IFileSystemProviderWithFileReadWriteCapa suite('FileUserDataProvider - Watching', () => { let testObject: FileUserDataProvider; - const disposables = new DisposableStore(); + const disposables = ensureNoDisposablesAreLeakedInTestSuite(); const rootFileResource = joinPath(ROOT, 'User'); const rootUserDataResource = rootFileResource.with({ scheme: Schemas.vscodeUserData }); @@ -332,8 +332,6 @@ suite('FileUserDataProvider - Watching', () => { testObject = disposables.add(new FileUserDataProvider(rootFileResource.scheme, new TestFileSystemProvider(fileEventEmitter.event), Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService())); }); - teardown(() => disposables.clear()); - test('file added change event', done => { disposables.add(testObject.watch(rootUserDataResource, { excludes: [], recursive: false })); const expected = joinPath(rootUserDataResource, 'settings.json'); @@ -427,7 +425,7 @@ suite('FileUserDataProvider - Watching', () => { test('event is not triggered if not watched', async () => { const target = joinPath(rootFileResource, 'settings.json'); let triggered = false; - testObject.onDidChangeFile(() => triggered = true); + disposables.add(testObject.onDidChangeFile(() => triggered = true)); fileEventEmitter.fire([{ resource: target, type: FileChangeType.DELETED @@ -441,7 +439,7 @@ suite('FileUserDataProvider - Watching', () => { disposables.add(testObject.watch(rootUserDataResource, { excludes: [], recursive: false })); const target = joinPath(dirname(rootFileResource), 'settings.json'); let triggered = false; - testObject.onDidChangeFile(() => triggered = true); + disposables.add(testObject.onDidChangeFile(() => triggered = true)); fileEventEmitter.fire([{ resource: target, type: FileChangeType.DELETED diff --git a/src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts b/src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts index bc90fb28b24..db83d62e163 100644 --- a/src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts +++ b/src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts @@ -417,6 +417,9 @@ suite('UserDataSyncRequestsSession', () => { async loadCertificates() { return []; } }; + + ensureNoDisposablesAreLeakedInTestSuite(); + test('too many requests are thrown when limit exceeded', async () => { const testObject = new RequestsSession(1, 500, requestService, new NullLogService()); await testObject.request('url', {}, CancellationToken.None); diff --git a/src/vs/workbench/api/test/browser/extHostDocumentData.test.ts b/src/vs/workbench/api/test/browser/extHostDocumentData.test.ts index b8912834f80..3f60f5ef898 100644 --- a/src/vs/workbench/api/test/browser/extHostDocumentData.test.ts +++ b/src/vs/workbench/api/test/browser/extHostDocumentData.test.ts @@ -441,6 +441,8 @@ suite('ExtHostDocumentData updates line mapping', () => { testLineMappingDirectionAfterEvents(lines, '\r\n', AssertDocumentLineMappingDirection.OffsetToPosition, e); } + ensureNoDisposablesAreLeakedInTestSuite(); + test('line mapping', () => { testLineMappingAfterEvents([ 'This is line one', diff --git a/src/vs/workbench/contrib/chat/test/common/chatModel.test.ts b/src/vs/workbench/contrib/chat/test/common/chatModel.test.ts index 33f0e1d0a06..60197332945 100644 --- a/src/vs/workbench/contrib/chat/test/common/chatModel.test.ts +++ b/src/vs/workbench/contrib/chat/test/common/chatModel.test.ts @@ -122,6 +122,8 @@ suite('ChatModel', () => { }); suite('Response', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + test('content, markdown', async () => { const response = new Response([]); response.updateContent({ content: 'text', kind: 'content' }); diff --git a/src/vs/workbench/contrib/notebook/test/browser/notebookCommon.test.ts b/src/vs/workbench/contrib/notebook/test/browser/notebookCommon.test.ts index 83d0164b035..476c7aa5327 100644 --- a/src/vs/workbench/contrib/notebook/test/browser/notebookCommon.test.ts +++ b/src/vs/workbench/contrib/notebook/test/browser/notebookCommon.test.ts @@ -305,6 +305,8 @@ suite('NotebookCommon', () => { suite('CellUri', function () { + ensureNoDisposablesAreLeakedInTestSuite(); + test('parse, generate (file-scheme)', function () { const nb = URI.parse('file:///bar/følder/file.nb'); @@ -348,6 +350,8 @@ suite('CellUri', function () { suite('CellRange', function () { + ensureNoDisposablesAreLeakedInTestSuite(); + test('Cell range to index', function () { assert.deepStrictEqual(cellRangesToIndexes([]), []); assert.deepStrictEqual(cellRangesToIndexes([{ start: 0, end: 0 }]), []); @@ -398,6 +402,7 @@ suite('CellRange', function () { }); suite('NotebookWorkingCopyTypeIdentifier', function () { + ensureNoDisposablesAreLeakedInTestSuite(); test('works', function () { const viewType = 'testViewType'; diff --git a/src/vs/workbench/contrib/notebook/test/browser/notebookSelection.test.ts b/src/vs/workbench/contrib/notebook/test/browser/notebookSelection.test.ts index b1aa61118fd..a45fd46828f 100644 --- a/src/vs/workbench/contrib/notebook/test/browser/notebookSelection.test.ts +++ b/src/vs/workbench/contrib/notebook/test/browser/notebookSelection.test.ts @@ -15,12 +15,15 @@ import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/uti import { DisposableStore } from 'vs/base/common/lifecycle'; suite('NotebookSelection', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + test('focus is never empty', function () { const selectionCollection = new NotebookCellSelectionCollection(); assert.deepStrictEqual(selectionCollection.focus, { start: 0, end: 0 }); selectionCollection.setState(null, [], true, 'model'); assert.deepStrictEqual(selectionCollection.focus, { start: 0, end: 0 }); + selectionCollection.dispose(); }); }); diff --git a/src/vs/workbench/services/label/test/browser/label.test.ts b/src/vs/workbench/services/label/test/browser/label.test.ts index 520ed89e35d..f5098c5df72 100644 --- a/src/vs/workbench/services/label/test/browser/label.test.ts +++ b/src/vs/workbench/services/label/test/browser/label.test.ts @@ -28,6 +28,8 @@ suite('URI Label', () => { labelService = new LabelService(TestEnvironmentService, new TestContextService(), new TestPathService(URI.file('/foobar')), new TestRemoteAgentService(), storageService, new TestLifecycleService()); }); + ensureNoDisposablesAreLeakedInTestSuite(); + test('custom scheme', function () { labelService.registerFormatter({ scheme: 'vscode',