markdown-code-example-inserter
Version:
Syncs code examples with markdown documentation.
41 lines (32 loc) • 1.29 kB
text/typescript
import {getObjectTypedKeys} from '@augment-vir/common';
import {extname} from 'node:path';
import {LanguageEntry, languageMap, LanguageName} from './language-map.js';
// extensions that will never match any other language name
const requiredLanguageExtension: Partial<Record<LanguageName, string>> = {
XML: '.xml',
};
export function getFileLanguageName(fileName: string): LanguageName | undefined {
const extension = extname(fileName);
const matchedLanguageNames = getObjectTypedKeys(languageMap).filter((languageName) => {
const languageData: LanguageEntry = languageMap[languageName];
if (!('extensions' in languageData)) {
return false;
}
const requiredExtensionForLanguage = requiredLanguageExtension[languageName];
if (
languageName in requiredLanguageExtension &&
requiredExtensionForLanguage !== extension
) {
return false;
}
return languageData.extensions.includes(extension);
});
if (matchedLanguageNames.length > 1) {
console.warn(
`Multiple languages for code block were matched for '${fileName}': ${matchedLanguageNames.join(
', ',
)}`,
);
}
return matchedLanguageNames[0];
}