typecheck only changed files in plugin test

This commit is contained in:
Oleksii Bulenok
2026-09-02 13:24:59 +02:00
parent e8ad1e91ce
commit 3b5abeda18
@@ -595,15 +595,25 @@ describe('app callsites: transformed sources typecheck', () => {
return out return out
} }
/*
* Files whose shadow output is byte-identical to the baseline output
* cannot produce a diagnostics diff, so only changed files are overlaid,
* typechecked, and compared - a bit under half of the consumers, which
* roughly halves the cost of the two programs below.
*/
const shadowOverlays = new Map() const shadowOverlays = new Map()
const baselineOverlays = new Map() const baselineOverlays = new Map()
const changed = []
let rewritten = 0 let rewritten = 0
for (const file of consumers) { for (const file of consumers) {
const code = fs.readFileSync(file, 'utf8') const code = fs.readFileSync(file, 'utf8')
const out = transformConsumer(code, file, true) const shadow = transformConsumer(code, file, true)
shadowOverlays.set(file, out) const baseline = transformConsumer(code, file, false)
baselineOverlays.set(file, transformConsumer(code, file, false)) if (shadow === baseline) continue
if (out.includes('_lex_')) rewritten++ changed.push(file)
shadowOverlays.set(file, shadow)
baselineOverlays.set(file, baseline)
if (shadow.includes('_lex_')) rewritten++
} }
expect(rewritten).toBeGreaterThan(100) expect(rewritten).toBeGreaterThan(100)
@@ -619,7 +629,7 @@ describe('app callsites: transformed sources typecheck', () => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const worker = new Worker( const worker = new Worker(
path.join(__dirname, '..', 'lexiconTypecheckWorker.js'), path.join(__dirname, '..', 'lexiconTypecheckWorker.js'),
{workerData: {consumers, overlays, options}}, {workerData: {consumers: changed, overlays, options}},
) )
worker.once('message', byFile => worker.once('message', byFile =>
resolve(new Map(Object.entries(byFile))), resolve(new Map(Object.entries(byFile))),
@@ -640,7 +650,7 @@ describe('app callsites: transformed sources typecheck', () => {
const diagKey = d => `TS${d.code}: ${d.message}` const diagKey = d => `TS${d.code}: ${d.message}`
const regressions = [] const regressions = []
for (const file of consumers) { for (const file of changed) {
const known = new Set(baseline.get(file).map(diagKey)) const known = new Set(baseline.get(file).map(diagKey))
for (const d of shadow.get(file)) { for (const d of shadow.get(file)) {
if (!known.has(diagKey(d))) regressions.push(d) if (!known.has(diagKey(d))) regressions.push(d)