From d99e2483cb12d7dd79b024f2929581b52172573c Mon Sep 17 00:00:00 2001 From: kuiwu Date: Thu, 8 Jul 2021 09:54:21 +0800 Subject: [PATCH 01/35] fix: debug console variables output problem --- .../contrib/debug/browser/debugSession.ts | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/vs/workbench/contrib/debug/browser/debugSession.ts b/src/vs/workbench/contrib/debug/browser/debugSession.ts index 3409b407da7..4ff213c4f08 100644 --- a/src/vs/workbench/contrib/debug/browser/debugSession.ts +++ b/src/vs/workbench/contrib/debug/browser/debugSession.ts @@ -905,6 +905,27 @@ export class DebugSession implements IDebugSession { const outputQueue = new Queue(); this.rawListeners.push(this.raw.onDidOutput(async event => { + // When a variables event is received, execute immediately to obtain the variables value #126967 + if (event.body.variablesReference) { + const source = event.body.source && event.body.line ? { + lineNumber: event.body.line, + column: event.body.column ? event.body.column : 1, + source: this.getSource(event.body.source) + } : undefined; + const container = new ExpressionContainer(this, undefined, event.body.variablesReference, generateUuid()); + const children = container.getChildren(); + // we should put appendToRepl into queue to make sure the logs to be displayed in correct order + // see https://github.com/microsoft/vscode/issues/126967#issuecomment-874954269 + outputQueue.queue(async () => { + const resolved = await children; + resolved.forEach((child) => { + // Since we can not display multiple trees in a row, we are displaying these variables one after the other (ignoring their names) + (child).name = null; + this.appendToRepl(child, severity.Info, source); + }); + }); + return; + } outputQueue.queue(async () => { if (!event.body || !this.raw) { return; @@ -948,16 +969,7 @@ export class DebugSession implements IDebugSession { } } - if (event.body.variablesReference) { - const container = new ExpressionContainer(this, undefined, event.body.variablesReference, generateUuid()); - await container.getChildren().then(children => { - children.forEach(child => { - // Since we can not display multiple trees in a row, we are displaying these variables one after the other (ignoring their names) - (child).name = null; - this.appendToRepl(child, outputSeverity, source); - }); - }); - } else if (typeof event.body.output === 'string') { + if (typeof event.body.output === 'string') { this.appendToRepl(event.body.output, outputSeverity, source); } }); From f0cce2369b15a5a769c64294b5c0057c4cbf89ca Mon Sep 17 00:00:00 2001 From: Suzy Mueller Date: Wed, 14 Jul 2021 13:58:21 -0400 Subject: [PATCH 02/35] Sort threads in response order Return the threads in getAllThreads in the same order as they were received in the threads response. This handles the case where the thread order changes, or new threads are added that are not just appended to the list. Fixes #128546 --- .../contrib/debug/browser/debugSession.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/contrib/debug/browser/debugSession.ts b/src/vs/workbench/contrib/debug/browser/debugSession.ts index 058ab97e711..05c6a308148 100644 --- a/src/vs/workbench/contrib/debug/browser/debugSession.ts +++ b/src/vs/workbench/contrib/debug/browser/debugSession.ts @@ -46,6 +46,7 @@ export class DebugSession implements IDebugSession { private sources = new Map(); private threads = new Map(); + private threadIds: number[] = []; private cancellationMap = new Map(); private rawListeners: IDisposable[] = []; private fetchThreadsScheduler: RunOnceScheduler | undefined; @@ -694,7 +695,12 @@ export class DebugSession implements IDebugSession { getAllThreads(): IThread[] { const result: IThread[] = []; - this.threads.forEach(t => result.push(t)); + this.threadIds.forEach((threadId) => { + const thread = this.threads.get(threadId); + if (thread) { + result.push(thread); + } + }); return result; } @@ -729,9 +735,9 @@ export class DebugSession implements IDebugSession { } rawUpdate(data: IRawModelUpdate): void { - const threadIds: number[] = []; + this.threadIds = []; data.threads.forEach(thread => { - threadIds.push(thread.id); + this.threadIds.push(thread.id); if (!this.threads.has(thread.id)) { // A new thread came in, initialize it. this.threads.set(thread.id, new Thread(this, thread.name, thread.id)); @@ -745,7 +751,7 @@ export class DebugSession implements IDebugSession { }); this.threads.forEach(t => { // Remove all old threads which are no longer part of the update #75980 - if (threadIds.indexOf(t.threadId) === -1) { + if (this.threadIds.indexOf(t.threadId) === -1) { this.threads.delete(t.threadId); } }); From 7b67e477d8588baaca4eb570a71c1d93146919c1 Mon Sep 17 00:00:00 2001 From: Suzy Mueller Date: Wed, 28 Jul 2021 14:57:24 -0600 Subject: [PATCH 03/35] clear this.threadIds on clearThreads --- src/vs/workbench/contrib/debug/browser/debugSession.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vs/workbench/contrib/debug/browser/debugSession.ts b/src/vs/workbench/contrib/debug/browser/debugSession.ts index 05c6a308148..c8146e3cd4d 100644 --- a/src/vs/workbench/contrib/debug/browser/debugSession.ts +++ b/src/vs/workbench/contrib/debug/browser/debugSession.ts @@ -725,6 +725,7 @@ export class DebugSession implements IDebugSession { if (removeThreads) { this.threads.clear(); + this.threadIds = []; ExpressionContainer.allValues.clear(); } } From 16a7138834f376d3f90624b974000e24113a8516 Mon Sep 17 00:00:00 2001 From: Xinyu Sui Date: Wed, 28 Jul 2021 15:18:27 -0700 Subject: [PATCH 04/35] Improve accessibility in disassembly view --- .../workbench/contrib/debug/browser/disassemblyView.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/debug/browser/disassemblyView.ts b/src/vs/workbench/contrib/debug/browser/disassemblyView.ts index cd4785b5e71..2637984aeb6 100644 --- a/src/vs/workbench/contrib/debug/browser/disassemblyView.ts +++ b/src/vs/workbench/contrib/debug/browser/disassemblyView.ts @@ -562,16 +562,10 @@ class AccessibilityProvider implements IListAccessibilityProvider Date: Wed, 28 Jul 2021 18:20:50 -0700 Subject: [PATCH 05/35] Move event listeners to renderTemplate in disassembly view --- .../contrib/debug/browser/disassemblyView.ts | 131 ++++++++++-------- 1 file changed, 71 insertions(+), 60 deletions(-) diff --git a/src/vs/workbench/contrib/debug/browser/disassemblyView.ts b/src/vs/workbench/contrib/debug/browser/disassemblyView.ts index cd4785b5e71..1782edd4983 100644 --- a/src/vs/workbench/contrib/debug/browser/disassemblyView.ts +++ b/src/vs/workbench/contrib/debug/browser/disassemblyView.ts @@ -369,9 +369,10 @@ export class DisassemblyView extends EditorPane { } interface IBreakpointColumnTemplateData { - container: HTMLElement, - icon: HTMLElement, - disposables: IDisposable[] + currentElement: { element?: IDisassembledInstructionEntry }; + container: HTMLElement; + icon: HTMLElement; + disposables: IDisposable[]; } class BreakpointRenderer implements ITableRenderer { @@ -399,63 +400,67 @@ class BreakpointRenderer implements ITableRenderer this.rerenderDebugStackframe(icon, currentElement.element)), + addStandardDisposableListener(container, 'mouseover', () => { + if (currentElement.element?.allowBreakpoint) { + icon.classList.add(this._breakpointHintIcon); + } + }), + addStandardDisposableListener(container, 'mouseout', () => { + if (currentElement.element?.allowBreakpoint) { + icon.classList.remove(this._breakpointHintIcon); + } + }), + addStandardDisposableListener(container, 'click', () => { + if (currentElement.element?.allowBreakpoint) { + // click show hint while waiting for BP to resolve. + icon.classList.add(this._breakpointHintIcon); + if (currentElement.element.isBreakpointSet) { + this._debugService.removeInstructionBreakpoints(currentElement.element.instruction.address); + + } else if (currentElement.element.allowBreakpoint && !currentElement.element.isBreakpointSet) { + this._debugService.addInstructionBreakpoint(currentElement.element.instruction.address, 0); + } + } + }) + ]; + + return { currentElement, container, icon, disposables }; } - renderElement(element: IDisassembledInstructionEntry, index: number, templateData: IBreakpointColumnTemplateData, height: number | undefined): void { - const rerenderDebugStackframe = () => { - if (element.instruction.address === this._disassemblyView.currentInstructionAddress) { - templateData.icon.classList.add(this._debugStackframe); - } else { - templateData.icon.classList.remove(this._debugStackframe); - } + private rerenderDebugStackframe(icon: HTMLElement, element?: IDisassembledInstructionEntry) { + if (element?.instruction.address === this._disassemblyView.currentInstructionAddress) { + icon.classList.add(this._debugStackframe); + } else { + icon.classList.remove(this._debugStackframe); + } - templateData.icon.classList.remove(this._breakpointHintIcon); + icon.classList.remove(this._breakpointHintIcon); - if (element.isBreakpointSet) { - templateData.icon.classList.add(this._breakpointIcon); - } else { - templateData.icon.classList.remove(this._breakpointIcon); - } - }; - - rerenderDebugStackframe(); - templateData.disposables.push(this._disassemblyView.onDidChangeStackFrame(rerenderDebugStackframe)); - - // TODO: see getBreakpointMessageAndIcon in vs\workbench\contrib\debug\browser\breakpointEditorContribution.ts - // for more types of breakpoint icons - if (element.allowBreakpoint) { - templateData.disposables.push(addStandardDisposableListener(templateData.container, 'mouseover', () => { - templateData.icon.classList.add(this._breakpointHintIcon); - })); - - templateData.disposables.push(addStandardDisposableListener(templateData.container, 'mouseout', () => { - templateData.icon.classList.remove(this._breakpointHintIcon); - })); - - templateData.disposables.push(addStandardDisposableListener(templateData.container, 'click', () => { - // click show hint while waiting for BP to resolve. - templateData.icon.classList.add(this._breakpointHintIcon); - if (element.isBreakpointSet) { - this._debugService.removeInstructionBreakpoints(element.instruction.address); - - } else if (element.allowBreakpoint && !element.isBreakpointSet) { - this._debugService.addInstructionBreakpoint(element.instruction.address, 0); - } - })); + if (element?.isBreakpointSet) { + icon.classList.add(this._breakpointIcon); + } else { + icon.classList.remove(this._breakpointIcon); } } - disposeElement(element: IDisassembledInstructionEntry, index: number, templateData: IBreakpointColumnTemplateData, height: number | undefined): void { + renderElement(element: IDisassembledInstructionEntry, index: number, templateData: IBreakpointColumnTemplateData, height: number | undefined): void { + templateData.currentElement.element = element; + this.rerenderDebugStackframe(templateData.icon, element); + } + + disposeTemplate(templateData: IBreakpointColumnTemplateData): void { dispose(templateData.disposables); templateData.disposables = []; } - disposeTemplate(templateData: IBreakpointColumnTemplateData): void { } - } interface IInstructionColumnTemplateData { + currentElement: { element?: IDisassembledInstructionEntry }; // TODO: hover widget? instruction: HTMLElement; disposables: IDisposable[]; @@ -491,10 +496,27 @@ class InstructionRenderer extends Disposable implements ITableRenderer this.rerenderBackground(instruction, currentElement.element)) + ]; + + return { currentElement, instruction, disposables }; + } + + private rerenderBackground(instruction: HTMLElement, element?: IDisassembledInstructionEntry) { + if (element?.instruction.address === this._disassemblyView.currentInstructionAddress) { + instruction.style.background = this._topStackFrameColor?.toString() || 'transparent'; + } else { + instruction.style.background = 'transparent'; + } } renderElement(element: IDisassembledInstructionEntry, index: number, templateData: IInstructionColumnTemplateData, height: number | undefined): void { + templateData.currentElement.element = element; + const instruction = element.instruction; const sb = createStringBuilder(10000); @@ -523,25 +545,14 @@ class InstructionRenderer extends Disposable implements ITableRenderer { - if (element.instruction.address === this._disassemblyView.currentInstructionAddress) { - templateData.instruction.style.background = this._topStackFrameColor?.toString() || 'transparent'; - } else { - templateData.instruction.style.background = 'transparent'; - } - }; - - rerenderBackground(); - templateData.disposables.push(this._disassemblyView.onDidChangeStackFrame(rerenderBackground)); + this.rerenderBackground(templateData.instruction, element); } - disposeElement(element: IDisassembledInstructionEntry, index: number, templateData: IInstructionColumnTemplateData, height: number | undefined): void { + disposeTemplate(templateData: IInstructionColumnTemplateData): void { dispose(templateData.disposables); templateData.disposables = []; } - disposeTemplate(templateData: IInstructionColumnTemplateData): void { } - private applyFontInfo(element: HTMLElement) { const fontInfo = this._disassemblyView.fontInfo; element.style.fontFamily = fontInfo.getMassagedFontFamily(); From 3bf19eaba3aaee08f5ff320660bf44c546650ae1 Mon Sep 17 00:00:00 2001 From: Xinyu Sui Date: Wed, 28 Jul 2021 18:25:03 -0700 Subject: [PATCH 06/35] Clean up --- .../contrib/debug/browser/disassemblyView.ts | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/vs/workbench/contrib/debug/browser/disassemblyView.ts b/src/vs/workbench/contrib/debug/browser/disassemblyView.ts index 1782edd4983..a1751dfbcf2 100644 --- a/src/vs/workbench/contrib/debug/browser/disassemblyView.ts +++ b/src/vs/workbench/contrib/debug/browser/disassemblyView.ts @@ -370,7 +370,6 @@ export class DisassemblyView extends EditorPane { interface IBreakpointColumnTemplateData { currentElement: { element?: IDisassembledInstructionEntry }; - container: HTMLElement; icon: HTMLElement; disposables: IDisposable[]; } @@ -428,7 +427,17 @@ class BreakpointRenderer implements ITableRenderer Date: Thu, 29 Jul 2021 09:59:55 -0700 Subject: [PATCH 07/35] no more diffing when it is simple replacing. --- .../contrib/notebook/common/model/notebookTextModel.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts b/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts index 582446c518f..24842491bdd 100644 --- a/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts +++ b/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts @@ -861,6 +861,11 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel } private _spliceNotebookCellOutputs2(cell: NotebookCellTextModel, outputs: ICellOutput[], computeUndoRedo: boolean): void { + if (outputs.length <= 1) { + this._spliceNotebookCellOutputs(cell, { start: 0, deleteCount: cell.outputs.length, newOutputs: outputs }, false, computeUndoRedo); + return; + } + const diff = new LcsDiff(new OutputSequence(cell.outputs), new OutputSequence(outputs)); const diffResult = diff.ComputeDiff(false); const splices: NotebookCellOutputsSplice[] = diffResult.changes.map(change => ({ start: change.originalStart, deleteCount: change.originalLength, newOutputs: outputs.slice(change.modifiedStart, change.modifiedStart + change.modifiedLength) })); From 6775f929cb25bf190b16f2d25e07cad49539b19d Mon Sep 17 00:00:00 2001 From: meganrogge Date: Thu, 29 Jul 2021 10:16:46 -0700 Subject: [PATCH 08/35] fix #129776 and fix #128301 --- .../contrib/terminal/browser/terminalGroupService.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalGroupService.ts b/src/vs/workbench/contrib/terminal/browser/terminalGroupService.ts index 0a127312646..4c5ad332e8a 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalGroupService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalGroupService.ts @@ -299,10 +299,8 @@ export class TerminalGroupService extends Disposable implements ITerminalGroupSe const activeInstanceIndex = instanceLocation.instanceIndex; - if (this.activeGroupIndex !== instanceLocation.groupIndex) { - this.activeGroupIndex = instanceLocation.groupIndex; - this._onDidChangeActiveGroup.fire(this.activeGroup); - } + this.activeGroupIndex = instanceLocation.groupIndex; + this._onDidChangeActiveGroup.fire(this.activeGroup); instanceLocation.group.setActiveInstanceByIndex(activeInstanceIndex, true); this.groups.forEach((g, i) => g.setVisible(i === instanceLocation.groupIndex)); From e9ff7c5dc4b4be4b82b968d7e1b4e0f2e08fe236 Mon Sep 17 00:00:00 2001 From: rebornix Date: Thu, 29 Jul 2021 10:24:41 -0700 Subject: [PATCH 09/35] fix test. --- .../contrib/notebook/common/model/notebookTextModel.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts b/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts index 24842491bdd..25a651df040 100644 --- a/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts +++ b/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts @@ -861,6 +861,10 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel } private _spliceNotebookCellOutputs2(cell: NotebookCellTextModel, outputs: ICellOutput[], computeUndoRedo: boolean): void { + if (outputs.length === 0 && cell.outputs.length === 0) { + return; + } + if (outputs.length <= 1) { this._spliceNotebookCellOutputs(cell, { start: 0, deleteCount: cell.outputs.length, newOutputs: outputs }, false, computeUndoRedo); return; From d2cc2f3b38f1b10873bd4dfec70ddfce42a5a075 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Thu, 29 Jul 2021 10:54:14 -0700 Subject: [PATCH 10/35] testing: include test context in gutter menus --- .../browser/explorerProjections/index.ts | 2 +- .../testing/browser/testingDecorations.ts | 5 ++-- .../testing/browser/testingExplorerView.ts | 2 +- .../contrib/testing/common/testId.ts | 9 ++---- .../contrib/testing/common/testService.ts | 29 +++++++++++++++++-- 5 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/vs/workbench/contrib/testing/browser/explorerProjections/index.ts b/src/vs/workbench/contrib/testing/browser/explorerProjections/index.ts index de6f154b00c..aa8eac49e8c 100644 --- a/src/vs/workbench/contrib/testing/browser/explorerProjections/index.ts +++ b/src/vs/workbench/contrib/testing/browser/explorerProjections/index.ts @@ -162,7 +162,7 @@ export class TestItemTreeElement implements IActionableTestTreeElement { tests: [this.test], }; - for (let p = this.parent; p; p = p.parent) { + for (let p = this.parent; p && p.depth > 0; p = p.parent) { context.tests.unshift(p.test); } diff --git a/src/vs/workbench/contrib/testing/browser/testingDecorations.ts b/src/vs/workbench/contrib/testing/browser/testingDecorations.ts index 0ca88cf4f62..b60751d308e 100644 --- a/src/vs/workbench/contrib/testing/browser/testingDecorations.ts +++ b/src/vs/workbench/contrib/testing/browser/testingDecorations.ts @@ -39,7 +39,7 @@ import { ITestProfileService } from 'vs/workbench/contrib/testing/common/testCon import { isFailedState, maxPriority } from 'vs/workbench/contrib/testing/common/testingStates'; import { buildTestUri, TestUriType } from 'vs/workbench/contrib/testing/common/testingUri'; import { ITestResultService } from 'vs/workbench/contrib/testing/common/testResultService'; -import { ITestService, testsInFile } from 'vs/workbench/contrib/testing/common/testService'; +import { getContextForTestItem, ITestService, testsInFile } from 'vs/workbench/contrib/testing/common/testService'; function isOriginalInDiffEditor(codeEditorService: ICodeEditorService, codeEditor: ICodeEditor): boolean { const diffEditors = codeEditorService.listDiffEditors(); @@ -464,7 +464,8 @@ abstract class RunTestDecoration extends Disposable { try { const target: IAction[] = []; - const actionsDisposable = createAndFillInContextMenuActions(menu, { shouldForwardArgs: true }, target); + const arg = getContextForTestItem(this.testService.collection, test.item.extId); + const actionsDisposable = createAndFillInContextMenuActions(menu, { shouldForwardArgs: true, arg }, target); return { object: target, dispose: () => actionsDisposable.dispose }; } finally { menu.dispose(); diff --git a/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts b/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts index 9e8d5c80023..a7deaf7a103 100644 --- a/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts +++ b/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts @@ -566,7 +566,7 @@ export class TestingExplorerViewModel extends Disposable { let expandToLevel = 0; const idPath = [...TestId.fromString(id).idsFromRoot()]; for (let i = idPath.length - 1; i >= expandToLevel; i--) { - const element = projection.getElementByTestId(idPath[i]); + const element = projection.getElementByTestId(idPath[i].toString()); // Skip all elements that aren't in the tree. if (!element || !this.tree.hasElement(element)) { continue; diff --git a/src/vs/workbench/contrib/testing/common/testId.ts b/src/vs/workbench/contrib/testing/common/testId.ts index c3194fb16a3..4e43e965779 100644 --- a/src/vs/workbench/contrib/testing/common/testId.ts +++ b/src/vs/workbench/contrib/testing/common/testId.ts @@ -130,13 +130,8 @@ export class TestId { * including the current item. */ public *idsFromRoot() { - let built = this.path[0]; - yield built; - - for (let i = 1; i < this.viewEnd; i++) { - built += TestIdPathParts.Delimiter; - built += this.path[i]; - yield built; + for (let i = 1; i <= this.viewEnd; i++) { + yield new TestId(this.path, i); } } diff --git a/src/vs/workbench/contrib/testing/common/testService.ts b/src/vs/workbench/contrib/testing/common/testService.ts index 0d4f944def8..14a9caf80e5 100644 --- a/src/vs/workbench/contrib/testing/common/testService.ts +++ b/src/vs/workbench/contrib/testing/common/testService.ts @@ -8,10 +8,11 @@ import { Event } from 'vs/base/common/event'; import * as extpath from 'vs/base/common/extpath'; import { Iterable } from 'vs/base/common/iterator'; import { IDisposable } from 'vs/base/common/lifecycle'; +import { MarshalledId } from 'vs/base/common/marshalling'; import { URI } from 'vs/base/common/uri'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { IObservableValue } from 'vs/workbench/contrib/testing/common/observableValue'; -import { AbstractIncrementalTestCollection, IncrementalTestCollectionItem, InternalTestItem, ITestIdWithSrc, ResolvedTestRunRequest, RunTestForControllerRequest, TestItemExpandState, TestRunProfileBitset, TestsDiff } from 'vs/workbench/contrib/testing/common/testCollection'; +import { AbstractIncrementalTestCollection, IncrementalTestCollectionItem, InternalTestItem, ITestIdWithSrc, ITestItemContext, ResolvedTestRunRequest, RunTestForControllerRequest, TestItemExpandState, TestRunProfileBitset, TestsDiff } from 'vs/workbench/contrib/testing/common/testCollection'; import { TestExclusions } from 'vs/workbench/contrib/testing/common/testExclusions'; import { TestId } from 'vs/workbench/contrib/testing/common/testId'; import { ITestResult } from 'vs/workbench/contrib/testing/common/testResult'; @@ -84,6 +85,28 @@ export const getCollectionItemParents = function* (collection: IMainThreadTestCo export const testCollectionIsEmpty = (collection: IMainThreadTestCollection) => !Iterable.some(collection.rootItems, r => r.children.size > 0); +export const getContextForTestItem = (collection: IMainThreadTestCollection, id: string | TestId) => { + if (typeof id === 'string') { + id = TestId.fromString(id); + } + + if (id.isRoot) { + return { controller: id.toString() }; + } + + const context: ITestItemContext = { $mid: MarshalledId.TestItemContext, tests: [] }; + for (const i of id.idsFromRoot()) { + if (!i.isRoot) { + const test = collection.getNodeById(i.toString()); + if (test) { + context.tests.push(test); + } + } + } + + return context; +}; + /** * Ensures the test with the given ID exists in the collection, if possible. * If cancellation is requested, or the test cannot be found, it will return @@ -94,7 +117,7 @@ export const expandAndGetTestById = async (collection: IMainThreadTestCollection let expandToLevel = 0; for (let i = idPath.length - 1; !ct.isCancellationRequested && i >= expandToLevel;) { - const id = idPath[i]; + const id = idPath[i].toString(); const existing = collection.getNodeById(id); if (!existing) { i--; @@ -106,7 +129,7 @@ export const expandAndGetTestById = async (collection: IMainThreadTestCollection } // expand children only if it looks like it's necessary - if (!existing.children.has(idPath[i + 1])) { + if (!existing.children.has(idPath[i + 1].toString())) { await collection.expand(id, 0); } From 254a1a553fe2cc212fe1b4829362f152d4f052bf Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Thu, 29 Jul 2021 10:58:38 -0700 Subject: [PATCH 11/35] debug: fix alignment of breakpoint decoration Fixes #128172 --- .../contrib/debug/browser/media/debug.contribution.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/debug/browser/media/debug.contribution.css b/src/vs/workbench/contrib/debug/browser/media/debug.contribution.css index e2ff3a9bcf6..b7817a82413 100644 --- a/src/vs/workbench/contrib/debug/browser/media/debug.contribution.css +++ b/src/vs/workbench/contrib/debug/browser/media/debug.contribution.css @@ -42,8 +42,8 @@ /* Do not push text with inline decoration when decoration on start of line */ .monaco-editor .debug-top-stack-frame-column.start-of-line::before { position: absolute; - top: 2px; - transform: translateX(-17px); + top: 50%; + transform: translate(-17px, -50%); } .monaco-editor .debug-top-stack-frame-column { From 5c1b0b73d85b3e372690cc18d3b8197643fb5746 Mon Sep 17 00:00:00 2001 From: rebornix Date: Thu, 29 Jul 2021 11:41:20 -0700 Subject: [PATCH 12/35] fix #128999. --- .../contrib/notebook/browser/notebookEditorWidget.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts b/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts index bc947dde481..0f03a2cdfd6 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts @@ -1556,6 +1556,11 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor }; } + if (this._shadowElementViewInfo && this._shadowElementViewInfo.width <= 0 && this._shadowElementViewInfo.height <= 0) { + this.onWillHide(); + return; + } + const topInserToolbarHeight = this._notebookOptions.computeTopInserToolbarHeight(this.viewModel?.viewType); this._dimension = new DOM.Dimension(dimension.width, dimension.height); From e8192ca6e316a5c8e472e8f81b56a5d8e9d1d612 Mon Sep 17 00:00:00 2001 From: Don Jayamanne Date: Thu, 29 Jul 2021 11:44:08 -0700 Subject: [PATCH 13/35] Temp: swtich image rendering pref from svg to png --- extensions/ipynb/src/helpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/ipynb/src/helpers.ts b/extensions/ipynb/src/helpers.ts index 31fa9193355..db51e14a37b 100644 --- a/extensions/ipynb/src/helpers.ts +++ b/extensions/ipynb/src/helpers.ts @@ -46,8 +46,8 @@ const orderOfMimeTypes = [ 'image/gif', 'text/latex', 'text/markdown', - 'image/svg+xml', 'image/png', + 'image/svg+xml', 'image/jpeg', 'application/json', 'text/plain' From 752b6e4e8a81872fb0359442c7a93e3b72fd9e87 Mon Sep 17 00:00:00 2001 From: Jackson Kearl Date: Thu, 29 Jul 2021 11:53:45 -0700 Subject: [PATCH 14/35] Fix #125506 --- .../browser/gettingStartedExtensionPoint.ts | 4 ++-- .../gettingStarted/browser/gettingStartedService.ts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedExtensionPoint.ts b/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedExtensionPoint.ts index aae5231afa9..2842fd46690 100644 --- a/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedExtensionPoint.ts +++ b/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedExtensionPoint.ts @@ -159,12 +159,12 @@ export const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPo body: 'onContext:${2:key}' }, { - label: 'extensionInstalled', + label: 'onExtensionInstalled', description: localize('walkthroughs.steps.completionEvents.extensionInstalled', 'Check off step when an extension with the given id is installed. If the extension is already installed, the step will start off checked.'), body: 'extensionInstalled:${3:extensionId}' }, { - label: 'stepSelected', + label: 'onStepSelected', description: localize('walkthroughs.steps.completionEvents.stepSelected', 'Check off step as soon as it is selected.'), body: 'stepSelected' }, diff --git a/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedService.ts b/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedService.ts index cb262745c78..4b44b9b44cb 100644 --- a/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedService.ts +++ b/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedService.ts @@ -609,14 +609,14 @@ export class GettingStartedService extends Disposable implements IGettingStarted } break; } - case 'stepSelected': - event = eventType + ':' + step.id; + case 'onStepSelected': case 'stepSelected': + event = 'stepSelected:' + step.id; break; case 'onCommand': event = eventType + ':' + argument.replace(/^toSide:/, ''); break; - case 'extensionInstalled': - event = eventType + ':' + argument.toLowerCase(); + case 'onExtensionInstalled': case 'extensionInstalled': + event = 'extensionInstalled:' + argument.toLowerCase(); break; default: console.error(`Unknown completionEvent ${event} when registering step ${step.id}`); From aadb6b9a1ba5893cb6d8274c31a8dc3c8c2838ff Mon Sep 17 00:00:00 2001 From: Jackson Kearl Date: Thu, 29 Jul 2021 11:56:58 -0700 Subject: [PATCH 15/35] consistancy of label/body --- .../gettingStarted/browser/gettingStartedExtensionPoint.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedExtensionPoint.ts b/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedExtensionPoint.ts index 2842fd46690..c72b0ec1af3 100644 --- a/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedExtensionPoint.ts +++ b/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedExtensionPoint.ts @@ -161,12 +161,12 @@ export const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPo { label: 'onExtensionInstalled', description: localize('walkthroughs.steps.completionEvents.extensionInstalled', 'Check off step when an extension with the given id is installed. If the extension is already installed, the step will start off checked.'), - body: 'extensionInstalled:${3:extensionId}' + body: 'onExtensionInstalled:${3:extensionId}' }, { label: 'onStepSelected', description: localize('walkthroughs.steps.completionEvents.stepSelected', 'Check off step as soon as it is selected.'), - body: 'stepSelected' + body: 'onStepSelected' }, ] } From 2bd28358e76d8b0a9477e9b9dd31f93b04e41c81 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Thu, 29 Jul 2021 11:57:46 -0700 Subject: [PATCH 16/35] testing: improve wording for TestController.items Fixes #129570 --- src/vs/vscode.d.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index cb4aa52694e..4034acdb828 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -13921,16 +13921,16 @@ declare module 'vscode' { label: string; /** - * Available test items. Tests in the workspace should be added in this - * collection. The extension controls when to add these, although the - * editor may request children using the {@link resolveHandler}, - * and the extension should add tests for a file when - * {@link vscode.workspace.onDidOpenTextDocument} fires in order for - * decorations for tests within a file to be visible. + * A collection of "top-level" {@link TestItem} instances, which can in + * turn have their own {@link TestItem.children | children} to form the + * "test tree." * - * Tests in this collection should be watched and updated by the extension - * as files change. See {@link resolveHandler} for details around - * for the lifecycle of watches. + * The extension controls when to add tests. For example, extensions should + * add tests for a file when {@link vscode.workspace.onDidOpenTextDocument} + * fires in order for decorations for tests within a file to be visible. + * + * However, the editor may sometimes explicitly request children using the + * {@link resolveHandler} See the documentation on that method for more details. */ readonly items: TestItemCollection; From 9b56416d23e28e8ddc36dc287cbce3223b8fda7f Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 28 Jul 2021 12:41:44 -0700 Subject: [PATCH 17/35] Add full name for link Used for docs generation --- src/vs/vscode.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index 4034acdb828..b3dde9d781c 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -13903,9 +13903,9 @@ declare module 'vscode' { } /** - * Entry point to discover and execute tests. It contains {@link items} which + * Entry point to discover and execute tests. It contains {@link TestController.items} which * are used to populate the editor UI, and is associated with - * {@link createRunProfile run profiles} to allow + * {@link TestController.createRunProfile run profiles} to allow * for tests to be executed. */ export interface TestController { From 4225f210721dd265535a0d92b0b4927e53e42a23 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 29 Jul 2021 11:59:40 -0700 Subject: [PATCH 18/35] Revert "Try to handling paths with encodes percent or slash" This reverts commit e8a59bc6f920e731b47f0bc72263e82aba8b796e. --- .../workbench/contrib/webview/browser/webviewElement.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/webviewElement.ts b/src/vs/workbench/contrib/webview/browser/webviewElement.ts index 7360c6577a2..56cc3957919 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewElement.ts @@ -246,13 +246,7 @@ export class IFrameWebview extends Disposable implements Webview { const uri = URI.from({ scheme: entry.scheme, authority: entry.authority, - // This gets re-encoded - path: decodeURIComponent( - entry.path - // Make sure we don't transform encoded slash or percent into a real slash/percent - .replace(/%2f/ig, '%252f') - .replace(/%25/ig, '%2525') - ), + path: decodeURIComponent(entry.path), // This gets re-encoded query: entry.query ? decodeURIComponent(entry.query) : entry.query, }); this.loadResource(entry.id, uri, entry.ifNoneMatch); From 44f54ed0017685f29b564ee36c79907afd5c090e Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Thu, 29 Jul 2021 21:14:38 +0200 Subject: [PATCH 19/35] Add help link to the dialog --- .../contrib/userDataSync/browser/userDataSync.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts index 898f3ad9621..5079140047c 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts @@ -57,6 +57,7 @@ import { ViewPaneContainer } from 'vs/workbench/browser/parts/views/viewPaneCont import { EditorResolution } from 'vs/platform/editor/common/editor'; import { CATEGORIES } from 'vs/workbench/common/actions'; import { IUserDataInitializationService } from 'vs/workbench/services/userData/browser/userDataInit'; +import { MarkdownString } from 'vs/base/common/htmlContent'; const CONTEXT_CONFLICTS_SOURCES = new RawContextKey('conflictsSources', ''); @@ -488,13 +489,20 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo this.updateSyncAfterInitializationContext(false); const result = await this.dialogService.show( Severity.Info, - localize('turnon sync after initialization message', "Your settings, keybindings, extensions, snippets and UI State were initialized but are not getting synced. Do you want to turn on Settings Sync?"), + localize('settings sync is off', "Settings Sync is Off"), [ localize('turn on settings sync', "Turn On Settings Sync"), localize('cancel', "Cancel"), ], { - cancelId: 1 + cancelId: 1, + custom: { + markdownDetails: [{ + markdown: new MarkdownString(`${localize('turnon sync after initialization message', "Your settings, keybindings, extensions, snippets and UI State were initialized but are not getting synced. Do you want to turn on Settings Sync?")}`, { isTrusted: true }) + }, { + markdown: new MarkdownString(`${localize({ key: 'change later', comment: ['Context here is that user can change (turn on/off) settings sync later.'] }, "You can always change this later.")} [${localize('learn more', "Learn More")}](https://aka.ms/vscode-settings-sync-help).`, { isTrusted: true }) + }] + } } ); if (result.choice === 0) { From 57cbf303070e5950ad200dec68b7798a87d72794 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Thu, 29 Jul 2021 12:32:53 -0700 Subject: [PATCH 20/35] fix #129791 --- src/vs/workbench/api/common/extHostTerminalService.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/api/common/extHostTerminalService.ts b/src/vs/workbench/api/common/extHostTerminalService.ts index c35f7594626..6f6da4761c6 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -147,7 +147,7 @@ export class ExtHostTerminal { }); } - public async createExtensionTerminal(isSplitTerminal?: boolean, target?: TerminalLocation, iconPath?: TerminalIcon): Promise { + public async createExtensionTerminal(isSplitTerminal?: boolean, target?: TerminalLocation, iconPath?: TerminalIcon, color?: ThemeColor): Promise { if (typeof this._id !== 'string') { throw new Error('Terminal has already been created'); } @@ -155,6 +155,7 @@ export class ExtHostTerminal { name: this._name, isExtensionCustomPtyTerminal: true, icon: iconPath, + color: ThemeColor.isThemeColor(color) ? color.id : undefined, isSplitTerminal, target }); @@ -373,7 +374,7 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I public createExtensionTerminal(options: vscode.ExtensionTerminalOptions, internalOptions?: ITerminalInternalOptions): vscode.Terminal { const terminal = new ExtHostTerminal(this._proxy, generateUuid(), options, options.name); const p = new ExtHostPseudoterminal(options.pty); - terminal.createExtensionTerminal(internalOptions?.isSplitTerminal, internalOptions?.target, asTerminalIcon(options.iconPath)).then(id => { + terminal.createExtensionTerminal(internalOptions?.isSplitTerminal, internalOptions?.target, asTerminalIcon(options.iconPath), asTerminalColor(options.color)).then(id => { const disposable = this._setupExtHostProcessListeners(id, p); this._terminalProcessDisposables[id] = disposable; }); @@ -856,3 +857,7 @@ function asTerminalIcon(iconPath?: vscode.Uri | { light: vscode.Uri; dark: vscod color: iconPath.color as ThemeColor }; } + +function asTerminalColor(color?: vscode.ThemeColor): ThemeColor | undefined { + return ThemeColor.isThemeColor(color) ? color as ThemeColor : undefined; +} From 24ae09b60e1a9e84f03aef65eb97b2bb554c84d1 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Thu, 29 Jul 2021 12:42:46 -0700 Subject: [PATCH 21/35] testing: fix test document filter not working with parent dirs on windows For #128824 --- .../contrib/testing/browser/testingExplorerView.ts | 10 +++++----- src/vs/workbench/contrib/testing/common/testService.ts | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts b/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts index a7deaf7a103..52000033939 100644 --- a/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts +++ b/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts @@ -737,8 +737,8 @@ const enum FilterResult { Include, } -const hasNodeInOrParentOfUri = (collection: IMainThreadTestCollection, testUri: URI | string, fromNode?: string) => { - testUri = testUri.toString(); +const hasNodeInOrParentOfUri = (collection: IMainThreadTestCollection, testUri: URI, fromNode?: string) => { + const fsPath = testUri.fsPath; const queue: Iterable[] = [fromNode ? [fromNode] : collection.rootIds]; while (queue.length) { @@ -753,7 +753,7 @@ const hasNodeInOrParentOfUri = (collection: IMainThreadTestCollection, testUri: continue; } - if (extpath.isEqualOrParent(testUri, node.item.uri.toString())) { + if (extpath.isEqualOrParent(fsPath, node.item.uri.fsPath)) { return true; } } @@ -765,7 +765,7 @@ const hasNodeInOrParentOfUri = (collection: IMainThreadTestCollection, testUri: class TestsFilter implements ITreeFilter { private lastText?: string; private filters: [include: boolean, value: string][] | undefined; - private documentUri: string | undefined; + private documentUri: URI | undefined; constructor( private readonly collection: IMainThreadTestCollection, @@ -826,7 +826,7 @@ class TestsFilter implements ITreeFilter { } public filterToDocumentUri(uri: URI | undefined) { - this.documentUri = uri?.toString(); + this.documentUri = uri; } private testState(element: TestItemTreeElement): FilterResult { diff --git a/src/vs/workbench/contrib/testing/common/testService.ts b/src/vs/workbench/contrib/testing/common/testService.ts index 14a9caf80e5..e339ac05aa4 100644 --- a/src/vs/workbench/contrib/testing/common/testService.ts +++ b/src/vs/workbench/contrib/testing/common/testService.ts @@ -161,18 +161,18 @@ export const getAllTestsInHierarchy = async (collection: IMainThreadTestCollecti * in strictly descending order. */ export const testsInFile = async function* (collection: IMainThreadTestCollection, uri: URI): AsyncIterable { - const demandUriStr = uri.toString(); + const demandFsPath = uri.fsPath; for (const test of collection.all) { if (!test.item.uri) { continue; } - const itemUriStr = test.item.uri.toString(); - if (itemUriStr === demandUriStr) { + const itemFsPath = test.item.uri.fsPath; + if (itemFsPath === demandFsPath) { yield test; } - if (extpath.isEqualOrParent(demandUriStr, itemUriStr) && test.expand === TestItemExpandState.Expandable) { + if (extpath.isEqualOrParent(demandFsPath, itemFsPath) && test.expand === TestItemExpandState.Expandable) { await collection.expand(test.item.extId, 1); } } From a491a1e07f4a6e097ebabe7180ebddac751dce9e Mon Sep 17 00:00:00 2001 From: rebornix Date: Thu, 29 Jul 2021 13:29:10 -0700 Subject: [PATCH 22/35] fix #128770. --- src/vs/workbench/contrib/comments/browser/reactionsAction.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/comments/browser/reactionsAction.ts b/src/vs/workbench/contrib/comments/browser/reactionsAction.ts index 28215b94592..a3e86b9d645 100644 --- a/src/vs/workbench/contrib/comments/browser/reactionsAction.ts +++ b/src/vs/workbench/contrib/comments/browser/reactionsAction.ts @@ -49,7 +49,7 @@ export class ReactionActionViewItem extends ActionViewItem { let reactionIcon = dom.append(this.label, dom.$('.reaction-icon')); reactionIcon.style.display = ''; let uri = URI.revive(action.icon); - reactionIcon.style.backgroundImage = `url('${uri}')`; + reactionIcon.style.backgroundImage = dom.asCSSUrl(uri); reactionIcon.title = action.label; } if (action.count) { From 302af5ff6307a2c5d18ef13cda78fa8de7f1fe7c Mon Sep 17 00:00:00 2001 From: Raymond Zhao Date: Thu, 29 Jul 2021 14:06:19 -0700 Subject: [PATCH 23/35] Fix #129581 --- .../preferences/browser/settingsWidgets.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/preferences/browser/settingsWidgets.ts b/src/vs/workbench/contrib/preferences/browser/settingsWidgets.ts index e59bbccf82d..5d8fa7582d8 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsWidgets.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsWidgets.ts @@ -1201,17 +1201,17 @@ export class ObjectSettingDropdownWidget extends AbstractListSettingWidget update( - originalKeyOrValue.type === 'boolean' - ? { ...originalKeyOrValue, data: selected === 'true' ? true : false } - : { ...originalKeyOrValue, data: selected }, + changedKeyOrValue.type === 'boolean' + ? { ...changedKeyOrValue, data: selected === 'true' ? true : false } + : { ...changedKeyOrValue, data: selected }, ) ) ); @@ -1227,10 +1227,13 @@ export class ObjectSettingDropdownWidget extends AbstractListSettingWidget keyOrValue.data === option.value); if (selected === -1 && keyOrValue.options.length) { update( - originalKeyOrValue.type === 'boolean' - ? { ...originalKeyOrValue, data: true } - : { ...originalKeyOrValue, data: keyOrValue.options[0].value } + changedKeyOrValue.type === 'boolean' + ? { ...changedKeyOrValue, data: true } + : { ...changedKeyOrValue, data: keyOrValue.options[0].value } ); + } else if (changedKeyOrValue.type === 'boolean') { + // https://github.com/microsoft/vscode/issues/129581 + update({ ...changedKeyOrValue, data: keyOrValue.data === 'true' }); } return { widget: selectBox, element: wrapper }; From 14de627cf237d4c6d9375fa8d411432eae63858a Mon Sep 17 00:00:00 2001 From: rebornix Date: Thu, 29 Jul 2021 14:23:43 -0700 Subject: [PATCH 24/35] fix #127198. --- .../browser/contrib/find/findModel.ts | 13 +++++++- .../browser/contrib/find/test/find.test.ts | 30 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/find/findModel.ts b/src/vs/workbench/contrib/notebook/browser/contrib/find/findModel.ts index 99da66dff8e..4dd7729e00a 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/find/findModel.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/find/findModel.ts @@ -143,6 +143,11 @@ export class FindModel extends Disposable { return; } + if (findMatches.length === 0) { + this.set([], false); + return; + } + if (this._currentMatch === -1) { // no active current match this.set(findMatches, false); @@ -186,7 +191,7 @@ export class FindModel extends Disposable { ?? this._findMatches[oldCurrIndex.index].matches[oldCurrIndex.remainder].range; // not attached, just use the range - const matchAfterSelection = findFirstInSorted(findMatches, match => match.index >= oldCurrMatchCellIndex); + const matchAfterSelection = findFirstInSorted(findMatches, match => match.index >= oldCurrMatchCellIndex) % findMatches.length; if (findMatches[matchAfterSelection].index > oldCurrMatchCellIndex) { // there is no search result in curr cell anymore this._updateCurrentMatch(findMatches, this._matchesCountBeforeIndex(findMatches, matchAfterSelection)); @@ -215,6 +220,12 @@ export class FindModel extends Disposable { this.constructFindMatchesStarts(); this._currentMatch = -1; this.clearCurrentFindMatchDecoration(); + + this._state.changeMatchInfo( + this._currentMatch, + this._findMatches.reduce((p, c) => p + c.matches.length, 0), + undefined + ); return; } diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/find/test/find.test.ts b/src/vs/workbench/contrib/notebook/browser/contrib/find/test/find.test.ts index 1ab397bcdc9..0853cc1f462 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/find/test/find.test.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/find/test/find.test.ts @@ -192,4 +192,34 @@ suite('Notebook Find', () => { assert.strictEqual(model.currentMatch, 1); }); }); + + test('Reset when match not found, #127198', async function () { + await withTestNotebook( + [ + ['# header 1', 'markdown', CellKind.Markup, [], {}], + ['paragraph 1', 'markdown', CellKind.Markup, [], {}], + ['paragraph 2', 'markdown', CellKind.Markup, [], {}], + ], + async (editor, viewModel, accessor) => { + accessor.stub(IConfigurationService, configurationService); + const state = new FindReplaceState(); + const model = new FindModel(editor, state, accessor.get(IConfigurationService)); + state.change({ isRevealed: true }, true); + state.change({ searchString: '1' }, true); + assert.strictEqual(model.findMatches.length, 2); + assert.strictEqual(model.currentMatch, -1); + model.find(false); + assert.strictEqual(model.currentMatch, 0); + model.find(false); + assert.strictEqual(model.currentMatch, 1); + model.find(false); + assert.strictEqual(model.currentMatch, 0); + + assert.strictEqual(editor.textModel.length, 3); + + state.change({ searchString: '3' }, true); + assert.strictEqual(model.currentMatch, -1); + assert.strictEqual(model.findMatches.length, 0); + }); + }); }); From 7ec64f0dad5dbf5fbc4fe2b1f9383844c29095b7 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Thu, 29 Jul 2021 23:27:10 +0200 Subject: [PATCH 25/35] Improves inline suggestions to work with screenreaders. --- .../contrib/inlineCompletions/ghostText.ts | 21 +++++++++- .../inlineCompletions/ghostTextController.ts | 23 +++++----- .../inlineCompletionsHoverParticipant.ts | 42 ++++++++++++++++++- 3 files changed, 72 insertions(+), 14 deletions(-) diff --git a/src/vs/editor/contrib/inlineCompletions/ghostText.ts b/src/vs/editor/contrib/inlineCompletions/ghostText.ts index 6817c1d24b7..077a85b1718 100644 --- a/src/vs/editor/contrib/inlineCompletions/ghostText.ts +++ b/src/vs/editor/contrib/inlineCompletions/ghostText.ts @@ -28,9 +28,9 @@ export class GhostText { this.parts.every((part, index) => part.equals(other.parts[index])); } - render(text: string, debug: boolean = false): string { + render(documentText: string, debug: boolean = false): string { const l = this.lineNumber; - return applyEdits(text, + return applyEdits(documentText, [ ...this.parts.map(p => ({ range: { startLineNumber: l, endLineNumber: l, startColumn: p.column, endColumn: p.column }, @@ -39,6 +39,23 @@ export class GhostText { ] ); } + + renderForScreenReader(lineText: string): string { + if (this.parts.length === 0) { + return ''; + } + const lastPart = this.parts[this.parts.length - 1]; + + const cappedLineText = lineText.substr(0, lastPart.column - 1); + const text = applyEdits(cappedLineText, + this.parts.map(p => ({ + range: { startLineNumber: 1, endLineNumber: 1, startColumn: p.column, endColumn: p.column }, + text: p.lines.join('\n') + })) + ); + + return text.substring(this.parts[0].column - 1); + } } class PositionOffsetTransformer { diff --git a/src/vs/editor/contrib/inlineCompletions/ghostTextController.ts b/src/vs/editor/contrib/inlineCompletions/ghostTextController.ts index 8e76f4a8a25..c42f11b7e76 100644 --- a/src/vs/editor/contrib/inlineCompletions/ghostTextController.ts +++ b/src/vs/editor/contrib/inlineCompletions/ghostTextController.ts @@ -15,6 +15,7 @@ import * as nls from 'vs/nls'; import { ContextKeyExpr, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { GhostTextModel } from 'vs/editor/contrib/inlineCompletions/ghostTextModel'; +import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; export class GhostTextController extends Disposable { public static readonly inlineSuggestionVisible = new RawContextKey('inlineSuggestionVisible', false, nls.localize('inlineSuggestionVisible', "Whether an inline suggestion is visible")); @@ -28,7 +29,7 @@ export class GhostTextController extends Disposable { private triggeredExplicitly = false; protected readonly activeController = this._register(new MutableDisposable()); - private get activeModel(): GhostTextModel | undefined { + public get activeModel(): GhostTextModel | undefined { return this.activeController.value?.model; } @@ -168,21 +169,23 @@ const GhostTextCommand = EditorCommand.bindToContribution(GhostTextController.ge export const commitInlineSuggestionAction = new GhostTextCommand({ id: 'editor.action.inlineSuggest.commit', - precondition: ContextKeyExpr.and( - GhostTextController.inlineSuggestionVisible, - GhostTextController.inlineSuggestionHasIndentation.toNegated(), - EditorContextKeys.tabMovesFocus.toNegated() - ), - kbOpts: { - weight: 200, - primary: KeyCode.Tab, - }, + precondition: GhostTextController.inlineSuggestionVisible, handler(x) { x.commit(); x.editor.focus(); } }); registerEditorCommand(commitInlineSuggestionAction); +KeybindingsRegistry.registerKeybindingRule({ + primary: KeyCode.Tab, + weight: 200, + id: commitInlineSuggestionAction.id, + when: ContextKeyExpr.and( + commitInlineSuggestionAction.precondition, + EditorContextKeys.tabMovesFocus.toNegated(), + GhostTextController.inlineSuggestionHasIndentation.toNegated() + ), +}); registerEditorCommand(new GhostTextCommand({ id: 'editor.action.inlineSuggest.hide', diff --git a/src/vs/editor/contrib/inlineCompletions/inlineCompletionsHoverParticipant.ts b/src/vs/editor/contrib/inlineCompletions/inlineCompletionsHoverParticipant.ts index 90a42c6510c..84b9ce8f9d1 100644 --- a/src/vs/editor/contrib/inlineCompletions/inlineCompletionsHoverParticipant.ts +++ b/src/vs/editor/contrib/inlineCompletions/inlineCompletionsHoverParticipant.ts @@ -14,6 +14,12 @@ import { ICommandService } from 'vs/platform/commands/common/commands'; import { IMenuService, MenuId, MenuItemAction } from 'vs/platform/actions/common/actions'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { ITextContentData, IViewZoneData } from 'vs/editor/browser/controller/mouseTarget'; +import * as dom from 'vs/base/browser/dom'; +import { MarkdownRenderer } from 'vs/editor/browser/core/markdownRenderer'; +import { MarkdownString } from 'vs/base/common/htmlContent'; +import { IModeService } from 'vs/editor/common/services/modeService'; +import { IOpenerService } from 'vs/platform/opener/common/opener'; +import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; export class InlineCompletionsHover implements IHoverPart { constructor( @@ -38,10 +44,13 @@ export class InlineCompletionsHover implements IHoverPart { export class InlineCompletionsHoverParticipant implements IEditorHoverParticipant { constructor( private readonly _editor: ICodeEditor, - hover: IEditorHover, + private readonly _hover: IEditorHover, @ICommandService private readonly _commandService: ICommandService, @IMenuService private readonly _menuService: IMenuService, @IContextKeyService private readonly _contextKeyService: IContextKeyService, + @IModeService private readonly _modeService: IModeService, + @IOpenerService private readonly _openerService: IOpenerService, + @IAccessibilityService private readonly accessibilityService: IAccessibilityService, ) { } suggestHoverAnchor(mouseEvent: IEditorMouseEvent): HoverAnchor | null { @@ -82,6 +91,11 @@ export class InlineCompletionsHoverParticipant implements IEditorHoverParticipan renderHoverParts(hoverParts: InlineCompletionsHover[], fragment: DocumentFragment, statusBar: IEditorHoverStatusBar): IDisposable { const disposableStore = new DisposableStore(); + const part = hoverParts[0]; + + if (this.accessibilityService.isScreenReaderOptimized()) { + this.renderScreenReaderText(part, fragment, disposableStore); + } const menu = disposableStore.add(this._menuService.createMenu( MenuId.InlineCompletionsActions, @@ -108,7 +122,7 @@ export class InlineCompletionsHoverParticipant implements IEditorHoverParticipan for (const action of actions) { action.setEnabled(false); } - hoverParts[0].hasMultipleSuggestions().then(hasMore => { + part.hasMultipleSuggestions().then(hasMore => { for (const action of actions) { action.setEnabled(hasMore); } @@ -128,4 +142,28 @@ export class InlineCompletionsHoverParticipant implements IEditorHoverParticipan return disposableStore; } + + private renderScreenReaderText(part: InlineCompletionsHover, fragment: DocumentFragment, disposableStore: DisposableStore) { + const $ = dom.$; + const markdownHoverElement = $('div.hover-row.markdown-hover'); + const hoverContentsElement = dom.append(markdownHoverElement, $('div.hover-contents')); + const renderer = disposableStore.add(new MarkdownRenderer({ editor: this._editor }, this._modeService, this._openerService)); + const render = (code: string) => { + disposableStore.add(renderer.onDidRenderAsync(() => { + hoverContentsElement.className = 'hover-contents code-hover-contents'; + this._hover.onContentsChanged(); + })); + + const inlineSuggestionAvailable = nls.localize('inlineSuggestionFollows', "Inline Suggestion:"); + const renderedContents = disposableStore.add(renderer.render(new MarkdownString().appendText(inlineSuggestionAvailable).appendCodeblock('text', code))); + hoverContentsElement.replaceChildren(renderedContents.element); + }; + + const ghostText = part.controller.activeModel?.inlineCompletionsModel?.ghostText; + if (ghostText) { + const lineText = this._editor.getModel()!.getLineContent(ghostText.lineNumber); + render(ghostText.renderForScreenReader(lineText)); + } + fragment.appendChild(markdownHoverElement); + } } From 622203104113eaf625d6b11837183b08109f7773 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Fri, 30 Jul 2021 09:47:39 +0200 Subject: [PATCH 26/35] log status code on failure --- .../browser/extensionResourceLoaderService.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/vs/workbench/services/extensionResourceLoader/browser/extensionResourceLoaderService.ts b/src/vs/workbench/services/extensionResourceLoader/browser/extensionResourceLoaderService.ts index 5ca94588cff..0178c4a175f 100644 --- a/src/vs/workbench/services/extensionResourceLoader/browser/extensionResourceLoaderService.ts +++ b/src/vs/workbench/services/extensionResourceLoader/browser/extensionResourceLoaderService.ts @@ -13,6 +13,7 @@ import { IStorageService } from 'vs/platform/storage/common/storage'; import { getServiceMachineId } from 'vs/platform/serviceMachineId/common/serviceMachineId'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { isWeb } from 'vs/base/common/platform'; +import { ILogService } from 'vs/platform/log/common/log'; class ExtensionResourceLoaderService implements IExtensionResourceLoaderService { @@ -25,6 +26,7 @@ class ExtensionResourceLoaderService implements IExtensionResourceLoaderService @IProductService private readonly _productService: IProductService, @IStorageService private readonly _storageService: IStorageService, @IEnvironmentService private readonly _environmentService: IEnvironmentService, + @ILogService private readonly _logService: ILogService, ) { if (_productService.extensionsGallery) { this._extensionGalleryResourceAuthority = this._getExtensionResourceAuthority(URI.parse(_productService.extensionsGallery.resourceUrlTemplate)); @@ -55,6 +57,7 @@ class ExtensionResourceLoaderService implements IExtensionResourceLoaderService const response = await fetch(uri.toString(true), requestInit); if (response.status !== 200) { + this._logService.info(`Request to '${uri.toString(true)}' failed with status code ${response.status}`); throw new Error(response.statusText); } return response.text(); From 104bc571e956e4af623905ef10dfcc8f0fdac625 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Fri, 30 Jul 2021 15:06:50 +0200 Subject: [PATCH 27/35] Fix more information link --- .../workbench/contrib/extensions/browser/extensionsActions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts index 2d64cbae6f0..7675d13a747 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts @@ -128,7 +128,7 @@ export class PromptExtensionInstallFailureAction extends Action { const message = localize('cannot be installed', "The '{0}' extension is not available in {1}. Click 'More Information' to learn more.", this.extension.displayName || this.extension.identifier.id, productName); const result = await this.dialogService.show(Severity.Info, message, [localize('close', "Close"), localize('more information', "More Information")], { cancelId: 0 }); if (result.choice === 1) { - this.openerService.open(isWeb ? URI.parse('https://aka.ms/vscode-remote-codespaces') : URI.parse('https://aka.ms/vscode-remote')); + this.openerService.open(isWeb ? URI.parse('https://aka.ms/vscode-remote-codespaces#_why-is-an-extension-not-installable-in-the-browser') : URI.parse('https://aka.ms/vscode-remote')); } return; } From 5269447d3acc59075acc0fdd43c5897b9536ce88 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Fri, 30 Jul 2021 11:00:27 -0700 Subject: [PATCH 28/35] Add livepreview repo to endgame notebooks --- .vscode/notebooks/endgame.github-issues | 2 +- .vscode/notebooks/my-endgame.github-issues | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.vscode/notebooks/endgame.github-issues b/.vscode/notebooks/endgame.github-issues index 9152bc8f163..b384d571b52 100644 --- a/.vscode/notebooks/endgame.github-issues +++ b/.vscode/notebooks/endgame.github-issues @@ -7,7 +7,7 @@ { "kind": 2, "language": "github-issues", - "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-remotehub repo:microsoft/vscode-jupyter repo:microsoft/vscode-python\r\n\r\n$MILESTONE=milestone:\"July 2021\"" + "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-remotehub repo:microsoft/vscode-jupyter repo:microsoft/vscode-python repo:microsoft/vscode-livepreview\n\n$MILESTONE=milestone:\"July 2021\"" }, { "kind": 1, diff --git a/.vscode/notebooks/my-endgame.github-issues b/.vscode/notebooks/my-endgame.github-issues index 5f705ed164a..89f58b794d9 100644 --- a/.vscode/notebooks/my-endgame.github-issues +++ b/.vscode/notebooks/my-endgame.github-issues @@ -7,7 +7,7 @@ { "kind": 2, "language": "github-issues", - "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remotehub repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-jupyter repo:microsoft/vscode-python\n\n$MILESTONE=milestone:\"July 2021\"\n\n$MINE=assignee:@me" + "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remotehub repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-jupyter repo:microsoft/vscode-python repo:microsoft/vscode-livepreview\n\n$MILESTONE=milestone:\"July 2021\"\n\n$MINE=assignee:@me" }, { "kind": 1, From c47f9ad679fa604611ddeea665d8c3fd4d6709c7 Mon Sep 17 00:00:00 2001 From: Raymond Zhao Date: Fri, 30 Jul 2021 12:12:08 -0700 Subject: [PATCH 29/35] Bump OSS version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index df3d3052908..a059c8c0cf3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "code-oss-dev", - "version": "1.59.0", + "version": "1.60.0", "distro": "3b178e90461e217e4b51870f136c316327a58f66", "author": { "name": "Microsoft Corporation" From 446dfef287dcb0d20b2e3d3fef2ef1faa3b4f596 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 30 Jul 2021 13:11:20 -0700 Subject: [PATCH 30/35] Set mime to markdown when changing to markdown language mode Fixes #128873 --- .../workbench/contrib/notebook/browser/contrib/coreActions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts b/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts index 6c92f48da49..2b264acf741 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts @@ -1650,7 +1650,7 @@ registerAction2(class ChangeCellLanguageAction extends NotebookCellAction Date: Fri, 30 Jul 2021 13:16:30 -0700 Subject: [PATCH 31/35] Remove python and jupyter repos from endgame notebooks --- .vscode/notebooks/endgame.github-issues | 2 +- .vscode/notebooks/my-endgame.github-issues | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.vscode/notebooks/endgame.github-issues b/.vscode/notebooks/endgame.github-issues index b384d571b52..9a7842a3570 100644 --- a/.vscode/notebooks/endgame.github-issues +++ b/.vscode/notebooks/endgame.github-issues @@ -7,7 +7,7 @@ { "kind": 2, "language": "github-issues", - "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-remotehub repo:microsoft/vscode-jupyter repo:microsoft/vscode-python repo:microsoft/vscode-livepreview\n\n$MILESTONE=milestone:\"July 2021\"" + "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-remotehub\n\n$MILESTONE=milestone:\"July 2021\"" }, { "kind": 1, diff --git a/.vscode/notebooks/my-endgame.github-issues b/.vscode/notebooks/my-endgame.github-issues index 89f58b794d9..fe93406d483 100644 --- a/.vscode/notebooks/my-endgame.github-issues +++ b/.vscode/notebooks/my-endgame.github-issues @@ -7,7 +7,7 @@ { "kind": 2, "language": "github-issues", - "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remotehub repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-jupyter repo:microsoft/vscode-python repo:microsoft/vscode-livepreview\n\n$MILESTONE=milestone:\"July 2021\"\n\n$MINE=assignee:@me" + "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remotehub repo:microsoft/vscode-emmet-helper\n\n$MILESTONE=milestone:\"July 2021\"\n\n$MINE=assignee:@me" }, { "kind": 1, From 45991ffa092b6a3c3ff4186331109c03a7f923ee Mon Sep 17 00:00:00 2001 From: Raymond Zhao Date: Fri, 30 Jul 2021 13:34:01 -0700 Subject: [PATCH 32/35] Bump product.ts product version --- src/vs/platform/product/common/product.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts index 81185ce466d..6c980d85d5e 100644 --- a/src/vs/platform/product/common/product.ts +++ b/src/vs/platform/product/common/product.ts @@ -54,7 +54,7 @@ else { // Running out of sources if (Object.keys(product).length === 0) { Object.assign(product, { - version: '1.59.0-dev', + version: '1.60.0-dev', nameShort: isWeb ? 'Code Web - OSS Dev' : 'Code - OSS Dev', nameLong: isWeb ? 'Code Web - OSS Dev' : 'Code - OSS Dev', applicationName: 'code-oss', From ee1fc3a0d60aba68e25d0b2cb0113e310d3d7ad5 Mon Sep 17 00:00:00 2001 From: rebornix Date: Fri, 30 Jul 2021 14:41:38 -0700 Subject: [PATCH 33/35] Update opacity on hover on top insert toolbar --- src/vs/workbench/contrib/notebook/browser/media/notebook.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/vs/workbench/contrib/notebook/browser/media/notebook.css b/src/vs/workbench/contrib/notebook/browser/media/notebook.css index 53321b66dfd..7c55495c5ec 100644 --- a/src/vs/workbench/contrib/notebook/browser/media/notebook.css +++ b/src/vs/workbench/contrib/notebook/browser/media/notebook.css @@ -730,6 +730,8 @@ opacity: 1; } */ +.monaco-workbench .notebookOverlay .cell-list-top-cell-toolbar-container:focus-within, +.monaco-workbench .notebookOverlay .cell-list-top-cell-toolbar-container:hover, .monaco-workbench .notebookOverlay.notebook-editor-editable > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .cell-bottom-toolbar-container:hover, .monaco-workbench .notebookOverlay.notebook-editor-editable > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .cell-bottom-toolbar-container:focus-within { opacity: 1; From d0f48d2ae3e87041b19e9ace1adfc00544b040f7 Mon Sep 17 00:00:00 2001 From: Raymond Zhao Date: Fri, 30 Jul 2021 16:47:03 -0700 Subject: [PATCH 34/35] Revert product version bumps due to broken CI --- package.json | 2 +- src/vs/platform/product/common/product.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a059c8c0cf3..df3d3052908 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "code-oss-dev", - "version": "1.60.0", + "version": "1.59.0", "distro": "3b178e90461e217e4b51870f136c316327a58f66", "author": { "name": "Microsoft Corporation" diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts index 6c980d85d5e..81185ce466d 100644 --- a/src/vs/platform/product/common/product.ts +++ b/src/vs/platform/product/common/product.ts @@ -54,7 +54,7 @@ else { // Running out of sources if (Object.keys(product).length === 0) { Object.assign(product, { - version: '1.60.0-dev', + version: '1.59.0-dev', nameShort: isWeb ? 'Code Web - OSS Dev' : 'Code - OSS Dev', nameLong: isWeb ? 'Code Web - OSS Dev' : 'Code - OSS Dev', applicationName: 'code-oss', From 144d1ad18332d8b5994e044de3d1e9c992dcb91c Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Mon, 2 Aug 2021 12:13:48 +0200 Subject: [PATCH 35/35] Makes eslint-plugin-header a dev-dependency. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index df3d3052908..e067a47a779 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,6 @@ "@vscode/vscode-languagedetection": "1.0.15", "applicationinsights": "1.0.8", "chokidar": "3.5.1", - "eslint-plugin-header": "3.1.1", "graceful-fs": "4.2.6", "http-proxy-agent": "^2.1.0", "https-proxy-agent": "^2.2.3", @@ -131,6 +130,7 @@ "deemon": "^1.4.0", "electron": "13.1.7", "eslint": "6.8.0", + "eslint-plugin-header": "3.1.1", "eslint-plugin-jsdoc": "^19.1.0", "event-stream": "3.3.4", "fancy-log": "^1.3.3",