Files
2026-10-31 20:05:39 +08:00

20 lines
970 B
TypeScript

/** Verifies that every class in src has a preceding JSDoc block. */
import { readdirSync, readFileSync } from 'node:fs'
import { dirname, join } from 'node:path'
import { fileURLToPath } from 'node:url'
import { expect, it } from 'vitest'
const SRC = join(dirname(fileURLToPath(import.meta.url)), '..', 'src')
it('gives every class declaration in src a JSDoc block right before it', () => {
const undocumented = readdirSync(SRC, { recursive: true, encoding: 'utf8' }).filter(path => /\.tsx?$/.test(path)).flatMap(path => {
const text = readFileSync(join(SRC, path), 'utf8')
return [...text.matchAll(/^[ \t]*(?:export\s+)?(?:default\s+)?(?:abstract\s+)?class\s+(\w+)/gm)].flatMap(match => {
const before = text.slice(0, match.index).trimEnd()
const start = before.lastIndexOf('/**')
return start >= 0 && before.indexOf('*/', start) === before.length - 2 ? [] : [`src/${path}: ${match[1]}`]
})
})
expect(undocumented).toEqual([])
})