Skip to content

Commit ef07d00

Browse files
not fixed, need to control the initial bootup of extension host, but no idea how
1 parent d7d69f1 commit ef07d00

File tree

4 files changed

+48
-14
lines changed

4 files changed

+48
-14
lines changed

packages/app/src/app/overmind/effects/vscode/index.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ export class VSCodeEffect {
103103
public initialized: Promise<unknown>;
104104
public sandboxFsSync: SandboxFsSync;
105105
private mountableFilesystem: any;
106+
private isRunningExtensionHost = true;
106107

107108
private monaco: any;
108109
private editorApi: any;
@@ -468,14 +469,31 @@ export class VSCodeEffect {
468469

469470
setFs(this.sandboxFsSync.create(sandbox));
470471

471-
if (isFirstLoad) {
472-
this.sandboxFsSync.sync(() => {});
473-
} else {
474-
this.editorApi.extensionService.stopExtensionHost();
475-
this.sandboxFsSync.sync(() => {
476-
this.editorApi.extensionService.startExtensionHost();
477-
});
472+
return new Promise(resolve => {
473+
if (isFirstLoad) {
474+
// Do no start extension host
475+
this.sandboxFsSync.sync(resolve);
476+
} else {
477+
this.stopExtensionHost();
478+
this.sandboxFsSync.sync(resolve);
479+
}
480+
});
481+
}
482+
483+
public startExtensionHost() {
484+
if (this.isRunningExtensionHost) {
485+
return;
486+
}
487+
this.editorApi.extensionService.startExtensionHost();
488+
this.isRunningExtensionHost = true;
489+
}
490+
491+
public stopExtensionHost() {
492+
if (!this.isRunningExtensionHost) {
493+
return;
478494
}
495+
this.editorApi.extensionService.stopExtensionHost();
496+
this.isRunningExtensionHost = false;
479497
}
480498

481499
public async setModuleCode(module: Module) {

packages/app/src/app/overmind/namespaces/editor/actions.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
import { debounce } from 'lodash-es';
21
import { resolveModule } from '@codesandbox/common/lib/sandbox/modules';
32
import getTemplate from '@codesandbox/common/lib/templates';
43
import {
54
EnvironmentVariable,
5+
Module,
66
ModuleCorrection,
77
ModuleError,
88
ModuleTab,
9-
WindowOrientation,
10-
Module,
119
UserSelection,
10+
WindowOrientation,
1211
} from '@codesandbox/common/lib/types';
1312
import { logBreadcrumb } from '@codesandbox/common/lib/utils/analytics/sentry';
1413
import { getTextOperation } from '@codesandbox/common/lib/utils/diff';
@@ -24,6 +23,7 @@ import {
2423
} from 'app/graphql/types';
2524
import { Action, AsyncAction } from 'app/overmind';
2625
import { withLoadApp, withOwnedSandbox } from 'app/overmind/factories';
26+
import { getSavedCode } from 'app/overmind/utils/sandbox';
2727
import {
2828
addDevToolsTab as addDevToolsTabUtil,
2929
closeDevToolsTab as closeDevToolsTabUtil,
@@ -32,7 +32,7 @@ import {
3232
import { convertAuthorizationToPermissionType } from 'app/utils/authorization';
3333
import { clearCorrectionsFromAction } from 'app/utils/corrections';
3434
import history from 'app/utils/history';
35-
import { getSavedCode } from 'app/overmind/utils/sandbox';
35+
import { debounce } from 'lodash-es';
3636
import { Selection, TextOperation } from 'ot';
3737
import { json } from 'overmind';
3838

@@ -239,6 +239,12 @@ export const sandboxChanged: AsyncAction<{ id: string }> = withLoadApp<{
239239
state.editor.modulesByPath = fs;
240240
});
241241

242+
if (sandbox.featureFlags?.containerLsp) {
243+
effects.vscode.stopExtensionHost();
244+
} else {
245+
effects.vscode.startExtensionHost();
246+
}
247+
242248
if (sandbox.featureFlags?.containerLsp && !sandbox.owned) {
243249
effects.vscode.setReadOnly(true);
244250
effects.notificationToast.add({

packages/app/src/app/overmind/namespaces/live/actions.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import {
22
LiveMessage,
33
LiveMessageEvent,
4-
UserViewRange,
54
UserSelection,
5+
UserViewRange,
66
} from '@codesandbox/common/lib/types';
77
import { Action, AsyncAction, Operator } from 'app/overmind';
88
import { withLoadApp } from 'app/overmind/factories';
@@ -77,6 +77,8 @@ export const roomJoined: AsyncAction<{
7777
state.editor.modulesByPath = fs;
7878
});
7979

80+
effects.vscode.startExtensionHost();
81+
8082
effects.live.sendModuleStateSyncRequest();
8183
effects.vscode.openModule(state.editor.currentModule);
8284
state.editor.isLoading = false;

packages/app/src/app/overmind/namespaces/server/actions.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@ export const restartContainer: Action = ({ state, effects }) => {
1818
effects.executor.emit('sandbox:restart-container');
1919
};
2020

21-
export const statusChanged: Action<ServerStatus> = ({ state }, status) => {
21+
export const statusChanged: Action<ServerStatus> = (
22+
{ state, effects },
23+
status
24+
) => {
2225
state.server.status = status;
2326
};
2427

2528
export const containerStatusChanged: Action<ServerContainerStatus> = (
26-
{ state },
29+
{ state, actions },
2730
status
2831
) => {
2932
state.server.containerStatus = status;
@@ -45,14 +48,17 @@ export const onSSEMessage: Action<{
4548
) {
4649
server.status = ServerStatus.DISCONNECTED;
4750
effects.codesandboxApi.disconnectSSE();
51+
effects.vscode.stopExtensionHost();
4852
}
4953
break;
5054
case 'sandbox:start':
5155
server.containerStatus = ServerContainerStatus.SANDBOX_STARTED;
56+
effects.vscode.startExtensionHost();
5257
break;
5358
case 'sandbox:stop':
5459
if (server.containerStatus !== ServerContainerStatus.HIBERNATED) {
5560
server.containerStatus = ServerContainerStatus.STOPPED;
61+
effects.vscode.stopExtensionHost();
5662
}
5763
break;
5864
case 'sandbox:update':
@@ -61,12 +67,14 @@ export const onSSEMessage: Action<{
6167
case 'sandbox:hibernate':
6268
server.containerStatus = ServerContainerStatus.HIBERNATED;
6369
effects.executor.closeExecutor();
70+
effects.vscode.stopExtensionHost();
6471
break;
6572
case 'sandbox:status':
6673
if (data.status === 'starting-container') {
6774
server.containerStatus = ServerContainerStatus.INITIALIZING;
6875
} else if (data.status === 'installing-packages') {
6976
server.containerStatus = ServerContainerStatus.CONTAINER_STARTED;
77+
effects.vscode.startExtensionHost();
7078
}
7179
break;
7280
case 'sandbox:log':

0 commit comments

Comments
 (0)