order: 1 }); } <del> function terminalMenuRegistration() { // Manage MenuRegistry.appendMenuItem(MenuId.MenubarTerminalMenu, { group: '1_manage', command: { id: 'workbench.action.terminal.new', title: nls.localize({ key: 'miNewTerminal', comment: ['&& denotes a mnemonic'] }, "&&New Terminal") }, order: 1 }); MenuRegistry.appendMenuItem(MenuId.MenubarTerminalMenu, { group: '1_manage', command: { id: 'workbench.action.terminal.split', title: nls.localize({ key: 'miSplitTerminal', comment: ['&& denotes a mnemonic'] }, "&&Split Terminal") }, order: 2 }); MenuRegistry.appendMenuItem(MenuId.MenubarTerminalMenu, { group: '1_manage', command: { id: 'workbench.action.terminal.kill', title: nls.localize({ key: 'miKillTerminal', comment: ['&& denotes a mnemonic'] }, "&&Kill Terminal") }, order: 3 }); // Run MenuRegistry.appendMenuItem(MenuId.MenubarTerminalMenu, { group: '2_run', command: { id: 'workbench.action.terminal.clear', title: nls.localize({ key: 'miClear', comment: ['&& denotes a mnemonic'] }, "&&Clear") }, order: 1 }); MenuRegistry.appendMenuItem(MenuId.MenubarTerminalMenu, { group: '2_run', command: { id: 'workbench.action.terminal.runActiveFile', title: nls.localize({ key: 'miRunActiveFile', comment: ['&& denotes a mnemonic'] }, "Run &&Active File") }, order: 2 }); MenuRegistry.appendMenuItem(MenuId.MenubarTerminalMenu, { group: '2_run', command: { id: 'workbench.action.terminal.runSelectedFile', title: nls.localize({ key: 'miRunSelectedText', comment: ['&& denotes a mnemonic'] }, "Run &&Selected Text") }, order: 3 }); // Selection MenuRegistry.appendMenuItem(MenuId.MenubarTerminalMenu, { group: '3_selection', command: { id: 'workbench.action.terminal.scrollToPreviousCommand', title: nls.localize({ key: 'miScrollToPreviousCommand', comment: ['&& denotes a mnemonic'] }, "Scroll To Previous Command") }, order: 1 }); MenuRegistry.appendMenuItem(MenuId.MenubarTerminalMenu, { group: '3_selection', command: { id: 'workbench.action.terminal.scrollToNextCommand', title: nls.localize({ key: 'miScrollToNextCommand', comment: ['&& denotes a mnemonic'] }, "Scroll To Next Command") }, order: 2 }); MenuRegistry.appendMenuItem(MenuId.MenubarTerminalMenu, { group: '3_selection', command: { id: 'workbench.action.terminal.selectToPreviousCommand', title: nls.localize({ key: 'miSelectToPreviousCommand', comment: ['&& denotes a mnemonic'] }, "Select To Previous Command") }, order: 3 }); MenuRegistry.appendMenuItem(MenuId.MenubarTerminalMenu, { group: '3_selection', command: { id: 'workbench.action.terminal.selectToNextCommand', title: nls.localize({ key: 'miSelectToNextCommand', comment: ['&& denotes a mnemonic'] }, "Select To Next Command") }, order: 4 }); } </del>  No newline at end of file


const root = historyService.getLastActiveWorkspaceRoot(Schemas.file); if (root) { terminalService.openTerminal(root.fsPath); <ins> } else { // Opens current file's folder, if no folder is open in editor const activeFile = historyService.getLastActiveFile(); if (activeFile) { terminalService.openTerminal(paths.dirname(activeFile.fsPath)); } </ins> } } });


this._onPositionChanged(e); })); <ins> this.toUnhook.add(editor.onDidFocusEditorText((e) => { if (!this.workerRequest) { this._run(); } })); </ins> this.toUnhook.add(editor.onDidChangeModelContent((e) => { this._stopAll(); }));


