Skip to content

Commit 3bae4a1

Browse files
committed
feat: Add fish and some fixes
1 parent 8eacbe7 commit 3bae4a1

6 files changed

Lines changed: 599 additions & 114 deletions

File tree

src/extension.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,14 @@ import { registerTools } from './common/lm.apis';
5757
import { GetPackagesTool } from './features/copilotTools';
5858
import { TerminalActivationImpl } from './features/terminal/terminalActivationState';
5959
import { getEnvironmentForTerminal, normalizeShellPath } from './features/terminal/utils';
60-
import { PowershellStartupProvider } from './features/terminal/startup/powershellStartup';
60+
import { PowerShellStartupProvider } from './features/terminal/startup/powershellStartup';
6161
import { ShellStartupActivationManagerImpl } from './features/terminal/startup/activateUsingShellStartup';
62-
import { BashStartupProvider, GitBashStartupProvider } from './features/terminal/startup/bashStartup';
62+
import {
63+
BashStartupProvider,
64+
GitBashStartupProvider,
65+
ZshStartupProvider,
66+
} from './features/terminal/startup/bashStartup';
67+
import { FishStartupProvider } from './features/terminal/startup/fishStartup';
6368
import { isWindows } from './common/utils/platformUtils';
6469

6570
export async function activate(context: ExtensionContext): Promise<PythonEnvironmentApi> {
@@ -88,8 +93,13 @@ export async function activate(context: ExtensionContext): Promise<PythonEnviron
8893

8994
const terminalActivation = new TerminalActivationImpl();
9095
const shellStartupProviders = isWindows()
91-
? [new PowershellStartupProvider(), new GitBashStartupProvider()]
92-
: [new PowershellStartupProvider(), new BashStartupProvider()];
96+
? [new PowerShellStartupProvider(), new GitBashStartupProvider()]
97+
: [
98+
new PowerShellStartupProvider(),
99+
new BashStartupProvider(),
100+
new ZshStartupProvider(),
101+
new FishStartupProvider(),
102+
];
93103
const shellStartupActivationManager = new ShellStartupActivationManagerImpl(
94104
context.environmentVariableCollection,
95105
shellStartupProviders,

src/features/terminal/startup/activateUsingShellStartup.ts

Lines changed: 8 additions & 12 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 { ShellStartupProvider } from './startupProvider';
4+
import { ShellScriptEditState, ShellSetupState, ShellStartupProvider } from './startupProvider';
55
import { DidChangeEnvironmentEventArgs } from '../../../api';
66
import { EnvironmentManagers } from '../../../internal.api';
77
import { traceError, traceInfo } from '../../../common/logging';
@@ -87,7 +87,9 @@ export class ShellStartupActivationManagerImpl implements ShellStartupActivation
8787

8888
private async isSetupRequired(): Promise<boolean> {
8989
const results = await Promise.all(this.shellStartupProviders.map((provider) => provider.isSetup()));
90-
return results.some((result) => !result);
90+
return results
91+
.filter((r) => r !== ShellSetupState.NotInstalled)
92+
.some((result) => result === ShellSetupState.NotSetup);
9193
}
9294

9395
public async initialize(): Promise<void> {
@@ -145,17 +147,11 @@ export class ShellStartupActivationManagerImpl implements ShellStartupActivation
145147
}
146148

147149
public async updateStartupScripts(): Promise<void> {
148-
const results = await Promise.all(
149-
this.shellStartupProviders.map(async (provider) => {
150-
const result = await provider.setupScripts();
151-
if (!result) {
152-
traceError(`Failed to setup shell startup scripts for ${provider.name}`);
153-
}
154-
return result;
155-
}),
156-
);
150+
const results = await Promise.all(this.shellStartupProviders.map(async (provider) => provider.setupScripts()));
157151

158-
const success = results.every((result) => result);
152+
const success = results
153+
.filter((r) => r !== ShellScriptEditState.NotInstalled)
154+
.every((result) => result === ShellScriptEditState.Edited);
159155

160156
// Intentionally not awaiting this message. We don’t need a response here, and awaiting here for user response can
161157
// block setting up rest of the startup activation.

0 commit comments

Comments
 (0)