Skip to content

Commit c42205b

Browse files
committed
feat: enhance project creation with quick create option in new project command
1 parent e9e1e38 commit c42205b

File tree

1 file changed

+41
-8
lines changed

1 file changed

+41
-8
lines changed

src/extension.ts

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { commands, ExtensionContext, LogOutputChannel, Terminal, Uri, window } from 'vscode';
2-
import { PythonEnvironment, PythonEnvironmentApi } from './api';
2+
import { PythonEnvironment, PythonEnvironmentApi, PythonProjectCreator, PythonProjectCreatorOptions } from './api';
33
import { ensureCorrectVersion } from './common/extVersion';
44
import { registerTools } from './common/lm.apis';
55
import { registerLogger, traceError, traceInfo } from './common/logging';
@@ -114,13 +114,21 @@ export async function activate(context: ExtensionContext): Promise<PythonEnviron
114114
context.subscriptions.push(terminalActivation, terminalManager);
115115

116116
const projectCreators: ProjectCreators = new ProjectCreatorsImpl();
117+
const abc = new NewScriptProject();
117118
context.subscriptions.push(
118119
projectCreators,
119120
projectCreators.registerPythonProjectCreator(new ExistingProjects(projectManager)),
120121
projectCreators.registerPythonProjectCreator(new AutoFindProjects(projectManager)),
121122
projectCreators.registerPythonProjectCreator(new NewPackageProject(envManagers, projectManager)),
122-
projectCreators.registerPythonProjectCreator(new NewScriptProject()),
123+
124+
projectCreators.registerPythonProjectCreator(abc),
123125
);
126+
const cd: PythonProjectCreatorOptions = {
127+
name: abc.name,
128+
rootUri: context.extensionUri,
129+
quickCreate: true,
130+
};
131+
abc.create(cd);
124132

125133
setPythonApi(envManagers, projectManager, projectCreators, terminalManager, envVarManager);
126134
const api = await getPythonApi();
@@ -248,12 +256,37 @@ export async function activate(context: ExtensionContext): Promise<PythonEnviron
248256
await terminalManager.deactivate(terminal);
249257
}
250258
}),
251-
commands.registerCommand('python-envs.createNewProjectFromTemplate', async () => {
252-
const selected = await newProjectSelection(projectCreators.getProjectCreators());
253-
if (selected) {
254-
await selected.create();
255-
}
256-
}),
259+
commands.registerCommand(
260+
'python-envs.createNewProjectFromTemplate',
261+
async (projectType: string, quickCreate: boolean, newProjectName: string, newProjectPath: string) => {
262+
if (quickCreate) {
263+
if (!projectType || !newProjectName || !newProjectPath) {
264+
throw new Error('Project type, name, and path are required for quick create.');
265+
}
266+
const creators = projectCreators.getProjectCreators();
267+
let selected: PythonProjectCreator | undefined;
268+
if (projectType === 'python-package') {
269+
selected = creators.find((c) => c.name === 'newPackage');
270+
}
271+
if (projectType === 'python-script') {
272+
selected = creators.find((c) => c.name === 'newScript');
273+
}
274+
if (!selected) {
275+
throw new Error(`Project creator for type "${projectType}" not found.`);
276+
}
277+
await selected.create({
278+
quickCreate: true,
279+
name: newProjectName,
280+
rootUri: Uri.file(newProjectPath),
281+
});
282+
} else {
283+
const selected = await newProjectSelection(projectCreators.getProjectCreators());
284+
if (selected) {
285+
await selected.create();
286+
}
287+
}
288+
},
289+
),
257290
terminalActivation.onDidChangeTerminalActivationState(async (e) => {
258291
await setActivateMenuButtonContext(e.terminal, e.environment, e.activated);
259292
}),

0 commit comments

Comments
 (0)