Add a command line option to enable and list extensions (#3191)

This commit is contained in:
Billy Biggs
2025-07-08 12:57:34 -04:00
committed by GitHub
parent f1647d9e19
commit c0940a194e
8 changed files with 220 additions and 10 deletions

View File

@@ -31,19 +31,17 @@ export function loadExtensions(workspaceDir: string): Extension[] {
...loadExtensionsFromDir(os.homedir()),
];
const uniqueExtensions: Extension[] = [];
const seenNames = new Set<string>();
const uniqueExtensions = new Map<string, Extension>();
for (const extension of allExtensions) {
if (!seenNames.has(extension.config.name)) {
if (!uniqueExtensions.has(extension.config.name)) {
console.log(
`Loading extension: ${extension.config.name} (version: ${extension.config.version})`,
);
uniqueExtensions.push(extension);
seenNames.add(extension.config.name);
uniqueExtensions.set(extension.config.name, extension);
}
}
return uniqueExtensions;
return Array.from(uniqueExtensions.values());
}
function loadExtensionsFromDir(dir: string): Extension[] {
@@ -114,3 +112,48 @@ function getContextFileNames(config: ExtensionConfig): string[] {
}
return config.contextFileName;
}
export function filterActiveExtensions(
extensions: Extension[],
enabledExtensionNames: string[],
): Extension[] {
if (enabledExtensionNames.length === 0) {
return extensions;
}
const lowerCaseEnabledExtensions = new Set(
enabledExtensionNames.map((e) => e.trim().toLowerCase()),
);
if (
lowerCaseEnabledExtensions.size === 1 &&
lowerCaseEnabledExtensions.has('none')
) {
if (extensions.length > 0) {
console.log('All extensions are disabled.');
}
return [];
}
const activeExtensions: Extension[] = [];
const notFoundNames = new Set(lowerCaseEnabledExtensions);
for (const extension of extensions) {
const lowerCaseName = extension.config.name.toLowerCase();
if (lowerCaseEnabledExtensions.has(lowerCaseName)) {
console.log(
`Activated extension: ${extension.config.name} (version: ${extension.config.version})`,
);
activeExtensions.push(extension);
notFoundNames.delete(lowerCaseName);
} else {
console.log(`Disabled extension: ${extension.config.name}`);
}
}
for (const requestedName of notFoundNames) {
console.log(`Extension not found: ${requestedName}`);
}
return activeExtensions;
}