diff options
Diffstat (limited to 'extension/src')
-rw-r--r-- | extension/src/activation/activate.ts | 31 | ||||
-rw-r--r-- | extension/src/activation/environmentSetup.ts | 34 | ||||
-rw-r--r-- | extension/src/debugPanel.ts | 14 | ||||
-rw-r--r-- | extension/src/suggestions.ts | 2 |
4 files changed, 58 insertions, 23 deletions
diff --git a/extension/src/activation/activate.ts b/extension/src/activation/activate.ts index df8b6871..cd8f0cf3 100644 --- a/extension/src/activation/activate.ts +++ b/extension/src/activation/activate.ts @@ -24,19 +24,6 @@ export async function activateExtension( registerAllCodeLensProviders(context); registerAllCommands(context); - await new Promise((resolve, reject) => { - vscode.window.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: "Starting Continue Server...", - cancellable: false, - }, - async (progress, token) => { - await startContinuePythonServer(); - resolve(null); - } - ); - }); const serverUrl = getContinueServerUrl(); ideProtocolClient = new IdeProtocolClient( @@ -46,8 +33,8 @@ export async function activateExtension( // Setup the left panel (async () => { - const sessionId = await ideProtocolClient.getSessionId(); - const provider = new ContinueGUIWebviewViewProvider(sessionId); + const sessionIdPromise = ideProtocolClient.getSessionId(); + const provider = new ContinueGUIWebviewViewProvider(sessionIdPromise); context.subscriptions.push( vscode.window.registerWebviewViewProvider( @@ -60,6 +47,20 @@ export async function activateExtension( ); })(); + await new Promise((resolve, reject) => { + vscode.window.withProgress( + { + location: vscode.ProgressLocation.Notification, + title: + "Starting Continue Server... (it may take a minute to download Python packages)", + cancellable: false, + }, + async (progress, token) => { + await startContinuePythonServer(); + resolve(null); + } + ); + }); // All opened terminals should be replaced by our own terminal // vscode.window.onDidOpenTerminal((terminal) => {}); diff --git a/extension/src/activation/environmentSetup.ts b/extension/src/activation/environmentSetup.ts index 168c79ad..823670fd 100644 --- a/extension/src/activation/environmentSetup.ts +++ b/extension/src/activation/environmentSetup.ts @@ -101,9 +101,34 @@ function checkEnvExists() { } function checkRequirementsInstalled() { - return fs.existsSync( - path.join(getExtensionUri().fsPath, "scripts", ".continue_env_installed") + let envLibsPath = path.join( + getExtensionUri().fsPath, + "scripts", + "env", + process.platform == "win32" ? "Lib" : "lib" ); + // If site-packages is directly under env, use that + if (fs.existsSync(path.join(envLibsPath, "site-packages"))) { + envLibsPath = path.join(envLibsPath, "site-packages"); + } else { + // Get the python version folder name + const pythonVersions = fs.readdirSync(envLibsPath).filter((f: string) => { + return f.startsWith("python"); + }); + if (pythonVersions.length == 0) { + return false; + } + const pythonVersion = pythonVersions[0]; + envLibsPath = path.join(envLibsPath, pythonVersion, "site-packages"); + } + + const continuePath = path.join(envLibsPath, "continuedev"); + + return fs.existsSync(continuePath); + + // return fs.existsSync( + // path.join(getExtensionUri().fsPath, "scripts", ".continue_env_installed") + // ); } async function setupPythonEnv() { @@ -249,7 +274,10 @@ export async function startContinuePythonServer() { }); child.stderr.on("data", (data: any) => { console.log(`stderr: ${data}`); - if (data.includes("Uvicorn running on")) { + if ( + data.includes("Uvicorn running on") || // Successfully started the server + data.includes("address already in use") // The server is already running (probably a simultaneously opened VS Code window) + ) { console.log("Successfully started Continue python server"); resolve(null); } diff --git a/extension/src/debugPanel.ts b/extension/src/debugPanel.ts index b0db590a..79719a3b 100644 --- a/extension/src/debugPanel.ts +++ b/extension/src/debugPanel.ts @@ -126,7 +126,7 @@ let streamManager = new StreamManager(); export let debugPanelWebview: vscode.Webview | undefined; export function setupDebugPanel( panel: vscode.WebviewPanel | vscode.WebviewView, - sessionId: string + sessionIdPromise: Promise<string> ): string { debugPanelWebview = panel.webview; panel.onDidDispose(() => { @@ -224,6 +224,7 @@ export function setupDebugPanel( panel.webview.onDidReceiveMessage(async (data) => { switch (data.type) { case "onLoad": { + const sessionId = await sessionIdPromise; panel.webview.postMessage({ type: "onLoad", vscMachineId: vscode.env.machineId, @@ -334,10 +335,10 @@ export class ContinueGUIWebviewViewProvider implements vscode.WebviewViewProvider { public static readonly viewType = "continue.continueGUIView"; - private readonly sessionId: string; + private readonly sessionIdPromise: Promise<string>; - constructor(sessionId: string) { - this.sessionId = sessionId; + constructor(sessionIdPromise: Promise<string>) { + this.sessionIdPromise = sessionIdPromise; } resolveWebviewView( @@ -345,6 +346,9 @@ export class ContinueGUIWebviewViewProvider _context: vscode.WebviewViewResolveContext, _token: vscode.CancellationToken ): void | Thenable<void> { - webviewView.webview.html = setupDebugPanel(webviewView, this.sessionId); + webviewView.webview.html = setupDebugPanel( + webviewView, + this.sessionIdPromise + ); } } diff --git a/extension/src/suggestions.ts b/extension/src/suggestions.ts index c9e29ed5..c36b9b34 100644 --- a/extension/src/suggestions.ts +++ b/extension/src/suggestions.ts @@ -231,6 +231,8 @@ function selectSuggestion( currentSuggestion.set(editorUri, Math.min(idx, suggestions.length - 1)); } rerenderDecorations(editorUri); + + editorToSuggestions.set(editorUri, suggestions); } export function acceptSuggestionCommand(key: SuggestionRanges | null = null) { |