Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/intents/vscode-node/newWorkspaceTextDocumentProvider.ts
13399 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
import { CancellationToken, EventEmitter, TextDocumentContentProvider, Uri, workspace } from 'vscode';
6
import { Disposable } from '../../../util/vs/base/common/lifecycle';
7
import { CopilotFileScheme, INewWorkspacePreviewContentManager } from '../node/newIntent';
8
9
10
export class NewWorkspaceTextDocumentProvider extends Disposable implements TextDocumentContentProvider {
11
onDidChangeEmitter = this._register(new EventEmitter<Uri>());
12
public onDidChange = this.onDidChangeEmitter.event;
13
14
constructor(private readonly contentManager: INewWorkspacePreviewContentManager) {
15
super();
16
this._register(workspace.onDidChangeTextDocument(e => {
17
if (e.document.uri.scheme === CopilotFileScheme) {
18
this.onDidChangeEmitter.fire(e.document.uri);
19
}
20
}));
21
}
22
23
async provideTextDocumentContent(uri: Uri, token: CancellationToken) {
24
const node = this.contentManager.get(uri);
25
if (!node) {
26
return '';
27
}
28
let contentArray: Uint8Array | undefined;
29
try {
30
contentArray = await node.content;
31
} catch { }
32
return new TextDecoder().decode(contentArray) ?? '';
33
}
34
}
35
36