UNPKG

linguist-js

Version:

Analyse the programming languages used in a folder or from raw content, using the same rules that GitHub Linguist does.

23 lines (22 loc) 1.06 kB
const modelineRegex = /-\*-|(?:syntax|filetype|ft)\s*=/; const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); export default function byModeline(file, langData, opts) { if (!opts.checkModeline || opts.quick) return []; const firstLine = file.firstLine; // Check modeline declaration if (!firstLine || !modelineRegex.test(firstLine)) return []; const modelineText = firstLine.toLowerCase().split(modelineRegex)[1] ?? ''; // Add identified language(s) return Object.entries(langData).flatMap(([lang, data]) => { const safeLang = escapeRegExp(lang.toLowerCase()); const matchesLang = new RegExp(`\\b${safeLang}(?![\\w#+*]|-\\*-)`).test(modelineText); const aliases = data.aliases ?? []; const matchesAlias = aliases.some((alias) => { const safeAlias = escapeRegExp(alias.toLowerCase()); return new RegExp(`\\b${safeAlias}(?![\\w#+*]|-\\*-)`).test(modelineText); }); return matchesLang || matchesAlias ? [lang] : []; }); }