feat(parser): handle multi-file solutions
This commit is contained in:
committed by
Mrugesh Mohapatra
parent
a959d462e9
commit
063145fe90
@ -2,11 +2,15 @@ const visit = require('unist-util-visit');
|
||||
const { selectAll } = require('hast-util-select');
|
||||
|
||||
const { sectionFilter } = require('./utils');
|
||||
const { createCodeGetter } = require('./challengeSeed-to-data');
|
||||
|
||||
const solutionRE = /(.+)-solution$/;
|
||||
|
||||
function createPlugin() {
|
||||
return function transformer(tree, file) {
|
||||
function visitor(node) {
|
||||
if (sectionFilter(node, 'solution')) {
|
||||
// fallback for single-file challenges
|
||||
const solutions = selectAll('code', node).map(
|
||||
element => element.children[0].value
|
||||
);
|
||||
@ -14,6 +18,21 @@ function createPlugin() {
|
||||
...file.data,
|
||||
solutions
|
||||
};
|
||||
const solutionFiles = {};
|
||||
const codeDivs = selectAll('div', node);
|
||||
const solutionContainers = codeDivs.filter(({ properties: { id } }) =>
|
||||
solutionRE.test(id)
|
||||
);
|
||||
solutionContainers.forEach(
|
||||
createCodeGetter('contents', solutionRE, solutionFiles)
|
||||
);
|
||||
|
||||
file.data = {
|
||||
...file.data,
|
||||
solutionFiles: Object.keys(solutionFiles).map(
|
||||
lang => solutionFiles[lang]
|
||||
)
|
||||
};
|
||||
}
|
||||
}
|
||||
visit(tree, 'element', visitor);
|
||||
|
Reference in New Issue
Block a user