build: expand typecheck coverage beyond src

This commit is contained in:
2026-03-06 01:03:51 -08:00
parent 8c2c950564
commit ebe9515486
13 changed files with 156 additions and 44 deletions

View File

@@ -14,7 +14,7 @@ interface CliOptions {
emitDiagnostics: boolean;
mecabCommand?: string;
mecabDictionaryPath?: string;
forceMecabOnly?: boolean;
forceMecabOnly: boolean;
yomitanExtensionPath?: string;
yomitanUserDataPath?: string;
emitColoredLine: boolean;
@@ -678,7 +678,7 @@ function getBandColor(
}
const normalizedBand = Math.ceil((safeRank / topX) * bandedColors.length);
const band = Math.min(bandedColors.length, Math.max(1, normalizedBand));
return bandedColors[band - 1];
return bandedColors[band - 1] ?? colorSingle;
}
function getTokenColor(token: MergedToken, args: CliOptions): string {
@@ -845,7 +845,26 @@ async function main(): Promise<void> {
? simplifyTokenWithVerbose(token, getFrequencyRank)
: simplifyToken(token),
) ?? null;
const diagnostics = {
const diagnostics: {
yomitan: {
available: boolean;
loaded: boolean;
forceMecabOnly: boolean;
note: string | null;
};
mecab: {
command: string;
dictionaryPath: string | null;
available: boolean;
status?: 'ok' | 'no-tokens';
note?: string;
};
tokenizer: {
sourceHint: 'none' | 'yomitan-merged' | 'mecab-merge';
mergedTokenCount: number;
totalTokenCount: number;
};
} = {
yomitan: {
available: Boolean(yomitanState?.available),
loaded: useYomitan,
@@ -864,11 +883,11 @@ async function main(): Promise<void> {
},
};
if (tokens === null) {
diagnostics.mecab['status'] = 'no-tokens';
diagnostics.mecab['note'] =
diagnostics.mecab.status = 'no-tokens';
diagnostics.mecab.note =
'MeCab returned no parseable tokens. This is often caused by a missing/invalid MeCab dictionary path.';
} else {
diagnostics.mecab['status'] = 'ok';
diagnostics.mecab.status = 'ok';
}
const output = {

View File

@@ -348,7 +348,11 @@ function findSelectedCandidateIndexes(
const mergedSignatures = mergedTokens.map(mergedTokenSignature);
const selected: number[] = [];
for (let i = 0; i < candidates.length; i += 1) {
const candidateSignatures = candidates[i].tokens.map(candidateTokenSignature);
const candidate = candidates[i];
if (!candidate) {
continue;
}
const candidateSignatures = candidate.tokens.map(candidateTokenSignature);
if (candidateSignatures.length !== mergedSignatures.length) {
continue;
}
@@ -490,6 +494,9 @@ function renderTextOutput(payload: Record<string, unknown>): void {
} else {
for (let i = 0; i < finalTokens.length; i += 1) {
const token = finalTokens[i];
if (!token) {
continue;
}
process.stdout.write(
` [${i}] ${token.surface} -> ${token.headword} (${token.reading}) [${token.startPos}, ${token.endPos})\n`,
);
@@ -505,6 +512,9 @@ function renderTextOutput(payload: Record<string, unknown>): void {
for (let i = 0; i < candidates.length; i += 1) {
const candidate = candidates[i];
if (!candidate) {
continue;
}
process.stdout.write(
` [${i}] source=${String(candidate.source)} index=${String(candidate.index)} selectedByTokenizer=${String(candidate.selectedByTokenizer)} tokenCount=${String(candidate.tokenCount)}\n`,
);
@@ -514,6 +524,9 @@ function renderTextOutput(payload: Record<string, unknown>): void {
}
for (let j = 0; j < tokens.length; j += 1) {
const token = tokens[j];
if (!token) {
continue;
}
process.stdout.write(
` - ${token.surface} -> ${token.headword} (${token.reading}) [${token.startPos}, ${token.endPos})\n`,
);