Fix intellisense for .NET Interactive SQL kernel (#19254)

This commit is contained in:
Cory Rivera
2022-05-02 13:44:33 -07:00
committed by GitHub
parent bfd878bff7
commit 8cc66dade3
11 changed files with 52 additions and 6 deletions

View File

@@ -17,6 +17,10 @@ const DotnetInteractiveLanguagePrefix = 'dotnet-interactive.';
export const DotnetInteractiveDisplayName = '.NET Interactive';
export function convertToVSCodeNotebookCell(cellKind: azdata.nb.CellType, cellIndex: number, cellUri: URI, docUri: URI, cellLanguage: string, cellSource?: string | string[]): vscode.NotebookCell {
// We only use this notebook field for .NET Interactive's intellisense, which only uses the notebook's URI
let notebook = <vscode.NotebookDocument>{
uri: docUri
};
return <vscode.NotebookCell>{
kind: cellKind === CellTypes.Code ? NotebookCellKind.Code : NotebookCellKind.Markup,
index: cellIndex,
@@ -24,10 +28,9 @@ export function convertToVSCodeNotebookCell(cellKind: azdata.nb.CellType, cellIn
uri: cellUri,
languageId: cellLanguage,
getText: () => Array.isArray(cellSource) ? cellSource.join('') : (cellSource ?? ''),
notebook: notebook
},
notebook: <vscode.NotebookDocument>{
uri: docUri
},
notebook: notebook,
outputs: [],
metadata: {},
mime: undefined

View File

@@ -41,6 +41,7 @@ export const INTERACTIVE_PROVIDER_ID = 'dotnet-interactive';
export const INTERACTIVE_LANGUAGE_MODE = 'dib';
export const DEFAULT_NB_LANGUAGE_MODE = 'notebook';
export const TSGOPS_WEB_QUALITY = 'tsgops-image';
export const CELL_URI_PATH_PREFIX = 'notebook-editor-';
// The version of the notebook file format that we support
export const NBFORMAT = 4;

View File

@@ -235,6 +235,9 @@ export class ServerManagerStub implements nb.ServerManager {
}
export class NotebookServiceStub implements INotebookService {
getNotebookURIForCell(cellUri: URI): URI {
throw new Error('Method not implemented.');
}
getSupportedLanguagesForProvider(provider: string, kernelDisplayName?: string): Promise<string[]> {
throw new Error('Method not implemented.');
}

View File

@@ -35,6 +35,7 @@ import { CellOutputEdit, CellOutputDataEdit } from 'sql/workbench/services/noteb
import { ILogService } from 'vs/platform/log/common/log';
import { IModeService } from 'vs/editor/common/services/modeService';
import { ICellMetadata } from 'sql/workbench/api/common/sqlExtHostTypes';
import { CELL_URI_PATH_PREFIX } from 'sql/workbench/common/constants';
let modelId = 0;
const ads_execute_command = 'ads_execute_command';
@@ -1121,7 +1122,7 @@ export class CellModel extends Disposable implements ICellModel {
}
private createUri(): void {
let uri = URI.from({ scheme: Schemas.untitled, path: `notebook-editor-${this.id}` });
let uri = URI.from({ scheme: Schemas.untitled, path: `${CELL_URI_PATH_PREFIX}${this.id}` });
// Use this to set the internal (immutable) and public (shared with extension) uri properties
this.cellUri = uri;
}

View File

@@ -144,6 +144,8 @@ export interface INotebookService {
openNotebook(resource: UriComponents, options: INotebookShowOptions): Promise<IEditorPane | undefined>;
getUntitledUriPath(originalTitle: string): string;
getNotebookURIForCell(cellUri: URI): URI | undefined;
}
export interface IExecuteProvider {

View File

@@ -371,6 +371,19 @@ export class NotebookService extends Disposable implements INotebookService {
return title;
}
public getNotebookURIForCell(cellUri: URI): URI | undefined {
for (let editor of this.listNotebookEditors()) {
if (editor.cells) {
for (let cell of editor.cells) {
if (cell.cellUri === cellUri) {
return editor.notebookParams.notebookUri;
}
}
}
}
return undefined;
}
private updateSQLRegistrationWithConnectionProviders() {
// Update the SQL extension
let sqlNotebookKernels = this._providerToStandardKernels.get(notebookConstants.SQL);

View File

@@ -425,6 +425,9 @@ suite('Notebook Serializer', () => {
assert.deepStrictEqual(actual.document.uri, expected.document.uri);
assert.strictEqual(actual.document.languageId, expected.document.languageId);
assert.deepStrictEqual(actual.notebook.uri, expected.notebook.uri);
assert.deepStrictEqual(actual.document.notebook.uri, expected.document.notebook.uri);
assert.deepStrictEqual(actual.document.notebook.uri, expected.notebook.uri);
assert.deepStrictEqual(actual.notebook.uri, expected.document.notebook.uri);
}
function validateCellsMatch(actual: vscode.NotebookCell[], expected: vscode.NotebookCell[]): void {
assert.strictEqual(actual.length, expected.length, 'Cell arrays did not have equal lengths.');