Diffs: fall back on invalid language hints (#57902)

Merged via squash.

Prepared head SHA: 567ca3a56f
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
This commit is contained in:
Gustavo Madeira Santana
2026-03-30 16:30:05 -04:00
committed by GitHub
parent 66777e140e
commit 9a94578d47
8 changed files with 1127 additions and 442 deletions

View File

@@ -0,0 +1,39 @@
import { resolveLanguage } from "@pierre/diffs";
import type { SupportedLanguages } from "@pierre/diffs";
const PASSTHROUGH_LANGUAGE_HINTS = new Set<SupportedLanguages>(["ansi", "text"]);
export async function normalizeSupportedLanguageHint(
value?: string,
): Promise<SupportedLanguages | undefined> {
const normalized = value?.trim();
if (!normalized) {
return undefined;
}
if (PASSTHROUGH_LANGUAGE_HINTS.has(normalized as SupportedLanguages)) {
return normalized as SupportedLanguages;
}
try {
await resolveLanguage(normalized as Exclude<SupportedLanguages, "text" | "ansi">);
return normalized as SupportedLanguages;
} catch {
return undefined;
}
}
export async function filterSupportedLanguageHints(
values: Iterable<string>,
): Promise<SupportedLanguages[]> {
const supported = new Set<SupportedLanguages>();
for (const value of values) {
const normalized = await normalizeSupportedLanguageHint(value);
if (!normalized) {
continue;
}
supported.add(normalized);
}
if (supported.size === 0) {
supported.add("text");
}
return [...supported];
}