visit(ast, function (node) { var children = node.children; var head = children && children[0]; var tail = children && children[children.length - 1]; if (position.generated(node)) { return; } if (head && !position.generated(head)) { /* * Compare parent and first child. */ compare(position.start(node), position.start(head), 0); /* * Compare between each child. */ children.forEach(function (child, index) { var prev = children[index - 1]; var max = MAX; if ( !prev || position.generated(prev) || position.generated(child) ) { return; } if ( ( prev.type === 'list' && child.type === 'list' ) || ( child.type === 'code' && prev.type === 'list' && !child.lang ) ) { max++; } compare(position.end(prev), position.start(child), max); }); /* * Compare parent and last child. */ if (tail !== head && !position.generated(tail)) { compare(position.end(node), position.end(tail), 1); } } });
children.forEach(function (child, index) { var prev = children[index - 1]; var max = MAX; if ( !prev || position.generated(prev) || position.generated(child) ) { return; } if ( ( prev.type === 'list' && child.type === 'list' ) || ( child.type === 'code' && prev.type === 'list' && !child.lang ) ) { max++; } compare(position.end(prev), position.start(child), max); });
visit(ast, 'emphasis', function (node) { var marker = file.toString().charAt(position.start(node).offset); if (position.generated(node)) { return; } if (preferred) { if (marker !== preferred) { file.warn('Emphasis should use `' + preferred + '` as a marker', node); } } else { preferred = marker; } });
visit(ast, 'break', function (node) { var start = position.start(node).offset; var end = position.end(node).offset; var value; if (position.generated(node)) { return; } value = contents.slice(start, end).split('\n', 1)[0]; if (value.length > 2) { file.warn('Use two spaces for hard line breaks', node); } });
visit(ast, function (node, index, parent) { var next = parent && parent.children[index + 1]; if (position.generated(node)) { return; } if ( next && isApplicable(node) && isApplicable(next) && position.start(next).line === position.end(node).line + 1 ) { file.warn('Missing blank line before block node', next); } });
visit(ast, 'heading', function (node) { var pos; if (position.generated(node)) { return; } if (node.depth === style) { if (topLevelheading) { pos = position.start(node); file.warn('Don’t use multiple top level headings (' + pos.line + ':' + pos.column + ')', node); } topLevelheading = node; } });
/** * Check `node`. * * @param {Node} node - Node. */ function validate(node) { var duplicate = map[node.identifier]; var pos; if (position.generated(node)) { return; } if (duplicate && duplicate.type) { pos = position.start(duplicate); file.warn( 'Do not use definitions with the same identifier (' + pos.line + ':' + pos.column + ')', node ); } map[node.identifier] = node; }