mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-06 09:35:41 -05:00
Add notebook extension support for .NET Interactive. (#18334)
* Also updated kernel dropdown to only include SQL aliased kernels when using SQL notebook provider.
This commit is contained in:
@@ -50,7 +50,6 @@ import { throwProposedApiError, checkProposedApiEnabled } from 'vs/workbench/ser
|
||||
import { ProxyIdentifier } from 'vs/workbench/services/extensions/common/proxyIdentifier';
|
||||
import { ExtensionDescriptionRegistry } from 'vs/workbench/services/extensions/common/extensionDescriptionRegistry';
|
||||
import type * as vscode from 'vscode';
|
||||
import type * as azdata from 'azdata';
|
||||
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
|
||||
import { values } from 'vs/base/common/collections';
|
||||
import { ExtHostEditorInsets } from 'vs/workbench/api/common/extHostCodeInsets';
|
||||
@@ -93,12 +92,12 @@ import { matchesScheme } from 'vs/platform/opener/common/opener';
|
||||
// import { ExtHostNotebookDocuments } from 'vs/workbench/api/common/extHostNotebookDocuments'; {{SQL CARBON EDIT}} Disable VS Code notebooks
|
||||
// import { ExtHostInteractive } from 'vs/workbench/api/common/extHostInteractive'; {{SQL CARBON EDIT}} Remove until we need it
|
||||
import { ExtHostNotebook } from 'sql/workbench/api/common/extHostNotebook';
|
||||
import { functionalityNotSupportedError, invalidArgumentsError } from 'sql/base/common/locConstants';
|
||||
import { docCreationFailedError, functionalityNotSupportedError, invalidArgumentsError } from 'sql/base/common/locConstants';
|
||||
import { ExtHostNotebookDocumentsAndEditors } from 'sql/workbench/api/common/extHostNotebookDocumentsAndEditors';
|
||||
import { VSCodeNotebookDocument } from 'sql/workbench/api/common/notebooks/vscodeNotebookDocument';
|
||||
import { VSCodeNotebookEditor } from 'sql/workbench/api/common/notebooks/vscodeNotebookEditor';
|
||||
import { convertToADSNotebookContents } from 'sql/workbench/api/common/notebooks/notebookUtils';
|
||||
import { IdGenerator } from 'vs/base/common/idGenerator';
|
||||
import { convertToADSNotebookContents } from 'sql/workbench/api/common/notebooks/notebookUtils';
|
||||
|
||||
export interface IExtensionApiFactory {
|
||||
(extension: IExtensionDescription, registry: ExtensionDescriptionRegistry, configProvider: ExtHostConfigProvider): typeof vscode;
|
||||
@@ -893,16 +892,19 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor, ex
|
||||
},
|
||||
async openNotebookDocument(uriOrType?: URI | string, content?: vscode.NotebookData): Promise<vscode.NotebookDocument> {
|
||||
// {{SQL CARBON EDIT}} Use our own notebooks
|
||||
let doc: azdata.nb.NotebookDocument;
|
||||
let uri: URI;
|
||||
if (URI.isUri(uriOrType)) {
|
||||
let editor = await extHostNotebookDocumentsAndEditors.showNotebookDocument(uriOrType, {});
|
||||
doc = editor.document;
|
||||
uri = uriOrType;
|
||||
await extHostNotebookDocumentsAndEditors.openNotebookDocument(uriOrType);
|
||||
} else if (typeof uriOrType === 'string') {
|
||||
let convertedContents = convertToADSNotebookContents(content);
|
||||
doc = await extHostNotebookDocumentsAndEditors.createNotebookDocument(uriOrType, convertedContents);
|
||||
uri = URI.revive(await extHostNotebookDocumentsAndEditors.createNotebookDocument(uriOrType, convertToADSNotebookContents(content)));
|
||||
} else {
|
||||
throw new Error(invalidArgumentsError);
|
||||
}
|
||||
let doc = extHostNotebookDocumentsAndEditors.getDocument(uri.toString())?.document;
|
||||
if (!doc) {
|
||||
throw new Error(docCreationFailedError);
|
||||
}
|
||||
return new VSCodeNotebookDocument(doc);
|
||||
},
|
||||
get onDidOpenNotebookDocument(): Event<vscode.NotebookDocument> {
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { groupBy } from 'vs/base/common/arrays';
|
||||
// import { groupBy } from 'vs/base/common/arrays'; {{SQL CARBON EDIT}}
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { compare } from 'vs/base/common/strings';
|
||||
// import { compare } from 'vs/base/common/strings'; {{SQL CARBON EDIT}}
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { ResourceEdit } from 'vs/editor/browser/services/bulkEditService';
|
||||
import { WorkspaceEditMetadata } from 'vs/editor/common/modes';
|
||||
@@ -28,38 +28,40 @@ export class ResourceNotebookCellEdit extends ResourceEdit {
|
||||
|
||||
export class BulkCellEdits {
|
||||
|
||||
// {{SQL CARBON EDIT}} Remove private modifiers to fix value-not-read build errors
|
||||
constructor(
|
||||
private readonly _undoRedoGroup: UndoRedoGroup,
|
||||
_undoRedoGroup: UndoRedoGroup,
|
||||
undoRedoSource: UndoRedoSource | undefined,
|
||||
private readonly _progress: IProgress<void>,
|
||||
private readonly _token: CancellationToken,
|
||||
private readonly _edits: ResourceNotebookCellEdit[],
|
||||
@INotebookEditorModelResolverService private readonly _notebookModelService: INotebookEditorModelResolverService,
|
||||
_progress: IProgress<void>,
|
||||
_token: CancellationToken,
|
||||
_edits: ResourceNotebookCellEdit[],
|
||||
@INotebookEditorModelResolverService _notebookModelService: INotebookEditorModelResolverService,
|
||||
) { }
|
||||
|
||||
async apply(): Promise<void> {
|
||||
|
||||
const editsByNotebook = groupBy(this._edits, (a, b) => compare(a.resource.toString(), b.resource.toString()));
|
||||
// {{SQL CARBON EDIT}} Use our own notebooks
|
||||
// const editsByNotebook = groupBy(this._edits, (a, b) => compare(a.resource.toString(), b.resource.toString()));
|
||||
|
||||
for (let group of editsByNotebook) {
|
||||
if (this._token.isCancellationRequested) {
|
||||
break;
|
||||
}
|
||||
const [first] = group;
|
||||
const ref = await this._notebookModelService.resolve(first.resource);
|
||||
// for (let group of editsByNotebook) {
|
||||
// if (this._token.isCancellationRequested) {
|
||||
// break;
|
||||
// }
|
||||
// const [first] = group;
|
||||
// const ref = await this._notebookModelService.resolve(first.resource);
|
||||
|
||||
// check state
|
||||
if (typeof first.versionId === 'number' && ref.object.notebook.versionId !== first.versionId) {
|
||||
ref.dispose();
|
||||
throw new Error(`Notebook '${first.resource}' has changed in the meantime`);
|
||||
}
|
||||
// // check state
|
||||
// if (typeof first.versionId === 'number' && ref.object.notebook.versionId !== first.versionId) {
|
||||
// ref.dispose();
|
||||
// throw new Error(`Notebook '${first.resource}' has changed in the meantime`);
|
||||
// }
|
||||
|
||||
// apply edits
|
||||
const edits = group.map(entry => entry.cellEdit);
|
||||
ref.object.notebook.applyEdits(edits, true, undefined, () => undefined, this._undoRedoGroup);
|
||||
ref.dispose();
|
||||
// // apply edits
|
||||
// const edits = group.map(entry => entry.cellEdit);
|
||||
// ref.object.notebook.applyEdits(edits, true, undefined, () => undefined, this._undoRedoGroup);
|
||||
// ref.dispose();
|
||||
|
||||
this._progress.report(undefined);
|
||||
}
|
||||
// this._progress.report(undefined);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ notebooksExtensionPoint.setHandler(extensions => {
|
||||
let adsProvider: ProviderDescriptionRegistration = {
|
||||
provider: notebookContribution.type,
|
||||
fileExtensions: extensions ?? [],
|
||||
standardKernels: [] // Kernels get added later when a NotebookController is created for this provider
|
||||
standardKernels: [] // The actual Kernels are the NotebookControllers that are contributed later
|
||||
};
|
||||
adsNotebookRegistry.registerProviderDescription(adsProvider);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user