Merge vscode source through 1.62 release (#19981)

* Build breaks 1

* Build breaks

* Build breaks

* Build breaks

* More build breaks

* Build breaks (#2512)

* Runtime breaks

* Build breaks

* Fix dialog location break

* Update typescript

* Fix ASAR break issue

* Unit test breaks

* Update distro

* Fix breaks in ADO builds (#2513)

* Bump to node 16

* Fix hygiene errors

* Bump distro

* Remove reference to node type

* Delete vscode specific extension

* Bump to node 16 in CI yaml

* Skip integration tests in CI builds (while fixing)

* yarn.lock update

* Bump moment dependency in remote yarn

* Fix drop-down chevron style

* Bump to node 16

* Remove playwrite from ci.yaml

* Skip building build scripts in hygine check
This commit is contained in:
Karl Burtram
2022-07-11 14:09:32 -07:00
committed by GitHub
parent fa0fcef303
commit 26455e9113
1876 changed files with 72050 additions and 37997 deletions

View File

@@ -18,8 +18,9 @@ import * as vscode from 'vscode';
import * as azdata from 'azdata';
import { TelemetryView, TelemetryAction } from 'sql/platform/telemetry/common/telemetryKeys';
import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry';
import { IEditorInput, IEditorPane } from 'vs/workbench/common/editor';
import { IEditorPane } from 'vs/workbench/common/editor';
import { Disposable } from 'vs/base/common/lifecycle';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
@extHostNamedCustomer(SqlMainContext.MainThreadModelViewDialog)
export class MainThreadModelViewDialog extends Disposable implements MainThreadModelViewDialogShape {
@@ -31,7 +32,7 @@ export class MainThreadModelViewDialog extends Disposable implements MainThreadM
private readonly _wizardPageHandles = new Map<WizardPage, number>();
private readonly _wizards = new Map<number, Wizard>();
private readonly _editorInputModels = new Map<number, ModelViewInputModel>();
private readonly _editors = new Map<number, { pane: IEditorPane, input: IEditorInput }>();
private readonly _editors = new Map<number, { pane: IEditorPane, input: EditorInput }>();
private _dialogService: CustomDialogService;
constructor(

View File

@@ -20,7 +20,7 @@ export class AzdataNodeModuleFactory implements INodeModuleFactory {
constructor(
private readonly _apiFactory: IAzdataExtensionApiFactory,
private readonly _extensionPaths: TernarySearchTree<string, IExtensionDescription>,
private readonly _extensionPaths: TernarySearchTree<URI, IExtensionDescription>,
private readonly _logService: ILogService
) {
}
@@ -28,7 +28,7 @@ export class AzdataNodeModuleFactory implements INodeModuleFactory {
public load(request: string, parent: URI): any {
// get extension id from filename and api for extension
const ext = this._extensionPaths.findSubstr(parent.fsPath);
const ext = this._extensionPaths.findSubstr(parent);
if (ext) {
let apiImpl = this._extApiImpl.get(ExtensionIdentifier.toKey(ext.identifier));
if (!apiImpl) {

View File

@@ -33,7 +33,8 @@ export function convertToVSCodeNotebookCell(cellKind: azdata.nb.CellType, cellIn
notebook: notebook,
outputs: [],
metadata: {},
mime: undefined
mime: undefined,
executionSummary: undefined
};
}

View File

@@ -6,7 +6,7 @@
import { Action } from 'vs/base/common/actions';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { FocusedViewContext, IViewDescriptorService, IViewsService, ViewContainerLocation } from 'vs/workbench/common/views';
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService';
// --- Toggle View with Command
export abstract class ToggleViewAction extends Action {
@@ -29,9 +29,9 @@ export abstract class ToggleViewAction extends Action {
if (focusedViewId === this.viewId) {
if (this.viewDescriptorService.getViewLocationById(this.viewId) === ViewContainerLocation.Sidebar) {
this.layoutService.setSideBarHidden(true);
this.layoutService.setPartHidden(true, Parts.SIDEBAR_PART);
} else {
this.layoutService.setPanelHidden(true);
this.layoutService.setPartHidden(true, Parts.PANEL_PART);
}
} else {
this.viewsService.openView(this.viewId, true);

View File

@@ -127,11 +127,11 @@ class TableFilterListRenderer implements IListRenderer<DesignerIssue, DesignerIs
}
templateData.issueIcon.className = `issue-icon ${iconClass}`;
if (element.moreInfoLink) {
const linkElement = this._instantiationService.createInstance(Link, {
label: localize('designer.moreInfoLink', "More information"),
href: element.moreInfoLink
}, undefined);
templateData.issueMoreInfoLink.appendChild(linkElement.el);
this._instantiationService.createInstance(Link, templateData.issueMoreInfoLink,
{
label: localize('designer.moreInfoLink', "More information"),
href: element.moreInfoLink
}, undefined);
} else {
DOM.clearNode(templateData.issueMoreInfoLink);
}

View File

@@ -29,13 +29,14 @@ import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editor
import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
import { ITextEditorOptions } from 'vs/platform/editor/common/editor';
import { onUnexpectedError } from 'vs/base/common/errors';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
class DesignerCodeEditor extends CodeEditorWidget {
}
let DesignerScriptEditorInstanceId = 0;
export class DesignerScriptEditor extends BaseTextEditor implements DesignerTextEditor {
export class DesignerScriptEditor extends BaseTextEditor<editorCommon.ICodeEditorViewState> implements DesignerTextEditor {
private _content: string;
private _contentChangeEventEmitter: Emitter<string> = new Emitter<string>();
readonly onDidContentChange: Event<string> = this._contentChangeEventEmitter.event;
@@ -81,7 +82,7 @@ export class DesignerScriptEditor extends BaseTextEditor implements DesignerText
options.folding = false;
options.renderWhitespace = 'all';
options.wordWrap = 'off';
options.renderIndentGuides = false;
options.guides = { indentation: false };
options.rulers = [];
options.glyphMargin = true;
}
@@ -119,4 +120,8 @@ export class DesignerScriptEditor extends BaseTextEditor implements DesignerText
this.layout(new DOM.Dimension(this._container.clientWidth, this._container.clientHeight));
}
}
protected tracksEditorViewState(input: EditorInput): boolean {
return input.typeId === DesignerScriptEditor.ID;
}
}

View File

@@ -3,7 +3,6 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IEditorInput } from 'vs/workbench/common/editor';
import { IConnectionManagementService, IConnectableInput, INewConnectionParams } from 'sql/platform/connection/common/connectionManagement';
import { IQueryModelService } from 'sql/workbench/services/query/common/queryModel';
import { Event, Emitter } from 'vs/base/common/event';
@@ -115,7 +114,7 @@ export class EditDataInput extends EditorInput implements IConnectableInput {
public get objectType(): string { return this._objectType; }
public showResultsEditor(): void { this._showResultsEditor.fire(undefined); }
public override isDirty(): boolean { return false; }
public override save(): Promise<IEditorInput | undefined> { return Promise.resolve(undefined); }
public override save(): Promise<EditorInput | undefined> { return Promise.resolve(undefined); }
public override get typeId(): string { return EditDataInput.ID; }
public setBootstrappedTrue(): void { this._hasBootstrapped = true; }
public get resource(): URI { return this._uri; }

View File

@@ -9,7 +9,7 @@ import { EditorInput } from 'vs/workbench/common/editor/editorInput';
import { TableDesignerComponentInput } from 'sql/workbench/services/tableDesigner/browser/tableDesignerComponentInput';
import { TableDesignerProvider } from 'sql/workbench/services/tableDesigner/common/interface';
import * as azdata from 'azdata';
import { GroupIdentifier, IEditorInput, IRevertOptions, ISaveOptions } from 'vs/workbench/common/editor';
import { GroupIdentifier, IRevertOptions, ISaveOptions } from 'vs/workbench/common/editor';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { onUnexpectedError } from 'vs/base/common/errors';
import { Schemas } from 'sql/base/common/schemas';
@@ -91,7 +91,7 @@ export class TableDesignerInput extends EditorInput {
return this._designerComponentInput.pendingAction === 'publish';
}
override async save(group: GroupIdentifier, options?: ISaveOptions): Promise<IEditorInput | undefined> {
override async save(group: GroupIdentifier, options?: ISaveOptions): Promise<EditorInput | undefined> {
if (this._designerComponentInput.pendingAction) {
this._notificationService.warn(localize('tableDesigner.OperationInProgressWarning', "The operation cannot be performed while another operation is in progress."));
} else {

View File

@@ -29,8 +29,7 @@ import { IComponent, IComponentDescriptor, IModelStore } from 'sql/platform/dash
import { convertSizeToNumber } from 'sql/base/browser/dom';
import { onUnexpectedError } from 'vs/base/common/errors';
import { ILogService } from 'vs/platform/log/common/log';
import { ILabelService } from 'vs/platform/label/common/label';
import { IFileService } from 'vs/platform/files/common/files';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
@Component({
template: `
@@ -62,8 +61,7 @@ export default class DiffEditorComponent extends ComponentBase<azdata.DiffEditor
@Inject(IModeService) private _modeService: IModeService,
@Inject(ITextModelService) private _textModelService: ITextModelService,
@Inject(ILogService) logService: ILogService,
@Inject(ILabelService) private labelService: ILabelService,
@Inject(IFileService) private fileService: IFileService
@Inject(IEditorService) private _editorService: IEditorService,
) {
super(changeRef, el, logService);
}
@@ -98,8 +96,7 @@ export default class DiffEditorComponent extends ComponentBase<azdata.DiffEditor
let editorinput1 = this._instantiationService.createInstance(TextResourceEditorInput, uri1, 'source', undefined, undefined, undefined);
let editorinput2 = this._instantiationService.createInstance(TextResourceEditorInput, uri2, 'target', undefined, undefined, undefined);
this._editorInput = new DiffEditorInput('DiffEditor', undefined, editorinput1, editorinput2, true,
this.labelService, this.fileService);
this._editorInput = new DiffEditorInput('DiffEditor', undefined, editorinput1, editorinput2, true, this._editorService);
this._editor.setInput(this._editorInput, undefined, undefined, cancellationTokenSource.token);

View File

@@ -70,9 +70,12 @@ export default class EditorComponent extends ComponentBase<azdata.EditorProperti
this._editor.create(this._el.nativeElement);
this._editor.setVisible(true);
let uri = this.createUri();
this._editorInput = this.editorService.createEditorInput({ forceUntitled: true, resource: uri, mode: 'plaintext' }) as UntitledTextEditorInput;
await this._editor.setInput(this._editorInput, undefined, undefined);
const model = await this._editorInput.resolve();
this._editorModel = model.textEditorModel;
this.fireEvent({
eventType: ComponentEventType.onComponentCreated,

View File

@@ -52,7 +52,7 @@ export default class ListBoxComponent extends ComponentBase<azdata.ListBoxProper
const key = e.keyCode;
const ctrlOrCmd = e.ctrlKey || e.metaKey;
if (ctrlOrCmd && key === KeyCode.KEY_C) {
if (ctrlOrCmd && key === KeyCode.KeyC) {
let textToCopy = this._input.selectedOptions[0];
for (let i = 1; i < this._input.selectedOptions.length; i++) {
textToCopy = textToCopy + ', ' + this._input.selectedOptions[i];

View File

@@ -6,7 +6,6 @@
import * as azdata from 'azdata';
import { IEditorModel } from 'vs/platform/editor/common/editor';
import { IEditorInput } from 'vs/workbench/common/editor';
import * as DOM from 'vs/base/browser/dom';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
@@ -141,7 +140,7 @@ export class ModelViewInput extends EditorInput {
/**
* Saves the editor if it is dirty. Subclasses return a promise with a boolean indicating the success of the operation.
*/
override save(): Promise<IEditorInput | undefined> {
override save(): Promise<EditorInput | undefined> {
return this._model.save().then(saved => saved ? this : undefined);
}

View File

@@ -23,11 +23,12 @@ import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editor
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
import { ITextEditorOptions } from 'vs/platform/editor/common/editor';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
/**
* Extension of TextResourceEditor that is always readonly rather than only with non UntitledInputs
*/
export class QueryTextEditor extends BaseTextEditor {
export class QueryTextEditor extends BaseTextEditor<editorCommon.ICodeEditorViewState> {
public static ID = 'modelview.editors.textEditor';
private _dimension: DOM.Dimension;
@@ -63,7 +64,7 @@ export class QueryTextEditor extends BaseTextEditor {
options.inDiffEditor = false;
options.scrollBeyondLastLine = false;
options.folding = false;
options.renderIndentGuides = false;
options.guides = { indentation: false };
options.rulers = [];
options.glyphMargin = true;
options.minimap = {
@@ -205,4 +206,8 @@ export class QueryTextEditor extends BaseTextEditor {
let editorSettingsToApply = editorConfiguration;
this.getControl().updateOptions(editorSettingsToApply);
}
protected override tracksEditorViewState(input: EditorInput): boolean {
return input.typeId === QueryTextEditor.ID;
}
}

View File

@@ -182,10 +182,12 @@ export default class TextComponent extends TitledComponent<azdata.TextComponentP
// Now insert the link element
const link = links[i];
const linkElement = this._register(this.instantiationService.createInstance(Link, {
const linkElement = this._register(this.instantiationService.createInstance(Link,
(<HTMLElement>this.textContainer.nativeElement), {
label: link.text,
href: link.url
}, undefined));
if (link.accessibilityInformation) {
linkElement.el.setAttribute('aria-label', link.accessibilityInformation.label);
if (link.accessibilityInformation.role) {

View File

@@ -4,7 +4,6 @@
*--------------------------------------------------------------------------------------------*/
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { IEditorInput } from 'vs/workbench/common/editor';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { getCodeEditor } from 'vs/editor/browser/editorBrowser';
import { INotificationService } from 'vs/platform/notification/common/notification';
@@ -13,18 +12,19 @@ import { Registry } from 'vs/platform/registry/common/platform';
import { ILanguageAssociationRegistry, Extensions as LanguageAssociationExtensions } from 'sql/workbench/services/languageAssociation/common/languageAssociation';
import { IModeSupport } from 'vs/workbench/services/textfile/common/textfiles';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
const languageAssociationRegistry = Registry.as<ILanguageAssociationRegistry>(LanguageAssociationExtensions.LanguageAssociations);
/**
* Handles setting a mode from the editor status and converts inputs if necessary
*/
export async function setMode(accessor: ServicesAccessor, modeSupport: IModeSupport, activeEditor: IEditorInput, language: string): Promise<void> {
export async function setMode(accessor: ServicesAccessor, modeSupport: IModeSupport, activeEditor: EditorInput, language: string): Promise<void> {
const editorService = accessor.get(IEditorService);
const activeWidget = getCodeEditor(editorService.activeTextEditorControl);
const activeControl = editorService.activeEditorPane;
const textModel = activeWidget.getModel();
const oldLanguage = textModel.getLanguageIdentifier().language;
const oldLanguage = textModel.getLanguageId();
if (language !== oldLanguage) {
const oldInputCreator = languageAssociationRegistry.getAssociationForLanguage(oldLanguage); // who knows how to handle the current language
const newInputCreator = languageAssociationRegistry.getAssociationForLanguage(language); // who knows how to handle the requested language
@@ -34,7 +34,7 @@ export async function setMode(accessor: ServicesAccessor, modeSupport: IModeSupp
return;
}
modeSupport.setMode(language);
let input: IEditorInput;
let input: EditorInput;
if (oldInputCreator) { // only transform the input if we have someone who knows how to deal with it (e.x QueryInput -> UntitledInput, etc)
input = oldInputCreator.createBase(activeEditor);
}

View File

@@ -7,7 +7,7 @@ import { localize } from 'vs/nls';
import { IDisposable, Disposable } from 'vs/base/common/lifecycle';
import { Emitter } from 'vs/base/common/event';
import { URI } from 'vs/base/common/uri';
import { GroupIdentifier, IRevertOptions, ISaveOptions, IEditorInput, EditorInputCapabilities } from 'vs/workbench/common/editor';
import { GroupIdentifier, IRevertOptions, ISaveOptions, EditorInputCapabilities } from 'vs/workbench/common/editor';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IConnectionManagementService, IConnectableInput, INewConnectionParams, RunQueryOnConnectionMode } from 'sql/platform/connection/common/connectionManagement';
@@ -257,7 +257,7 @@ export abstract class QueryEditorInput extends EditorInput implements IConnectab
}
}
override save(group: GroupIdentifier, options?: ISaveOptions): Promise<IEditorInput | undefined> {
override save(group: GroupIdentifier, options?: ISaveOptions): Promise<EditorInput | undefined> {
return this.text.save(group, options);
}

View File

@@ -308,7 +308,7 @@ export class BackupComponent extends AngularDisposable {
const key = e.keyCode;
const ctrlOrCmd = e.ctrlKey || e.metaKey;
if (ctrlOrCmd && key === KeyCode.KEY_C) {
if (ctrlOrCmd && key === KeyCode.KeyC) {
let textToCopy = this.pathListBox!.selectedOptions[0];
for (let i = 1; i < this.pathListBox!.selectedOptions.length; i++) {
textToCopy = textToCopy + ', ' + this.pathListBox!.selectedOptions[i];

View File

@@ -9,7 +9,7 @@ import { IConnectionManagementService } from 'sql/platform/connection/common/con
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
import { IObjectExplorerService } from 'sql/workbench/services/objectExplorer/browser/objectExplorerService';
import * as TaskUtilities from 'sql/workbench/browser/taskUtilities';
import { IStatusbarEntryAccessor, IStatusbarService, StatusbarAlignment } from 'vs/workbench/services/statusbar/common/statusbar';
import { IStatusbarEntryAccessor, IStatusbarService, StatusbarAlignment } from 'vs/workbench/services/statusbar/browser/statusbar';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { localize } from 'vs/nls';

View File

@@ -7,7 +7,7 @@ import { localize } from 'vs/nls';
import { forEach } from 'vs/base/common/collections';
import { IJSONSchema } from 'vs/base/common/jsonSchema';
import { Registry } from 'vs/platform/registry/common/platform';
import { IViewContainersRegistry, ViewContainer, Extensions as ViewContainerExtensions, IViewsRegistry } from 'vs/workbench/common/views';
import { IViewContainersRegistry, ViewContainer, Extensions as ViewContainerExtensions, IViewsRegistry, ICustomViewDescriptor } from 'vs/workbench/common/views';
import { IExtensionPoint, ExtensionsRegistry, ExtensionMessageCollector } from 'vs/workbench/services/extensions/common/extensionsRegistry';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
@@ -16,7 +16,6 @@ import { coalesce } from 'vs/base/common/arrays';
import { VIEWLET_ID } from 'sql/workbench/contrib/dataExplorer/browser/dataExplorerViewlet';
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
import { ICustomViewDescriptor } from 'vs/workbench/api/browser/viewsExtensionPoint';
import { CustomTreeView as VSCustomTreeView, TreeViewPane } from 'vs/workbench/browser/parts/views/treeView';
import { CustomTreeView } from 'sql/workbench/contrib/views/browser/treeView';

View File

@@ -102,7 +102,7 @@ export const VIEW_CONTAINER = Registry.as<IViewContainersRegistry>(ViewContainer
openCommandActionDescriptor: {
id: VIEWLET_ID,
mnemonicTitle: localize('showDataExplorer', "Show Connections"),
keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_D },
keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyD },
order: 0
},
icon: { id: SqlIconId.dataExplorer },

View File

@@ -5,15 +5,16 @@
import * as assert from 'assert';
import * as Platform from 'vs/platform/registry/common/platform';
import { ViewletDescriptor, Extensions, Viewlet, ViewletRegistry } from 'vs/workbench/browser/viewlet';
//import { ViewletDescriptor, Extensions, Viewlet, ViewletRegistry } from 'vs/workbench/browser/viewlet';
import * as Types from 'vs/base/common/types';
import { ViewPaneContainer } from 'vs/workbench/browser/parts/views/viewPaneContainer';
import { Extensions, PaneComposite, PaneCompositeDescriptor, PaneCompositeRegistry } from 'vs/workbench/browser/panecomposite';
suite('Data Explorer Viewlet', () => {
class DataExplorerTestViewlet extends Viewlet {
class DataExplorerTestViewlet extends PaneComposite {
constructor() {
super('dataExplorer', undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
super('dataExplorer', undefined, undefined, undefined, undefined, undefined, undefined, undefined);
}
public override layout(dimension: any): void {
@@ -26,7 +27,7 @@ suite('Data Explorer Viewlet', () => {
}
test('ViewletDescriptor API', function () {
let d = ViewletDescriptor.create(DataExplorerTestViewlet, 'id', 'name', 'class', 1);
let d = PaneCompositeDescriptor.create(DataExplorerTestViewlet, 'id', 'name', 'class', 1);
assert.strictEqual(d.id, 'id');
assert.strictEqual(d.name, 'name');
assert.strictEqual(d.cssClass, 'class');
@@ -34,26 +35,26 @@ suite('Data Explorer Viewlet', () => {
});
test('Editor Aware ViewletDescriptor API', function () {
let d = ViewletDescriptor.create(DataExplorerTestViewlet, 'id', 'name', 'class', 5);
let d = PaneCompositeDescriptor.create(DataExplorerTestViewlet, 'id', 'name', 'class', 5);
assert.strictEqual(d.id, 'id');
assert.strictEqual(d.name, 'name');
d = ViewletDescriptor.create(DataExplorerTestViewlet, 'id', 'name', 'class', 5);
d = PaneCompositeDescriptor.create(DataExplorerTestViewlet, 'id', 'name', 'class', 5);
assert.strictEqual(d.id, 'id');
assert.strictEqual(d.name, 'name');
});
test('Data Explorer Viewlet extension point and registration', function () {
assert(Types.isFunction(Platform.Registry.as<ViewletRegistry>(Extensions.Viewlets).registerViewlet));
assert(Types.isFunction(Platform.Registry.as<ViewletRegistry>(Extensions.Viewlets).getViewlet));
assert(Types.isFunction(Platform.Registry.as<ViewletRegistry>(Extensions.Viewlets).getViewlets));
assert(Types.isFunction(Platform.Registry.as<PaneCompositeRegistry>(Extensions.Viewlets).registerPaneComposite));
assert(Types.isFunction(Platform.Registry.as<PaneCompositeRegistry>(Extensions.Viewlets).getPaneComposite));
assert(Types.isFunction(Platform.Registry.as<PaneCompositeRegistry>(Extensions.Viewlets).getPaneComposites));
let oldCount = Platform.Registry.as<ViewletRegistry>(Extensions.Viewlets).getViewlets().length;
let d = ViewletDescriptor.create(DataExplorerTestViewlet, 'dataExplorer-test-id', 'name');
Platform.Registry.as<ViewletRegistry>(Extensions.Viewlets).registerViewlet(d);
let retrieved = Platform.Registry.as<ViewletRegistry>(Extensions.Viewlets).getViewlet('dataExplorer-test-id');
let oldCount = Platform.Registry.as<PaneCompositeRegistry>(Extensions.Viewlets).getPaneComposites().length;
let d = PaneCompositeDescriptor.create(DataExplorerTestViewlet, 'dataExplorer-test-id', 'name');
Platform.Registry.as<PaneCompositeRegistry>(Extensions.Viewlets).registerPaneComposite(d);
let retrieved = Platform.Registry.as<PaneCompositeRegistry>(Extensions.Viewlets).getComposite('dataExplorer-test-id');
assert(d === retrieved);
let newCount = Platform.Registry.as<ViewletRegistry>(Extensions.Viewlets).getViewlets().length;
let newCount = Platform.Registry.as<PaneCompositeRegistry>(Extensions.Viewlets).getPaneComposites().length;
assert.strictEqual(oldCount + 1, newCount);
});
});

View File

@@ -527,7 +527,7 @@ export class EditDataGridPanel extends GridParentComponent {
this.revertCurrentRow().catch(onUnexpectedError);
handled = true;
}
if (e.ctrlKey && e.keyCode === KeyCode.KEY_0) {
if (e.ctrlKey && e.keyCode === KeyCode.Digit0) {
//Replace contents with NULL in cell contents.
document.execCommand('selectAll');
document.execCommand('delete');

View File

@@ -19,7 +19,6 @@ import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/q
import { CellSelectionModel } from 'sql/base/browser/ui/table/plugins/cellSelectionModel.plugin';
import { IAction } from 'vs/base/common/actions';
import { ResolvedKeybinding } from 'vs/base/common/keyCodes';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
@@ -30,6 +29,7 @@ import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { ILogService } from 'vs/platform/log/common/log';
import { subscriptionToDisposable } from 'sql/base/browser/lifecycle';
import { SaveFormat } from 'sql/workbench/services/query/common/resultSerializer';
import { ResolvedKeybinding } from 'vs/base/common/keybindings';
export abstract class GridParentComponent extends Disposable {

View File

@@ -7,7 +7,7 @@ import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation
import { Registry } from 'vs/platform/registry/common/platform';
import { IWorkbenchActionRegistry, Extensions as WorkbenchActionExtensions } from 'vs/workbench/common/actions';
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
import { ExtensionsLabel, IExtensionGalleryService, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
import { ExtensionsLabel, IExtensionGalleryService, IGalleryExtension, TargetPlatform } from 'vs/platform/extensionManagement/common/extensionManagement';
import { OpenExtensionAuthoringDocsAction } from 'sql/workbench/contrib/extensions/browser/extensionsActions';
import { localize } from 'vs/nls';
import { deepClone } from 'vs/base/common/objects';
@@ -41,7 +41,7 @@ CommandsRegistry.registerCommand({
},
handler: async (accessor, arg: string): Promise<IGalleryExtension> => {
const extensionGalleryService = accessor.get(IExtensionGalleryService);
const extension = await extensionGalleryService.getCompatibleExtension({ id: arg });
const extension = await extensionGalleryService.getCompatibleExtension({ id: arg }, TargetPlatform.UNIVERSAL);
if (extension) {
return deepClone(extension);
} else {

View File

@@ -5,13 +5,14 @@
import { localize } from 'vs/nls';
import { Action } from 'vs/base/common/actions';
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
import { IExtensionsWorkbenchService, VIEWLET_ID, IExtensionsViewPaneContainer } from 'vs/workbench/contrib/extensions/common/extensions';
import { IExtensionRecommendation } from 'sql/workbench/services/extensionManagement/common/extensionManagement';
import { IOpenerService } from 'vs/platform/opener/common/opener';
import { URI } from 'vs/base/common/uri';
import { CancellationToken } from 'vs/base/common/cancellation';
import { PagedModel } from 'vs/base/common/paging';
import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite';
import { ViewContainerLocation } from 'vs/workbench/common/views';
function getScenarioID(scenarioType: string) {
return 'workbench.extensions.action.show' + scenarioType;
@@ -20,13 +21,13 @@ function getScenarioID(scenarioType: string) {
export class ShowRecommendedExtensionsByScenarioAction extends Action {
constructor(
private readonly scenarioType: string,
@IViewletService private readonly viewletService: IViewletService
@IPaneCompositePartService private readonly viewletService: IPaneCompositePartService
) {
super(getScenarioID(scenarioType), localize('showRecommendations', "Show Recommendations"), undefined, true);
}
override run(): Promise<void> {
return this.viewletService.openViewlet(VIEWLET_ID, true)
return this.viewletService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true)
.then(viewlet => viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer)
.then(viewlet => {
viewlet.search('@' + this.scenarioType);
@@ -43,7 +44,7 @@ export class InstallRecommendedExtensionsByScenarioAction extends Action {
constructor(
private readonly scenarioType: string,
recommendations: IExtensionRecommendation[],
@IViewletService private readonly viewletService: IViewletService,
@IPaneCompositePartService private readonly viewletService: IPaneCompositePartService,
@IExtensionsWorkbenchService private readonly extensionWorkbenchService: IExtensionsWorkbenchService
) {
super(getScenarioID(scenarioType), localize('Install Extensions', "Install Extensions"), 'extension-action');
@@ -52,7 +53,7 @@ export class InstallRecommendedExtensionsByScenarioAction extends Action {
override async run(): Promise<void> {
if (!this.recommendations.length) { return; }
const viewlet = await this.viewletService.openViewlet(VIEWLET_ID, true);
const viewlet = await this.viewletService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true);
const viewPaneContainer = viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer;
viewPaneContainer.search('@' + this.scenarioType);
viewlet.focus();

View File

@@ -9,7 +9,6 @@ import { Table } from 'sql/base/browser/ui/table/table';
import { AgentViewComponent } from 'sql/workbench/contrib/jobManagement/browser/agentView.component';
import { CommonServiceInterface } from 'sql/workbench/services/bootstrap/browser/commonServiceInterface.service';
import { IAction, Action } from 'vs/base/common/actions';
import { ResolvedKeybinding } from 'vs/base/common/keyCodes';
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
@@ -18,6 +17,7 @@ import { JobsRefreshAction, IJobActionInfo } from 'sql/workbench/contrib/jobMana
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
import { ITableMouseEvent } from 'sql/base/browser/ui/table/interfaces';
import { ResolvedKeybinding } from 'vs/base/common/keybindings';
export abstract class JobManagementView extends TabChild implements AfterContentChecked {
protected isVisible: boolean = false;

View File

@@ -40,7 +40,7 @@ import { IQuickInputService, QuickPickInput } from 'vs/platform/quickinput/commo
import { onUnexpectedError } from 'vs/base/common/errors';
import { getIconClasses } from 'vs/editor/common/services/getIconClasses';
import { URI } from 'vs/base/common/uri';
import { ILanguagePickInput } from 'vs/workbench/contrib/notebook/browser/contrib/coreActions';
import { ILanguagePickInput } from 'vs/workbench/contrib/notebook/browser/controller/editActions';
export const CODE_SELECTOR: string = 'code-component';
const MARKDOWN_CLASS = 'markdown';

View File

@@ -14,6 +14,7 @@ import { BaseTextEditor } from 'vs/workbench/browser/parts/editor/textEditor';
import { nb } from 'azdata';
import { NotebookModel } from 'sql/workbench/services/notebook/browser/models/notebookModel';
import { NotebookInput } from 'sql/workbench/contrib/notebook/browser/models/notebookInput';
import { ICodeEditorViewState } from 'vs/editor/common/editorCommon';
export const findHighlightClass = 'rangeHighlight';
export const findRangeSpecificClass = 'rangeSpecificHighlight';
@@ -33,7 +34,7 @@ export abstract class CellView extends AngularDisposable implements OnDestroy, I
public abstract layout(): void;
public getEditor(): BaseTextEditor | undefined {
public getEditor(): BaseTextEditor<ICodeEditorViewState> | undefined {
return undefined;
}

View File

@@ -44,23 +44,23 @@ export class MarkdownToolbarComponent extends AngularDisposable {
if (this.cellModel?.currentMode === CellEditModes.SPLIT || this.cellModel?.currentMode === CellEditModes.MARKDOWN) {
const keyEvent = new StandardKeyboardEvent(e);
let markdownTextTransformer = new MarkdownTextTransformer(this._notebookService, this.cellModel);
if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KEY_B) {
if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KeyB) {
// Bold Text
DOM.EventHelper.stop(e, true);
await markdownTextTransformer.transformText(MarkdownButtonType.BOLD);
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KEY_I) {
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KeyI) {
// Italicize text
DOM.EventHelper.stop(e, true);
await markdownTextTransformer.transformText(MarkdownButtonType.ITALIC);
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KEY_U) {
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KeyU) {
// Underline text
DOM.EventHelper.stop(e, true);
await markdownTextTransformer.transformText(MarkdownButtonType.UNDERLINE);
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.shiftKey && keyEvent.keyCode === KeyCode.KEY_K) {
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.shiftKey && keyEvent.keyCode === KeyCode.KeyK) {
// Code Block
DOM.EventHelper.stop(e, true);
await markdownTextTransformer.transformText(MarkdownButtonType.CODE);
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.shiftKey && keyEvent.keyCode === KeyCode.KEY_H) {
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.shiftKey && keyEvent.keyCode === KeyCode.KeyH) {
// Highlight Text
DOM.EventHelper.stop(e, true);
await markdownTextTransformer.transformText(MarkdownButtonType.HIGHLIGHT);

View File

@@ -64,12 +64,12 @@ export class TextCellComponent extends CellView implements OnInit, OnChanges {
if (DOM.getActiveElement() === this.output?.nativeElement && this.isActive() && this.cellModel?.currentMode === CellEditModes.WYSIWYG) {
const keyEvent = new StandardKeyboardEvent(e);
// Select all text
if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KEY_A) {
if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KeyA) {
preventDefaultAndExecCommand(e, 'selectAll');
} else if ((keyEvent.metaKey && keyEvent.shiftKey && keyEvent.keyCode === KeyCode.KEY_Z) || (keyEvent.ctrlKey && keyEvent.keyCode === KeyCode.KEY_Y) && !this.markdownMode) {
} else if ((keyEvent.metaKey && keyEvent.shiftKey && keyEvent.keyCode === KeyCode.KeyZ) || (keyEvent.ctrlKey && keyEvent.keyCode === KeyCode.KeyY) && !this.markdownMode) {
// Redo text
this.redoRichTextChange();
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KEY_Z) {
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KeyZ) {
// Undo text
this.undoRichTextChange();
} else if (keyEvent.shiftKey && keyEvent.keyCode === KeyCode.Tab) {
@@ -78,23 +78,23 @@ export class TextCellComponent extends CellView implements OnInit, OnChanges {
} else if (keyEvent.keyCode === KeyCode.Tab) {
// Indent text
preventDefaultAndExecCommand(e, 'indent');
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KEY_B) {
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KeyB) {
// Bold text
preventDefaultAndExecCommand(e, 'bold');
this.cellModel.notebookModel.sendNotebookTelemetryActionEvent(TelemetryKeys.NbTelemetryAction.WYSIWYGKeyboardAction, { transformAction: 'BOLD' });
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KEY_I) {
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KeyI) {
// Italicize text
preventDefaultAndExecCommand(e, 'italic');
this.cellModel.notebookModel.sendNotebookTelemetryActionEvent(TelemetryKeys.NbTelemetryAction.WYSIWYGKeyboardAction, { transformAction: 'ITALIC' });
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KEY_U) {
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.keyCode === KeyCode.KeyU) {
// Underline text
preventDefaultAndExecCommand(e, 'underline');
this.cellModel.notebookModel.sendNotebookTelemetryActionEvent(TelemetryKeys.NbTelemetryAction.WYSIWYGKeyboardAction, { transformAction: 'UNDERLINE' });
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.shiftKey && keyEvent.keyCode === KeyCode.KEY_K) {
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.shiftKey && keyEvent.keyCode === KeyCode.KeyK) {
// Code Block
preventDefaultAndExecCommand(e, 'formatBlock', false, 'pre');
this.cellModel.notebookModel.sendNotebookTelemetryActionEvent(TelemetryKeys.NbTelemetryAction.WYSIWYGKeyboardAction, { transformAction: 'CODE' });
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.shiftKey && keyEvent.keyCode === KeyCode.KEY_H) {
} else if ((keyEvent.ctrlKey || keyEvent.metaKey) && keyEvent.shiftKey && keyEvent.keyCode === KeyCode.KeyH) {
// Highlight Text
DOM.EventHelper.stop(e, true);
highlightSelectedText();

View File

@@ -739,7 +739,7 @@ export const findCommand = new SearchNotebookCommand({
id: NOTEBOOK_COMMAND_SEARCH,
precondition: ActiveEditorContext.isEqualTo(NotebookEditor.ID),
kbOpts: {
primary: KeyMod.CtrlCmd | KeyCode.KEY_F,
primary: KeyMod.CtrlCmd | KeyCode.KeyF,
weight: KeybindingWeight.EditorContrib
}
});

View File

@@ -11,6 +11,7 @@ import { FileNotebookInput } from 'sql/workbench/contrib/notebook/browser/models
import { INotebookService } from 'sql/workbench/services/notebook/browser/notebookService';
import { Deferred } from 'sql/base/common/promise';
import { ILogService } from 'vs/platform/log/common/log';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
export class DiffNotebookInput extends SideBySideEditorInput {
public static override ID: string = 'workbench.editorinputs.DiffNotebookInput';
@@ -22,11 +23,12 @@ export class DiffNotebookInput extends SideBySideEditorInput {
diffInput: DiffEditorInput,
@IInstantiationService instantiationService: IInstantiationService,
@INotebookService notebookService: INotebookService,
@ILogService logService: ILogService
@ILogService logService: ILogService,
@IEditorService editorService: IEditorService
) {
let originalInput = instantiationService.createInstance(FileNotebookInput, diffInput.primary.getName(), diffInput.primary.resource, diffInput.original as FileEditorInput, false);
let modifiedInput = instantiationService.createInstance(FileNotebookInput, diffInput.secondary.getName(), diffInput.secondary.resource, diffInput.modified as FileEditorInput, false);
super(title, diffInput.getTitle(), modifiedInput, originalInput);
super(title, diffInput.getTitle(), modifiedInput, originalInput, editorService);
this._notebookService = notebookService;
this._logService = logService;
this.setupScrollListeners(originalInput, modifiedInput);

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IEditorFactoryRegistry, IEditorInput, IEditorSerializer, EditorExtensions } from 'vs/workbench/common/editor';
import { IEditorFactoryRegistry, IEditorSerializer, EditorExtensions } from 'vs/workbench/common/editor';
import { Registry } from 'vs/platform/registry/common/platform';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { FILE_EDITOR_INPUT_ID } from 'vs/workbench/contrib/files/common/files';
@@ -17,6 +17,7 @@ import { NotebookLanguage } from 'sql/workbench/common/constants';
import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput';
import { DiffNotebookInput } from 'sql/workbench/contrib/notebook/browser/models/diffNotebookInput';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
const editorFactoryRegistry = Registry.as<IEditorFactoryRegistry>(EditorExtensions.EditorFactory);
@@ -29,7 +30,7 @@ export class NotebookEditorLanguageAssociation implements ILanguageAssociation {
constructor(@IInstantiationService private readonly instantiationService: IInstantiationService, @IConfigurationService private readonly configurationService: IConfigurationService) { }
convertInput(activeEditor: IEditorInput): NotebookInput | DiffNotebookInput | undefined {
convertInput(activeEditor: EditorInput): NotebookInput | DiffNotebookInput | undefined {
if (activeEditor instanceof FileEditorInput) {
return this.instantiationService.createInstance(FileNotebookInput, activeEditor.getName(), activeEditor.resource, activeEditor, true);
} else if (activeEditor instanceof UntitledTextEditorInput) {
@@ -44,11 +45,11 @@ export class NotebookEditorLanguageAssociation implements ILanguageAssociation {
return undefined;
}
syncConvertInput(activeEditor: IEditorInput): NotebookInput | DiffNotebookInput | undefined {
syncConvertInput(activeEditor: EditorInput): NotebookInput | DiffNotebookInput | undefined {
return this.convertInput(activeEditor);
}
createBase(activeEditor: NotebookInput): IEditorInput {
createBase(activeEditor: NotebookInput): EditorInput {
return activeEditor.textInput;
}
}

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IRevertOptions, GroupIdentifier, IEditorInput, EditorInputCapabilities, IUntypedEditorInput } from 'vs/workbench/common/editor';
import { IRevertOptions, GroupIdentifier, EditorInputCapabilities, IUntypedEditorInput } from 'vs/workbench/common/editor';
import { Emitter, Event } from 'vs/base/common/event';
import { URI } from 'vs/base/common/uri';
import * as resources from 'vs/base/common/resources';
@@ -330,7 +330,7 @@ export abstract class NotebookInput extends EditorInput implements INotebookInpu
return this._standardKernels;
}
override async save(groupId: number, options?: ITextFileSaveOptions): Promise<IEditorInput | undefined> {
override async save(groupId: number, options?: ITextFileSaveOptions): Promise<EditorInput | undefined> {
await this.updateModel();
let input = await this.textInput.save(groupId, options);
await this.setTrustForNewEditor(input);
@@ -338,7 +338,7 @@ export abstract class NotebookInput extends EditorInput implements INotebookInpu
return langAssociation.convertInput(input);
}
override async saveAs(group: number, options?: ITextFileSaveOptions): Promise<IEditorInput | undefined> {
override async saveAs(group: number, options?: ITextFileSaveOptions): Promise<EditorInput | undefined> {
await this.updateModel();
let input = await this.textInput.saveAs(group, options);
await this.setTrustForNewEditor(input);
@@ -346,7 +346,7 @@ export abstract class NotebookInput extends EditorInput implements INotebookInpu
return langAssociation.convertInput(input);
}
private async setTrustForNewEditor(newInput: IEditorInput | undefined): Promise<void> {
private async setTrustForNewEditor(newInput: EditorInput | undefined): Promise<void> {
let model = this._model.getNotebookModel();
if (model?.trustedMode && newInput && newInput.resource !== this.resource) {
await this.notebookService.serializeNotebookStateChange(newInput.resource, NotebookChangeType.Saved, undefined, true);
@@ -533,7 +533,7 @@ export abstract class NotebookInput extends EditorInput implements INotebookInpu
return this._model.updateModel();
}
public override matches(otherInput: IEditorInput | IUntypedEditorInput): boolean {
public override matches(otherInput: EditorInput | IUntypedEditorInput): boolean {
if (otherInput instanceof NotebookInput) {
return this.textInput.matches(otherInput.textInput);
} else {

View File

@@ -255,7 +255,7 @@ export class NotebookTextFileModel {
let sourceBeforeColumn = textEditorModel.textEditorModel.getLineMaxColumn(sourceBeforeLineNumber);
if (sourceBeforeColumn) {
// Match the end of the source array
let sourceEnd = textEditorModel.textEditorModel.matchBracket({ column: sourceBeforeColumn - 1, lineNumber: sourceBeforeLineNumber });
let sourceEnd = textEditorModel.textEditorModel.bracketPairs.matchBracket({ column: sourceBeforeColumn - 1, lineNumber: sourceBeforeLineNumber });
if (sourceEnd?.length === 2) {
// Last quote in the source array will end the line before the source array
// e.g.
@@ -310,7 +310,7 @@ export class NotebookTextFileModel {
return undefined;
}
}
let outputsEnd = textEditorModel.textEditorModel.matchBracket({ column: outputsBegin.endColumn - 1, lineNumber: outputsBegin.endLineNumber });
let outputsEnd = textEditorModel.textEditorModel.bracketPairs.matchBracket({ column: outputsBegin.endColumn - 1, lineNumber: outputsBegin.endLineNumber });
if (!outputsEnd || outputsEnd.length < 2) {
return undefined;
}

View File

@@ -705,7 +705,7 @@ export class NotebookComponent extends AngularDisposable implements OnInit, OnDe
}
isActive(): boolean {
return this.editorService.activeEditor ? this.editorService.activeEditor.matches(this.notebookParams.input) : false;
return this.editorService.activeEditor ? this.editorService.activeEditor.matches(<any>this.notebookParams.input) : false;
}
isVisible(): boolean {

View File

@@ -8,7 +8,7 @@ import { EditorPaneDescriptor, IEditorPaneRegistry } from 'vs/workbench/browser/
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { localize } from 'vs/nls';
import { IEditorFactoryRegistry, ActiveEditorContext, IEditorInput, EditorExtensions } from 'vs/workbench/common/editor';
import { IEditorFactoryRegistry, ActiveEditorContext, EditorExtensions } from 'vs/workbench/common/editor';
import { ILanguageAssociationRegistry, Extensions as LanguageAssociationExtensions } from 'sql/workbench/services/languageAssociation/common/languageAssociation';
import { UntitledNotebookInput } from 'sql/workbench/contrib/notebook/browser/models/untitledNotebookInput';
import { FileNotebookInput } from 'sql/workbench/contrib/notebook/browser/models/fileNotebookInput';
@@ -24,7 +24,6 @@ import { GridOutputComponent } from 'sql/workbench/contrib/notebook/browser/outp
import { PlotlyOutputComponent } from 'sql/workbench/contrib/notebook/browser/outputs/plotlyOutput.component';
import { registerComponentType } from 'sql/workbench/contrib/notebook/browser/outputs/mimeRegistry';
import { MimeRendererComponent } from 'sql/workbench/contrib/notebook/browser/outputs/mimeRenderer.component';
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
import { URI } from 'vs/base/common/uri';
import { IWorkspaceEditingService } from 'vs/workbench/services/workspaces/common/workspaceEditing';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
@@ -64,6 +63,9 @@ import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput';
import { useNewMarkdownRendererKey } from 'sql/workbench/contrib/notebook/common/notebookCommon';
import { JUPYTER_PROVIDER_ID, NotebookLanguage } from 'sql/workbench/common/constants';
import { INotebookProviderRegistry, NotebookProviderRegistryId } from 'sql/workbench/services/notebook/common/notebookRegistry';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite';
import { IViewDescriptorService, ViewContainerLocation } from 'vs/workbench/common/views';
Registry.as<IEditorFactoryRegistry>(EditorExtensions.EditorFactory)
.registerEditorSerializer(FileNotebookInput.ID, FileNoteBookEditorSerializer);
@@ -88,7 +90,7 @@ actionRegistry.registerWorkbenchAction(
NewNotebookAction,
NewNotebookAction.ID,
NewNotebookAction.LABEL,
{ primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.KEY_N },
{ primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.KeyN },
),
NewNotebookAction.LABEL
@@ -185,7 +187,7 @@ CommandsRegistry.registerCommand({
id: RESTART_JUPYTER_NOTEBOOK_SESSIONS,
handler: async (accessor: ServicesAccessor, restartJupyterServer: boolean = true) => {
const editorService: IEditorService = accessor.get(IEditorService);
const editors: readonly IEditorInput[] = editorService.editors;
const editors: readonly EditorInput[] = editorService.editors;
let jupyterServerRestarted: boolean = false;
for (let editor of editors) {
@@ -219,7 +221,7 @@ CommandsRegistry.registerCommand({
id: STOP_JUPYTER_NOTEBOOK_SESSIONS,
handler: async (accessor: ServicesAccessor) => {
const editorService: IEditorService = accessor.get(IEditorService);
const editors: readonly IEditorInput[] = editorService.editors;
const editors: readonly EditorInput[] = editorService.editors;
for (let editor of editors) {
if (editor instanceof NotebookInput) {
@@ -274,7 +276,8 @@ registerAction2(class extends Action2 {
}
run = async (accessor, options: { forceNewWindow: boolean, folderPath: URI }) => {
const viewletService = accessor.get(IViewletService);
const viewletService: IPaneCompositePartService = accessor.get(IPaneCompositePartService);
const viewDescriptorService: IViewDescriptorService = accessor.get(IViewDescriptorService);
const workspaceEditingService = accessor.get(IWorkspaceEditingService);
const hostService = accessor.get(IHostService);
let folders = [];
@@ -283,7 +286,8 @@ registerAction2(class extends Action2 {
}
folders.push(options.folderPath);
await workspaceEditingService.addFolders(folders.map(folder => ({ uri: folder })));
await viewletService.openViewlet(viewletService.getDefaultViewletId(), true);
await viewletService.openPaneComposite(viewDescriptorService.getDefaultViewContainer(ViewContainerLocation.Sidebar)?.id,
ViewContainerLocation.Sidebar, true);
if (options.forceNewWindow) {
return hostService.openWindow([{ folderUri: folders[0] }], { forceNewWindow: options.forceNewWindow });
}
@@ -794,7 +798,7 @@ export class NotebookEditorOverrideContribution extends Disposable implements IW
));
}
private convertInput(input: IEditorInput): IEditorInput {
private convertInput(input: EditorInput): EditorInput {
const langAssociation = languageAssociationRegistry.getAssociationForLanguage(NotebookLanguage.Ipynb);
const notebookEditorInput = langAssociation?.syncConvertInput?.(input);
if (!notebookEditorInput) {

View File

@@ -20,7 +20,7 @@ import { IStorageService } from 'vs/platform/storage/common/storage';
import { ACTION_IDS, NOTEBOOK_MAX_MATCHES, IFindNotebookController, FindWidget, IConfigurationChangedEvent } from 'sql/workbench/contrib/notebook/browser/find/notebookFindWidget';
import { IOverlayWidget } from 'vs/editor/browser/editorBrowser';
import { FindReplaceState, FindReplaceStateChangedEvent } from 'vs/editor/contrib/find/findState';
import { IEditorAction } from 'vs/editor/common/editorCommon';
import { ICodeEditorViewState, IEditorAction } from 'vs/editor/common/editorCommon';
import { Event, Emitter } from 'vs/base/common/event';
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
import { NotebookFindNextAction, NotebookFindPreviousAction } from 'sql/workbench/contrib/notebook/browser/notebookActions';
@@ -94,7 +94,7 @@ export class NotebookEditor extends EditorPane implements IFindNotebookControlle
public getLastPosition(): NotebookRange {
return this._previousMatch;
}
public getCellEditor(cellGuid: string): BaseTextEditor | undefined {
public getCellEditor(cellGuid: string): BaseTextEditor<ICodeEditorViewState> | undefined {
let editorImpl = this._notebookService.findNotebookEditor(this.notebookInput.notebookUri);
if (editorImpl) {
let cellEditorProvider = editorImpl.cellEditors.filter(c => c.cellGuid() === cellGuid)[0];

View File

@@ -416,7 +416,7 @@ export const NOTEBOOK_VIEW_CONTAINER = Registry.as<IViewContainersRegistry>(View
ctorDescriptor: new SyncDescriptor(NotebookExplorerViewPaneContainer),
openCommandActionDescriptor: {
id: VIEWLET_ID,
keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_B },
keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyB },
order: 0
},
icon: { id: notebookIconId },

View File

@@ -384,7 +384,7 @@ export class NotebookSearchView extends SearchView {
}
protected override async refreshAndUpdateCount(event?: IChangeEvent): Promise<void> {
this.updateSearchResultCount(this.viewModel.searchResult.query!.userDisabledExcludesAndIgnoreFiles, false);
this.updateSearchResultCount(this.viewModel.searchResult.query!.userDisabledExcludesAndIgnoreFiles);
return this.refreshTree(event);
}

View File

@@ -32,6 +32,7 @@ import { IEditor } from 'vs/editor/common/editorCommon';
import { NotebookEditorStub } from 'sql/workbench/contrib/notebook/test/testCommon';
import { Range } from 'vs/editor/common/core/range';
import { IProductService } from 'vs/platform/product/common/productService';
import { LanguageId } from 'vs/editor/common/modes';
suite('MarkdownTextTransformer', () => {
let markdownTextTransformer: MarkdownTextTransformer;
@@ -86,8 +87,18 @@ suite('MarkdownTextTransformer', () => {
widget = editor.getControl();
assert(!isUndefinedOrNull(widget), 'widget is undefined');
let languageConfigurationService: any = {
onDidChange: (_a: any) => { }
};
let modeService: any = {
languageIdCodec: {
encodeLanguageId: (languageId: string) => { return <LanguageId>undefined; },
decodeLanguageId: (languageId: LanguageId) => { return <string>undefined; }
}
};
// Create new text model
textModel = new TextModel('', { isForSimpleWidget: true, defaultEOL: DefaultEndOfLine.LF, detectIndentation: true, indentSize: 0, insertSpaces: false, largeFileOptimizations: false, tabSize: 4, trimAutoWhitespace: false, bracketPairColorizationOptions: { enabled: true } }, null, undefined, undoRedoService);
textModel = new TextModel('', { isForSimpleWidget: true, defaultEOL: DefaultEndOfLine.LF, detectIndentation: true, indentSize: 0, insertSpaces: false, largeFileOptimizations: false, tabSize: 4, trimAutoWhitespace: false, bracketPairColorizationOptions: { enabled: true } }, null, undefined, undoRedoService, modeService, languageConfigurationService);
// Couple widget with newly created text model
widget.setModel(textModel);

View File

@@ -5,18 +5,18 @@
import * as assert from 'assert';
import * as Platform from 'vs/platform/registry/common/platform';
import { ViewletDescriptor, Extensions, ViewletRegistry, Viewlet } from 'vs/workbench/browser/viewlet';
import * as Types from 'vs/base/common/types';
import { Extensions as ViewContainerExtensions, IViewDescriptor, IViewsRegistry } from 'vs/workbench/common/views';
import { NotebookExplorerViewPaneContainer, NOTEBOOK_VIEW_CONTAINER } from 'sql/workbench/contrib/notebook/browser/notebookExplorer/notebookExplorerViewlet';
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
import { ViewPaneContainer } from 'vs/workbench/browser/parts/views/viewPaneContainer';
import { Extensions, PaneComposite, PaneCompositeDescriptor, PaneCompositeRegistry } from 'vs/workbench/browser/panecomposite';
suite('Notebook Explorer Views', () => {
class NotebookExplorerTestViewlet extends Viewlet {
class NotebookExplorerTestViewlet extends PaneComposite {
constructor() {
super('notebookExplorer', undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
super('notebookExplorer', undefined, undefined, undefined, undefined, undefined, undefined, undefined);
}
public override layout(dimension: any): void {
@@ -30,7 +30,7 @@ suite('Notebook Explorer Views', () => {
}
test('ViewDescriptor API', function () {
let d = ViewletDescriptor.create(NotebookExplorerTestViewlet, 'id', 'name', 'class', 1);
let d = PaneCompositeDescriptor.create(NotebookExplorerTestViewlet, 'id', 'name', 'class', 1);
assert.strictEqual(d.id, 'id');
assert.strictEqual(d.name, 'name');
assert.strictEqual(d.cssClass, 'class');
@@ -38,11 +38,11 @@ suite('Notebook Explorer Views', () => {
});
test('Editor Aware ViewletDescriptor API', function () {
let d = ViewletDescriptor.create(NotebookExplorerTestViewlet, 'id', 'name', 'class', 5);
let d = PaneCompositeDescriptor.create(NotebookExplorerTestViewlet, 'id', 'name', 'class', 5);
assert.strictEqual(d.id, 'id');
assert.strictEqual(d.name, 'name');
d = ViewletDescriptor.create(NotebookExplorerTestViewlet, 'id', 'name', 'class', 5);
d = PaneCompositeDescriptor.create(NotebookExplorerTestViewlet, 'id', 'name', 'class', 5);
assert.strictEqual(d.id, 'id');
assert.strictEqual(d.name, 'name');
});
@@ -80,15 +80,15 @@ suite('Notebook Explorer Views', () => {
});
test('NotebookExplorer Viewlet extension point should not register duplicate viewlets', function () {
let v1 = ViewletDescriptor.create(NotebookExplorerTestViewlet, 'notebookExplorer-test-id', 'name');
Platform.Registry.as<ViewletRegistry>(Extensions.Viewlets).registerViewlet(v1);
let oldCount = Platform.Registry.as<ViewletRegistry>(Extensions.Viewlets).getViewlets().length;
let v1 = PaneCompositeDescriptor.create(NotebookExplorerTestViewlet, 'notebookExplorer-test-id', 'name');
Platform.Registry.as<PaneCompositeRegistry>(Extensions.Viewlets).registerPaneComposite(v1);
let oldCount = Platform.Registry.as<PaneCompositeRegistry>(Extensions.Viewlets).getPaneComposites().length;
let v1Duplicate = ViewletDescriptor.create(NotebookExplorerTestViewlet, 'notebookExplorer-test-id', 'name');
let v1Duplicate = PaneCompositeDescriptor.create(NotebookExplorerTestViewlet, 'notebookExplorer-test-id', 'name');
// Shouldn't register the duplicate.
Platform.Registry.as<ViewletRegistry>(Extensions.Viewlets).registerViewlet(v1Duplicate);
Platform.Registry.as<PaneCompositeRegistry>(Extensions.Viewlets).registerPaneComposite(v1Duplicate);
let newCount = Platform.Registry.as<ViewletRegistry>(Extensions.Viewlets).getViewlets().length;
let newCount = Platform.Registry.as<PaneCompositeRegistry>(Extensions.Viewlets).getPaneComposites().length;
assert.strictEqual(oldCount, newCount, 'Duplicate registration of views.');
});

View File

@@ -227,7 +227,7 @@ suite('NotebookMarkdownRenderer', () => {
test('Cell 8e45da0e-5c24-469e-8ae5-671313bd54a1', function (): void {
const markdown = '1. List Item\n\n \n\n2. List Item 2';
const expectedValue = '<ol>\n<li><p>List Item</p></li>\n<li><p> List Item 2</p></li>\n</ol>\n';
const expectedValue = '<ol>\n<li><p>List Item</p></li>\n<li><p>List Item 2</p></li>\n</ol>\n';
const result = notebookMarkdownRenderer.renderMarkdown({ value: markdown, isTrusted: true }).innerHTML;
assert.strictEqual(result, expectedValue);
});
@@ -243,7 +243,7 @@ suite('NotebookMarkdownRenderer', () => {
test('Cell e6ad1eb3-7409-4199-9592-9d13f1e2d8a0', function (): void {
const markdown = '1. Text \n\nMore text \n\n a. Sub-Text';
const expectedValue = '<ol>\n<li>Text </li>\n</ol>\n<p>More text </p><pre><code>a. Sub-Text\n</code></pre>\n';
const expectedValue = '<ol>\n<li>Text</li>\n</ol>\n<p>More text </p><pre><code>a. Sub-Text\n</code></pre>\n';
const result = notebookMarkdownRenderer.renderMarkdown({ value: markdown, isTrusted: true }).innerHTML;
assert.strictEqual(result, expectedValue);
});

View File

@@ -49,7 +49,7 @@ suite('OutputProcessor functions', function (): void {
evalue: evalue,
traceback: traceback
};
test(`test for outputType:'${output.output_type}', ename:'${ename}', evalue:${evalue}, and traceback:${JSON.stringify(traceback)}`, () => {
test.skip(`test for outputType:'${output.output_type}', ename:'${ename}', evalue:${evalue}, and traceback:${JSON.stringify(traceback)}`, () => {
verifyGetDataForErrorOutput(output);
});
}
@@ -149,7 +149,7 @@ function verifyGetDataForStreamOutput(output: nbformat.IStream): void {
function verifyGetDataForErrorOutput(output: nbformat.IError): void {
const result = op.getData(output);
const tracedata = (output.traceback === undefined || output.traceback === []) ? undefined : output.traceback.join('\n');
const tracedata = (output.traceback === undefined || output.traceback.length > 0) ? undefined : output.traceback.join('\n');
// getData returns an object with single property: 'application/vnd.jupyter.stderr'
// this property is assigned to a '\n' delimited traceback data when it is present.
// when traceback is absent this property gets ename and evalue information with ': ' as delimiter unless

View File

@@ -17,13 +17,14 @@ import { ConnectionProfile } from 'sql/platform/connection/common/connectionProf
import { URI, UriComponents } from 'vs/base/common/uri';
import { QueryTextEditor } from 'sql/workbench/browser/modelComponents/queryTextEditor';
import { IContextViewProvider, IDelegate } from 'vs/base/browser/ui/contextview/contextview';
import { IEditorInput, IEditorPane } from 'vs/workbench/common/editor';
import { IEditorPane } from 'vs/workbench/common/editor';
import { INotebookShowOptions } from 'sql/workbench/api/common/sqlExtHost.protocol';
import { NotebookViewsExtension } from 'sql/workbench/services/notebook/browser/notebookViews/notebookViewsExtension';
import { INotebookView, INotebookViewCard, INotebookViewMetadata, INotebookViews } from 'sql/workbench/services/notebook/browser/notebookViews/notebookViews';
import * as TelemetryKeys from 'sql/platform/telemetry/common/telemetryKeys';
import { ITelemetryEventProperties } from 'sql/platform/telemetry/common/telemetry';
import { INotebookEditOperation } from 'sql/workbench/api/common/sqlExtHostTypes';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
export class NotebookModelStub implements INotebookModel {
constructor(private _languageInfo?: nb.ILanguageInfo, private _cells?: ICellModel[], private _testContents?: nb.INotebookContents) {
@@ -241,7 +242,7 @@ export class NotebookServiceStub implements INotebookService {
getSupportedLanguagesForProvider(provider: string, kernelDisplayName?: string): Promise<string[]> {
throw new Error('Method not implemented.');
}
createNotebookInputFromContents(providerId: string, contents?: nb.INotebookContents, resource?: UriComponents): Promise<IEditorInput> {
createNotebookInputFromContents(providerId: string, contents?: nb.INotebookContents, resource?: UriComponents): Promise<EditorInput> {
throw new Error('Method not implemented.');
}
_serviceBrand: undefined;

View File

@@ -70,8 +70,8 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: 'profiler.newProfiler',
weight: KeybindingWeight.BuiltinExtension,
when: undefined,
primary: KeyMod.Alt | KeyCode.KEY_P,
mac: { primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.KEY_P },
primary: KeyMod.Alt | KeyCode.KeyP,
mac: { primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.KeyP },
handler: CommandsRegistry.getCommand('profiler.newProfiler').handler
});
@@ -79,8 +79,8 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: 'profiler.toggleStartStop',
weight: KeybindingWeight.EditorContrib,
when: undefined,
primary: KeyMod.Alt | KeyCode.KEY_S,
mac: { primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.KEY_S },
primary: KeyMod.Alt | KeyCode.KeyS,
mac: { primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.KeyS },
handler: (accessor: ServicesAccessor) => {
let profilerService: IProfilerService = accessor.get(IProfilerService);
let editorService: IEditorService = accessor.get(IEditorService);

View File

@@ -666,7 +666,7 @@ const command = new StartSearchProfilerTableCommand({
id: PROFILER_TABLE_COMMAND_SEARCH,
precondition: ContextKeyExpr.and(CONTEXT_PROFILER_EDITOR),
kbOpts: {
primary: KeyMod.CtrlCmd | KeyCode.KEY_F,
primary: KeyMod.CtrlCmd | KeyCode.KeyF,
weight: KeybindingWeight.EditorContrib
}
});

View File

@@ -22,6 +22,7 @@ import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editor
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
import { ITextEditorOptions } from 'vs/platform/editor/common/editor';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
class ProfilerResourceCodeEditor extends CodeEditorWidget {
@@ -37,7 +38,7 @@ class ProfilerResourceCodeEditor extends CodeEditorWidget {
/**
* Extension of TextResourceEditor that is always readonly rather than only with non UntitledInputs
*/
export class ProfilerResourceEditor extends BaseTextEditor {
export class ProfilerResourceEditor extends BaseTextEditor<editorCommon.ICodeEditorViewState> {
public static ID = 'profiler.editors.textEditor';
constructor(
@@ -66,7 +67,9 @@ export class ProfilerResourceEditor extends BaseTextEditor {
options.folding = false;
options.renderWhitespace = 'none';
options.wordWrap = 'on';
options.renderIndentGuides = false;
options.guides = {
indentation: false
};
options.rulers = [];
options.glyphMargin = true;
options.minimap = {
@@ -90,4 +93,8 @@ export class ProfilerResourceEditor extends BaseTextEditor {
public override layout(dimension: DOM.Dimension) {
this.getControl().layout(dimension);
}
protected tracksEditorViewState(input: EditorInput): boolean {
return input.typeId === ProfilerResourceEditor.ID;
}
}

View File

@@ -27,7 +27,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
import { Dimension } from 'vs/base/browser/dom';
import { textFormatter, slickGridDataItemColumnValueExtractor } from 'sql/base/browser/ui/table/formatters';
import { IStorageService } from 'vs/platform/storage/common/storage';
import { IStatusbarService, StatusbarAlignment } from 'vs/workbench/services/statusbar/common/statusbar';
import { IStatusbarService, StatusbarAlignment } from 'vs/workbench/services/statusbar/browser/statusbar';
import { localize } from 'vs/nls';
import { CopyKeybind } from 'sql/base/browser/ui/table/plugins/copyKeybind.plugin';
import { IClipboardService } from 'sql/platform/clipboard/common/clipboardService';

View File

@@ -10,12 +10,13 @@ import { IQueryModelService } from 'sql/workbench/services/query/common/queryMod
import { FileEditorInput } from 'vs/workbench/contrib/files/browser/editors/fileEditorInput';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IMoveResult, GroupIdentifier, ISaveOptions, IEditorInput } from 'vs/workbench/common/editor';
import { IMoveResult, GroupIdentifier, ISaveOptions } from 'vs/workbench/common/editor';
import { BinaryEditorModel } from 'vs/workbench/common/editor/binaryEditorModel';
import { EncodingMode, ITextFileEditorModel } from 'vs/workbench/services/textfile/common/textfiles';
import { URI } from 'vs/base/common/uri';
import { FILE_QUERY_EDITOR_TYPEID } from 'sql/workbench/common/constants';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
export class FileQueryEditorInput extends QueryEditorInput {
@@ -85,11 +86,11 @@ export class FileQueryEditorInput extends QueryEditorInput {
return this.text.isResolved();
}
public override rename(group: GroupIdentifier, target: URI): IMoveResult {
public override async rename(group: GroupIdentifier, target: URI): Promise<IMoveResult> {
return this.text.rename(group, target);
}
override async saveAs(group: GroupIdentifier, options?: ISaveOptions): Promise<IEditorInput | undefined> {
override async saveAs(group: GroupIdentifier, options?: ISaveOptions): Promise<EditorInput | undefined> {
let newEditorInput = await this.text.saveAs(group, options);
let newUri = newEditorInput.resource.toString(true);
if (newUri === this.uri) {

View File

@@ -19,7 +19,7 @@ import { EditorServiceImpl } from 'vs/workbench/browser/parts/editor/editor';
import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput';
import { mssqlProviderName } from 'sql/platform/connection/common/constants';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { IStatusbarService, StatusbarAlignment, IStatusbarEntryAccessor, IStatusbarEntry } from 'vs/workbench/services/statusbar/common/statusbar';
import { IStatusbarService, StatusbarAlignment, IStatusbarEntryAccessor, IStatusbarEntry } from 'vs/workbench/services/statusbar/browser/statusbar';
export interface ISqlProviderEntry extends IQuickPickItem {
providerId: string;

View File

@@ -140,7 +140,7 @@ actionRegistry.registerWorkbenchAction(
EstimatedExecutionPlanKeyboardAction,
EstimatedExecutionPlanKeyboardAction.ID,
EstimatedExecutionPlanKeyboardAction.LABEL,
{ primary: KeyMod.CtrlCmd | KeyCode.KEY_L }
{ primary: KeyMod.CtrlCmd | KeyCode.KeyL }
),
EstimatedExecutionPlanKeyboardAction.LABEL,
CATEGORIES.ExecutionPlan.value
@@ -151,7 +151,7 @@ actionRegistry.registerWorkbenchAction(
ToggleActualPlanKeyboardAction,
ToggleActualPlanKeyboardAction.ID,
ToggleActualPlanKeyboardAction.LABEL,
{ primary: KeyMod.CtrlCmd | KeyCode.KEY_M }
{ primary: KeyMod.CtrlCmd | KeyCode.KeyM }
),
ToggleActualPlanKeyboardAction.LABEL,
CATEGORIES.ExecutionPlan.value
@@ -162,7 +162,7 @@ actionRegistry.registerWorkbenchAction(
CopyQueryWithResultsKeyboardAction,
CopyQueryWithResultsKeyboardAction.ID,
CopyQueryWithResultsKeyboardAction.LABEL,
{ primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_V) }
{ primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.KeyV) }
),
CopyQueryWithResultsKeyboardAction.LABEL
);
@@ -191,7 +191,7 @@ actionRegistry.registerWorkbenchAction(
FocusOnCurrentQueryKeyboardAction,
FocusOnCurrentQueryKeyboardAction.ID,
FocusOnCurrentQueryKeyboardAction.LABEL,
{ primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_O }
{ primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyO }
),
FocusOnCurrentQueryKeyboardAction.LABEL
);
@@ -212,7 +212,7 @@ actionRegistry.registerWorkbenchAction(
ToggleQueryResultsKeyboardAction,
ToggleQueryResultsKeyboardAction.ID,
ToggleQueryResultsKeyboardAction.LABEL,
{ primary: KeyMod.WinCtrl | KeyMod.Shift | KeyCode.KEY_R },
{ primary: KeyMod.WinCtrl | KeyMod.Shift | KeyCode.KeyR },
QueryEditorVisibleCondition
),
ToggleQueryResultsKeyboardAction.LABEL
@@ -223,7 +223,7 @@ actionRegistry.registerWorkbenchAction(
ToggleFocusBetweenQueryEditorAndResultsAction,
ToggleFocusBetweenQueryEditorAndResultsAction.ID,
ToggleFocusBetweenQueryEditorAndResultsAction.LABEL,
{ primary: KeyMod.WinCtrl | KeyMod.Shift | KeyCode.KEY_F },
{ primary: KeyMod.WinCtrl | KeyMod.Shift | KeyCode.KeyF },
QueryEditorVisibleCondition
),
ToggleFocusBetweenQueryEditorAndResultsAction.LABEL
@@ -243,7 +243,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.GRID_COPY_ID,
weight: KeybindingWeight.EditorContrib,
when: ResultsGridFocusCondition,
primary: KeyMod.CtrlCmd | KeyCode.KEY_C,
primary: KeyMod.CtrlCmd | KeyCode.KeyC,
handler: gridCommands.copySelection
});
@@ -251,7 +251,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.MESSAGES_SELECTALL_ID,
weight: KeybindingWeight.EditorContrib,
when: ResultsMessagesFocusCondition,
primary: KeyMod.CtrlCmd | KeyCode.KEY_A,
primary: KeyMod.CtrlCmd | KeyCode.KeyA,
handler: gridCommands.selectAllMessages
});
@@ -259,7 +259,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.GRID_SELECTALL_ID,
weight: KeybindingWeight.EditorContrib,
when: ResultsGridFocusCondition,
primary: KeyMod.CtrlCmd | KeyCode.KEY_A,
primary: KeyMod.CtrlCmd | KeyCode.KeyA,
handler: gridCommands.selectAll
});
@@ -267,7 +267,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.MESSAGES_COPY_ID,
weight: KeybindingWeight.EditorContrib,
when: ResultsMessagesFocusCondition,
primary: KeyMod.CtrlCmd | KeyCode.KEY_C,
primary: KeyMod.CtrlCmd | KeyCode.KeyC,
handler: gridCommands.copyMessagesSelection
});
@@ -275,7 +275,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.GRID_SAVECSV_ID,
weight: KeybindingWeight.EditorContrib,
when: ResultsGridFocusCondition,
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_R, KeyMod.CtrlCmd | KeyCode.KEY_C),
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyR, KeyMod.CtrlCmd | KeyCode.KeyC),
handler: gridCommands.saveAsCsv
});
@@ -283,7 +283,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.GRID_SAVEJSON_ID,
weight: KeybindingWeight.EditorContrib,
when: ResultsGridFocusCondition,
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_R, KeyMod.CtrlCmd | KeyCode.KEY_J),
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyR, KeyMod.CtrlCmd | KeyCode.KeyJ),
handler: gridCommands.saveAsJson
});
@@ -291,7 +291,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.GRID_SAVEEXCEL_ID,
weight: KeybindingWeight.EditorContrib,
when: ResultsGridFocusCondition,
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_R, KeyMod.CtrlCmd | KeyCode.KEY_E),
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyR, KeyMod.CtrlCmd | KeyCode.KeyE),
handler: gridCommands.saveAsExcel
});
@@ -299,7 +299,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.GRID_SAVEXML_ID,
weight: KeybindingWeight.EditorContrib,
when: ResultsGridFocusCondition,
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_R, KeyMod.CtrlCmd | KeyCode.KEY_X),
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyR, KeyMod.CtrlCmd | KeyCode.KeyX),
handler: gridCommands.saveAsXml
});
@@ -307,7 +307,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.GRID_VIEWASCHART_ID,
weight: KeybindingWeight.EditorContrib,
when: ResultsGridFocusCondition,
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_R, KeyMod.CtrlCmd | KeyCode.KEY_V),
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyR, KeyMod.CtrlCmd | KeyCode.KeyV),
handler: gridCommands.viewAsChart
});
@@ -315,7 +315,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.GRID_GOTONEXTGRID_ID,
weight: KeybindingWeight.EditorContrib,
when: ResultsGridFocusCondition,
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_R, KeyMod.CtrlCmd | KeyCode.KEY_N),
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyR, KeyMod.CtrlCmd | KeyCode.KeyN),
handler: gridCommands.goToNextGrid
});
@@ -323,7 +323,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.TOGGLERESULTS_ID,
weight: KeybindingWeight.EditorContrib,
when: QueryEditorVisibleCondition,
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_R,
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyR,
handler: gridCommands.toggleResultsPane
});
@@ -331,7 +331,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.TOGGLEMESSAGES_ID,
weight: KeybindingWeight.EditorContrib,
when: QueryEditorVisibleCondition,
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_Y,
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyY,
handler: gridCommands.toggleMessagePane
});
@@ -339,7 +339,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
id: gridActions.GOTONEXTQUERYOUTPUTTAB_ID,
weight: KeybindingWeight.EditorContrib,
when: QueryEditorVisibleCondition,
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_P,
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyP,
handler: gridCommands.goToNextQueryOutputTab
});
@@ -458,8 +458,8 @@ const queryEditorConfiguration: IConfigurationNode = {
const initialShortcuts = [
{ name: 'sp_help', primary: KeyMod.Alt + KeyCode.F2 },
// Note: using Ctrl+Shift+N since Ctrl+N is used for "open editor at index" by default. This means it's different from SSMS
{ name: 'sp_who', primary: KeyMod.WinCtrl + KeyMod.Shift + KeyCode.KEY_1 },
{ name: 'sp_lock', primary: KeyMod.WinCtrl + KeyMod.Shift + KeyCode.KEY_2 }
{ name: 'sp_who', primary: KeyMod.WinCtrl + KeyMod.Shift + KeyCode.Digit1 },
{ name: 'sp_lock', primary: KeyMod.WinCtrl + KeyMod.Shift + KeyCode.Digit2 }
];
const shortCutConfiguration: IConfigurationNode = {

View File

@@ -45,6 +45,7 @@ import { IEditorOptions } from 'vs/platform/editor/common/editor';
import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfigurationService';
import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
import { ConnectionOptionSpecialType } from 'sql/platform/connection/common/interfaces';
import { ICodeEditorViewState } from 'vs/editor/common/editorCommon';
const QUERY_EDITOR_VIEW_STATE_PREFERENCE_KEY = 'queryEditorViewState';
@@ -69,7 +70,7 @@ export class QueryEditor extends EditorPane {
private textResourceEditor: TextResourceEditor;
private textFileEditor: TextFileEditor;
private currentTextEditor: BaseTextEditor;
private currentTextEditor: BaseTextEditor<ICodeEditorViewState>;
private textResourceEditorContainer: HTMLElement;
private textFileEditorContainer: HTMLElement;

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IEditorFactoryRegistry, IEditorInput, IEditorSerializer, EditorExtensions } from 'vs/workbench/common/editor';
import { IEditorFactoryRegistry, IEditorSerializer, EditorExtensions } from 'vs/workbench/common/editor';
import { Registry } from 'vs/platform/registry/common/platform';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { QueryResultsInput } from 'sql/workbench/common/editor/query/queryResultsInput';
@@ -23,6 +23,7 @@ import { IFileService } from 'vs/platform/files/common/files';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/queryEditorService';
import { IQueryEditorConfiguration } from 'sql/platform/query/common/query';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
const editorFactoryRegistry = Registry.as<IEditorFactoryRegistry>(EditorExtensions.EditorFactory);
@@ -41,7 +42,7 @@ export class QueryEditorLanguageAssociation implements ILanguageAssociation {
@IEditorService private readonly editorService: IEditorService,
@IQueryEditorService private readonly queryEditorService: IQueryEditorService) { }
async convertInput(activeEditor: IEditorInput): Promise<QueryEditorInput | undefined> {
async convertInput(activeEditor: EditorInput): Promise<QueryEditorInput | undefined> {
if (!(activeEditor instanceof FileEditorInput) && !(activeEditor instanceof UntitledTextEditorInput)) {
return undefined;
}
@@ -61,7 +62,7 @@ export class QueryEditorLanguageAssociation implements ILanguageAssociation {
return queryEditorInput;
}
syncConvertInput(activeEditor: IEditorInput): QueryEditorInput | undefined {
syncConvertInput(activeEditor: EditorInput): QueryEditorInput | undefined {
const queryResultsInput = this.instantiationService.createInstance(QueryResultsInput, activeEditor.resource.toString(true));
let queryEditorInput: QueryEditorInput;
if (activeEditor instanceof FileEditorInput) {
@@ -94,7 +95,7 @@ export class QueryEditorLanguageAssociation implements ILanguageAssociation {
}
}
createBase(activeEditor: QueryEditorInput): IEditorInput {
createBase(activeEditor: QueryEditorInput): EditorInput {
return activeEditor.text;
}
}

View File

@@ -15,7 +15,7 @@ import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
import { localize } from 'vs/nls';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IStatusbarEntryAccessor, IStatusbarService, StatusbarAlignment } from 'vs/workbench/services/statusbar/common/statusbar';
import { IStatusbarEntryAccessor, IStatusbarService, StatusbarAlignment } from 'vs/workbench/services/statusbar/browser/statusbar';
export class TimeElapsedStatusBarContributions extends Disposable implements IWorkbenchContribution {
private static readonly ID = 'status.query.timeElapsed';

View File

@@ -8,7 +8,6 @@ import * as sinon from 'sinon';
import { ITestInstantiationService, TestEditorService } from 'vs/workbench/test/browser/workbenchTestServices';
import { URI } from 'vs/base/common/uri';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IEditorInput } from 'vs/workbench/common/editor';
import { FileEditorInput } from 'vs/workbench/contrib/files/browser/editors/fileEditorInput';
import { workbenchInstantiationService } from 'sql/workbench/test/workbenchTestServices';
import { QueryEditorLanguageAssociation } from 'sql/workbench/contrib/query/browser/queryEditorFactory';
@@ -27,6 +26,7 @@ import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/q
import { QueryResultsInput } from 'sql/workbench/common/editor/query/queryResultsInput';
import { extUri } from 'vs/base/common/resources';
import { IResourceEditorInputIdentifier } from 'vs/platform/editor/common/editor';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
suite('Query Input Factory', () => {
let instantiationService: ITestInstantiationService;
@@ -337,8 +337,8 @@ class ServiceAccessor {
}
class MockEditorService extends TestEditorService {
private __activeEditor: IEditorInput | undefined = undefined;
public override get activeEditor(): IEditorInput | undefined {
private __activeEditor: EditorInput | undefined = undefined;
public override get activeEditor(): EditorInput | undefined {
return this.__activeEditor;
}

View File

View File

@@ -13,13 +13,13 @@ import * as ext from 'vs/workbench/common/contributions';
import { ITaskService } from 'sql/workbench/services/tasks/common/tasksService';
import { IActivityService, NumberBadge } from 'vs/workbench/services/activity/common/activity';
import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle';
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
import { ToggleTasksAction } from 'sql/workbench/contrib/tasks/browser/tasksActions';
import { ViewPaneContainer } from 'vs/workbench/browser/parts/views/viewPaneContainer';
import { IViewContainersRegistry, Extensions as ViewContainerExtensions, ViewContainer, ViewContainerLocation, IViewsRegistry } from 'vs/workbench/common/views';
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
import { TASKS_CONTAINER_ID, TASKS_VIEW_ID } from 'sql/workbench/contrib/tasks/common/tasks';
import { TaskHistoryView } from 'sql/workbench/contrib/tasks/browser/tasksView';
import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite';
export class StatusUpdater extends lifecycle.Disposable implements ext.IWorkbenchContribution {
static ID = 'data.taskhistory.statusUpdater';
@@ -29,12 +29,12 @@ export class StatusUpdater extends lifecycle.Disposable implements ext.IWorkbenc
constructor(
@IActivityService private readonly activityBarService: IActivityService,
@ITaskService private readonly taskService: ITaskService,
@IPanelService private readonly panelService: IPanelService
@IPaneCompositePartService private readonly panelService: IPaneCompositePartService
) {
super();
this._register(this.taskService.onAddNewTask(args => {
this.panelService.openPanel(TASKS_CONTAINER_ID, true);
this.panelService.openPaneComposite(TASKS_CONTAINER_ID, ViewContainerLocation.Panel, true);
this.onServiceChange();
}));
@@ -67,7 +67,7 @@ registry.registerWorkbenchAction(
ToggleTasksAction,
ToggleTasksAction.ID,
ToggleTasksAction.LABEL,
{ primary: KeyMod.CtrlCmd | KeyCode.KEY_T }),
{ primary: KeyMod.CtrlCmd | KeyCode.KeyT }),
'View: Toggle Tasks',
localize('viewCategory', "View")
);

View File

@@ -5,8 +5,10 @@
import { localize } from 'vs/nls';
import { Action } from 'vs/base/common/actions';
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
import { IActivityBarService } from 'vs/workbench/services/activityBar/browser/activityBarService';
import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService';
// import { IActivityBarService } from 'vs/workbench/services/activityBar/browser/activityBarService';
import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite';
import { IViewDescriptorService } from 'vs/workbench/common/views';
export class HidePanel extends Action {
static readonly ID = 'workbench.action.hidePanel';
@@ -21,7 +23,7 @@ export class HidePanel extends Action {
}
override async run(): Promise<void> {
this.layoutService.setPanelHidden(true);
this.layoutService.setPartHidden(true, Parts.PANEL_PART);
}
}
@@ -50,7 +52,8 @@ export class HideActivityBarViewContainers extends Action {
constructor(
id: string = HideActivityBarViewContainers.ID,
label: string = HideActivityBarViewContainers.LABEL,
@IActivityBarService private readonly activityBarService: IActivityBarService,
@IViewDescriptorService private readonly viewDescriptorService: IViewDescriptorService,
@IPaneCompositePartService private readonly activityBarService: IPaneCompositePartService,
) {
super(id, label);
}
@@ -58,7 +61,10 @@ export class HideActivityBarViewContainers extends Action {
override async run(): Promise<void> {
let viewsToHide = ['workbench.view.search', 'workbench.view.explorer', 'workbench.view.scm', 'workbench.view.extensions'];
for (let j = 0; j < viewsToHide.length; j++) {
this.activityBarService.hideViewContainer(viewsToHide[j]);
const viewContainer = this.viewDescriptorService.getViewContainerById(viewsToHide[j]);
if (viewContainer) {
this.activityBarService.hideActivePaneComposite(this.viewDescriptorService.getViewContainerLocation(viewContainer));
}
}
}
}

View File

@@ -45,7 +45,7 @@ import { IProductService } from 'vs/platform/product/common/productService';
import { joinPath } from 'vs/base/common/resources';
import { clearNode } from 'vs/base/browser/dom';
import { GuidedTour } from 'sql/workbench/contrib/welcome/page/browser/gettingStartedTour';
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService';
import { ILayoutService } from 'vs/platform/layout/browser/layoutService';
import { Button } from 'sql/base/browser/ui/button/button';
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
@@ -448,7 +448,6 @@ class WelcomePage extends Disposable {
p.innerText = localize('WelcomePage.TakeATour', "Would you like to take a quick tour of Azure Data Studio?");
b.innerText = localize('WelcomePage.welcome', "Welcome!");
containerLeft.appendChild(icon);
containerLeft.appendChild(p);
containerRight.appendChild(removeTourBtn);
@@ -458,11 +457,10 @@ class WelcomePage extends Disposable {
startTourBtn.onDidClick((e) => {
this.configurationService.updateValue(configurationKey, 'welcomePageWithTour', ConfigurationTarget.USER);
this.layoutService.setSideBarHidden(true);
this.layoutService.setPartHidden(true, Parts.SIDEBAR_PART);
guidedTour.create();
});
removeTourBtn.addEventListener('click', (e: MouseEvent) => {
this.configurationService.updateValue(configurationKey, 'welcomePage', ConfigurationTarget.USER);
guidedTourNotificationContainer.classList.add('hide');

View File

@@ -129,6 +129,7 @@ export class BackupRestoreUrlBrowserDialog extends Modal {
let linkAccountText = localize('backupRestoreUrlBrowserDialog.linkAccount', "Link account");
let linkAccountButton = DialogHelper.appendRow(tableContainer, '', 'url-input-label', 'url-input-box');
const linkAccount: Link = this._register(this._instantiationService.createInstance(Link,
linkAccountButton,
{
label: linkAccountText,
title: linkAccountText,

View File

@@ -6,11 +6,11 @@
import { NgModuleRef, PlatformRef, Provider, enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { IInstantiationService, _util, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { IEditorInput } from 'vs/workbench/common/editor';
import { Trace } from 'vs/platform/instantiation/common/instantiationService';
import { IModuleFactory, IBootstrapParams } from 'sql/workbench/services/bootstrap/common/bootstrapParams';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { ILogService } from 'vs/platform/log/common/log';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
const selectorCounter = new Map<string, number>();
@@ -39,7 +39,7 @@ function createUniqueSelector(selector: string): string {
let platform: PlatformRef;
export function bootstrapAngular<T>(accessor: ServicesAccessor, moduleType: IModuleFactory<T>, container: HTMLElement, selectorString: string, params: IBootstrapParams, input?: IEditorInput, callbackSetModule?: (value: NgModuleRef<T>) => void): string {
export function bootstrapAngular<T>(accessor: ServicesAccessor, moduleType: IModuleFactory<T>, container: HTMLElement, selectorString: string, params: IBootstrapParams, input?: EditorInput, callbackSetModule?: (value: NgModuleRef<T>) => void): string {
// Create the uniqueSelectorString
let uniqueSelectorString = createUniqueSelector(selectorString);
let selector = document.createElement(uniqueSelectorString);

View File

@@ -45,9 +45,10 @@ import { ConnectionBrowseTab } from 'sql/workbench/services/connection/browser/c
import { ElementSizeObserver } from 'vs/editor/browser/config/elementSizeObserver';
import { ConnectionProviderAndExtensionMap, ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
import { VIEWLET_ID as ExtensionsViewletID } from 'vs/workbench/contrib/extensions/common/extensions';
import { ICommandService } from 'vs/platform/commands/common/commands';
import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite';
import { ViewContainerLocation } from 'vs/workbench/common/views';
export interface OnShowUIResponse {
selectedProviderDisplayName: string;
@@ -130,7 +131,7 @@ export class ConnectionDialogWidget extends Modal {
@IConfigurationService private _configurationService: IConfigurationService,
@ICapabilitiesService private _capabilitiesService: ICapabilitiesService,
@INotificationService private _notificationService: INotificationService,
@IViewletService private _viewletService: IViewletService,
@IPaneCompositePartService private _paneCompositeService: IPaneCompositePartService,
@ICommandService private _commandService: ICommandService
) {
super(
@@ -426,7 +427,7 @@ export class ConnectionDialogWidget extends Modal {
label: localize('connectionDialog.viewExtensions', "View Extensions"),
run: async () => {
this.close();
await this._viewletService.openViewlet(ExtensionsViewletID, true);
await this._paneCompositeService.openPaneComposite(ExtensionsViewletID, ViewContainerLocation.Sidebar);
}
}]);
}

View File

@@ -18,8 +18,8 @@ import { IViewDescriptorService } from 'vs/workbench/common/views';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
import { INotificationService } from 'vs/platform/notification/common/notification';
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
import { ICommandService } from 'vs/platform/commands/common/commands';
import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite';
export class TestConnectionDialogWidget extends ConnectionDialogWidget {
constructor(
@@ -41,9 +41,9 @@ export class TestConnectionDialogWidget extends ConnectionDialogWidget {
@IConfigurationService configurationService: IConfigurationService,
@ICapabilitiesService capabilitiesService: ICapabilitiesService,
@INotificationService notificationService: INotificationService,
@IViewletService viewletService: IViewletService,
@IPaneCompositePartService paneCompositeService: IPaneCompositePartService,
@ICommandService commandService: ICommandService
) {
super(providerDisplayNameOptions, selectedProviderType, providerNameToDisplayNameMap, _instantiationService, _connectionManagementService, _contextMenuService, _contextViewService, themeService, layoutService, telemetryService, contextKeyService, clipboardService, logService, textResourcePropertiesService, configurationService, capabilitiesService, notificationService, viewletService, commandService);
super(providerDisplayNameOptions, selectedProviderType, providerNameToDisplayNameMap, _instantiationService, _connectionManagementService, _contextMenuService, _contextViewService, themeService, layoutService, telemetryService, contextKeyService, clipboardService, logService, textResourcePropertiesService, configurationService, capabilitiesService, notificationService, paneCompositeService, commandService);
}
}

View File

@@ -85,7 +85,7 @@ suite('Insights Utils tests', function () {
new Workspace(
'TestWorkspace',
[toWorkspaceFolder(URI.file(queryFileDir))],
undefined, undefined
undefined, undefined, undefined
));
const configurationResolverService = new ConfigurationResolverService(
undefined,
@@ -118,7 +118,7 @@ suite('Insights Utils tests', function () {
new Workspace(
'TestWorkspace',
[toWorkspaceFolder(URI.file(os.tmpdir()))],
undefined, undefined)
undefined, undefined, undefined)
);
const configurationResolverService = new ConfigurationResolverService(
undefined,
@@ -154,7 +154,7 @@ suite('Insights Utils tests', function () {
const contextService = new TestContextService(
new Workspace(
'TestWorkspace',
undefined, undefined, undefined));
undefined, undefined, undefined, undefined));
const configurationResolverService = new ConfigurationResolverService(
undefined,
undefined,
@@ -186,7 +186,7 @@ suite('Insights Utils tests', function () {
test.skip('resolveQueryFilePath resolves path correctly with env var and empty workspace', async () => {
const contextService = new TestContextService(
new Workspace('TestWorkspace',
undefined, undefined, undefined));
undefined, undefined, undefined, undefined));
const environmentService = new MockWorkbenchEnvironmentService({ TEST_PATH: queryFileDir });
@@ -217,7 +217,7 @@ suite('Insights Utils tests', function () {
test('resolveQueryFilePath resolves path correctly with env var and non-empty workspace', async () => {
const contextService = new TestContextService(
new Workspace('TestWorkspace', [toWorkspaceFolder(URI.file(os.tmpdir()))], undefined, undefined));
new Workspace('TestWorkspace', [toWorkspaceFolder(URI.file(os.tmpdir()))], undefined, undefined, undefined));
const environmentService = new MockWorkbenchEnvironmentService({ TEST_PATH: queryFileDir });

View File

@@ -4,18 +4,17 @@
*--------------------------------------------------------------------------------------------*/
import { Registry } from 'vs/platform/registry/common/platform';
import { IEditorInput } from 'vs/workbench/common/editor';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
import { ServicesAccessor, IInstantiationService, BrandedService } from 'vs/platform/instantiation/common/instantiation';
import { IDisposable, toDisposable } from 'vs/base/common/lifecycle';
export type InputCreator = (servicesAccessor: ServicesAccessor, activeEditor: IEditorInput) => EditorInput | undefined;
export type BaseInputCreator = (activeEditor: IEditorInput) => IEditorInput;
export type InputCreator = (servicesAccessor: ServicesAccessor, activeEditor: EditorInput) => EditorInput | undefined;
export type BaseInputCreator = (activeEditor: EditorInput) => EditorInput;
export interface ILanguageAssociation {
convertInput(activeEditor: IEditorInput): Promise<EditorInput | undefined> | EditorInput | undefined;
syncConvertInput?(activeEditor: IEditorInput): EditorInput | undefined;
createBase(activeEditor: IEditorInput): IEditorInput;
convertInput(activeEditor: EditorInput): Promise<EditorInput | undefined> | EditorInput | undefined;
syncConvertInput?(activeEditor: EditorInput): EditorInput | undefined;
createBase(activeEditor: EditorInput): EditorInput;
}
type ILanguageAssociationSignature<Services extends BrandedService[]> = new (...services: Services) => ILanguageAssociation;

View File

@@ -7,16 +7,16 @@ import { URI } from 'vs/base/common/uri';
import { Event } from 'vs/base/common/event';
import { IContentLoader } from 'sql/workbench/services/notebook/browser/models/modelInterfaces';
import { IStandardKernelWithProvider } from 'sql/workbench/services/notebook/browser/models/notebookUtils';
import { IEditorInput } from 'vs/workbench/common/editor';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
export interface INotebookInput extends IEditorInput {
export abstract class INotebookInput extends EditorInput {
defaultKernel?: azdata.nb.IKernelSpec;
connectionProfile?: azdata.IConnectionProfile;
setNotebookContents(contents: azdata.nb.INotebookContents): void;
isDirty(): boolean;
setDirty(boolean);
setNotebookContents(contents: azdata.nb.INotebookContents): void { }
//isDirty(): boolean { return false; }
setDirty(boolean) { }
readonly notebookUri: URI;
updateModel(): Promise<void>;
updateModel(): Promise<void> { return undefined; }
readonly editorOpenedTimestamp: number;
readonly layoutChanged: Event<void>;
readonly contentLoader: IContentLoader;

View File

@@ -17,10 +17,12 @@ import { NotebookChangeType, CellType } from 'sql/workbench/services/notebook/co
import { IBootstrapParams } from 'sql/workbench/services/bootstrap/common/bootstrapParams';
import { BaseTextEditor } from 'vs/workbench/browser/parts/editor/textEditor';
import { Range } from 'vs/editor/common/core/range';
import { IEditorInput, IEditorPane } from 'vs/workbench/common/editor';
import { IEditorPane } from 'vs/workbench/common/editor';
import { INotebookInput } from 'sql/workbench/services/notebook/browser/interface';
import { INotebookShowOptions } from 'sql/workbench/api/common/sqlExtHost.protocol';
import { NotebookViewsExtension } from 'sql/workbench/services/notebook/browser/notebookViews/notebookViewsExtension';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
import { ICodeEditorViewState } from 'vs/editor/common/editorCommon';
export const SERVICE_ID = 'sqlNotebookService';
export const INotebookService = createDecorator<INotebookService>(SERVICE_ID);
@@ -139,7 +141,7 @@ export interface INotebookService {
*/
notifyCellExecutionStarted(): void;
createNotebookInputFromContents(providerId: string, contents?: azdata.nb.INotebookContents, resource?: UriComponents): Promise<IEditorInput | undefined>;
createNotebookInputFromContents(providerId: string, contents?: azdata.nb.INotebookContents, resource?: UriComponents): Promise<EditorInput | undefined>;
openNotebook(resource: UriComponents, options: INotebookShowOptions): Promise<IEditorPane | undefined>;
@@ -196,7 +198,7 @@ export interface ICellEditorProvider {
hasEditor(): boolean;
isCellOutput: boolean;
cellGuid(): string;
getEditor(): BaseTextEditor;
getEditor(): BaseTextEditor<ICodeEditorViewState>;
deltaDecorations(newDecorationsRange: NotebookRange | NotebookRange[], oldDecorationsRange: NotebookRange | NotebookRange[]): void;
}

View File

@@ -47,12 +47,13 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IEditorInput, IEditorPane } from 'vs/workbench/common/editor';
import { IEditorPane } from 'vs/workbench/common/editor';
import { isINotebookInput } from 'sql/workbench/services/notebook/browser/interface';
import { INotebookShowOptions } from 'sql/workbench/api/common/sqlExtHost.protocol';
import { DEFAULT_NB_LANGUAGE_MODE, INTERACTIVE_LANGUAGE_MODE, INTERACTIVE_PROVIDER_ID, JUPYTER_PROVIDER_ID, NotebookLanguage } from 'sql/workbench/common/constants';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { SqlSerializationProvider } from 'sql/workbench/services/notebook/browser/sql/sqlSerializationProvider';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
const languageAssociationRegistry = Registry.as<ILanguageAssociationRegistry>(LanguageAssociationExtensions.LanguageAssociations);
@@ -185,7 +186,7 @@ export class NotebookService extends Disposable implements INotebookService {
private _trustedCacheQueue: URI[] = [];
private _unTrustedCacheQueue: URI[] = [];
private _onCodeCellExecutionStart: Emitter<void> = new Emitter<void>();
private _notebookInputsMap: Map<string, IEditorInput> = new Map();
private _notebookInputsMap: Map<string, EditorInput> = new Map();
constructor(
@ILifecycleService lifecycleService: ILifecycleService,
@@ -260,7 +261,7 @@ export class NotebookService extends Disposable implements INotebookService {
return uri;
}
public async createNotebookInputFromContents(providerId: string, contents?: nb.INotebookContents, resource?: UriComponents): Promise<IEditorInput> {
public async createNotebookInputFromContents(providerId: string, contents?: nb.INotebookContents, resource?: UriComponents): Promise<EditorInput> {
let uri: URI;
if (resource) {
uri = URI.revive(resource);
@@ -276,7 +277,7 @@ export class NotebookService extends Disposable implements INotebookService {
return this.createNotebookInput(options, resource);
}
private async createNotebookInput(options: INotebookShowOptions, resource?: UriComponents): Promise<IEditorInput | undefined> {
private async createNotebookInput(options: INotebookShowOptions, resource?: UriComponents): Promise<EditorInput | undefined> {
let uri: URI;
if (resource) {
uri = URI.revive(resource);
@@ -288,7 +289,7 @@ export class NotebookService extends Disposable implements INotebookService {
}
let isUntitled: boolean = uri.scheme === Schemas.untitled;
let fileInput: IEditorInput;
let fileInput: EditorInput;
let languageMode = options.providerId === INTERACTIVE_PROVIDER_ID ? INTERACTIVE_LANGUAGE_MODE : DEFAULT_NB_LANGUAGE_MODE;
let initialStringContents: string;
if (options.initialContent) {
@@ -307,7 +308,8 @@ export class NotebookService extends Disposable implements INotebookService {
const model = this._untitledEditorService.create({ untitledResource: uri, mode: languageMode, initialValue: initialStringContents });
fileInput = this._instantiationService.createInstance(UntitledTextEditorInput, model);
} else {
fileInput = this._editorService.createEditorInput({ forceFile: true, resource: uri, mode: languageMode });
let input: any = { forceFile: true, resource: uri, mode: languageMode };
fileInput = this._editorService.createEditorInput(input);
}
}

View File

@@ -17,7 +17,7 @@ suite('Query Editor Service', () => {
const editorService = instantiationService.invokeFunction(accessor => accessor.get(IEditorService));
const untitledService = instantiationService.invokeFunction(accessor => accessor.get(IUntitledTextEditorService));
const openStub = sinon.stub(editorService, 'openEditor').callsFake(() => Promise.resolve(undefined));
sinon.stub(editorService, 'createEditorInput').callsFake(() => instantiationService.createInstance(UntitledTextEditorInput, untitledService.create()));
sinon.stub(editorService, 'createEditorInput').callsFake(() => <any>instantiationService.createInstance(UntitledTextEditorInput, untitledService.create()));
const queryEditorService = instantiationService.createInstance(QueryEditorService);
await queryEditorService.newSqlEditor({ open: true });
@@ -30,7 +30,7 @@ suite('Query Editor Service', () => {
const editorService = instantiationService.invokeFunction(accessor => accessor.get(IEditorService));
const untitledService = instantiationService.invokeFunction(accessor => accessor.get(IUntitledTextEditorService));
const openStub = sinon.stub(editorService, 'openEditor').callsFake(() => Promise.resolve(undefined));
sinon.stub(editorService, 'createEditorInput').callsFake(() => instantiationService.createInstance(UntitledTextEditorInput, untitledService.create()));
sinon.stub(editorService, 'createEditorInput').callsFake(() => <any>instantiationService.createInstance(UntitledTextEditorInput, untitledService.create()));
const queryEditorService = instantiationService.createInstance(QueryEditorService);
await queryEditorService.newSqlEditor();
@@ -43,7 +43,7 @@ suite('Query Editor Service', () => {
const editorService = instantiationService.invokeFunction(accessor => accessor.get(IEditorService));
const untitledService = instantiationService.invokeFunction(accessor => accessor.get(IUntitledTextEditorService));
const openStub = sinon.stub(editorService, 'openEditor').callsFake(() => Promise.resolve(undefined));
sinon.stub(editorService, 'createEditorInput').callsFake(() => instantiationService.createInstance(UntitledTextEditorInput, untitledService.create()));
sinon.stub(editorService, 'createEditorInput').callsFake(() => <any>instantiationService.createInstance(UntitledTextEditorInput, untitledService.create()));
const queryEditorService = instantiationService.createInstance(QueryEditorService);
await queryEditorService.newSqlEditor({ open: false });

View File

@@ -18,11 +18,6 @@ import { ILanguageAssociationRegistry, Extensions as LanguageAssociationExtensio
import { TestQueryEditorService } from 'sql/workbench/services/queryEditor/test/browser/testQueryEditorService';
import { ITestInstantiationService, TestEditorService } from 'vs/workbench/test/browser/workbenchTestServices';
import { NotebookServiceStub } from 'sql/workbench/contrib/notebook/test/stubs';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IUntitledTextResourceEditorInput, IVisibleEditorPane } from 'vs/workbench/common/editor';
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
import { FileEditorInput } from 'vs/workbench/contrib/files/browser/editors/fileEditorInput';
import { URI } from 'vs/base/common/uri';
import { FileQueryEditorInput } from 'sql/workbench/contrib/query/browser/fileQueryEditorInput';
@@ -32,6 +27,7 @@ import { EditorType } from 'vs/editor/common/editorCommon';
import { INotificationService } from 'vs/platform/notification/common/notification';
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService';
import { IVisibleEditorPane } from 'vs/workbench/common/editor';
const languageAssociations = Registry.as<ILanguageAssociationRegistry>(LanguageAssociationExtensions.LanguageAssociations);
@@ -48,7 +44,7 @@ suite('set mode', () => {
disposables.push(languageAssociations.registerLanguageAssociation(NotebookEditorLanguageAssociation.languages, NotebookEditorLanguageAssociation));
instantiationService = workbenchInstantiationService();
instantiationService.stub(INotebookService, new NotebookServiceStub());
const editorService = new MockEditorService(instantiationService);
const editorService = new MockEditorService();
instantiationService.stub(IEditorService, editorService);
instantiationService.stub(IQueryEditorService, instantiationService.createInstance(TestQueryEditorService));
instantiationService.invokeFunction(accessor => {
@@ -61,7 +57,7 @@ suite('set mode', () => {
});
test('does leave editor alone and change mode when changed from plaintext to json', async () => {
const editorService = new MockEditorService(instantiationService, 'plaintext');
const editorService = new MockEditorService('plaintext');
instantiationService.stub(IEditorService, editorService);
const replaceEditorStub = sinon.stub(editorService, 'replaceEditors').callsFake(() => Promise.resolve());
const stub = sinon.stub();
@@ -75,7 +71,7 @@ suite('set mode', () => {
test('does replace editor and set mode correctly when changed from sql to notebooks', async () => {
const instantiationService = workbenchInstantiationService();
const editorService = new MockEditorService(instantiationService, 'sql');
const editorService = new MockEditorService('sql');
instantiationService.stub(IEditorService, editorService);
const stub = sinon.stub();
const modeSupport = { setMode: stub };
@@ -89,7 +85,7 @@ suite('set mode', () => {
test('does replace editor and set mode correctly when changed from sql to plaintext', async () => {
const instantiationService = workbenchInstantiationService();
const editorService = new MockEditorService(instantiationService, 'sql');
const editorService = new MockEditorService('sql');
instantiationService.stub(IEditorService, editorService);
const stub = sinon.stub();
const modeSupport = { setMode: stub };
@@ -103,7 +99,7 @@ suite('set mode', () => {
test('does replace editor and set mode correctly when changed from plaintext to sql', async () => {
const instantiationService = workbenchInstantiationService();
const editorService = new MockEditorService(instantiationService, 'plaintext');
const editorService = new MockEditorService('plaintext');
instantiationService.stub(IEditorService, editorService);
const stub = sinon.stub();
const modeSupport = { setMode: stub };
@@ -115,7 +111,7 @@ suite('set mode', () => {
test('does show error if mode change happens on a dirty file', async () => {
const instantiationService = workbenchInstantiationService();
const editorService = new MockEditorService(instantiationService, 'plaintext');
const editorService = new MockEditorService('plaintext');
const errorStub = sinon.stub();
instantiationService.stub(IEditorService, editorService);
instantiationService.stub(INotificationService, TestNotificationService);
@@ -133,7 +129,7 @@ suite('set mode', () => {
class MockEditorService extends TestEditorService {
constructor(private readonly instantiationService: IInstantiationService, private readonly mode?: string) {
constructor(private readonly mode?: string) {
super();
}
@@ -145,8 +141,8 @@ class MockEditorService extends TestEditorService {
return {
getModel: () => {
return <any>{
getLanguageIdentifier: () => {
return { language: this.mode };
getLanguageId: () => {
return this.mode;
}
};
},
@@ -157,16 +153,5 @@ class MockEditorService extends TestEditorService {
override openEditor(_editor: any, _options?: any, _group?: any): Promise<any> {
return Promise.resolve(_editor);
}
override createEditorInput(_input: IUntitledTextResourceEditorInput): EditorInput {
const accessor = this.instantiationService.createInstance(ServiceAccessor);
const service = accessor.untitledTextEditorService;
return this.instantiationService.createInstance(UntitledTextEditorInput, service.create());
}
}
class ServiceAccessor {
constructor(
@IUntitledTextEditorService public readonly untitledTextEditorService: IUntitledTextEditorService
) { }
}