Skip to content

Commit 6e45c1e

Browse files
committed
chore: refactor midway
1 parent b590de0 commit 6e45c1e

20 files changed

Lines changed: 470 additions & 392 deletions

files/scripts/startup.bat

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
if "%TERM_PROGRAM%"=="vscode" (
2+
if not defined VSCODE_PYTHON_AUTOACTIVATE_GUARD (
3+
set "VSCODE_PYTHON_AUTOACTIVATE_GUARD=1"
4+
if defined VSCODE_CMD_ACTIVATE (
5+
call %VSCODE_CMD_ACTIVATE%
6+
)
7+
)
8+
)

files/scripts/startup.fish

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
if set -q VSCODE_FISH_ACTIVATE
2+
eval $VSCODE_FISH_ACTIVATE
3+
end

files/scripts/startup.nu

Whitespace-only changes.

files/scripts/startup.ps1

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
if (($null -ne $env:VSCODE_PWSH_ACTIVATE)) {
2+
Invoke-Expression $env:VSCODE_PWSH_ACTIVATE
3+
}

files/scripts/startup.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
if [ -n "$VSCODE_BASH_ACTIVATE" ]; then
2+
eval "$VSCODE_BASH_ACTIVATE"
3+
fi

src/extension.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@ import { registerTools } from './common/lm.apis';
5656
import { GetEnvironmentInfoTool, InstallPackageTool } from './features/copilotTools';
5757
import { TerminalActivationImpl } from './features/terminal/terminalActivationState';
5858
import { getEnvironmentForTerminal, normalizeShellPath } from './features/terminal/utils';
59-
import { PwshStartupProvider } from './features/terminal/startup/powershellStartup';
59+
import { PwshStartupProvider } from './features/terminal/startup/pwsh/pwshStartup';
6060
import { ShellStartupActivationManagerImpl } from './features/terminal/startup/activateUsingShellStartup';
6161
import {
6262
BashStartupProvider,
6363
GitBashStartupProvider,
6464
ZshStartupProvider,
65-
} from './features/terminal/startup/bashStartup';
65+
} from './features/terminal/startup/bash/bashStartup';
6666
import { FishStartupProvider } from './features/terminal/startup/fishStartup';
6767
import { isWindows } from './common/utils/platformUtils';
6868
import { CmdStartupProvider } from './features/terminal/startup/cmdStartup';

src/features/terminal/startup/activateUsingShellStartup.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ConfigurationChangeEvent, Disposable, GlobalEnvironmentVariableCollection } from 'vscode';
22
import { getWorkspaceFolder, getWorkspaceFolders, onDidChangeConfiguration } from '../../../common/workspace.apis';
33
import { getAutoActivationType, setAutoActivationType } from '../utils';
4-
import { ShellScriptEditState, ShellStartupProvider } from './startupProvider';
4+
import { ShellScriptEditState, ShellStartupScriptProvider } from './startupProvider';
55
import { DidChangeEnvironmentEventArgs } from '../../../api';
66
import { EnvironmentManagers } from '../../../internal.api';
77
import { traceError, traceInfo } from '../../../common/logging';
@@ -18,7 +18,7 @@ export class ShellStartupActivationManagerImpl implements ShellStartupActivation
1818
private readonly disposables: Disposable[] = [];
1919
constructor(
2020
private readonly envCollection: GlobalEnvironmentVariableCollection,
21-
private readonly shellStartupProviders: ShellStartupProvider[],
21+
private readonly shellStartupProviders: ShellStartupScriptProvider[],
2222
private readonly em: EnvironmentManagers,
2323
) {
2424
this.envCollection.description = ShellStartupActivationStrings.envCollectionDescription;
@@ -85,7 +85,7 @@ export class ShellStartupActivationManagerImpl implements ShellStartupActivation
8585
}
8686
}
8787

