diff --git a/extensions/git-extended/src/prView/prProvider.ts b/extensions/git-extended/src/prView/prProvider.ts index f88b8bbcffa7349e4110d7c3cf4b00c573e28b65..adc63a82ece9f3a1d300c313edbff048f5249115 100644 --- a/extensions/git-extended/src/prView/prProvider.ts +++ b/extensions/git-extended/src/prView/prProvider.ts @@ -158,7 +158,11 @@ export class PRProvider implements vscode.TreeDataProvider(); + setTimeout(() => _onDidChangeCommentThreads.fire({ changed: [], added: [], removed: [] }), 5000); vscode.workspace.registerCommentProvider({ + onDidChangeCommentThreads: _onDidChangeCommentThreads.event, provideNewCommentRange: async (document: vscode.TextDocument, token: vscode.CancellationToken) => { if (document.uri.scheme === 'pr') { let params = JSON.parse(document.uri.query); diff --git a/extensions/git-extended/src/review/reviewMode.ts b/extensions/git-extended/src/review/reviewMode.ts index a9d88d6ded3e62dd1d0546f6f1412b9bfff7d189..d10554fcd22673c59850d8d44526597b799179de 100644 --- a/extensions/git-extended/src/review/reviewMode.ts +++ b/extensions/git-extended/src/review/reviewMode.ts @@ -170,7 +170,9 @@ export class ReviewMode { return ret; } - this._commentProvider = vscode.workspace.registerCommentProvider({ + const _onDidChangeCommentThreads = new vscode.EventEmitter(); + vscode.workspace.registerCommentProvider({ + onDidChangeCommentThreads: _onDidChangeCommentThreads.event, provideNewCommentRange: async (document: vscode.TextDocument, token: vscode.CancellationToken) => { if (document.uri.scheme === 'review' || document.uri.scheme === 'file') { let lastLine = document.lineCount; diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index 56eeb3b4c9f6e18c2e837ad3c6fbd18d18ef0cce..942fd91ec343a4afd40dc8b47a858f977c47031b 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -957,10 +957,29 @@ export interface Comment { readonly gravatar: string; } +export interface CommentThreadChangedEvent { + /** + * Added comment threads. + */ + readonly added: CommentThread[]; + + /** + * Removed comment threads. + */ + readonly removed: CommentThread[]; + + /** + * Changed comment threads. + */ + readonly changed: CommentThread[]; +} + + export interface CommentProvider { provideComments(model: model.ITextModel, token: CancellationToken): CommentThread[]; provideNewCommentRange(model: model.ITextModel, token: CancellationToken): Promise; provideAllComments(token: CancellationToken): Promise; + onDidChangeCommentThreads(): Event; } export interface ICodeLensSymbol { diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 6a02849802f9dadb2ed54bb183ab248703367e9d..cb42a57a7f547dc4e12878c7b0b8762b17ab12c7 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -5047,10 +5047,26 @@ declare namespace monaco.languages { readonly gravatar: string; } + export interface CommentThreadChangedEvent { + /** + * Added comment threads. + */ + readonly added: CommentThread[]; + /** + * Removed comment threads. + */ + readonly removed: CommentThread[]; + /** + * Changed comment threads. + */ + readonly changed: CommentThread[]; + } + export interface CommentProvider { provideComments(model: editor.ITextModel, token: CancellationToken): CommentThread[]; provideNewCommentRange(model: editor.ITextModel, token: CancellationToken): Promise; provideAllComments(token: CancellationToken): Promise; + onDidChangeCommentThreads(): IEvent; } export interface ICodeLensSymbol { diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index c6a09c6db2bd6427ae856414937548afe013cb0d..501e3f02956b384057941490b681d64ae27fb632 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -789,6 +789,23 @@ declare module 'vscode' { gravatar: string; } + export interface CommentThreadChangedEvent { + /** + * Added comment threads. + */ + readonly added: CommentThread[]; + + /** + * Removed comment threads. + */ + readonly removed: CommentThread[]; + + /** + * Changed comment threads. + */ + readonly changed: CommentThread[]; + } + /** * TODO: force update event? * TODO: resolve step? @@ -797,6 +814,7 @@ declare module 'vscode' { provideComments(document: TextDocument, token: CancellationToken): Promise; provideNewCommentRange(document: TextDocument, token: CancellationToken): Promise; provideAllComments?(token: CancellationToken): Promise; + onDidChangeCommentThreads?: Event; } namespace workspace { diff --git a/src/vs/workbench/api/electron-browser/mainThreadComments.ts b/src/vs/workbench/api/electron-browser/mainThreadComments.ts index 2f28d8bedcaf177daaaefd0e73a4a9ad1b699cb7..c684c79bed861ad5e24bbf1ffc214e3d59b8a054 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadComments.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadComments.ts @@ -67,8 +67,10 @@ export class MainThreadComments extends Disposable implements MainThreadComments this._panelService.setPanelEnablement(COMMENTS_PANEL_ID, true); } }); + } - + $onDidCommentThreadsChange(handle: number, event: modes.CommentThreadChangedEvent) { + // notify comment service } $unregisterCommentProvider(handle: number): void { diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 3d1d6c9683ecd12060938a8550e45767ea62e4c1..a7f9cbbd6920b452280bdc4ede25b017b5acb530 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -107,6 +107,7 @@ export interface MainThreadCommandsShape extends IDisposable { export interface MainThreadCommentsShape extends IDisposable { $registerCommentProvider(handle: number): void; $unregisterCommentProvider(handle: number): void; + $onDidCommentThreadsChange(handle: number, event: modes.CommentThreadChangedEvent): void; } export interface MainThreadConfigurationShape extends IDisposable { diff --git a/src/vs/workbench/api/node/extHostComments.ts b/src/vs/workbench/api/node/extHostComments.ts index a1804f7ab3bf3e173bb5bd3f0cad40172dc77114..7fb835c4aa8a3ced5d2a271b4276abb642c07e78 100644 --- a/src/vs/workbench/api/node/extHostComments.ts +++ b/src/vs/workbench/api/node/extHostComments.ts @@ -37,6 +37,15 @@ export class ExtHostComments implements ExtHostCommentsShape { this._providers.set(handle, provider); this._proxy.$registerCommentProvider(handle); + + provider.onDidChangeCommentThreads(event => { + + this._proxy.$onDidCommentThreadsChange(handle, { + changed: event.changed.map(x => convertCommentThread(x, this._commandsConverter)), + added: event.added.map(x => convertCommentThread(x, this._commandsConverter)), + removed: event.removed.map(x => convertCommentThread(x, this._commandsConverter)) + }); + }); return { dispose: () => { this._proxy.$unregisterCommentProvider(handle); @@ -45,6 +54,10 @@ export class ExtHostComments implements ExtHostCommentsShape { }; } + $onDidCommentThreadsChange(handle: number, commentThreadEvent: vscode.CommentThreadChangedEvent) { + return TPromise.as(null); + } + $provideComments(handle: number, uri: UriComponents): TPromise { const data = this._documents.getDocumentData(URI.revive(uri)); if (!data || !data.document) {