From 3b26dae756270a66075c0f9f820025940bc333b6 Mon Sep 17 00:00:00 2001 From: Miles Frankel Date: Fri, 2 Sep 2022 14:56:57 +0000 Subject: [PATCH] add ignore root folder setting --- packages/foam-vscode/package.json | 7 +++++++ packages/foam-vscode/src/extension.ts | 10 ++++++++-- packages/foam-vscode/src/settings.ts | 5 +++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/foam-vscode/package.json b/packages/foam-vscode/package.json index b79cd976a..dd73fcbc9 100644 --- a/packages/foam-vscode/package.json +++ b/packages/foam-vscode/package.json @@ -283,6 +283,13 @@ ], "description": "Specifies the list of globs that will be ignored by Foam (e.g. they will not be considered when creating the graph). To ignore the all the content of a given folder, use `/**/*`" }, + "foam.rootFolders.ignore": { + "type": [ + "array" + ], + "default": [], + "description": "Specifies the list of folders that will be ignored by Foam (e.g. they will not be considered when creating the graph). This is useful in multi-root workspaces." + }, "foam.logging.level": { "type": "string", "default": "info", diff --git a/packages/foam-vscode/src/extension.ts b/packages/foam-vscode/src/extension.ts index f6005c6a0..c4c4a382d 100644 --- a/packages/foam-vscode/src/extension.ts +++ b/packages/foam-vscode/src/extension.ts @@ -7,7 +7,10 @@ import { Logger } from './core/utils/log'; import { features } from './features'; import { VsCodeOutputLogger, exposeLogger } from './services/logging'; -import { getIgnoredFilesSetting } from './settings'; +import { + getIgnoredFilesSetting, + getIgnoredRootFoldersSetting, +} from './settings'; import { fromVsCodeUri, toVsCodeUri } from './utils/vsc-utils'; import { AttachmentResourceProvider } from './core/services/attachment-provider'; import { VsCodeWatcher } from './services/watcher'; @@ -26,8 +29,11 @@ export async function activate(context: ExtensionContext) { const readFile = async (uri: URI) => (await workspace.fs.readFile(toVsCodeUri(uri))).toString(); const dataStore = new FileDataStore(readFile); + const ignoredRoots = getIgnoredRootFoldersSetting(); const matcher = new Matcher( - workspace.workspaceFolders.map(dir => fromVsCodeUri(dir.uri)), + workspace.workspaceFolders + .filter(dir => !ignoredRoots.includes(dir.name)) + .map(dir => fromVsCodeUri(dir.uri)), ['**/*'], getIgnoredFilesSetting().map(g => g.toString()) ); diff --git a/packages/foam-vscode/src/settings.ts b/packages/foam-vscode/src/settings.ts index 3976633f3..b01031e1f 100644 --- a/packages/foam-vscode/src/settings.ts +++ b/packages/foam-vscode/src/settings.ts @@ -24,6 +24,11 @@ export function getIgnoredFilesSetting(): GlobPattern[] { ]; } +/** Retrieve the list of root folders to ignore. */ +export function getIgnoredRootFoldersSetting(): string[] { + return [...workspace.getConfiguration().get('foam.rootFolders.ignore', [])]; +} + /** Retrieves the maximum length for a Graph node title. */ export function getTitleMaxLength(): number { return workspace.getConfiguration('foam.graph').get('titleMaxLength');