private _layoutNow() { const layoutInfo = this.notebookEditor.getLayoutInfo(); const height = layoutInfo.height; <del> const scrollHeight = layoutInfo.scrollHeight; </del> <ins> const contentHeight = this._diffElementViewModels.map(view => view.layoutInfo.totalHeight).reduce((a, b) => a + b, 0); </ins> const ratio = browser.PixelRatio.value; this._domNode.setWidth(this.width); this._domNode.setHeight(height);


return createFileStat(resource); } }); <ins> instantiationService.stub(ILogService, new NullLogService()); </ins> resolver = instantiationService.createInstance(TerminalLinkResolver); validResources = [];


}); test('service validates backup workspaces on startup and cleans up', done => { // 1) backup workspace path does not exist service.registerWindowForBackups(1, false, null, fooFile.fsPath); service.registerWindowForBackups(2, false, null, barFile.fsPath);


const languageService = accessor.get(ILanguageService); const config = accessor.get(IConfigurationService); <del> const scrollBehavior = config.getValue(NotebookSetting.cellExecutionScroll); </del> <ins> const scrollBehavior = config.getValue(NotebookSetting.scrollToRevealCell); </ins> let focusOptions: IFocusNotebookCellOptions; if (scrollBehavior === 'none') { focusOptions = { skipReveal: true };


restricted: true, markdownDescription: localize('terminal.integrated.enableImages', "Enables image support in the terminal, this will only work when {0} is enabled. Both sixel and iTerm's inline image protocol are supported on Linux and macOS, Windows support will light up automatically when ConPTY passes through the sequences. Images will currently not be restored between window reloads/reconnects.", ``#${TerminalSettingId.GpuAcceleration}#``), type: 'boolean', <del> default: true </del> <ins> default: false </ins> }, } };


} ], run: async (c) => { <del> const instance = await c.service.getActiveOrCreateInstance(); await c.service.revealActiveTerminal(); </del> <ins> const instance = await c.service.activeInstance; </ins> if (!instance) { return; }


return this._dirty; } <ins> isUntitled() { return this.resource.scheme === Schemas.untitled; } </ins> async save(): Promise<boolean> { const tokenSource = new CancellationTokenSource(); await this.notebookService.save(this.notebook.viewType, this.notebook.uri, tokenSource.token);


import { IAsyncDataSource, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; import { createMatches, FuzzyScore } from 'vs/base/common/filters'; import { dispose, IDisposable } from 'vs/base/common/lifecycle'; <ins> import { basename } from 'vs/base/common/path'; </ins> import severity from 'vs/base/common/severity'; import { localize } from 'vs/nls'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';


assert.strictEqual(group2Events.unsticky[0].editorIndex, 1); }); <ins> function assertSelection(group: EditorGroupModel, activeEditor: EditorInput, selectedEditors: EditorInput[]): void { assert.strictEqual(group.activeEditor, activeEditor); assert.strictEqual(group.selectedEditors.length, selectedEditors.length); for (let i = 0; i < selectedEditors.length; i++) { assert.strictEqual(group.selectedEditors[i], selectedEditors[i]); } } test('editor selection: selectedEditors', () => { const group = createEditorGroupModel(); const activeEditor = group.activeEditor; const selectedEditors = group.selectedEditors; assert.strictEqual(activeEditor, null); assert.strictEqual(selectedEditors.length, 0); // active editor: input1, selection: [input1] const input1 = input(); group.openEditor(input1, { pinned: true, active: true, index: 0 }); assertSelection(group, input1, [input1]); // active editor: input3, selection: [input3] const input2 = input(); const input3 = input(); group.openEditor(input2, { pinned: true, active: true, index: 1 }); group.openEditor(input3, { pinned: true, active: true, index: 2 }); assertSelection(group, input3, [input3]); // active editor: input2, selection: [input1, input2] (in sequential order) group.setSelection(input2, [input1]); assertSelection(group, input2, [input1, input2]); }); test('editor selection: openEditor with inactive selection', () => { const group = createEditorGroupModel(); // active editor: input3, selection: [input3] const input1 = input(); const input2 = input(); const input3 = input(); group.openEditor(input1, { pinned: true, active: true, index: 0 }); group.openEditor(input2, { pinned: true, active: true, index: 1 }); group.openEditor(input3, { pinned: true, active: true, index: 2 }); // active editor: input2, selection: [input1, input2, input3] (in sequential order) group.openEditor(input2, { active: true, inactiveSelection: [input3, input1] }); assertSelection(group, input2, [input1, input2, input3]); // active editor: input1, selection: [input1, input3] (in sequential order) // test duplicate entries group.openEditor(input1, { active: true, inactiveSelection: [input3, input1, input3] }); assertSelection(group, input1, [input1, input3]); // active editor: input1, selection: [input1, input2] (in sequential order) // open new Editor as inactive with selection const input4 = input(); group.openEditor(input4, { pinned: true, active: false, inactiveSelection: [input2], index: 3 }); assertSelection(group, input1, [input1, input2]); // active editor: input5, selection: [input4, input5] (in sequential order) // open new Editor as active with selection const input5 = input(); group.openEditor(input5, { pinned: true, active: true, inactiveSelection: [input4], index: 4 }); assertSelection(group, input5, [input4, input5]); }); test('editor selection: closeEditor keeps selection', () => { const group = createEditorGroupModel(); // active editor: input3, selection: [input3] const input1 = input(); const input2 = input(); const input3 = input(); group.openEditor(input1, { pinned: true, active: true, index: 0 }); group.openEditor(input2, { pinned: true, active: true, index: 1 }); group.openEditor(input3, { pinned: true, active: true, index: 2 }); group.setSelection(input2, [input3, input1]); group.closeEditor(input3); assertSelection(group, input2, [input1, input2]); }); test('editor selection: setSeletion', () => { const group = createEditorGroupModel(); // active editor: input3, selection: [input3] const input1 = input(); const input2 = input(); const input3 = input(); group.openEditor(input1, { pinned: true, active: true, index: 0 }); group.openEditor(input2, { pinned: true, active: true, index: 1 }); group.openEditor(input3, { pinned: true, active: true, index: 2 }); // active editor: input2, selection: [input1, input2, input3] (in sequential order) group.setSelection(input2, [input3, input1]); assertSelection(group, input2, [input1, input2, input3]); // active editor: input3, selection: [input3] group.setSelection(input3, []); assertSelection(group, input3, [input3]); // active editor: input2, selection: [input1, input2] // test duplicate entries group.setSelection(input2, [input1, input2, input1]); assertSelection(group, input2, [input1, input2]); }); test('editor selection: isSelected', () => { const group = createEditorGroupModel(); // active editor: input3, selection: [input3] const input1 = input(); const input2 = input(); const input3 = input(); group.openEditor(input1, { pinned: true, active: true, index: 0 }); group.openEditor(input2, { pinned: true, active: true, index: 1 }); group.openEditor(input3, { pinned: true, active: true, index: 2 }); // active editor: input2, selection: [input1, input2, input3] (in sequential order) group.setSelection(input2, [input3, input1]); assert.strictEqual(group.isSelected(input1), true); assert.strictEqual(group.isSelected(input2), true); assert.strictEqual(group.isSelected(input3), true); // active editor: input3, selection: [input3] group.setSelection(input3, []); assert.strictEqual(group.isSelected(input1), false); assert.strictEqual(group.isSelected(input2), false); assert.strictEqual(group.isSelected(input3), true); // use index assert.strictEqual(group.isSelected(0), false); assert.strictEqual(group.isSelected(1), false); assert.strictEqual(group.isSelected(2), true); }); test('editor selection: select invalid editor', () => { const group = createEditorGroupModel(); const input1 = input(); const input2 = input(); group.openEditor(input1, { pinned: true, active: true, index: 0 }); group.setSelection(input2, [input1]); assert.strictEqual(group.activeEditor, input1); assert.strictEqual(group.selectedEditors.length, 1); assert.strictEqual(group.isSelected(input1), true); assert.strictEqual(group.isSelected(input1), true); assert.strictEqual(group.isSelected(input2), false); group.setSelection(input1, [input2]); assert.strictEqual(group.activeEditor, input1); assert.strictEqual(group.selectedEditors.length, 1); assert.strictEqual(group.isSelected(input1), true); assert.strictEqual(group.isSelected(input1), true); assert.strictEqual(group.isSelected(input2), false); }); </ins> ensureNoDisposablesAreLeakedInTestSuite(); });


return this._getMarkers(true).indexOf(marker) === -1; } <del> scrollToPreviousMark(scrollPosition: ScrollPosition = ScrollPosition.Middle, retainSelection: boolean = false, skipEmptyCommands?: boolean): void { </del> <ins> scrollToPreviousMark(scrollPosition: ScrollPosition = ScrollPosition.Middle, retainSelection: boolean = false, skipEmptyCommands: boolean = false): void { </ins> if (!this._terminal) { return; }


} public setAdditionalToggles(toggles: Toggle[] | undefined): void { <ins> // Short circuit if there are no toggles to update if (!this.additionalToggles.length && !toggles?.length) { return; } </ins> for (const currentToggle of this.additionalToggles) { currentToggle.domNode.remove(); }


return; } <ins> // When the command finishes and executed never fires the placeholder selector should be used. if (this._exitCode === undefined && command === undefined) { command = ''; } </ins> if ((command !== undefined && !command.startsWith('')) || this._handleCommandStartOptions?.ignoreCommandLine) { const buffer = this._terminal.buffer.active; const timestamp = Date.now();


.test-output-peek-tree { color: var(--vscode-editor-foreground); <ins> border-left: 1px solid var(--vscode-panelSection-border); </ins> } .test-output-peek-tree .monaco-list-row .monaco-action-bar,


const srcDocLines = originalLines.map((l) => getOrCreateHash(l.trim())); const tgtDocLines = modifiedLines.map((l) => getOrCreateHash(l.trim())); <del> const sequence1 = new SequenceFromIntArray(srcDocLines); const sequence2 = new SequenceFromIntArray(tgtDocLines); </del> <ins> const sequence1 = new LineSequence(srcDocLines, originalLines); const sequence2 = new LineSequence(tgtDocLines, modifiedLines); </ins> <del> const lineAlignments = (() => { </del> <ins> let lineAlignments = (() => { </ins> if (sequence1.length + sequence2.length < 1500) { // Use the improved algorithm for small files return this.dynamicProgrammingDiffing.compute(


public registerWindowForBackups(windowId: number, isEmptyWorkspace: boolean, backupFolder?: string, workspacePath?: string): void { // Generate a new folder if this is a new empty workspace if (isEmptyWorkspace && !backupFolder) { <del> backupFolder = Date.now().toString(); </del> <ins> backupFolder = this.getRandomEmptyWorkspaceId(); </ins> } this.mapWindowToBackupFolder[windowId] = isEmptyWorkspace ? backupFolder : this.getWorkspaceHash(workspacePath); this.pushBackupPathsSync(isEmptyWorkspace ? backupFolder : workspacePath, isEmptyWorkspace); } <del> protected pushBackupPathsSync(workspaceIdentifier: string, isEmptyWorkspace: boolean): void { </del> <ins> private getRandomEmptyWorkspaceId(): string { return (Date.now() + Math.round(Math.random() * 1000)).toString(); } protected pushBackupPathsSync(workspaceIdentifier: string, isEmptyWorkspace: boolean): string { </ins> if (!isEmptyWorkspace) { workspaceIdentifier = this.sanitizePath(workspaceIdentifier); }


], "extensions": [ ".gitignore_global", <del> ".gitignore" </del> <ins> ".gitignore", ".git-blame-ignore-revs" </ins> ], "configuration": "./languages/ignore.language-configuration.json" }


if (searchView) { const viewer = searchView.getControl(); const selected = viewer.getFocus()[0]; <del> await viewer.expand(selected, true); </del> <ins> await forcedExpandRecursively(viewer, selected); </ins> } }


return this._scrollBeyondLastLine && !this.isEmbedded; } <del> layout(dimension: DOM.Dimension, shadowElement?: HTMLElement, position?: DOM.IDomPosition): void { </del> <ins> layout(dimension: DOM.Dimension, shadowElement?: HTMLElement, _position?: DOM.IDomPosition): void { </ins> if (!shadowElement && this._shadowElementViewInfo === null) { this._dimension = dimension; return;


/** * A chat request handler is a callback that will be invoked when a request is made to a chat participant. */ <del> export type ChatRequestHandler = (request: ChatRequest, context: ChatContext, response: ChatResponseStream, token: CancellationToken) => ProviderResult<ChatResult>; </del> <ins> export type ChatRequestHandler = (request: ChatRequest, context: ChatContext, response: ChatResponseStream, token: CancellationToken) => ProviderResult<ChatResult | void>; </ins> /** * A chat participant can be invoked by the user in a chat session, using the `@` prefix. When it is invoked, it handles the chat request and is solely


override prepareLayout(): void { if (this.currentElement?.cellKind === CellKind.Code && this._commentThreadWidget) { <del> this.currentElement.commentHeight = dom.getClientArea(this._commentThreadWidget.container).height; </del> <ins> this.currentElement.commentHeight = this._calculateCommentThreadHeight(this._commentThreadWidget.getDimensions().height); </ins> } }


this._onDidChange.dispose(); this._dispoables.dispose(); this._entriesDisposables.dispose(); <ins> this._outlineProvider?.dispose(); </ins> } }


"vscode-proxy-agent": "^0.12.0", "vscode-regexpp": "^3.1.0", "vscode-textmate": "7.0.1", <del> "xterm": "4.19.0-beta.60", "xterm-addon-search": "0.9.0-beta.39", "xterm-addon-serialize": "0.7.0-beta.13", </del> <ins> "xterm": "4.19.0-beta.67", "xterm-addon-search": "0.9.0-beta.41", "xterm-addon-serialize": "0.7.0-beta.15", </ins> "xterm-addon-unicode11": "0.4.0-beta.3", <del> "xterm-addon-webgl": "0.12.0-beta.41", "xterm-headless": "4.19.0-beta.60", </del> <ins> "xterm-addon-webgl": "0.12.0-beta.43", "xterm-headless": "4.19.0-beta.67", </ins> "yauzl": "^2.9.2", "yazl": "^2.4.3" },


} this.focus(); <ins> this._onWillPaste.fire(currentText); </ins> this.xterm.raw.paste(currentText); <ins> this._onDidPaste.fire(currentText); </ins> } async sendText(text: string, shouldExecute: boolean, bracketedPasteMode?: boolean): Promise<void> {


this._editorWidget.updateOptions({ ariaLabel: provider.options.ariaLabel }); this._editorWidget.focus(); }); <del> return toDisposable(() => provider.onClose()); </del> <ins> return toDisposable(() => { }); </ins> } private _layout(): void {


private readonly disposables: Disposable[] = []; constructor(private readonly repository: Repository) { <del> this.disposables.push(window.registerFileDecorationProvider(this)); repository.historyProvider.onDidChangeCurrentHistoryItemGroup(this.onDidChangeCurrentHistoryItemGroup, this, this.disposables); </del> <ins> this.disposables.push( window.registerFileDecorationProvider(this), runAndSubscribeEvent(repository.historyProvider.onDidChangeCurrentHistoryItemGroup, () => this.onDidChangeCurrentHistoryItemGroup()) ); </ins> } private async onDidChangeCurrentHistoryItemGroup(): Promise<void> {


@IExplorerService explorerService: IExplorerService, @IUriIdentityService uriIdentityService: IUriIdentityService, @IProductService private readonly productService: IProductService, <del> @IPathService pathService: IPathService </del> <ins> @IPathService pathService: IPathService, @IConfigurationService configurationService: IConfigurationService, </ins> ) { <del> super(telemetryService, fileService, paneCompositeService, instantiationService, contextService, storageService, textResourceConfigurationService, editorService, themeService, editorGroupService, textFileService, explorerService, uriIdentityService, pathService); </del> <ins> super(telemetryService, fileService, paneCompositeService, instantiationService, contextService, storageService, textResourceConfigurationService, editorService, themeService, editorGroupService, textFileService, explorerService, uriIdentityService, pathService, configurationService); </ins> } protected override handleSetInputError(error: Error, input: FileEditorInput, options: ITextEditorOptions | undefined): Promise<void> {


setGroup(group: IEditorGroup | undefined) { this._group = group; <ins> if (group?.scopedContextKeyService) { this._terminalInstance?.setParentContextKeyService(group.scopedContextKeyService); } </ins> } get group(): IEditorGroup | undefined {


this._register(dom.addStandardDisposableListener(this._contentDomNode.domNode, 'keydown', (e) => { if (e.keyCode === KeyCode.Escape) { this.hide(); <ins> instance.focus(); </ins> } })); this._register(instance.onDidFocus(() => this.hide()));


confirmDeleteRunningCell: 'notebook.confirmDeleteRunningCell', remoteSaving: 'notebook.experimental.remoteSave', gotoSymbolsAllSymbols: 'notebook.gotoSymbols.showAllSymbols', <del> cellExecutionScroll: 'notebook.revealNextOnExecuteBehavior' </del> <ins> scrollToRevealCell: 'notebook.scrolling.revealCellBehavior', anchorToFocusedCell: 'notebook.scrolling.anchorToFocusedCell' </ins> } as const; export const enum CellStatusbarAlignment {


} private writeNotice(terminal: IDetachedTerminalInstance, str: string) { <del> terminal.xterm.write(`x1b[2m${str}x1b[0m`); </del> <ins> terminal.xterm.write(formatMessageForTerminal(str)); </ins> } private attachTerminalToDom(terminal: IDetachedTerminalInstance) {


margin-top: -1px; } <ins> .codicon-debug-breakpoint.codicon-debug-stackframe-focused::after, .codicon-debug-breakpoint.codicon-debug-stackframe::after { content: 'eb8a'; position: absolute; } </ins> .monaco-editor .debug-top-stack-frame-column { font: normal normal normal 16px/1 codicon; text-rendering: auto;


*  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ <ins> import { VSBuffer } from 'vs/base/common/buffer'; </ins> import { MarshalledObject } from 'vs/base/common/marshalling'; import { MarshalledId } from 'vs/base/common/marshallingIds'; import { URI, UriComponents } from 'vs/base/common/uri';


Object.keys(this._sessionRestoredRecommendations).forEach(x => output[x.toLowerCase()] = { reasonId: this._sessionRestoredRecommendations[x].reasonId, <del> reasonText: localize('restoredRecommendation', "You will receive recommendations for this extension in your future VS Code sessions.") </del> <ins> reasonText: this._sessionRestoredRecommendations[x].reasonText </ins> }); return output;


import { NotebookLayoutInfo } from 'vs/workbench/contrib/notebook/browser/notebookViewEvents'; import { ICellExecutionStateChangedEvent } from 'vs/workbench/contrib/notebook/common/notebookExecutionStateService'; <ins> export const outputDisplayLimit = 500; </ins> export class CodeCellViewModel extends BaseCellViewModel implements ICellViewModel { readonly cellKind = CellKind.Code;


import { Webview } from 'vs/workbench/contrib/webview/browser/webview'; import { ICompositeCodeEditor, IEditor } from 'vs/editor/common/editorCommon'; import { NotImplementedError } from 'vs/base/common/errors'; <ins> import { Schemas } from 'vs/base/common/network'; </ins> export class TestCell extends NotebookCellTextModel { constructor(


} } } <ins> getItems(): CodeLensItem[] { return this._data; } </ins> } registerThemingParticipant((theme, collector) => {


import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { Orientation, Sizing, SplitView } from 'vs/base/browser/ui/splitview/splitview'; import { Color } from 'vs/base/common/color'; <ins> import { ILanguageService } from 'vs/editor/common/languages/language'; </ins> export const enum SettingsFocusContext { Search,


private async addOrUpdateAccount(providerId: string, account: AuthenticationSessionAccount): Promise<void> { let accounts = this.groupedAccounts.get(providerId); <del> if (accounts) { const existingAccount = accounts.find(a => a.id === account.id); if (existingAccount) { // Update the label if it has changed if (existingAccount.label !== account.label) { existingAccount.label = account.label; } return; } } else { </del> <ins> if (!accounts) { </ins> accounts = []; this.groupedAccounts.set(providerId, accounts); } const sessionFromEmbedder = await this.sessionFromEmbedder.value; <del> // If the session stored from the embedder allows sign out, then we can treat it and all others as sign out-able let canSignOut = !!sessionFromEmbedder?.canSignOut; if (!canSignOut) { if (sessionFromEmbedder?.id) { const sessions = (await this.authenticationService.getSessions(providerId)).filter(s => s.account.id === account.id); canSignOut = !sessions.some(s => s.id === sessionFromEmbedder.id); } else { // The default if we don't have a session from the embedder is to allow sign out canSignOut = true; } </del> <ins> let canSignOut = true; if ( sessionFromEmbedder												// if we have a session from the embedder && !sessionFromEmbedder.canSignOut								// and that session says we can't sign out && (await this.authenticationService.getSessions(providerId))	// and that session is associated with the account we are adding/updating .some(s => s.id === sessionFromEmbedder.id && s.account.id === account.id ) ) { canSignOut = false; </ins> } <del> accounts.push({ ...account, canSignOut }); </del> <ins> const existingAccount = accounts.find(a => a.label === account.label); if (existingAccount) { // if we have an existing account and we discover that we // can't sign out of it, update the account to mark it as "can't sign out" if (!canSignOut) { existingAccount.canSignOut = canSignOut; } } else { accounts.push({ ...account, canSignOut }); } </ins> } private removeAccount(providerId: string, account: AuthenticationSessionAccount): void {


let message = localize('extensionEnvironmentContributionInfoActive', "The following extensions have contributed to this terminal's environment:"); message += 'n'; for (const ext of extSet) { <del> message += `n- `${ext}``; </del> <ins> message += `n- `${getExtensionName(ext, this._extensionService)}``; </ins> } return message; }


justify-content: center; align-items: center; font-size: 14px; <del> line-height: 16px; </del> border-radius: 8px; }


this.render(previousRenderRange, e.scrollTop, e.height, e.scrollLeft, e.scrollWidth); if (this.supportDynamicHeights) { <del> this._rerender(e.scrollTop, e.height); </del> <ins> // Don't update scrollTop from within an scroll event // so we don't break smooth scrolling. #104144 this._rerender(e.scrollTop, e.height, false); </ins> } } catch (err) { console.error('Got bad scroll event:', e);


mkdir -p %{buildroot}/usr/share/pixmaps cp -r usr/share/@@NAME@@/* %{buildroot}/usr/share/@@NAME@@ cp -r usr/share/applications/@@NAME@@.desktop %{buildroot}/usr/share/applications <ins> cp -r usr/share/applications/@@NAME@@-url-handler.desktop %{buildroot}/usr/share/applications </ins> cp -r usr/share/pixmaps/@@NAME@@.png %{buildroot}/usr/share/pixmaps %post


toggled: { condition: PanelVisibleContext, title: localize('toggle panel', "Panel"), <del> mnemonicTitle: localize('toggle panel mnemonic', "&&Panel"), </del> <ins> mnemonicTitle: localize({ key: 'toggle panel mnemonic', comment: ['&& denotes a mnemonic'] }, "&&Panel"), </ins> }, f1: true, category: Categories.View,


} extensionsToInstall.push({ extension: gallery, <del> options: { ...installOptions, installGivenVersion: !!version, isApplicationScoped: installedExtension?.isApplicationScoped }, </del> <ins> options: { ...installOptions, installGivenVersion: !!version, isApplicationScoped: installOptions.isApplicationScoped || installedExtension?.isApplicationScoped }, </ins> }); }));


return <OpenEditorsView>this.getView(OpenEditorsView.ID); } <del> override setVisible(visible: boolean): void { this.viewletVisibleContextKey.set(visible); super.setVisible(visible); } </del> override focus(): void { const explorerView = this.getView(VIEW_ID); if (explorerView && this.panes.every(p => !p.isExpanded())) {


/** As xterm reads from DOM, space in that case is nonbreaking char ASCII code - 160, replacing space with nonBreakningSpace or space ASCII code - 32. */ export const lineAndColumnClause = [ <ins> '(([^:s()<>'"[]]*) ((d+))(:(d+)))', // (file path) 336:9 [see #140780] </ins> '((S*)['"], line ((d+)( column (d+))?))', // "(file path)", line 45 [see #40468] '((S*)['"],((d+)(:(d+))?))', // "(file path)",45 [see #78205] '((S*) on line ((d+)(, column (d+))?))', // (file path) on line 8, column 13


}); test('get and forEach should work (scope)', () => { <del> // TODO: Remove cast once `envCollectionWorkspace` API is finalized. const collection = extensionContext.environmentVariableCollection as GlobalEnvironmentVariableCollection; </del> <ins> const collection = extensionContext.environmentVariableCollection; </ins> disposables.push({ dispose: () => collection.clear() }); const scope = { workspaceFolder: { uri: Uri.file('workspace1'), name: 'workspace1', index: 0 } }; const scopedCollection = collection.getScoped(scope);


this.feedbackForm = <HTMLFormElement>$form.getHTMLElement(); <del> $('h2.title').text(nls.localize("label.sendASmile", "Tweet us your feedback")).appendTo($form); </del> <ins> $('h2.title').text(nls.localize("label.sendASmile", "Tweet us your feedback.")).appendTo($form); </ins> this.invoke($('div.cancel').attr('tabindex', '0'), () => { this.hide();


private _focusedStickyElementIndex: number = -1; private _enabled = false; private _focused = false; <ins> private _positionRevealed = false; private _onMouseDown = false; </ins> constructor( private readonly _editor: ICodeEditor,


} } <del> for (const [profileName, value] of Object.entries(configProfiles || {})) { </del> <ins> applyConfigProfilesToMap(configProfiles, detectedProfiles); return await transformToTerminalProfiles(detectedProfiles.entries(), statProvider, logService, variableResolver, workspaceFolder); } function applyConfigProfilesToMap(configProfiles: { [key: string]: ITerminalProfileObject } | undefined, profilesMap: Map<string, ITerminalProfileObject>) { if (!configProfiles) { return; } for (const [profileName, value] of Object.entries(configProfiles)) { </ins> if (value === null) { <del> detectedProfiles.delete(profileName); </del> <ins> profilesMap.delete(profileName); </ins> } else { <del> detectedProfiles.set(profileName, value); </del> <ins> profilesMap.set(profileName, value); </ins> } } <del> return await transformToTerminalProfiles(detectedProfiles.entries(), statProvider, logService, variableResolver, workspaceFolder); </del> } async function validateProfilePaths(label: string, potentialPaths: string[], statProvider: IStatProvider, args?: string[] | string, logService?: ILogService): Promise<ITerminalProfile | undefined> {


width: 0, height: 0 }, <ins> enableDropIntoEditor: true, </ins> }, { contributions: this.notebookEditor.creationOptions.cellEditorContributions });


this.settings[LoadedScriptsView.MEMENTO] = !this.isExpanded(); super.shutdown(); } <ins> dispose(): void { super.dispose(); this.tree = undefined; } </ins> } // A good example of data source, renderers, action providers and accessibilty providers can be found in the callStackView.ts


run: () => this.toggleViewVisibility(viewDescriptor.id) })); <ins> if (result.length && viewToggleActions.length) { result.push(new Separator()); } </ins> result.push(...viewToggleActions); const parentActions = this.getViewletContextMenuActions(); <del> if (viewToggleActions.length && parentActions.length) { </del> <ins> if (result.length && parentActions.length) { </ins> result.push(new Separator()); } result.push(...parentActions); return result; }


if (extensions.length) { extensions = await this.checkAdditionalBuiltinExtensions(extensions); } <ins> if (extensions.length) { this.logService.info('Found additional builtin gallery extensions in env', extensions); } if (extensionLocations.length) { this.logService.info('Found additional builtin location extensions in env', extensionLocations.map(e => e.toString())); } </ins> return { extensions, extensionsToMigrate, extensionLocations }; })(); }


this._allMenuItems = items; this._list.splice(0, this._list.length, this._allMenuItems); <del> this.focusNext(); </del> <ins> if (this._list.length) { this.focusNext(); } </ins> } private focusCondition(element: IListMenuItem<IActionItem>): boolean {


margin-left: 6px; } <del> .extension-list-item .monaco-action-bar > .actions-container > .action-item.action-dropdown-item > .extension-action.label { </del> <ins> .extension-list-item .monaco-action-bar > .actions-container > .action-item.action-dropdown-item:not(.empty) > .extension-action.label { </ins> border-right-width: 0; }


return Promise.all(sessions.map(s => disconnect ? s.disconnect(undefined, suspend) : s.terminate())); } <del> private variableSubstitutionQueue = new Queue<IConfig | undefined>(); </del> private async substituteVariables(launch: ILaunch | undefined, config: IConfig): Promise<IConfig | undefined> { const dbg = this.adapterManager.getDebugger(config.type); if (dbg) {


return this.ui.keyMods; } <del> get valueSelection() { const selection = this.ui.inputBox.getSelection(); if (!selection) { return undefined; } return [selection.start, selection.end]; } set valueSelection(valueSelection: Readonly<[number, number]> | undefined) { </del> <ins> set valueSelection(valueSelection: Readonly<[number, number]>) { </ins> this._valueSelection = valueSelection; this.valueSelectionUpdated = true; this.update();


while (true) { // Details of the id can be found here https://jupyter.org/enhancement-proposals/62-cell-id/cell-id.html#adding-an-id-field, // & here https://jupyter.org/enhancement-proposals/62-cell-id/cell-id.html#updating-older-formats <del> const id = uuid().replace(/-/g, '').substring(0, 8); </del> <ins> const id = generateUuid().replace(/-/g, '').substring(0, 8); </ins> let duplicate = false; for (let index = 0; index < notebook.cellCount; index++) { const cell = notebook.cellAt(index);


// https://github.com/microsoft/vscode/issues/59921 /** <del> * The parameters of a query for text search. </del> <ins> * The parameters of a query for text search. All optional booleans default to `false`. </ins> */ export interface TextSearchQueryNew { /** * The text pattern to search for. <ins> * * If explicitly contains a newline character (`n`), the default search behavior * will automatically enable {@link isMultiline}. </ins> */ pattern: string; /** * Whether or not `pattern` should match multiple lines of text. <ins> * * If using the default search provider, this will be interpreted as `true` if * `pattern` contains a newline character (`n`). </ins> */ isMultiline?: boolean; /** * Whether or not `pattern` should be interpreted as a regular expression. <ins> * * If using the default search provider, this will be interpreted case-insensitively * if {@link isCaseSensitive} is `false` or not set. </ins> */ isRegExp?: boolean; /** * Whether or not the search should be case-sensitive. <ins> * * If using the default search provider, this can be affected by the `search.smartCase` setting. * See the setting description for more information. </ins> */ isCaseSensitive?: boolean; /** * Whether or not to search for whole word matches only. <ins> * * If enabled, the default search provider will check for boundary characters * (regex pattern `b`) surrounding the {@link pattern} to see whether something * is a word match. </ins> */ isWordMatch?: boolean; }


const extension = await this.toScannedExtension(webExtension, true); if (extension.isValid || !scanOptions?.skipInvalidExtensions) { result.push(extension); <ins> } else { this.logService.info(`Skipping invalid additional builtin extension ${webExtension.identifier.id}`); </ins> } } catch (error) { this.logService.info(`Error while fetching the additional builtin extension ${location.toString()}.`, getErrorMessage(error));


integrity sha512-ynEGytvgTb6HVSUwPJIAZgiHQmPCx8bZ8w5um5Lz+q5DjP0Zj8wTFhQpyg8xaMvefDytw2+HH5yzqS+FhsR28A== vscode-languageserver-types@^3.15.1: <del> version "3.16.0" resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== vscode-nls@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== </del> <ins> version "3.17.2" resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2" integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== </ins> vscode-uri@^2.1.2: version "2.1.2"


let match = url.match(SshProtocolMatcher); if (match) { return stripLowLevelDomains(match[2]); <ins> } else { return null; </ins> } } try {


.extension-list-item > .details > .description { padding-right: 11px; <ins> line-height: normal; </ins> color: var(--vscode-descriptionForeground); }


return; } <ins> if (e.browserEvent.defaultPrevented) { return; } </ins> const focus = this.list.getFocus(); this.list.setSelection(focus, e.browserEvent); <ins> e.browserEvent.preventDefault(); </ins> } private changeSelection(e: IListMouseEvent<T> | IListTouchEvent<T>): void {


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'; <del> import { ChatAgentLocation } from 'vs/workbench/contrib/chat/common/chatAgents'; import { CONTEXT_CHAT_ENABLED, CONTEXT_CHAT_INPUT_CURSOR_AT_TOP, CONTEXT_CHAT_LOCATION, CONTEXT_IN_CHAT_INPUT, CONTEXT_IN_CHAT_SESSION } from 'vs/workbench/contrib/chat/common/chatContextKeys'; </del> <ins> import { CONTEXT_CHAT_ENABLED, CONTEXT_CHAT_INPUT_CURSOR_AT_TOP, CONTEXT_IN_CHAT_INPUT, CONTEXT_IN_CHAT_SESSION } from 'vs/workbench/contrib/chat/common/chatContextKeys'; </ins> import { IChatDetail, IChatService } from 'vs/workbench/contrib/chat/common/chatService'; import { IChatRequestViewModel, IChatResponseViewModel, isRequestVM } from 'vs/workbench/contrib/chat/common/chatViewModel'; import { IChatWidgetHistoryService } from 'vs/workbench/contrib/chat/common/chatWidgetHistoryService';


private _startBarrier: Barrier; private _persistentTerminalId: number; <ins> public get id(): number { return this._persistentTerminalId; } </ins> private _inReplay = false; constructor( <del> readonly id: number, </del> <ins> private readonly _instanceId: number, </ins> readonly shouldPersist: boolean, private readonly _shellLaunchConfig: IShellLaunchConfig, private readonly _activeWorkspaceRootUri: URI | undefined,


if (OpenPrivacyStatementUrlAction.AVAILABE) { registerAction2(OpenPrivacyStatementUrlAction); } <ins> registerAction2(GetStartedWithAccessibilityFeatures); </ins>


export const statesInOrder = Object.keys(statePriority).map(s => Number(s) as TestResultState).sort(cmpPriority); export const isRunningState = (s: TestResultState) => s === TestResultState.Queued || s === TestResultState.Running; <ins> /** * Some states are considered terminal; once these are set for a given test run, they * are not reset back to a non-terminal state, or to a terminal state with lower * priority. */ export const terminalStatePriorities: { [key in TestResultState]?: number } = { [TestResultState.Passed]: 0, [TestResultState.Skipped]: 1, [TestResultState.Failed]: 2, [TestResultState.Errored]: 3, }; </ins>


renderedWordCount: wordCountResult.actualWordCount, lastRenderTime: Date.now(), isFullyRendered: wordCountResult.isFullString, <ins> originalMarkdown: part.content, </ins> }; wordCountResults[index] = wordCountResult; } else if (!renderedPart.isFullyRendered && !wordCountResult) {


constructor(private repository: Repository) { this.disposables.push( window.registerFileDecorationProvider(this), <del> repository.onDidRunGitStatus(this.onDidRunGitStatus, this) </del> <ins> runAndSubscribeEvent(repository.onDidRunGitStatus, () => this.onDidRunGitStatus()) </ins> ); }


const message = localize('confirm force delete branch', "The branch '{0}' is not fully merged. Delete anyway?", name); const yes = localize('delete branch', "Delete Branch"); <del> const pick = await window.showWarningMessage(message, yes); </del> <ins> const pick = await window.showWarningMessage(message, { modal: true }, yes); </ins> if (pick === yes) { await run(true);


private async updateCustomBuiltinExtensionsCache(): Promise<IWebExtension[]> { if (!this._updateCustomBuiltinExtensionsCachePromise) { this._updateCustomBuiltinExtensionsCachePromise = (async () => { <del> // Clear Cache await this.writeCustomBuiltinExtensionsCache(() => []); const { extensions } = await this.readCustomBuiltinExtensionsInfoFromEnv(); if (!extensions.length) { return []; } const galleryExtensionsMap = await this.getExtensionsWithDependenciesAndPackedExtensions(extensions); const missingExtensions = extensions.filter(({ id }) => !galleryExtensionsMap.has(id.toLowerCase())); if (missingExtensions.length) { this.logService.info('Skipping the additional builtin extensions because their compatible versions are not found.', missingExtensions); } </del> <ins> this.logService.info('Updating additional builtin extensions cache'); </ins> const webExtensions: IWebExtension[] = []; <del> await Promise.all([...galleryExtensionsMap.values()].map(async gallery => { try { webExtensions.push(await this.toWebExtensionFromGallery(gallery, { isPreReleaseVersion: gallery.properties.isPreReleaseVersion, preRelease: gallery.properties.isPreReleaseVersion, isBuiltin: true })); } catch (error) { this.logService.info(`Ignoring additional builtin extension ${gallery.identifier.id} because there is an error while converting it into web extension`, getErrorMessage(error)); </del> <ins> const { extensions } = await this.readCustomBuiltinExtensionsInfoFromEnv(); if (extensions.length) { const galleryExtensionsMap = await this.getExtensionsWithDependenciesAndPackedExtensions(extensions); const missingExtensions = extensions.filter(({ id }) => !galleryExtensionsMap.has(id.toLowerCase())); if (missingExtensions.length) { this.logService.info('Skipping the additional builtin extensions because their compatible versions are not found.', missingExtensions); </ins> } <del> })); </del> <ins> await Promise.all([...galleryExtensionsMap.values()].map(async gallery => { try { webExtensions.push(await this.toWebExtensionFromGallery(gallery, { isPreReleaseVersion: gallery.properties.isPreReleaseVersion, preRelease: gallery.properties.isPreReleaseVersion, isBuiltin: true })); } catch (error) { this.logService.info(`Ignoring additional builtin extension ${gallery.identifier.id} because there is an error while converting it into web extension`, getErrorMessage(error)); } })); } </ins> await this.writeCustomBuiltinExtensionsCache(() => webExtensions); return webExtensions; })();


import { DisassemblyViewInput } from 'vs/workbench/contrib/debug/common/disassemblyViewInput'; import { DebugLifecycle } from 'vs/workbench/contrib/debug/common/debugLifecycle'; import { Icon } from 'vs/platform/action/common/action'; <ins> import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; </ins> const debugCategory = nls.localize('debugCategory', "Debug"); registerColors();


import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorAction, EditorCommand, EditorContributionInstantiation, MultiEditorAction, registerEditorAction, registerEditorCommand, registerEditorContribution, registerMultiEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; <ins> import { overviewRulerRangeHighlight } from 'vs/editor/common/core/editorColorRegistry'; import { IRange } from 'vs/editor/common/core/range'; </ins> import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; <ins> import { OverviewRulerLane } from 'vs/editor/common/model'; </ins> import { CONTEXT_FIND_INPUT_FOCUSED, CONTEXT_FIND_WIDGET_VISIBLE, CONTEXT_REPLACE_INPUT_FOCUSED, FindModelBoundToEditorModel, FIND_IDS, ToggleCaseSensitiveKeybinding, TogglePreserveCaseKeybinding, ToggleRegexKeybinding, ToggleSearchScopeKeybinding, ToggleWholeWordKeybinding } from 'vs/editor/contrib/find/browser/findModel'; import { FindOptionsWidget } from 'vs/editor/contrib/find/browser/findOptionsWidget'; import { FindReplaceState, FindReplaceStateChangedEvent, INewFindReplaceState } from 'vs/editor/contrib/find/browser/findState';


public deregisterTokenType(id: string): void { delete this.tokenTypeById[id]; delete this.tokenStylingSchema.properties[id]; <del> this.typeHierarchy = {}; </del> <ins> this.typeHierarchy = Object.create(null); </ins> } public deregisterTokenModifier(id: string): void {


'default': 'alwaysExpand' }, [OutlineConfigKeys.problemsEnabled]: { <del> 'markdownDescription': localize('outline.showProblem', "Show errors and warnings on Outline elements. Overwritten by `#problems.visibility#` when `{0}` is off.", `problems.visibility`), </del> <ins> 'markdownDescription': localize('outline.showProblem', "Show errors and warnings on Outline elements. Overwritten by `#problems.visibility#` when it is off."), </ins> 'type': 'boolean', 'default': true }, [OutlineConfigKeys.problemsColors]: { <del> 'markdownDescription': localize('outline.problem.colors', "Use colors for errors and warnings on Outline elements. Overwritten by `#problems.visibility#` when `{0}` is off.", `problems.visibility`), </del> <ins> 'markdownDescription': localize('outline.problem.colors', "Use colors for errors and warnings on Outline elements. Overwritten by `#problems.visibility#` when it is off."), </ins> 'type': 'boolean', 'default': true }, [OutlineConfigKeys.problemsBadges]: { <del> 'markdownDescription': localize('outline.problems.badges', "Use badges for errors and warnings on Outline elements. Overwritten by `#problems.visibility#` when `{0}` is off.", `problems.visibility`), </del> <ins> 'markdownDescription': localize('outline.problems.badges', "Use badges for errors and warnings on Outline elements. Overwritten by `#problems.visibility#` when it is off."), </ins> 'type': 'boolean', 'default': true },


); })(); <ins> lineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments); </ins> const alignments: RangeMapping[] = []; const scanForWhitespaceChanges = (equalLinesCount: number) => {


import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ILogService } from 'vs/platform/log/common/log'; import { promiseWithResolvers } from 'vs/base/common/async'; <ins> import { shouldUseEnvironmentVariableCollection } from 'vs/platform/terminal/common/terminalEnvironment'; </ins> class CustomVariableResolver extends AbstractVariableResolverService { constructor(


const extension = await this.toScannedExtension(webExtension, false); if (extension.isValid || !scanOptions?.skipInvalidExtensions) { result.set(extension.identifier.id.toLowerCase(), extension); <ins> } else { this.logService.info(`Skipping invalid installed extension ${webExtension.identifier.id}`); </ins> } } return [...result.values()];


if (!(node instanceof ResolvableTreeItem) || !node.hasResolve) { if (resource && !node.tooltip) { return undefined; <del> } else if (!node.tooltip) { </del> <ins> } else if (node.tooltip === undefined) { </ins> return label; } else if (!isString(node.tooltip)) { return { markdown: node.tooltip, markdownNotSupportedFallback: resource ? undefined : renderMarkdownAsPlaintext(node.tooltip) }; // Passing undefined as the fallback for a resource falls back to the old native hover <del> } else { </del> <ins> } else if (node.tooltip !== '') { </ins> return node.tooltip; <ins> } else { return undefined; </ins> } }


type: 'boolean', default: false, description: nls.localize('search.usePCRE2', "Whether to use the PCRE2 regex engine in text search. This enables using some advanced regex features like lookbehind and backreferences. However, not all PCRE2 features are supported - only features that are also supported by JavaScript.") <ins> }, 'search.actionsPosition': { type: 'string', enum: ['auto', 'right'], default: 'auto', description: nls.localize('search.actionsPosition', "Controls whether to show actions at the end of match or always aligned to the right in wide panels.") </ins> } } });


*--------------------------------------------------------------------------------------------*/ import 'vs/css!./media/welcomeDialog'; <del> import { IInstantiationService, createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { ThemeIcon } from 'vs/base/common/themables'; </del> <ins> import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; </ins> import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; <del> import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { Dialog } from 'vs/base/browser/ui/dialog/dialog'; import { defaultButtonStyles, defaultCheckboxStyles, defaultDialogStyles, defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles'; import { $ } from 'vs/base/browser/dom'; import { renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels'; import { ILinkDescriptor, Link } from 'vs/platform/opener/browser/link'; </del> <ins> import { ILinkDescriptor } from 'vs/platform/opener/browser/link'; import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; import { MarkdownString } from 'vs/base/common/htmlContent'; </ins> interface IWelcomeDialogItem { readonly title: string;


configurationRegistry.registerConfiguration(keyboardConfiguration); <del> registerSingleton(IKeybindingService, WorkbenchKeybindingService); </del>  No newline at end of file <ins> registerSingleton(IKeybindingService, WorkbenchKeybindingService); </ins>


import * as nls from 'vs/nls'; import * as pfs from 'vs/base/node/pfs'; import * as platform from 'vs/base/common/platform'; <del> import * as os from 'os'; </del> import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';


disturl "https://nodejs.org/dist" target "18.15.0" <del> ms_build_id "229541" </del> <ins> ms_build_id "234519" </ins> runtime "node" build_from_source "true"


import { Emitter, Event } from 'vs/base/common/event'; import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate'; import { IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; <del> import { IObjectTreeElement, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; </del> <ins> import { IObjectTreeElement, ITreeEvent, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; </ins> import { localize } from 'vs/nls'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { WorkbenchObjectTree } from 'vs/platform/list/browser/listService';


import { IRecent, IRecentFile, IRecentFolder, IRecentlyOpened, IRecentWorkspace, isRecentFile, isRecentFolder, isRecentWorkspace, restoreRecentlyOpened, toStoreData } from 'vs/platform/workspaces/common/workspaces'; import { IWorkspaceIdentifier, WORKSPACE_EXTENSION } from 'vs/platform/workspace/common/workspace'; import { IWorkspacesManagementMainService } from 'vs/platform/workspaces/electron-main/workspacesManagementMainService'; <ins> import { ResourceMap } from 'vs/base/common/map'; </ins> export const IWorkspacesHistoryMainService = createDecorator<IWorkspacesHistoryMainService>('workspacesHistoryMainService');


horizontal: this.orientation === Orientation.HORIZONTAL ? (options.scrollbarVisibility ?? ScrollbarVisibility.Auto) : ScrollbarVisibility.Hidden }, this.scrollable)); <ins> // https://github.com/microsoft/vscode/issues/157737 const onDidScrollViewContainer = this._register(new DomEmitter(this.viewContainer, 'scroll')).event; this._register(onDidScrollViewContainer(_ => { const position = this.scrollableElement.getScrollPosition(); const scrollLeft = Math.abs(this.viewContainer.scrollLeft - position.scrollLeft) <= 1 ? undefined : this.viewContainer.scrollLeft; const scrollTop = Math.abs(this.viewContainer.scrollTop - position.scrollTop) <= 1 ? undefined : this.viewContainer.scrollTop; if (scrollLeft !== undefined || scrollTop !== undefined) { this.scrollableElement.setScrollPosition({ scrollLeft, scrollTop }); } })); </ins> this.onDidScroll = this.scrollableElement.onScroll; this._register(this.onDidScroll(e => { if (e.scrollTopChanged) {


import { IOpenerService } from 'vs/platform/opener/common/opener'; import { URI } from 'vs/base/common/uri'; <ins> const builtinExtensionIssueUrl = 'https://github.com/microsoft/vscode'; </ins> export class ReportExtensionIssueAction extends Action { private static readonly _id = 'workbench.extensions.action.reportExtensionIssue';


"contributes": { "languages": [{ "id": "ini", <del> "extensions": [ ".ini", ".properties", ".gitconfig" ], "filenames": ["config", ".gitattributes", ".gitconfig", "gitconfig", ".editorconfig"], </del> <ins> "extensions": [ ".ini"], </ins> "aliases": [ "Ini", "ini" ], <del> "configuration": "./language-configuration.json" }], </del> <ins> "configuration": "./ini.language-configuration.json" }, { "id": "properties", "extensions": [ ".properties", ".gitconfig" ], "filenames": ["config", ".gitattributes", ".gitconfig", "gitconfig", ".editorconfig"], "aliases": [ "properties", "properties" ], "configuration": "./properties.language-configuration.json" } ], </ins> "grammars": [{ "language": "ini", "scopeName": "source.ini", <del> "path": "./syntaxes/Ini.plist" </del> <ins> "path": "./syntaxes/Ini.tmLanuage" },{ "language": "properties", "scopeName": "source.properties", "path": "./syntaxes/properties.plist" </ins> }] } }


this._register(this._workingCopyService.registerWorkingCopy(workingCopyAdapter)); } <del> capabilities = 0; </del> <ins> capabilities = WorkingCopyCapabilities.None; </ins> async backup(): Promise<IWorkingCopyBackup<NotebookDocumentBackupData>> { if (this._notebook.supportBackup) {


this.update(); } <del> set toggles(toggles: IQuickInputToggle[] | undefined) { // HACK: Filter out toggles here that are not concrete Toggle objects. This is to workaround // a layering issue as quick input's interface is in common but Toggle is in browser and // it requires a HTMLElement on its interface const concreteToggles = toggles?.filter(opts => opts instanceof Toggle) as Toggle[]; this.ui.inputBox.toggles = concreteToggles; } </del> onDidChangeSelection = this.onDidChangeSelectionEmitter.event; onDidTriggerItemButton = this.onDidTriggerItemButtonEmitter.event;


moveTo(thisCursor, 1, 8); moveTo(thisCursor, 3, 9, true); moveToBeginningOfLine(thisCursor, false); <del> assertCursor(thisCursor, new Selection(1, 6, 1, 6)); </del> <ins> assertCursor(thisCursor, new Selection(3, 5, 3, 5)); }); test('issue #17011: Shift+home/end now go to the end of the selection start's line, not the selection's end', () => { moveTo(thisCursor, 1, 8); moveTo(thisCursor, 3, 9, true); moveToBeginningOfLine(thisCursor, true); assertCursor(thisCursor, new Selection(1, 8, 3, 5)); </ins> }); // --------- move to end of line