88-
private async getSetupRequired(): Promise<ShellStartupProvider[]> {
88+
private async getSetupRequired(): Promise<ShellStartupScriptProvider[]> {
8989
const results = await Promise.all(
9090
this.shellStartupProviders.map(async (provider) => {
9191
if (!(await provider.isSetup())) {
@@ -95,7 +95,7 @@ export class ShellStartupActivationManagerImpl implements ShellStartupActivation
9595
}),
9696
);
9797

98-
const providers = results.filter((provider): provider is ShellStartupProvider => provider !== undefined);
98+
const providers = results.filter((provider): provider is ShellStartupScriptProvider => provider !== undefined);
9999
return providers;
100100
}
101101

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export const BASH_ENV_KEY = 'VSCODE_BASH_ACTIVATE';
2+
export const ZSH_ENV_KEY = 'VSCODE_ZSH_ACTIVATE';
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import { EnvironmentVariableCollection } from 'vscode';
2+
import { PythonEnvironment } from '../../../../api';
3+
import { traceError } from '../../../../common/logging';
4+
import { getActivationCommandForShell } from '../../../common/activation';
5+
import { ShellConstants } from '../../../common/shellConstants';
6+
import { ShellEnvsProvider } from '../startupProvider';
7+
import { getCommandAsString } from '../utils';
8+
import { BASH_ENV_KEY, ZSH_ENV_KEY } from './bashConstants';
9+
10+
export class BashEnvsProvider implements ShellEnvsProvider {
11+
constructor(public readonly shell: 'bash' | 'gitbash') {}
12+
13+
async updateEnvVariables(collection: EnvironmentVariableCollection, env: PythonEnvironment): Promise<void> {
14+
try {
15+
const bashActivation = getActivationCommandForShell(env, this.shell);
16+
if (bashActivation) {
17+
const command = getCommandAsString(bashActivation, '&&');
18+
collection.replace(BASH_ENV_KEY, command);
19+
} else {
20+
collection.delete(BASH_ENV_KEY);
21+
}
22+
} catch (err) {
23+
traceError(`Failed to update env variables for ${this.shell}`, err);
24+
collection.delete(BASH_ENV_KEY);
25+
}
26+
}
27+
28+
async removeEnvVariables(envCollection: EnvironmentVariableCollection): Promise<void> {
29+
envCollection.delete(BASH_ENV_KEY);
30+
}
31+
32+
async getEnvVariables(env?: PythonEnvironment): Promise<Map<string, string | undefined> | undefined> {
33+
if (!env) {
34+
return new Map([[BASH_ENV_KEY, undefined]]);
35+
}
36+
37+
try {
38+
const bashActivation = getActivationCommandForShell(env, ShellConstants.BASH);
39+
if (bashActivation) {
40+
const command = getCommandAsString(bashActivation, '&&');
41+
return new Map([[BASH_ENV_KEY, command]]);
42+
}
43+
return undefined;
44+
} catch (err) {
45+
traceError(`Failed to get env variables for ${this.shell}`, err);
46+
return undefined;
47+
}
48+
}
49+
}
50+
51+
export class ZshEnvsProvider implements ShellEnvsProvider {
52+
async updateEnvVariables(envVars: EnvironmentVariableCollection, env: PythonEnvironment): Promise<void> {
53+
try {
54+
const zshActivation = getActivationCommandForShell(env, ShellConstants.ZSH);
55+
if (zshActivation) {
56+
const command = getCommandAsString(zshActivation, '&&');
57+
envVars.replace(ZSH_ENV_KEY, command);
58+
} else {
59+
envVars.delete(ZSH_ENV_KEY);
60+
}
61+
} catch (err) {
62+
traceError('Failed to update env variables for zsh', err);
63+
envVars.delete(ZSH_ENV_KEY);
64+
}
65+
}
66+
67+
async removeEnvVariables(envVars: EnvironmentVariableCollection): Promise<void> {
68+
envVars.delete(ZSH_ENV_KEY);
69+
}
70+
71+
async getEnvVariables(env?: PythonEnvironment): Promise<Map<string, string | undefined> | undefined> {
72+
if (!env) {
73+
return new Map([[ZSH_ENV_KEY, undefined]]);
74+
}
75+
76+
try {
77+
const zshActivation = getActivationCommandForShell(env, ShellConstants.ZSH);
78+
return zshActivation ? new Map([[ZSH_ENV_KEY, getCommandAsString(zshActivation, '&&')]]) : undefined;
79+
} catch (err) {
80+
traceError('Failed to get env variables for zsh', err);
81+
return undefined;
82+
}
83+
}
84+
}

0 commit comments

Comments
 (0)