forked from DonJayamanne/pythonVSCode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreplProvider.ts
More file actions
38 lines (37 loc) · 1.83 KB
/
replProvider.ts
File metadata and controls
38 lines (37 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import { Disposable, Uri } from 'vscode';
import { ICommandManager, IDocumentManager, IWorkspaceService } from '../common/application/types';
import { Commands } from '../common/constants';
import { IServiceContainer } from '../ioc/types';
import { captureTelemetry } from '../telemetry';
import { EventName } from '../telemetry/constants';
import { ICodeExecutionService } from '../terminals/types';
export class ReplProvider implements Disposable {
private readonly disposables: Disposable[] = [];
constructor(private serviceContainer: IServiceContainer) {
this.registerCommand();
}
public dispose() {
this.disposables.forEach(disposable => disposable.dispose());
}
private registerCommand() {
const commandManager = this.serviceContainer.get<ICommandManager>(ICommandManager);
const disposable = commandManager.registerCommand(Commands.Start_REPL, this.commandHandler, this);
this.disposables.push(disposable);
}
@captureTelemetry(EventName.REPL)
private async commandHandler() {
const resource = this.getActiveResourceUri();
const replProvider = this.serviceContainer.get<ICodeExecutionService>(ICodeExecutionService, 'repl');
await replProvider.initializeRepl(resource);
}
private getActiveResourceUri(): Uri | undefined {
const documentManager = this.serviceContainer.get<IDocumentManager>(IDocumentManager);
if (documentManager.activeTextEditor && !documentManager.activeTextEditor!.document.isUntitled) {
return documentManager.activeTextEditor!.document.uri;
}
const workspace = this.serviceContainer.get<IWorkspaceService>(IWorkspaceService);
if (Array.isArray(workspace.workspaceFolders) && workspace.workspaceFolders.length > 0) {
return workspace.workspaceFolders[0].uri;
}
}
}