mirror of
https://github.com/microsoft/vscode-extension-samples.git
synced 2026-06-13 07:10:26 +08:00
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import * as vscode from 'vscode';
|
|
|
|
export class SampleKernel {
|
|
private readonly _id = 'test-notebook-serializer-kernel';
|
|
private readonly _label = 'Sample Notebook Kernel';
|
|
private readonly _supportedLanguages = ['json'];
|
|
|
|
private _executionOrder = 0;
|
|
private readonly _controller: vscode.NotebookController;
|
|
|
|
constructor() {
|
|
|
|
this._controller = vscode.notebooks.createNotebookController(this._id,
|
|
'test-notebook-serializer',
|
|
this._label);
|
|
|
|
this._controller.supportedLanguages = this._supportedLanguages;
|
|
this._controller.supportsExecutionOrder = true;
|
|
this._controller.executeHandler = this._executeAll.bind(this);
|
|
}
|
|
|
|
dispose(): void {
|
|
this._controller.dispose();
|
|
}
|
|
|
|
private _executeAll(cells: vscode.NotebookCell[], _notebook: vscode.NotebookDocument, _controller: vscode.NotebookController): void {
|
|
for (const cell of cells) {
|
|
this._doExecution(cell);
|
|
}
|
|
}
|
|
|
|
private async _doExecution(cell: vscode.NotebookCell): Promise<void> {
|
|
const execution = this._controller.createNotebookCellExecution(cell);
|
|
|
|
execution.executionOrder = ++this._executionOrder;
|
|
execution.start(Date.now());
|
|
|
|
try {
|
|
execution.replaceOutput([new vscode.NotebookCellOutput([
|
|
vscode.NotebookCellOutputItem.json(JSON.parse(cell.document.getText()))
|
|
])]);
|
|
|
|
execution.end(true, Date.now());
|
|
} catch (err) {
|
|
execution.replaceOutput([new vscode.NotebookCellOutput([
|
|
vscode.NotebookCellOutputItem.error(err as Error)
|
|
])]);
|
|
execution.end(false, Date.now());
|
|
}
|
|
}
|
|
}
|