UNPKG

verb

Version:

A project without documentation is like a project that doesn't exist. Verb solves this by making it dead simple to generate docs, using simple markdown templates, with zero configuration required.

77 lines (61 loc) 1.98 kB
/** * Verb <https://github.com/assemble/verb> * Generate markdown documentation for GitHub projects. * * Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors. * Licensed under the MIT license. */ const file = require('fs-utils'); const path = require('path'); const relative = require('relative'); const scrawl = require('scrawl'); const stripBanner = require('strip-banner'); const _ = require('lodash'); const tmpl = 'test/fixtures/comment.tmpl.md'; function lineCount(content) { if (_.isEmpty(content)) { return 0; } // Normalize newlines content = file.normalizeNL(content); // Split on each newline return content.split('\n').length; } module.exports = function(verb) { var verbOpts = verb.options; var condense = verb.utils.condense; var format = verb.utils.md.format; var tags = {}; tags.comments = function(src, options) { var opts = _.extend({}, verbOpts, options); var page = {}; file.expand(src).map(function(filepath) { filepath = path.resolve(filepath); var name = file.filename(filepath); var dest = opts.dest || verb.cwd(); var relpath = relative(dest, filepath); // Read file var content = file.readFileSync(filepath, opts); var origLen = lineCount(content); // Strip banners so they don't end up in docs content = stripBanner(content); var stripLen = lineCount(content); var offset = origLen - stripLen; page[name] = {}; page[name].name = name; page[name].path = file.normalizeSlash(relpath); page[name].comments = []; var comments = scrawl.parse(content); page[name].comments.push(comments.map(function (comment) { comment.line = comment.line + offset; return comment; })); }); if (opts.debug) { file.writeJSONSync('tmp/matches.json', page); } var result = verb.read(tmpl, {files: page}); return format(condense(result)); }; return tags; };