From a2a19f2bd54453aace5ef4127a42fd5bca8019c2 Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Thu, 4 Dec 2025 12:13:59 -0500 Subject: [PATCH 1/3] rf: Split sidecar file determination into separate function --- src/validators/internal/unusedFile.ts | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/validators/internal/unusedFile.ts b/src/validators/internal/unusedFile.ts index 08dfe77b9..388b6818e 100644 --- a/src/validators/internal/unusedFile.ts +++ b/src/validators/internal/unusedFile.ts @@ -35,15 +35,25 @@ export async function unusedStimulus( const standalone_json = ['dataset_description.json', 'genetic_info.json'] +function isSidecarFile(file: BIDSFile): boolean { + if (!file.name.endsWith('.json')) { + return false + } + if (standalone_json.includes(file.name)) { + return false + } + // coordsystem.json files are kind-of sidecars, and they're picked up by + // associations. We may want to exclude them in the future. + return true +} + export async function sidecarWithoutDatafile( schema: GenericSchema, dsContext: BIDSContextDataset, ) { - const unusedSidecars = [...walkFileTree(dsContext.tree, dsContext)].filter( - (file) => (!file.viewed && file.name.endsWith('.json') && - !standalone_json.includes(file.name)), - ) - unusedSidecars.forEach((sidecar) => { - dsContext.issues.add({ code: 'SIDECAR_WITHOUT_DATAFILE', location: sidecar.path }) - }) + for (const file of walkFileTree(dsContext.tree, dsContext)) { + if (!file.viewed && isSidecarFile(file)) { + dsContext.issues.add({ code: 'SIDECAR_WITHOUT_DATAFILE', location: file.path }) + } + } } From 66e9d647349f9d9bf36300b9d820d5f6f64df3c6 Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Thu, 4 Dec 2025 12:14:26 -0500 Subject: [PATCH 2/3] feat: Exclude prov files from consideration as sidecars --- src/validators/internal/unusedFile.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/validators/internal/unusedFile.ts b/src/validators/internal/unusedFile.ts index 388b6818e..ef4e117aa 100644 --- a/src/validators/internal/unusedFile.ts +++ b/src/validators/internal/unusedFile.ts @@ -42,6 +42,10 @@ function isSidecarFile(file: BIDSFile): boolean { if (standalone_json.includes(file.name)) { return false } + // prov files are not sidecars + if (file.path.startsWith('/prov/')) { + return false + } // coordsystem.json files are kind-of sidecars, and they're picked up by // associations. We may want to exclude them in the future. return true From 3137fa9beffe10696e6f7dc643d07fc6e8a9df1e Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Thu, 4 Dec 2025 12:20:40 -0500 Subject: [PATCH 3/3] doc: Changelog entry --- changelog.d/20251204_121918_markiewicz_bep028.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 changelog.d/20251204_121918_markiewicz_bep028.md diff --git a/changelog.d/20251204_121918_markiewicz_bep028.md b/changelog.d/20251204_121918_markiewicz_bep028.md new file mode 100644 index 000000000..0cf378aed --- /dev/null +++ b/changelog.d/20251204_121918_markiewicz_bep028.md @@ -0,0 +1,11 @@ + + +### Added + +- Support for JSON files in `/prov/` as standalone files. Avoiding + false positive `SIDECAR_WITHOUT_DATAFILE` errors.