MCPcopy Create free account
hub / github.com/Dart-Code/Dart-Code / findProjectFolders

Function findProjectFolders

src/shared/utils/fs.ts:340–376  ·  view source on GitHub ↗
(logger: Logger, roots: string[], excludedFolders: string[], options: { sort?: boolean; requirePubspec?: boolean, searchDepth: number, onlyWorkspaceRoots?: boolean }, token: MyCancellationToken)

Source from the content-addressed store, hash-verified

338// - have a project create trigger file
339// - are the Flutter repo root
340export async function findProjectFolders(logger: Logger, roots: string[], excludedFolders: string[], options: { sort?: boolean; requirePubspec?: boolean, searchDepth: number, onlyWorkspaceRoots?: boolean }, token: MyCancellationToken): Promise<string[]> {
341 const dartToolFolderName = `${path.sep}.dart_tool${path.sep}`;
342
343 let previousLevelFolders = roots.slice();
344 let allPossibleFolders = previousLevelFolders.slice();
345 // Start at 1, as we already added the roots.
346 const searchDepth = options.onlyWorkspaceRoots ? 1 : options.searchDepth;
347 for (let i = 1; i < searchDepth; i++) {
348 let nextLevelFolders: string[] = [];
349 for (const folder of previousLevelFolders) {
350 if (token.isCancellationRequested)
351 break;
352 nextLevelFolders = nextLevelFolders.concat(await getChildFolders(logger, folder));
353 }
354
355 allPossibleFolders = allPossibleFolders.concat(nextLevelFolders);
356 previousLevelFolders = nextLevelFolders;
357 }
358
359 allPossibleFolders = allPossibleFolders
360 .filter((f) => !f.includes(dartToolFolderName) && excludedFolders.every((ef) => !isWithinPathOrEqual(f, ef)));
361
362 const projectFolderPromises = allPossibleFolders.map(async (folder) => ({
363 exists: options?.requirePubspec
364 ? await hasPubspecAsync(folder)
365 : options.onlyWorkspaceRoots || await hasPubspecAsync(folder) || await hasCreateTriggerFileAsync(folder) || await isFlutterRepoAsync(folder),
366 folder,
367 }));
368 const projectFoldersChecks = await Promise.all(projectFolderPromises);
369 const projectFolders = projectFoldersChecks
370 .filter((res) => res.exists)
371 .map((res) => res.folder);
372
373 return options?.sort
374 ? sortBy(projectFolders, (p) => p.toLowerCase())
375 : projectFolders;
376}
377
378export function getSdkVersion(logger: Logger, { sdkRoot }: { sdkRoot?: string }): string | undefined {
379 if (!sdkRoot)

Callers 1

Calls 6

sortByFunction · 0.90
getChildFoldersFunction · 0.85
isWithinPathOrEqualFunction · 0.85
hasPubspecAsyncFunction · 0.85
isFlutterRepoAsyncFunction · 0.85

Tested by

no test coverage detected