refactor: collect-then-print to eliminate confusing !VERBOSE pattern
Replace the split header-printing logic (print early in verbose mode, print late in non-verbose mode with a !VERBOSE guard) with a simpler collect-then-print approach. Refs are now classified into ok[] and broken[] arrays first, then printed in a single location with one straightforward if/else if decision. Addresses alexeyv's review feedback about the counterintuitive "if not verbose, log" pattern.
This commit is contained in:
parent
c7cdaa77cb
commit
3f5d059c42
|
|
@ -425,14 +425,11 @@ if (require.main === module) {
|
||||||
refs = extractMarkdownRefs(filePath, content);
|
refs = extractMarkdownRefs(filePath, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resolve and check
|
// Resolve and classify all refs before printing anything.
|
||||||
|
// This avoids the confusing pattern of printing headers at two different
|
||||||
|
// times depending on verbosity — collect first, then print once.
|
||||||
const broken = [];
|
const broken = [];
|
||||||
|
const ok = [];
|
||||||
// Verbose mode: print file header for every file with refs (so [OK] lines have context).
|
|
||||||
// Non-verbose mode prints the header later, only when issues are found (see below).
|
|
||||||
if (VERBOSE && refs.length > 0) {
|
|
||||||
console.log(`\n${relativePath}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const ref of refs) {
|
for (const ref of refs) {
|
||||||
totalRefs++;
|
totalRefs++;
|
||||||
|
|
@ -444,12 +441,10 @@ if (require.main === module) {
|
||||||
// Flag it if nothing exists at all — likely a real broken reference.
|
// Flag it if nothing exists at all — likely a real broken reference.
|
||||||
const hasExt = path.extname(resolved) !== '';
|
const hasExt = path.extname(resolved) !== '';
|
||||||
if (!hasExt) {
|
if (!hasExt) {
|
||||||
if (!fs.existsSync(resolved)) {
|
if (fs.existsSync(resolved)) {
|
||||||
if (VERBOSE) {
|
ok.push({ ref, tag: 'OK-DIR' });
|
||||||
console.log(` [SKIP] ${ref.raw} (no extension, target not found)`);
|
} else {
|
||||||
}
|
ok.push({ ref, tag: 'SKIP', note: 'no extension, target not found' });
|
||||||
} else if (VERBOSE) {
|
|
||||||
console.log(` [OK-DIR] ${ref.raw}`);
|
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -458,8 +453,8 @@ if (require.main === module) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VERBOSE && resolved) {
|
if (resolved) {
|
||||||
console.log(` [OK] ${ref.raw}`);
|
ok.push({ ref, tag: 'OK' });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -467,13 +462,18 @@ if (require.main === module) {
|
||||||
const leaks = checkAbsolutePathLeaks(filePath, content);
|
const leaks = checkAbsolutePathLeaks(filePath, content);
|
||||||
totalLeaks += leaks.length;
|
totalLeaks += leaks.length;
|
||||||
|
|
||||||
// Report issues for this file
|
// Print results — file header appears once, in one place
|
||||||
if (broken.length > 0 || leaks.length > 0) {
|
const hasFileIssues = broken.length > 0 || leaks.length > 0;
|
||||||
|
|
||||||
|
if (hasFileIssues) {
|
||||||
filesWithIssues++;
|
filesWithIssues++;
|
||||||
// Non-verbose: print file header only when reporting issues.
|
|
||||||
// Verbose mode already printed it above (for every file with refs).
|
|
||||||
if (!VERBOSE) {
|
|
||||||
console.log(`\n${relativePath}`);
|
console.log(`\n${relativePath}`);
|
||||||
|
|
||||||
|
if (VERBOSE) {
|
||||||
|
for (const { ref, tag, note } of ok) {
|
||||||
|
const suffix = note ? ` (${note})` : '';
|
||||||
|
console.log(` [${tag}] ${ref.raw}${suffix}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const { ref, resolved } of broken) {
|
for (const { ref, resolved } of broken) {
|
||||||
|
|
@ -494,6 +494,12 @@ if (require.main === module) {
|
||||||
console.log(`::warning file=${relativePath},line=${leak.line}::${escapeAnnotation(`Absolute path leak: ${leak.content}`)}`);
|
console.log(`::warning file=${relativePath},line=${leak.line}::${escapeAnnotation(`Absolute path leak: ${leak.content}`)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (VERBOSE && refs.length > 0) {
|
||||||
|
console.log(`\n${relativePath}`);
|
||||||
|
for (const { ref, tag, note } of ok) {
|
||||||
|
const suffix = note ? ` (${note})` : '';
|
||||||
|
console.log(` [${tag}] ${ref.raw}${suffix}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue