src/vs/platform/files/node/watcher/nsfw/nsfwWatcherService.ts/NsfwWatcherService/setRoots
class NsfwWatcherService:	async setRoots(roots: IWatcherRequest[]): Promise<void> {
		const normalizedRoots = this.normalizeRoots(roots);

		// Gather roots that are not currently being watched
		const rootsToStartWatching = normalizedRoots.filter(root => {
			return !(root.path in this.pathWatchers);
		});

		// Gather current roots that don't exist in the new roots array
		const rootsToStopWatching = Object.keys(this.pathWatchers).filter(root => {
			return normalizedRoots.every(normalizedRoot => normalizedRoot.path !== root);
		});

		// Logging
		this.debug(`Start watching: ${rootsToStartWatching.map(root => `${root.path} (excludes: ${root.excludes})`).join(',')}`);
		this.debug(`Stop watching: ${rootsToStopWatching.join(',')}`);

		// Stop watching some roots
		for (const root of rootsToStopWatching) {
			this.pathWatchers[root].ready.then(watcher => watcher.stop());
			delete this.pathWatchers[root];
		}

		// Start watching some roots
		for (const root of rootsToStartWatching) {
			this.doWatch(root);
		}

		// Refresh ignored arrays in case they changed
		for (const root of roots) {
			if (root.path in this.pathWatchers) {
				this.pathWatchers[root.path].ignored = Array.isArray(root.excludes) ? root.excludes.map(ignored => parse(ignored)) : [];
			}
		}
	}