array.push(workspaceIdentifier); this.saveSync(); } <ins> return workspaceIdentifier; </ins> } protected removeBackupPathSync(workspaceIdentifier: string, isEmptyWorkspace: boolean): void {


super(); const cellEditorOptions = this._register(new CellEditorOptions(this.notebookEditor.getBaseCellEditorOptions(viewCell.language), this.notebookEditor.notebookOptions, this.configurationService)); <del> this._outputContainerRenderer = this.instantiationService.createInstance(CellOutputContainer, notebookEditor, viewCell, templateData, { limit: 500 }); </del> <ins> this._outputContainerRenderer = this.instantiationService.createInstance(CellOutputContainer, notebookEditor, viewCell, templateData, { limit: outputDisplayLimit }); </ins> this.cellParts = this._register(templateData.cellParts.concatContentPart([cellEditorOptions, this._outputContainerRenderer])); // this.viewCell.layoutInfo.editorHeight or estimation when this.viewCell.layoutInfo.editorHeight === 0


this._wrapperElement.classList.add('fixed-dims'); this._hasScrollBar = true; this._initDimensions(); <del> // Always remove a row to make room for the scroll bar this._fixedRows = this._rows - 1; </del> await this._resize(); this._terminalHasFixedWidth.set(true); if (!this._horizontalScrollbar) {


class NextMarkerAction extends MarkerNavigationAction { constructor() { <del> super(true, { </del> <ins> super(true, false, { </ins> id: 'editor.action.marker.next', label: nls.localize('markerAction.next.label', "Go to Next Problem (Error, Warning, Info)"), alias: 'Go to Next Error or Warning', <ins> precondition: EditorContextKeys.writable }); } } class PrevMarkerAction extends MarkerNavigationAction { constructor() { super(false, false, { id: 'editor.action.marker.prev', label: nls.localize('markerAction.previous.label', "Go to Previous Problem (Error, Warning, Info)"), alias: 'Go to Previous Error or Warning', precondition: EditorContextKeys.writable }); } } class NextMarkerInFilesAction extends MarkerNavigationAction { constructor() { super(true, true, { id: 'editor.action.marker.nextInFiles', label: nls.localize('markerAction.nextInFiles.label', "Go to Next Problem in Files (Error, Warning, Info)"), alias: 'Go to Next Error or Warning in Files', </ins> precondition: EditorContextKeys.writable, kbOpts: { kbExpr: EditorContextKeys.focus,


# OSC 633 ; E ; <CommandLine?> ; <Nonce?> ST $Result = "$([char]0x1b)]633;E;" $Result += $(__VSCode-Escape-Value $CommandLine) <del> $Result += ";$Nonce" </del> <ins> # Only send the nonce if the OS is not Windows 10 as it seems to echo to the terminal # sometimes if ($IsWindows10 -eq $false) { $Result += ";$Nonce" } </ins> $Result += "`a" <del> [Console]::Write($Result) </del> # Command executed # OSC 633 ; C ST


import { IMenuService, MenuId, IMenu, SubmenuItemAction, registerAction2, Action2, MenuItemAction, MenuRegistry } from 'vs/platform/actions/common/actions'; import { registerThemingParticipant, IThemeService } from 'vs/platform/theme/common/themeService'; import { MenuBarVisibility, getTitleBarStyle, IWindowOpenable, getMenuBarVisibility } from 'vs/platform/window/common/window'; <del> import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; </del> <ins> import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; </ins> import { IAction, Action, SubmenuAction, Separator, IActionRunner, ActionRunner, WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification } from 'vs/base/common/actions'; import { addDisposableListener, Dimension, EventType } from 'vs/base/browser/dom'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';


import * as platform from 'vs/base/common/platform'; import * as dom from 'vs/base/browser/dom'; import * as paths from 'vs/base/common/paths'; <ins> import * as os from 'os'; </ins> import { Event, Emitter } from 'vs/base/common/event'; import { WindowsShellHelper } from 'vs/workbench/parts/terminal/node/windowsShellHelper'; import { Terminal as XTermTerminal, ISearchOptions } from 'vscode-xterm';


], "filenamePatterns": [ "tsconfig.*.json", <del> "tsconfig-*.json" </del> <ins> "jsconfig.*.json", "tsconfig-*.json", "jsconfig-*.json" </ins> ] } ],


'Selection': nls.localize({ key: 'mSelection', comment: ['&& denotes a mnemonic'] }, "&&Selection"), 'View': nls.localize({ key: 'mView', comment: ['&& denotes a mnemonic'] }, "&&View"), 'Go': nls.localize({ key: 'mGoto', comment: ['&& denotes a mnemonic'] }, "&&Go"), <del> 'Terminal': nls.localize({ key: 'mTerminal', comment: ['&& denotes a mnemonic'] }, "&&Terminal"), </del> 'Debug': nls.localize({ key: 'mDebug', comment: ['&& denotes a mnemonic'] }, "&&Debug"), 'Tasks': nls.localize({ key: 'mTasks', comment: ['&& denotes a mnemonic'] }, "&&Tasks"), 'Help': nls.localize({ key: 'mHelp', comment: ['&& denotes a mnemonic'] }, "&&Help")


import { FileSystemProviderErrorCode, markAsFileSystemProviderError } from 'vs/platform/files/common/files'; import { RemoteAuthorityResolverErrorCode } from 'vs/platform/remote/common/remoteAuthorityResolver'; import { IRelativePatternDto } from 'vs/workbench/api/common/extHost.protocol'; <del> import { CellEditType, ICellPartialMetadataEdit, IDocumentMetadataEdit, isTextStreamMime } from 'vs/workbench/contrib/notebook/common/notebookCommon'; </del> <ins> import { CellEditType, ICellMetadataEdit, IDocumentMetadataEdit, isTextStreamMime } from 'vs/workbench/contrib/notebook/common/notebookCommon'; </ins> import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; import type * as vscode from 'vscode';


} registerTerminalContribution(TerminalInitialHintContribution.ID, TerminalInitialHintContribution, false); class TerminalInitialHintWidget extends Disposable {


() => { }, (linkCandidates: string, cb: (result: { uri: URI, link: string, isDirectory: boolean } | undefined) => void) => { cb({ uri: URI.file('/'), link: linkCandidates[0], isDirectory: false }); <del> } </del> <ins> }, true </ins> ); // Write the text and wait for the parser to finish


import { Action2, registerAction2 } from 'vs/platform/actions/common/actions'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { CATEGORIES } from 'vs/workbench/common/actions'; <del> import { getNotebookEditorFromEditorPane, ICellViewModel, ICommonCellViewModelLayoutChangeInfo, INotebookEditor, INotebookEditorContribution } from 'vs/workbench/contrib/notebook/browser/notebookBrowser'; </del> <ins> import { getNotebookEditorFromEditorPane, ICellViewModel, ICommonCellViewModelLayoutChangeInfo, INotebookDeltaCellStatusBarItems, INotebookEditor, INotebookEditorContribution } from 'vs/workbench/contrib/notebook/browser/notebookBrowser'; </ins> import { registerNotebookContribution } from 'vs/workbench/contrib/notebook/browser/notebookEditorExtensions'; import { NotebookEditorWidget } from 'vs/workbench/contrib/notebook/browser/notebookEditorWidget'; <ins> import { CellStatusbarAlignment, INotebookCellStatusBarItem } from 'vs/workbench/contrib/notebook/common/notebookCommon'; </ins> import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService';


* Must be disposed as soon as the model detaches from the editor. */ export class ActiveGhostTextController extends Disposable { <del> private readonly contextKeys = new GhostTextContextKeys(this.contextKeyService); </del> <ins> public readonly contextKeys = new GhostTextContextKeys(this.contextKeyService); </ins> public readonly model = this._register(this.instantiationService.createInstance(GhostTextModel, this.editor)); public readonly widget = this._register(this.instantiationService.createInstance(GhostTextWidget, this.editor, this.model));


"makefile" ], "extensions": [ <ins> ".mak", </ins> ".mk" ], "filenames": [


"tas-client-umd": "0.1.6", "vscode-oniguruma": "1.6.1", "vscode-textmate": "7.0.1", <del> "xterm": "5.0.0-beta.32", "xterm-addon-canvas": "0.2.0-beta.15", "xterm-addon-search": "0.10.0-beta.3", "xterm-addon-unicode11": "0.4.0-beta.3", "xterm-addon-webgl": "0.13.0-beta.32" </del> <ins> "xterm": "5.0.0-beta.35", "xterm-addon-canvas": "0.2.0-beta.17", "xterm-addon-search": "0.10.0-beta.5", "xterm-addon-unicode11": "0.4.0-beta.5", "xterm-addon-webgl": "0.13.0-beta.35" </ins> } }


return; } <del> if (this.size.width >= SearchView.WIDE_VIEW_SIZE) { dom.addClass(this.getContainer(), SearchView.WIDE_CLASS_NAME); } else { dom.removeClass(this.getContainer(), SearchView.WIDE_CLASS_NAME); } </del> <ins> const actionsPosition = this.configurationService.getValue<ISearchConfigurationProperties>('search').actionsPosition; const useWideLayout = this.size.width >= SearchView.WIDE_VIEW_SIZE && actionsPosition === 'auto'; dom.toggleClass(this.getContainer(), SearchView.WIDE_CLASS_NAME, useWideLayout); </ins> this.searchWidget.setWidth(this.size.width - 28 /* container margin */);


import { SyncActionDescriptor } from 'vs/platform/actions/common/actions'; import { IMessageService, Severity } from 'vs/platform/message/common/message'; import product from 'vs/platform/node/product'; <ins> import IPackageConfiguration from 'vs/platform/node/package'; </ins> function ignore<T>(code: string, value: T = null): (err: any) => TPromise<T> { return err => err.code === code ? TPromise.as<T>(value) : TPromise.wrapError<T>(err);


} const extensionsToUninstall: UninstallExtensionInfo[] = [{ extension: extension.local }]; <del> const dependents: IExtension[] = []; for (const local of this.local) { if (local === extension) { continue; </del> <ins> for (const packExtension of this.getAllPackExtensionsToUninstall(extension.local, this.local)) { if (!extensionsToUninstall.some(e => areSameExtensions(e.extension.identifier, packExtension.identifier))) { extensionsToUninstall.push({ extension: packExtension }); </ins> } <del> if (!local.local) { continue; } if (local.dependencies.length === 0) { continue; } if (extension.extensionPack.some(id => areSameExtensions({ id }, local.identifier))) { continue; } if (dependents.some(d => d.extensionPack.some(id => areSameExtensions({ id }, local.identifier)))) { continue; } if (local.dependencies.some(dep => areSameExtensions(extension.identifier, { id: dep }))) { dependents.push(local); extensionsToUninstall.push({ extension: local.local }); </del> <ins> } const dependents: IExtension[] = []; for (const { extension } of extensionsToUninstall) { for (const local of this.local) { if (!local.local) { continue; } if (areSameExtensions(local.identifier, extension.identifier)) { continue; } if (local.dependencies.length === 0) { continue; } if (extension.manifest.extensionPack?.some(id => areSameExtensions({ id }, local.identifier))) { continue; } if (dependents.some(d => d.extensionPack.some(id => areSameExtensions({ id }, local.identifier)))) { continue; } if (local.dependencies.some(dep => areSameExtensions(extension.identifier, { id: dep }))) { dependents.push(local); extensionsToUninstall.push({ extension: local.local }); } </ins> } }


// Only consider requests for watching that are not // a child of an existing request path to prevent <del> // duplication. </del> <ins> // duplication. In addition, drop any request where // everything is excluded (via `**` glob). </ins> // // However, allow explicit requests to watch folders // that are symbolic links because the Parcel watcher // does not allow to recursively watch symbolic links. for (const request of requests) { <ins> if (request.excludes.includes(GLOBSTAR)) { continue; // path is ignored entirely (via `**` glob exclude) } </ins> if (requestTrie.findSubstr(request.path)) { try { const realpath = realpathSync(request.path);


import { EDITOR_FONT_DEFAULTS } from 'vs/editor/common/config/editorOptions'; import { DEFAULT_LETTER_SPACING, DEFAULT_LINE_HEIGHT, TerminalCursorStyle, DEFAULT_COMMANDS_TO_SKIP_SHELL, SUGGESTIONS_FONT_WEIGHT, MINIMUM_FONT_WEIGHT, MAXIMUM_FONT_WEIGHT, DEFAULT_LOCAL_ECHO_EXCLUDE } from 'vs/workbench/contrib/terminal/common/terminal'; import { isMacintosh, isWindows, Platform } from 'vs/base/common/platform'; <ins> import { IJSONSchema } from 'vs/base/common/jsonSchema'; const terminalProfileSchema: IJSONSchema = { type: 'object', required: ['path'], properties: { path: { description: localize('terminalProfile.path', 'A single path to a shell executable or an array of paths that will be used as fallbacks when one fails.'), type: ['string', 'array'], items: { type: 'string' } }, args: { description: localize('terminalProfile.args', 'An optional set of arguments to run the shell executable with.'), type: 'array', items: { type: 'string' } } } }; </ins> export const terminalConfiguration: IConfigurationNode = { id: 'terminal',


if (uri.path[0] === '/') { const root = vscode.workspace.getWorkspaceFolder(this.currentDocument!); if (root) { <del> const fileUri = vscode.Uri.joinPath(root.uri, uri.fsPath); uri = fileUri.with({ scheme: uri.scheme, </del> <ins> const fileUri = vscode.Uri.joinPath(root.uri, uri.fsPath).with({ </ins> fragment: uri.fragment, query: uri.query, }); <ins> // Ensure fileUri is relative by prepending `/` so that it uses the <base> element URI // when resolving the absolute URL uri = vscode.Uri.parse('markdown-link:' + '/' + fileUri.toString(true).replace(/^S+?:/, fileUri.scheme)); </ins> } }


} const srcDir = path.join(__dirname, 'src'); <del> const outDir = path.join(outputRoot, 'out'); </del> <ins> const outDir = path.join(outputRoot, 'notebook-out'); </ins> async function build() { await esbuild.build({


const items = new Set<ExplorerItem>(this.view.getContext(respectMultiSelection)); items.forEach(item => { <del> if (respectMultiSelection && this.view?.isItemCollapsed(item) && item.nestedChildren) { for (const child of item.nestedChildren) { items.add(child); </del> <ins> try { if (respectMultiSelection && this.view?.isItemCollapsed(item) && item.nestedChildren) { for (const child of item.nestedChildren) { items.add(child); } </ins> } <ins> } catch { // We will error out trying to resolve collapsed nodes that have not yet been resolved. // So we catch and ignore them in the multiSelect context return; </ins> } });


/** * Stores cell metadata. */ <del> metadata?: Partial<nbformat.ICellMetadata>; </del> <ins> metadata?: Partial<nbformat.ICellMetadata> & { vscode?: { languageId?: string } }; </ins> }


import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; import { KeybindingWeight } from '../../../platform/keybinding/common/keybindingsRegistry.js'; import { Categories } from '../../../platform/action/common/actionCommonCategories.js'; <ins> import { ICommandService } from '../../../platform/commands/common/commands.js'; import { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js'; </ins> class KeybindingsReferenceAction extends Action2 {


menu: { id: MenuId.MenubarAppearanceMenu, group: '4_editor', <del> order: 3 </del> <ins> order: 4 </ins> } }); }


import { AbstractURLService } from 'vs/platform/url/common/urlService'; import { Event } from 'vs/base/common/event'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; <ins> import { IOpenerService, matchesScheme } from 'vs/platform/opener/common/opener'; import { IProductService } from 'vs/platform/product/common/productService'; </ins> export interface IURLCallbackProvider {


"license": "MIT", "description": "Dependencies shared by all extensions", "dependencies": { <del> "typescript": "5.4.3" </del> <ins> "typescript": "5.4.4" </ins> }, "scripts": { "postinstall": "node ./postinstall.mjs"


width: width, height: editorHeight }, <ins> enableDropIntoEditor: true, </ins> // overflowWidgetsDomNode: this.notebookEditor.getOverflowContainerDomNode() }, { contributions: this.notebookEditor.creationOptions.cellEditorContributions


} class LanguageSelection implements ILanguageSelection { <del> private readonly _value: IObservable<string>; public readonly onDidChange: Event<string>; constructor(onDidChangeLanguages: Event<void>, selector: () => string) { this._value = observableFromEvent(this, onDidChangeLanguages, () => selector()); this.onDidChange = Event.fromObservable(this._value); </del> <ins> public languageId: string; private _listener: IDisposable | null = null; private _emitter: Emitter<string> | null = null; constructor( private readonly _onDidChangeLanguages: Event<void>, private readonly _selector: () => string ) { this.languageId = this._selector(); } private _dispose(): void { if (this._listener) { this._listener.dispose(); this._listener = null; } if (this._emitter) { this._emitter.dispose(); this._emitter = null; } </ins> } <del> public get languageId(): string { return this._value.get(); } </del> <ins> public get onDidChange(): Event<string> { if (!this._listener) { this._listener = this._onDidChangeLanguages(() => this._evaluate()); } if (!this._emitter) { this._emitter = new Emitter<string>({ onDidRemoveLastListener: () => { this._dispose(); } }); } return this._emitter.event; } private _evaluate(): void { const languageId = this._selector(); if (languageId === this.languageId) { // no change return; } this.languageId = languageId; this._emitter?.fire(this.languageId); } </ins> }


private readonly _onSeparatorButtonTriggered = new Emitter<IQuickPickSeparatorButtonEvent>(); onSeparatorButtonTriggered = this._onSeparatorButtonTriggered.event; <ins> private readonly _onTriggerEmptySelectionOrFocus = new Emitter<ITreeEvent<IQuickPickElement | null>>(); </ins> private readonly _container: HTMLElement; private readonly _tree: WorkbenchObjectTree<IQuickPickElement, void>; private readonly _separatorRenderer: QuickPickSeparatorElementRenderer;


dependsOn: [] jobs: - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true), eq(parameters.VSCODE_BUILD_LINUX_ALPINE, true)) }}: <del> - job: Linux </del> <ins> - job: LinuxX64 </ins> pool: vscode-1es-linux steps: - template: ./linux/cli-build-linux.yml


resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.1.tgz#34bdc31727a1889198855913db2f270ace6d7bf8" integrity sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw== <del> "@xterm/addon-canvas@0.6.0-beta.19": version "0.6.0-beta.19" resolved "https://registry.yarnpkg.com/@xterm/addon-canvas/-/addon-canvas-0.6.0-beta.19.tgz#5f8896b884d2a558a28eb197f7f4766ac37d33a0" integrity sha512-i+26DqYgI/PZViCiEK4Vu8c4Fi5J0i+TwnFfBDLcumHH07Al1uRd5BRaVg/i93vk6bRyEIOiOiIToXSf37ov/w== "@xterm/addon-image@0.7.0-beta.17": version "0.7.0-beta.17" resolved "https://registry.yarnpkg.com/@xterm/addon-image/-/addon-image-0.7.0-beta.17.tgz#bc3d6f09619ef1f3b68c7009d29ee14003a26b30" integrity sha512-nnHVoYVoh+CpT4FQN/ALKesr96YvdVNUzQRQo4aAARUKst5DFaHQX9Yn/qLDN5s0WCqI3bgIEo8UAakfHITumA== "@xterm/addon-search@0.14.0-beta.19": version "0.14.0-beta.19" resolved "https://registry.yarnpkg.com/@xterm/addon-search/-/addon-search-0.14.0-beta.19.tgz#2bc13378765f0d5e72d9bcb7887e23eee31de7eb" integrity sha512-Y1pPdtdZj0xRQ/Is4jdO0dyZe+uM6AhWi3v2U4sdJmhz2mxVe/HAKBHkx6tyfMtX9ge/9ZYajd/Sy8rkjIFdmQ== "@xterm/addon-serialize@0.12.0-beta.19": version "0.12.0-beta.19" resolved "https://registry.yarnpkg.com/@xterm/addon-serialize/-/addon-serialize-0.12.0-beta.19.tgz#465a9525a420b8f0d12eed419d6e051f9a887814" integrity sha512-3v6a4/4gxAwoyJsBp6vJBofymgTH8paSHl8K2uQfFuLosOavNyCtrNPiNne7tpppK6t8zCDJ/mVrXNptz4Mlsg== "@xterm/addon-unicode11@0.7.0-beta.19": version "0.7.0-beta.19" resolved "https://registry.yarnpkg.com/@xterm/addon-unicode11/-/addon-unicode11-0.7.0-beta.19.tgz#0e81775f84346a97c657fb4cd7702de1cfe4b83f" integrity sha512-U5O+JLklO4qtptWAWUw14QRWdalLl0bFAQxLKuTtDmusgfn33pNDRD6RH3R+IHhO2e6svAwrw27OcCEcdn0AJQ== "@xterm/addon-webgl@0.17.0-beta.19": version "0.17.0-beta.19" resolved "https://registry.yarnpkg.com/@xterm/addon-webgl/-/addon-webgl-0.17.0-beta.19.tgz#fefe44c20b4d4d070363e03ae33087505a88807e" integrity sha512-L59l9Cd4KTMCwnw2HPi/cUgH4iL5dK7VERK/wSTWEGYMOi3WGTmXqsg8ftfR2jFC9P33eqYNVJDmbr+pF0XsDg== "@xterm/headless@5.4.0-beta.19": version "5.4.0-beta.19" resolved "https://registry.yarnpkg.com/@xterm/headless/-/headless-5.4.0-beta.19.tgz#e84a7cebda581273032f82fc8c53941204bc7f93" integrity sha512-y7Ne2G/Tgn6bHr14eBHqcq5gGFFCHKGBzmXTExT1Z4Fb6ofPACPWAo60S5B6uh49W4Ts13gQYZ5C0XEvHud0Eg== "@xterm/xterm@5.4.0-beta.19": version "5.4.0-beta.19" resolved "https://registry.yarnpkg.com/@xterm/xterm/-/xterm-5.4.0-beta.19.tgz#5c9c5cacd0cf2a0719086ce03ab035480b1cfd96" integrity sha512-Rx/Y/y3YGjpiW6IUq8UlE6qrTYuUlEfpVg/BS6kIPr8/cUOchE1fsKWCMxz/u2bIyQyEovRi892iYcQJ4scstw== </del> <ins> "@xterm/addon-canvas@0.6.0-beta.20": version "0.6.0-beta.20" resolved "https://registry.yarnpkg.com/@xterm/addon-canvas/-/addon-canvas-0.6.0-beta.20.tgz#078dddef70caf880b2cb121fdda37d301fc13156" integrity sha512-tHhsuqElE7LNiDJPbZzgVpmbcG2Dk6i2vh1EI+DzSByUWScDqLoeJbVPE5Xd2UW2garo24lxErpnIAlsytcA3A== "@xterm/addon-image@0.7.0-beta.18": version "0.7.0-beta.18" resolved "https://registry.yarnpkg.com/@xterm/addon-image/-/addon-image-0.7.0-beta.18.tgz#588ea2d0841cff48c63bde1bfcdf56e9494dc6af" integrity sha512-+HQ+IBmHPelzjRJ5zO3XkjbeQNr2Zrf5wAlbPhy4EGSD0mDCqHJSfzZ8wKrhx7t8qpfiA8eTpWu/M76WsEnlnA== "@xterm/addon-search@0.14.0-beta.20": version "0.14.0-beta.20" resolved "https://registry.yarnpkg.com/@xterm/addon-search/-/addon-search-0.14.0-beta.20.tgz#cac366b1be1eb02cf9fe9537933f26f227d030c8" integrity sha512-1LOL/OzWSrCBpndiBeeE2S1rxtKKgU1ucYFSG3P68W0J4VQz/Ksci1BgDKsgspj9jzpsGhdql3zwa5WEM7n4Pg== "@xterm/addon-serialize@0.12.0-beta.20": version "0.12.0-beta.20" resolved "https://registry.yarnpkg.com/@xterm/addon-serialize/-/addon-serialize-0.12.0-beta.20.tgz#5fe126194ff4dc466b92a0946e081e039a14ad21" integrity sha512-GdRCQDjLyVNBxCFnhfCWsMmuqv2PryUkOaNl4z5MqB5lBUkiEnRNY0u/s5f34+2zrijp3h0O/f9JDLW4gSUQgw== "@xterm/addon-unicode11@0.7.0-beta.20": version "0.7.0-beta.20" resolved "https://registry.yarnpkg.com/@xterm/addon-unicode11/-/addon-unicode11-0.7.0-beta.20.tgz#5d3c97320898dd6766f2dc127deb4f071c8698c2" integrity sha512-4/uwJ6lV/xJplT7hJc7sO4Im4XNvEXHnUEFIs03FFp8ZUfu3U6wcBk6/GoKMwJKJtGVNxotiD6ZzJ5v8IBH6nA== "@xterm/addon-webgl@0.17.0-beta.20": version "0.17.0-beta.20" resolved "https://registry.yarnpkg.com/@xterm/addon-webgl/-/addon-webgl-0.17.0-beta.20.tgz#443845ac5ac755cf762b105ed237b30426b07137" integrity sha512-iqvXNSTfKIcO9FBraNwdO/ixPrTHok8CBN/wjlnGLv0ZMc4zLAiKE8+PHyg9ZY38QJfS+4Ouo8KsuZwoOYfnNA== "@xterm/headless@5.4.0-beta.20": version "5.4.0-beta.20" resolved "https://registry.yarnpkg.com/@xterm/headless/-/headless-5.4.0-beta.20.tgz#af26d3d0e2cdd615ccfac4a8660181fee19898fd" integrity sha512-H/as1d67J43/CB8xt1Yg/eJMbq1yopwG1bDBKdsf2ro8A1PmJFXNzaDB+wSgoH42fCusSpLJvXtUvDLtqfvBTg== "@xterm/xterm@5.4.0-beta.20": version "5.4.0-beta.20" resolved "https://registry.yarnpkg.com/@xterm/xterm/-/xterm-5.4.0-beta.20.tgz#28bbbbc73eceb6ef3e1e095de195cf849d0cbfb6" integrity sha512-nkY91qBy5pe1HlW9LOoLcyG6v4teEsliEtUVshAO42NrJDaPniSn28O5m5832UjZOdjLCY58QlcBkZUquODGrQ== </ins> "@xtuc/ieee754@^1.2.0": version "1.2.0"


<ins> /*--------------------------------------------------------------------------------------------- *  Copyright (c) Microsoft Corporation. All rights reserved. *  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { IResizeEvent, ResizableHTMLElement } from 'vs/base/browser/ui/resizable/resizable'; import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; import { ResourceMap } from 'vs/base/common/map'; import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; import { IPosition } from 'vs/editor/common/core/position'; import { PositionAffinity } from 'vs/editor/common/model'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; import * as dom from 'vs/base/browser/dom'; import { clamp } from 'vs/base/common/numbers'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Emitter, Event } from 'vs/base/common/event'; export abstract class ResizableWidget implements IDisposable { readonly element: ResizableHTMLElement; private readonly _disposables = new DisposableStore(); private readonly _persistingMechanism: IPersistingMechanism; constructor( private readonly _editor: ICodeEditor, private readonly _persistingOptions: IPersistingOptions, ) { console.log('Inside of ResizableWidget constructor'); this.element = new ResizableHTMLElement(); this.element.domNode.classList.add('editor-widget', 'resizable-widget'); if (this._persistingOptions instanceof SingleSizePersistingOptions) { this._persistingMechanism = new SingleSizePersistingMechanism(this, this.element, this._editor, this._persistingOptions); } else if (this._persistingOptions instanceof MultipleSizePersistingOptions) { this._persistingMechanism = new MultipleSizePersistingMechanism(this, this.element, this._editor); } else { throw new Error('Please specify a valid persisting mechanism'); } } dispose(): void { this._disposables.dispose(); this.element.dispose(); } resize(dimension: dom.Dimension): void { } hide(): void { this.element.clearSashHoverState(); } findMaximumRenderingHeight(): number | undefined { return Infinity; } findMaximumRenderingWidth(): number | undefined { return Infinity; } findPersistedSize(): dom.Dimension | undefined { return this._persistingMechanism.findSize(); } } export abstract class ResizableContentWidget implements IContentWidget { abstract ID: string; private _position: IPosition | null = null; private _secondaryPosition: IPosition | null = null; private _preference: ContentWidgetPositionPreference[] = []; private _positionAffinity: PositionAffinity | undefined = undefined; constructor(private readonly resizableWidget: ResizableWidget, private readonly editor: ICodeEditor) { this.editor.addContentWidget(this); console.log('Inisde of ResizableContentWidget constructor'); } findPersistedSize(): dom.Dimension | undefined { return this.resizableWidget.findPersistedSize(); } getId(): string { console.log('this.ID : ', this.ID); return this.ID; } getDomNode(): HTMLElement { console.log('Inside of getDomNode of ResizableContentWidget'); console.log('this.resizableWidget.element.domNode : ', this.resizableWidget.element.domNode); this.resizableWidget.element.domNode.style.zIndex = '49'; this.resizableWidget.element.domNode.style.position = 'fixed'; // this.resizableWidget.element.domNode.style.display = 'block'; return this.resizableWidget.element.domNode; } getPosition(): IContentWidgetPosition | null { console.log('Inside of getPosition of ResizableContentWidget'); const contentWidgetPosition = { position: this._position, secondaryPosition: this._secondaryPosition, preference: (this._preference), positionAffinity: this._positionAffinity }; console.log('contentWidgetPosition: ', contentWidgetPosition); return contentWidgetPosition; } hide(): void { this.editor.layoutContentWidget(this); } set position(position: IPosition | null) { this._position = position; } set secondaryPosition(position: IPosition | null) { this._secondaryPosition = position; } set preference(preference: ContentWidgetPositionPreference[]) { this._preference = preference; } set positionAffinity(affinity: PositionAffinity | undefined) { this._positionAffinity = affinity; } } interface IPersistingOptions { } export class SingleSizePersistingOptions implements IPersistingOptions { constructor( public readonly key: string, public readonly defaultSize: dom.Dimension, @IStorageService public readonly storageService: IStorageService ) { } } export class MultipleSizePersistingOptions implements IPersistingOptions { constructor() { } } interface IPersistingMechanism extends IDisposable { findSize(): dom.Dimension | undefined; } // TODO: maybe need to make more generic, this is specific to the suggest widget class SingleSizePersistingMechanism implements IPersistingMechanism { private readonly _persistedWidgetSize: PersistedWidgetSize | null = null; private readonly _disposables = new DisposableStore(); constructor( private readonly resizableWidget: ResizableWidget, private readonly element: ResizableHTMLElement, private readonly editor: ICodeEditor, private readonly persistingOptions: SingleSizePersistingOptions ) { this._persistedWidgetSize = new PersistedWidgetSize(this.persistingOptions.key, this.persistingOptions.storageService, this.editor); class ResizeState { constructor( readonly persistedSize: dom.Dimension | undefined, readonly currentSize: dom.Dimension, public persistHeight = false, public persistWidth = false, ) { } } let state: ResizeState | undefined; this._disposables.add(this.element.onDidWillResize(() => { // TODO: add back, this._contentWidget.lockPreference(); state = new ResizeState(this._persistedWidgetSize!.restore(), this.element.size); })); this._disposables.add(this.element.onDidResize(e => { this.resizableWidget.resize(new dom.Dimension(e.dimension.width, e.dimension.height)); if (state) { state.persistHeight = state.persistHeight || !!e.north || !!e.south; state.persistWidth = state.persistWidth || !!e.east || !!e.west; } if (!e.done) { return; } if (state) { const fontInfo = this.editor.getOption(EditorOption.fontInfo); const itemHeight = clamp(this.editor.getOption(EditorOption.suggestLineHeight) || fontInfo.lineHeight, 8, 1000); const threshold = Math.round(itemHeight / 2); let { width, height } = this.element.size; if (!state.persistHeight || Math.abs(state.currentSize.height - height) <= threshold) { height = state.persistedSize?.height ?? this.persistingOptions.defaultSize.height; } if (!state.persistWidth || Math.abs(state.currentSize.width - width) <= threshold) { width = state.persistedSize?.width ?? this.persistingOptions.defaultSize.width; } this._persistedWidgetSize!.store(new dom.Dimension(width, height)); } // TODO: add back, reset working state // this._contentWidget.unlockPreference(); state = undefined; })); } findSize(): dom.Dimension | undefined { return undefined; } dispose(): void { this._disposables.dispose(); } } class MultipleSizePersistingMechanism implements IPersistingMechanism { private readonly _persistedWidgetSizes: ResourceMap<Map<string, dom.Dimension>> = new ResourceMap<Map<string, dom.Dimension>>(); private readonly _disposables = new DisposableStore(); private _tooltipPosition: IPosition | null = null; // TODO: not sure if I need the following // private _initialHeight: number = 0; // private _initialTop: number = 0; private _resizing: boolean = false; private _size: dom.Dimension | undefined = undefined; private _maxRenderingHeight: number | undefined = Infinity; private _maxRenderingWidth: number | undefined = Infinity; private readonly _onDidResize = new Emitter<IResizeEvent>(); readonly onDidResize: Event<IResizeEvent> = this._onDidResize.event; // private _renderingAbove: ContentWidgetPositionPreference | undefined = undefined; constructor( private readonly resizableWidget: ResizableWidget, private readonly element: ResizableHTMLElement, public readonly editor: ICodeEditor ) { this.element.minSize = new dom.Dimension(10, 24); this._disposables.add(this.editor.onDidChangeModelContent((e) => { const uri = this.editor.getModel()?.uri; if (!uri || !this._persistedWidgetSizes.has(uri)) { return; } const persistedSizesForUri = this._persistedWidgetSizes.get(uri)!; const updatedPersistedSizesForUri = new Map<string, dom.Dimension>(); for (const change of e.changes) { const changeOffset = change.rangeOffset; const rangeLength = change.rangeLength; const endOffset = changeOffset + rangeLength; const textLength = change.text.length; for (const key of persistedSizesForUri.keys()) { const parsedKey = JSON.parse(key); const tokenOffset = parsedKey[0]; const tokenLength = parsedKey[1]; if (endOffset < tokenOffset) { const oldSize = persistedSizesForUri.get(key)!; const newKey: [number, number] = [tokenOffset - rangeLength + textLength, tokenLength]; updatedPersistedSizesForUri.set(JSON.stringify(newKey), oldSize); } else if (changeOffset >= tokenOffset + tokenLength) { updatedPersistedSizesForUri.set(key, persistedSizesForUri.get(key)!); } } } this._persistedWidgetSizes.set(uri, updatedPersistedSizesForUri); })); this._disposables.add(this.element.onDidWillResize(() => { this._resizing = true; // this._initialHeight = this.element.domNode.clientHeight; // this._initialTop = this.element.domNode.offsetTop; })); this._disposables.add(this.element.onDidResize(e => { let height = e.dimension.height; let width = e.dimension.width; const maxWidth = this.element.maxSize.width; const maxHeight = this.element.maxSize.height; width = Math.min(maxWidth, width); height = Math.min(maxHeight, height); if (!this._maxRenderingHeight) { return; } this._size = new dom.Dimension(width, height); this.element.layout(height, width); // Calling the resize function of the this.resizableWidget.resize(new dom.Dimension(width, height)); // Update the top parameters only when we decided to render above // TODO: presumably do not need to resize the element // if (this._renderingAbove === ContentWidgetPositionPreference.ABOVE) { // 	this.element.domNode.style.top = this._initialTop - (height - this._initialHeight) + 'px'; // } // const horizontalSashWidth = width - 2 * SASH_WIDTH + 2 * TOTAL_BORDER_WIDTH + 'px'; // this.element.northSash.el.style.width = horizontalSashWidth; // this.element.southSash.el.style.width = horizontalSashWidth; // const verticalSashWidth = height - 2 * SASH_WIDTH + 2 * TOTAL_BORDER_WIDTH + 'px'; // this.element.eastSash.el.style.height = verticalSashWidth; // this.element.westSash.el.style.height = verticalSashWidth; // this.element.eastSash.el.style.top = TOTAL_BORDER_WIDTH + 'px'; // Fire the current dimension // TODO: probably don't need to listen on the firing event? // this._onDidResize.fire({ dimension: this._size, done: false }); this._maxRenderingWidth = this.resizableWidget.findMaximumRenderingWidth(); this._maxRenderingHeight = this.resizableWidget.findMaximumRenderingHeight(); // this._maxRenderingHeight = this.resizableWidget.findMaximumRenderingHeight(this._renderingAbove); if (!this._maxRenderingHeight || !this._maxRenderingWidth) { return; } this.element.maxSize = new dom.Dimension(this._maxRenderingWidth, this._maxRenderingHeight); // Persist the height only when the resizing has stopped if (e.done) { if (!this.editor.hasModel()) { return; } const uri = this.editor.getModel().uri; if (!uri || !this._tooltipPosition) { return; } const persistedSize = new dom.Dimension(width, height); const wordPosition = this.editor.getModel().getWordAtPosition(this._tooltipPosition); if (!wordPosition) { return; } const offset = this.editor.getModel().getOffsetAt({ lineNumber: this._tooltipPosition.lineNumber, column: wordPosition.startColumn }); const length = wordPosition.word.length; // Suppose that the uri does not exist in the persisted widget hover sizes, then create a map if (!this._persistedWidgetSizes.get(uri)) { const persistedWidgetSizesForUri = new Map<string, dom.Dimension>([]); persistedWidgetSizesForUri.set(JSON.stringify([offset, length]), persistedSize); this._persistedWidgetSizes.set(uri, persistedWidgetSizesForUri); } else { const persistedWidgetSizesForUri = this._persistedWidgetSizes.get(uri)!; persistedWidgetSizesForUri.set(JSON.stringify([offset, length]), persistedSize); } this._resizing = false; } // this.editor.layoutOverlayWidget(this); // this.editor.render(); })); } set tooltipPosition(position: IPosition) { this._tooltipPosition = position; } findSize(): dom.Dimension | undefined { console.log('Inside of findSize of the MultiplePersistingMechanisms'); if (!this._tooltipPosition || !this.editor.hasModel()) { return; } const wordPosition = this.editor.getModel().getWordAtPosition(this._tooltipPosition); if (!wordPosition) { return; } const offset = this.editor.getModel().getOffsetAt({ lineNumber: this._tooltipPosition.lineNumber, column: wordPosition.startColumn }); const length = wordPosition.word.length; const uri = this.editor.getModel().uri; const persistedSizesForUri = this._persistedWidgetSizes.get(uri); if (!persistedSizesForUri) { return; } return persistedSizesForUri.get(JSON.stringify([offset, length])); } dispose(): void { this._disposables.dispose(); } } class PersistedWidgetSize { constructor( private readonly _key: string, private readonly _service: IStorageService, editor: ICodeEditor ) { } restore(): dom.Dimension | undefined { const raw = this._service.get(this._key, StorageScope.PROFILE) ?? ''; try { const obj = JSON.parse(raw); if (dom.Dimension.is(obj)) { return dom.Dimension.lift(obj); } } catch { // ignore } return undefined; } store(size: dom.Dimension) { this._service.store(this._key, JSON.stringify(size), StorageScope.PROFILE, StorageTarget.MACHINE); } reset(): void { this._service.remove(this._key, StorageScope.PROFILE); } } </ins>


} } <del> function isWelcomePageEnabled(configurationService: IConfigurationService) { </del> <ins> function isWelcomePageEnabled(configurationService: IConfigurationService, contextService?: IWorkspaceContextService) { </ins> const startupEditor = configurationService.inspect(configurationKey); if (!startupEditor.user && !startupEditor.workspace) { const welcomeEnabled = configurationService.inspect(oldConfigurationKey);


public activeEditorOptions: IEditorOptions; public activeEditorPosition: Position; public mockLineNumber: number; <ins> public mockSelectedText: string; </ins> private callback: (method: string) => void; constructor(callback?: (method: string) => void) { this.callback = callback || ((s: string) => { }); this.mockLineNumber = 15; <ins> this.mockSelectedText = 'selected text'; </ins> } public openEditors(inputs: any[]): Promise {


<meta charset="UTF-8"> <meta http-equiv="Content-Security-Policy" <del> content="default-src 'none'; script-src 'sha256-p+nt+yoC/wuG5etLfVS00qSeblDcYdehfpOYYqdWocI=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> </del> <ins> content="default-src 'none'; script-src 'sha256-7T0Xm7l4AYKDwm8oYNQ65wcQX7K/ndvxH/2ZgHWUE3w=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> </ins> <!-- Disable pinch zooming --> <meta name="viewport"


} // re-schedule this bit of the operation to be off the critical path - in case glob-match is slow <del> this._register(disposableTimeout(() => this.promptRecommendations(uri, model), 0)); } private promptRecommendations(uri: URI, model: ITextModel): void { if (this.promptImportantRecommendations(uri, model)) { return; } const fileExtension = extname(uri).toLowerCase(); if (!this.processedFileExtensions.includes(fileExtension)) { this.processedFileExtensions.push(fileExtension); this.promptRecommendedExtensionForFileExtension(uri, fileExtension); } </del> <ins> this._register(disposableTimeout(() => this.promptImportantRecommendations(uri, model), 0)); </ins> } /** * Prompt the user to either install the recommended extension for the file type in the current editor model * or prompt to search the marketplace if it has extensions that can support the file type */ <del> private promptImportantRecommendations(uri: URI, model: ITextModel, extensionRecommendations?: IStringDictionary<IFileOpenCondition[]>): boolean { </del> <ins> private promptImportantRecommendations(uri: URI, model: ITextModel, extensionRecommendations?: IStringDictionary<IFileOpenCondition[]>): void { </ins> const pattern = extname(uri).toLowerCase(); extensionRecommendations = extensionRecommendations ?? this.recommendationsByPattern.get(pattern) ?? this.fileOpenRecommendations; const extensionRecommendationEntries = Object.entries(extensionRecommendations); if (extensionRecommendationEntries.length === 0) { <del> return false; </del> <ins> return; </ins> } const processedPathGlobs = new Map<string, boolean>();


"publisher": "vscode", "version": "1.0.0", "license": "MIT", <del> "icon": "media/icon.png", </del> <ins> "icon": "media/icon.png", </ins> "engines": { "vscode": "^1.57.0" },


thanks.removeClass('task-panel-hidden'); }); <del> noButton.item(0).on('click', e => { </del> <ins> noButton.on('click', e => { </ins> if (!this.storageService.get(this.taskExperimentPart5)) { this.telemetryService.publicLog('taskPanel.no'); this.storageService.store(this.taskExperimentPart5, true, StorageScope.GLOBAL);


this.notificationService.warn(nls.localize('workbench.action.terminal.runActiveFile.noFile', 'Only files on disk can be run in the terminal')); return TPromise.as(void 0); } <del> let uriPath: string = uri.fsPath; const hasSpace = uriPath.indexOf(' ') !== -1; if (hasSpace && isWindows) { uriPath = '"' + uriPath + '"'; } else if (!isWindows) { if (uriPath.indexOf('') !== 0) { uriPath = uriPath.replace(//g, ''); } const hasDoubleQuote = uriPath.indexOf('"') !== -1; if (!hasSpace && hasDoubleQuote) { uriPath = ''' + uriPath + '''; } else if (hasSpace) { uriPath = uriPath.replace(/ /g, ' '); } } instance.sendText(uriPath, true); return this.terminalService.showPanel(); </del> <ins> return instance.preparePathForTerminalAsync(uri.fsPath).then(path => { instance.sendText(path, true); return this.terminalService.showPanel(); }); </ins> } }


import { AccessibilitySignal, IAccessibilitySignalService } from '../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js'; import { ILoggerService, LogLevel, LogLevelToLocalizedString, LogLevelToString } from '../../../../platform/log/common/log.js'; import { IDefaultLogLevelsService } from '../../logs/common/defaultLogLevels.js'; <del> import { EditorOptions } from '../../../../editor/common/config/editorOptions.js'; import { WordCharacterClassifier, getMapForWordSeparators } from '../../../../editor/common/core/wordCharacterClassifier.js'; import { WordNavigationType } from '../../../../editor/common/cursor/cursorWordOperations.js'; </del> <ins> import { KeybindingsRegistry, KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; </ins> import { EditorContextKeys } from '../../../../editor/common/editorContextKeys.js'; <del> import { ITextModel } from '../../../../editor/common/model.js'; import { WordLeftCommand, WordRightCommand } from '../../../../editor/contrib/wordOperations/browser/wordOperations.js'; </del> import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from '../../../../platform/accessibility/common/accessibility.js'; import { IsWindowsContext } from '../../../../platform/contextkey/common/contextkeys.js'; <del> import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; import { Position } from '../../../../editor/common/core/position.js'; import { registerEditorCommand } from '../../../../editor/browser/editorExtensions.js'; </del> import { FocusedViewContext } from '../../../common/contextkeys.js'; // Register Service