Skip to content

Commit e669425

Browse files
committed
Implement saveNotebook
1 parent f92352a commit e669425

1 file changed

Lines changed: 19 additions & 3 deletions

File tree

src/notebook.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ export class RNotebookProvider implements vscode.NotebookContentProvider, vscode
180180
} else if (cellType === 'yaml') {
181181
if (lines[line].startsWith('---')) {
182182
cells.push({
183-
cellKind: vscode.CellKind.Markdown,
183+
cellKind: vscode.CellKind.Code,
184184
source: lines.slice(cellStartLine, line + 1).join('\n'),
185185
language: 'yaml',
186186
outputs: [],
@@ -218,10 +218,26 @@ export class RNotebookProvider implements vscode.NotebookContentProvider, vscode
218218
};
219219
}
220220

221-
// The following are dummy implementations not relevant to this example.
222221
onDidChangeNotebook = new vscode.EventEmitter<vscode.NotebookDocumentEditEvent>().event;
223222
async resolveNotebook(): Promise<void> { }
224-
async saveNotebook(document: vscode.NotebookDocument, cancellation: vscode.CancellationToken): Promise<void> { }
223+
async saveNotebook(document: vscode.NotebookDocument, cancellation: vscode.CancellationToken): Promise<void> {
224+
let content = '';
225+
for (const cell of document.cells) {
226+
if (cell.cellKind === vscode.CellKind.Markdown) {
227+
content += '\n\n' + cell.document.getText() + '\n\n';
228+
} else if (cell.cellKind === vscode.CellKind.Code) {
229+
if (cell.language === 'r') {
230+
content += '\n\n```{r}\n' + cell.document.getText() + '\n```\n';
231+
} else if (cell.language === 'yaml') {
232+
content += '---\n' + cell.document.getText() + '\n---\n';
233+
} else {
234+
content += '\n\n```{' + cell.language + '}\n' + cell.document.getText() + '\n```\n';
235+
}
236+
}
237+
}
238+
vscode.workspace.fs.writeFile(document.uri, Buffer.from(content));
239+
}
240+
225241
async saveNotebookAs(targetResource: vscode.Uri, document: vscode.NotebookDocument, cancellation: vscode.CancellationToken): Promise<void> { }
226242
async backupNotebook(document: vscode.NotebookDocument, context: vscode.NotebookDocumentBackupContext, cancellation: vscode.CancellationToken): Promise<vscode.NotebookDocumentBackup> { return { id: '', delete: () => { } }; }
227243
async executeCell(document: vscode.NotebookDocument, cell: vscode.NotebookCell) {

0 commit comments

Comments
 (0)