Simplify documentation linter

This patch simplifies documentation linter, basically
addressing the comments from #47.

References #14.
This commit is contained in:
Andrey Lushnikov 2017-07-07 11:13:01 -07:00
parent 34f043d821
commit a69bed30d9
2 changed files with 29 additions and 33 deletions

View File

@ -3,29 +3,39 @@ const commonmark = require('commonmark');
const Browser = require('../../lib/Browser');
class MDOutline {
constructor(text) {
this.classes = [];
this.html = MDOutline.compile(text);
}
static compile(text) {
/**
* @return {!MDOutline}
*/
static async create(text) {
// Render markdown as HTML.
const reader = new commonmark.Parser();
const parsed = reader.parse(text);
const writer = new commonmark.HtmlRenderer();
const html = writer.render(parsed);
return html;
}
async collectHeadings() {
// Extract headings.
const browser = new Browser({args: ['--no-sandbox']});
const page = await browser.newPage();
await page.setContent(this.html);
this.headings = await page.evaluate(getTOCHeadings);
await page.setContent(html);
const headings = await page.evaluate(() => {
let headings = {};
let methods = [];
for (let header of document.body.querySelectorAll('h3,h4')) {
if (header.matches('h3')) {
methods = [];
headings[header.textContent] = methods;
} else {
methods.push(header.textContent);
}
}
return headings;
});
await browser.close();
return new MDOutline(headings);
}
buildClasses() {
const headings = this.headings;
constructor(headings) {
this.classes = [];
const classHeading = /^class: (\w+)$/;
const constructorRegex = /^new (\w+)\((.*)\)$/;
const methodRegex = /^(\w+)\.(\w+)\((.*)\)$/;
@ -68,18 +78,4 @@ class MDOutline {
}
}
function getTOCHeadings(){
const headings = {};
document.querySelectorAll('h3').forEach((domainEl, i) => {
const methods = [];
let currElem = domainEl;
while ((currElem = currElem.nextElementSibling) && !currElem.matches('h3')) {
if (currElem.matches('h4'))
methods.push(currElem.textContent);
}
headings[domainEl.textContent] = methods;
});
return headings;
}
module.exports = MDOutline;

View File

@ -9,11 +9,12 @@ const PROJECT_DIR = path.join(__dirname, '..', '..');
const apiMdText = fs.readFileSync(path.join(PROJECT_DIR, 'docs', 'api.md'), 'utf8');
let EXCLUDE_CLASSES = new Set([
'Helper',
'Connection',
'FrameManager',
'Helper',
'Navigator',
'NetworkManager',
'Connection'
'ProxyStream'
]);
let EXCLUDE_METHODS = new Set([
@ -55,16 +56,15 @@ let mdClassesArray;
beforeAll(SX(async function() {
// Build up documentation from MD sources.
let mdOutline = new MDOutline(apiMdText);
await mdOutline.collectHeadings();
mdOutline.buildClasses();
let mdOutline = await MDOutline.create(apiMdText);
mdClassesArray = mdOutline.classes;
}));
describe('table of contents', function() {
it('should match markdown-toc\'s output', () => {
const newApiMdText = markdownToc.insert(apiMdText);
expect(apiMdText === newApiMdText).toBe(true, 'markdown TOC is outdated, run `yarn generate-toc`');
if (apiMdText !== newApiMdText)
fail('markdown TOC is outdated, run `yarn generate-toc`');
});
});