826
*/
827
public async scan(token: CancellationToken): Promise<readonly IDiscoveredDirectory[]> {
829
>
method: 'scan',
830
>
workingDirectory: this._workingDirectory.toString(),
831
>
userHome: this._userHome.toString(),
832
>
});
833
>
throwIfCancelled(token);
834
>
835
>
const nextWatchRootUris = new ResourceMap<IWatchSpec>();
836
>
const seen = new ResourceSet();
837
>
const result: IDiscoveredDirectory[] = [];
838
>
839
>
// Workspace first so it wins on URI conflicts.
840
>
await Promise.all([
841
>
...searchRoots.workspace.map(root => this._scanRoot(this._workingDirectory, root, seen, result, nextWatchRootUris, token)),
842
>
...searchRoots.user.map(root => this._scanRoot(this._userHome, root, seen, result, nextWatchRootUris, token)),
843
>
this._scanFixedDiscoveryFiles(this._workingDirectory, fixedDiscoveryFiles.workspace, seen, result, nextWatchRootUris, token),
844
>
this._scanFixedDiscoveryFiles(this._userHome, fixedDiscoveryFiles.user, seen, result, nextWatchRootUris, token)
845
>
]);
846
>
847
>
throwIfCancelled(token);
848
>
849
>
this._reconcileWatchers(nextWatchRootUris);
850
>
const sortedResult = result.sort(compareDiscoveredDirectory);
851
>
await this.writeCustomizationDiscoveryDebugLog({
852
>
method: 'scan',
853
>
result: sortedResult.map(directory => ({
854
>
type: directory.type,
855
>
uri: directory.uri.toString(),
856
>
files: directory.files.map(file => file.uri.toString()),
857
>
})),
858
>
});
859
>
return sortedResult;
860
>
}
861
862
/**