linguist-js
Version:
Analyse the programming languages used in a folder or from raw content, using the same rules that GitHub Linguist does.
33 lines (32 loc) • 1.2 kB
JavaScript
import byAttributes from '../classifiers/byAttributes.js';
import byExtension from '../classifiers/byExtension.js';
import byFilename from '../classifiers/byFilename.js';
import byModeline from '../classifiers/byModeline.js';
import byShebang from '../classifiers/byShebang.js';
function dedupeClassifications(classifications) {
const seen = new Set();
const ordered = [];
for (const classification of classifications) {
if (!seen.has(classification)) {
seen.add(classification);
ordered.push(classification);
}
}
return ordered;
}
export function classifyFiles(files, langData, opts) {
const classifications = {};
for (const file of files) {
// Search each language
// Note: order here is important; the first match will be the one chosen
const candidates = [
...byAttributes(file, langData),
...byModeline(file, langData, opts),
...byFilename(file, langData),
...byShebang(file, langData, opts),
...byExtension(file, langData),
];
classifications[file.path] = dedupeClassifications(candidates);
}
return classifications;
}