Skip to content

Commit 69de065

Browse files
committed
rf: Subsume evalAdditionalColumns into evalColumns
1 parent 22e1373 commit 69de065

File tree

3 files changed

+11
-49
lines changed

3 files changed

+11
-49
lines changed

src/schema/applyRules.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { memoize } from '../utils/memoize.ts'
77
import { compile } from '../validators/json.ts'
88
import type { DefinedError } from '@ajv'
99
import {
10-
evalAdditionalColumns,
1110
evalColumns,
1211
evalIndexColumns,
1312
evalInitialColumns,
@@ -107,8 +106,6 @@ const evalMap: Record<
107106
// @ts-expect-error
108107
columns: evalColumns,
109108
// @ts-expect-error
110-
additional_columns: evalAdditionalColumns,
111-
// @ts-expect-error
112109
initial_columns: evalInitialColumns,
113110
// @ts-expect-error
114111
index_columns: evalIndexColumns,

src/schema/tables.test.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import { assertEquals } from '@std/assert'
33
import { loadSchema } from '../setup/loadSchema.ts'
44
import {
5-
evalAdditionalColumns,
65
evalColumns,
76
evalIndexColumns,
87
evalInitialColumns,
@@ -246,11 +245,11 @@ Deno.test('tables eval* tests', async (t) => {
246245
dataset: { issues: new DatasetIssues() },
247246
}
248247
const rule = schemaDefs.rules.tabular_data.made_up.MadeUp
249-
evalAdditionalColumns(rule, context, schema, 'rules.tabular_data.made_up.MadeUp')
248+
evalColumns(rule, context, schema, 'rules.tabular_data.made_up.MadeUp')
250249
assertEquals(context.dataset.issues.size, 0)
251250

252251
context.columns['extra'] = [1, 2, 3]
253-
evalAdditionalColumns(rule, context, schema, 'rules.tabular_data.made_up.MadeUp')
252+
evalColumns(rule, context, schema, 'rules.tabular_data.made_up.MadeUp')
254253
assertEquals(
255254
context.dataset.issues.get({ code: 'TSV_ADDITIONAL_COLUMNS_NOT_ALLOWED' }).length,
256255
1,
@@ -270,18 +269,18 @@ Deno.test('tables eval* tests', async (t) => {
270269
}
271270
const rule = schemaDefs.rules.tabular_data.made_up.MadeUp
272271
rule.additional_columns = 'allowed_if_defined'
273-
evalAdditionalColumns(rule, context, schema, 'rules.tabular_data.made_up.MadeUp')
272+
evalColumns(rule, context, schema, 'rules.tabular_data.made_up.MadeUp')
274273
assertEquals(context.dataset.issues.size, 0)
275274

276275
context['sidecar'] = {}
277-
evalAdditionalColumns(rule, context, schema, 'rules.tabular_data.made_up.MadeUp')
276+
evalColumns(rule, context, schema, 'rules.tabular_data.made_up.MadeUp')
278277
assertEquals(
279278
context.dataset.issues.get({ code: 'TSV_ADDITIONAL_COLUMNS_MUST_DEFINE' }).length,
280279
1,
281280
)
282281

283282
rule.additional_columns = 'allowed'
284-
evalAdditionalColumns(rule, context, schema, 'rules.tabular_data.made_up.MadeUp')
283+
evalColumns(rule, context, schema, 'rules.tabular_data.made_up.MadeUp')
285284
assertEquals(
286285
context.dataset.issues.get({ code: 'TSV_ADDITIONAL_COLUMNS_UNDEFINED' }).length,
287286
1,

src/schema/tables.ts

Lines changed: 6 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,12 @@ export function evalColumns(
236236
let signature: ValueSignature
237237
if (!ruleHeader) { // Additional column
238238
if (requirement === 'not_allowed' || !sidecarDef) {
239+
const code = requirement === 'not_allowed'
240+
? 'TSV_ADDITIONAL_COLUMNS_NOT_ALLOWED'
241+
: requirement === 'allowed_if_defined'
242+
? 'TSV_ADDITIONAL_COLUMNS_MUST_DEFINE'
243+
: 'TSV_ADDITIONAL_COLUMNS_UNDEFINED'
244+
context.dataset.issues.add({ code, ...issue })
239245
continue
240246
}
241247
signature = extractDefinition(sidecarDef)
@@ -349,46 +355,6 @@ export function evalInitialColumns(
349355
})
350356
}
351357

352-
export function evalAdditionalColumns(
353-
rule: GenericRule,
354-
context: BIDSContext,
355-
schema: Schema,
356-
schemaPath: string,
357-
): void {
358-
if (!['.tsv', '.tsv.gz'].includes(context.extension)) return
359-
const headers = Object.keys(context?.columns)
360-
if (rule.columns) {
361-
if (!rule.additional_columns || rule.additional_columns === 'n/a') {
362-
// Old schemas might be missing the field, so be permissive.
363-
// New schemas indicate it is not applicable with 'n/a'.
364-
return
365-
}
366-
const ruleHeadersNames = Object.keys(rule.columns).map(
367-
(x) => schema.objects.columns[x].name,
368-
)
369-
let extraCols = headers.filter(
370-
(header) => !ruleHeadersNames.includes(header),
371-
)
372-
373-
if (rule.additional_columns?.startsWith('allowed')) {
374-
extraCols = extraCols.filter((header) => !(header in context.sidecar))
375-
}
376-
const code = rule.additional_columns === 'not_allowed'
377-
? 'TSV_ADDITIONAL_COLUMNS_NOT_ALLOWED'
378-
: rule.additional_columns === 'allowed_if_defined'
379-
? 'TSV_ADDITIONAL_COLUMNS_MUST_DEFINE'
380-
: 'TSV_ADDITIONAL_COLUMNS_UNDEFINED'
381-
const issue = {
382-
code,
383-
location: context.path,
384-
rule: schemaPath,
385-
}
386-
for (const col of extraCols) {
387-
context.dataset.issues.add({ ...issue, subCode: col })
388-
}
389-
}
390-
}
391-
392358
export function evalIndexColumns(
393359
rule: GenericRule,
394360
context: BIDSContext,

0 commit comments

Comments
 (0)