diff --git a/source/plugins/code/index.mjs b/source/plugins/code/index.mjs index 903d5f83..bfb00e8c 100644 --- a/source/plugins/code/index.mjs +++ b/source/plugins/code/index.mjs @@ -15,7 +15,7 @@ export default async function({login, q, imports, data, rest, account}, {enabled } //Load inputs - let {load, lines, visibility, skipped} = imports.metadata.plugins.code.inputs({data, q, account}) + let {load, lines, visibility, languages, skipped} = imports.metadata.plugins.code.inputs({data, q, account}) skipped.push(...data.shared["repositories.skipped"]) const pages = Math.ceil(load / 100) @@ -43,9 +43,12 @@ export default async function({login, q, imports, data, rest, account}, {enabled console.debug(`metrics/compute/${login}/plugins > code > ${events.length} events loaded`) //Search for a random snippet - const files = events + let files = events .flatMap(({sha, commit:{message, url}, files}) => files.map(({filename, status, additions, deletions, patch}) => ({sha, message, filename, status, additions, deletions, patch, repo:url.match(/repos[/](?[\s\S]+)[/]git[/]commits/)?.groups?.repo}))) .filter(({patch}) => (patch ? (patch.match(/\n/mg)?.length ?? 1) : Infinity) < lines) + for (const file of files) + file.language = await imports.language({...file, prefix:login}).catch(() => "unknown") + files = files.filter(({language}) => (!languages.length)||(languages.includes(language.toLocaleLowerCase()))) const snippet = files[Math.floor(Math.random()*files.length)] ?? null if (snippet) { //Trim common indent from content and change line feed diff --git a/source/plugins/code/metadata.yml b/source/plugins/code/metadata.yml index a7cca4bb..7c81427f 100644 --- a/source/plugins/code/metadata.yml +++ b/source/plugins/code/metadata.yml @@ -44,4 +44,13 @@ inputs: type: array format: comma-separated default: "" - example: my-repo-1, my-repo-2, owner/repo-3 ... \ No newline at end of file + example: my-repo-1, my-repo-2, owner/repo-3 ... + + # Restrict code snippet languages + # These are guessed through linguist + plugin_code_languages: + description: Restrict code snippet languages + type: array + format: comma-separated + default: "" + example: javascript, typescript, .... \ No newline at end of file