@@ -14,7 +14,7 @@ import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'
1414import { CellKind , ExtHostNotebookShape , IMainContext , MainContext , MainThreadNotebookShape , NotebookCellOutputsSplice , MainThreadDocumentsShape , INotebookEditorPropertiesChangeData , INotebookDocumentsAndEditorsDelta } from 'vs/workbench/api/common/extHost.protocol' ;
1515import { ExtHostCommands } from 'vs/workbench/api/common/extHostCommands' ;
1616import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors' ;
17- import { CellEditType , diff , ICellEditOperation , ICellInsertEdit , INotebookDisplayOrder , INotebookEditData , NotebookCellsChangedEvent , NotebookCellsSplice2 , ICellDeleteEdit , notebookDocumentMetadataDefaults , NotebookCellsChangeType , NotebookDataDto , IOutputRenderRequest , IOutputRenderResponse , IOutputRenderResponseOutputInfo , IOutputRenderResponseCellInfo , IRawOutput , CellOutputKind , IProcessedOutput , INotebookKernelInfoDto2 , IMainCellDto } from 'vs/workbench/contrib/notebook/common/notebookCommon' ;
17+ import { CellEditType , diff , ICellEditOperation , ICellInsertEdit , INotebookDisplayOrder , INotebookEditData , NotebookCellsChangedEvent , NotebookCellsSplice2 , ICellDeleteEdit , notebookDocumentMetadataDefaults , NotebookCellsChangeType , NotebookDataDto , IOutputRenderRequest , IOutputRenderResponse , IOutputRenderResponseOutputInfo , IOutputRenderResponseCellInfo , IRawOutput , CellOutputKind , IProcessedOutput , INotebookKernelInfoDto2 , IMainCellDto , NotebookCellMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon' ;
1818import * as extHostTypes from 'vs/workbench/api/common/extHostTypes' ;
1919import { CancellationToken , CancellationTokenSource } from 'vs/base/common/cancellation' ;
2020import { ExtHostDocumentData } from 'vs/workbench/api/common/extHostDocumentData' ;
@@ -52,6 +52,7 @@ interface INotebookEventEmitter {
5252 emitModelChange ( events : vscode . NotebookCellsChangeEvent ) : void ;
5353 emitCellOutputsChange ( event : vscode . NotebookCellOutputsChangeEvent ) : void ;
5454 emitCellLanguageChange ( event : vscode . NotebookCellLanguageChangeEvent ) : void ;
55+ emitCellMetadataChange ( event : vscode . NotebookCellMetadataChangeEvent ) : void ;
5556}
5657
5758const addIdToOutput = ( output : IRawOutput , id = UUID . generateUuid ( ) ) : IProcessedOutput => output . outputKind === CellOutputKind . Rich
@@ -172,15 +173,18 @@ export class ExtHostCell extends Disposable implements vscode.NotebookCell {
172173 }
173174
174175 set metadata ( newMetadata : vscode . NotebookCellMetadata ) {
176+ this . setMetadata ( newMetadata ) ;
177+ this . _updateMetadata ( ) ;
178+ }
179+
180+ setMetadata ( newMetadata : vscode . NotebookCellMetadata ) : void {
175181 // Don't apply metadata defaults here, 'undefined' means 'inherit from document metadata'
176182 this . _metadataChangeListener . dispose ( ) ;
177183 const observableMetadata = getObservable ( newMetadata ) ;
178184 this . _metadata = observableMetadata . proxy ;
179185 this . _metadataChangeListener = this . _register ( observableMetadata . onDidChange ( ( ) => {
180186 this . _updateMetadata ( ) ;
181187 } ) ) ;
182-
183- this . _updateMetadata ( ) ;
184188 }
185189
186190 private _updateMetadata ( ) : Promise < void > {
@@ -346,7 +350,7 @@ export class ExtHostNotebookDocument extends Disposable implements vscode.Notebo
346350
347351 get isDirty ( ) { return false ; }
348352
349- accpetModelChanged ( event : NotebookCellsChangedEvent ) : void {
353+ acceptModelChanged ( event : NotebookCellsChangedEvent ) : void {
350354 this . _versionId = event . versionId ;
351355 if ( event . kind === NotebookCellsChangeType . Initialize ) {
352356 this . $spliceNotebookCells ( event . changes , true ) ;
@@ -360,6 +364,8 @@ export class ExtHostNotebookDocument extends Disposable implements vscode.Notebo
360364 this . $clearAllCellOutputs ( ) ;
361365 } else if ( event . kind === NotebookCellsChangeType . ChangeLanguage ) {
362366 this . $changeCellLanguage ( event . index , event . language ) ;
367+ } else if ( event . kind === NotebookCellsChangeType . ChangeMetadata ) {
368+ this . $changeCellMetadata ( event . index , event . metadata ) ;
363369 }
364370 }
365371
@@ -461,6 +467,13 @@ export class ExtHostNotebookDocument extends Disposable implements vscode.Notebo
461467 this . _emitter . emitCellLanguageChange ( event ) ;
462468 }
463469
470+ private $changeCellMetadata ( index : number , newMetadata : NotebookCellMetadata ) : void {
471+ const cell = this . cells [ index ] ;
472+ cell . setMetadata ( newMetadata ) ;
473+ const event : vscode . NotebookCellMetadataChangeEvent = { document : this , cell } ;
474+ this . _emitter . emitCellMetadataChange ( event ) ;
475+ }
476+
464477 async eventuallyUpdateCellOutputs ( cell : ExtHostCell , diffs : ISplice < IProcessedOutput > [ ] ) {
465478 let renderers = new Set < number > ( ) ;
466479 let outputDtos : NotebookCellOutputsSplice [ ] = diffs . map ( diff => {
@@ -888,6 +901,8 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
888901 readonly onDidChangeCellOutputs = this . _onDidChangeCellOutputs . event ;
889902 private readonly _onDidChangeCellLanguage = new Emitter < vscode . NotebookCellLanguageChangeEvent > ( ) ;
890903 readonly onDidChangeCellLanguage = this . _onDidChangeCellLanguage . event ;
904+ private readonly _onDidChangeCellMetadata = new Emitter < vscode . NotebookCellMetadataChangeEvent > ( ) ;
905+ readonly onDidChangeCellMetadata = this . _onDidChangeCellMetadata . event ;
891906 private readonly _onDidChangeActiveNotebookEditor = new Emitter < vscode . NotebookEditor | undefined > ( ) ;
892907 readonly onDidChangeActiveNotebookEditor = this . _onDidChangeActiveNotebookEditor . event ;
893908
@@ -1179,7 +1194,10 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
11791194 } ,
11801195 emitCellLanguageChange ( event : vscode . NotebookCellLanguageChangeEvent ) : void {
11811196 that . _onDidChangeCellLanguage . fire ( event ) ;
1182- }
1197+ } ,
1198+ emitCellMetadataChange ( event : vscode . NotebookCellMetadataChangeEvent ) : void {
1199+ that . _onDidChangeCellMetadata . fire ( event ) ;
1200+ } ,
11831201 } , viewType , revivedUri , this , storageRoot ) ;
11841202 this . _unInitializedDocuments . set ( revivedUri . toString ( ) , document ) ;
11851203 }
@@ -1424,7 +1442,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
14241442 const document = this . _documents . get ( URI . revive ( uriComponents ) . toString ( ) ) ;
14251443
14261444 if ( document ) {
1427- document . accpetModelChanged ( event ) ;
1445+ document . acceptModelChanged ( event ) ;
14281446 }
14291447 }
14301448
@@ -1538,6 +1556,9 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
15381556 } ,
15391557 emitCellLanguageChange ( event : vscode . NotebookCellLanguageChangeEvent ) : void {
15401558 that . _onDidChangeCellLanguage . fire ( event ) ;
1559+ } ,
1560+ emitCellMetadataChange ( event : vscode . NotebookCellMetadataChangeEvent ) : void {
1561+ that . _onDidChangeCellMetadata . fire ( event ) ;
15411562 }
15421563 } , viewType , revivedUri , this , storageRoot ) ;
15431564
@@ -1549,7 +1570,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
15491570 } ;
15501571 }
15511572
1552- document . accpetModelChanged ( {
1573+ document . acceptModelChanged ( {
15531574 kind : NotebookCellsChangeType . Initialize ,
15541575 versionId : modelData . versionId ,
15551576 changes : [ [
0 commit comments