diff --git a/bin/markdownlint-cli.js b/bin/markdownlint-cli.js new file mode 100644 index 00000000..aa0d5071 --- /dev/null +++ b/bin/markdownlint-cli.js @@ -0,0 +1,67 @@ +#!/usr/bin/env node + +"use strict"; + +/* eslint no-console:0, no-process-exit:0 */ + +var pkg = require("../package"); +var program = require("commander"); + +function readConfiguration(args) { + var rc = require("rc"); + var config = rc(pkg.name, {}); + if (args.config) { + var fs = require("fs"); + try { + var userConfig = JSON.parse(fs.readFileSync(args.config)); + var extend = require("deep-extend"); + config = extend(config, userConfig); + } catch (e) { + console.warn("Cannot read or parse config file", args.config); + } + } + return config; +} + +function lint(lintFiles, config) { + var markdownlint = require("../" + pkg.main); + var lintOptions = { + "files": lintFiles, + "config": config + }; + return markdownlint.sync(lintOptions); +} + +function printResult(lintResult) { + // var chalk = require("chalk"); + console.log(lintResult.toString()); +} + +function isResultCorrect(lintResult) { + var _ = require("lodash"); + function notEmptyObject(item) { + return !_.isEqual(item, {}); + } + return _.values(lintResult).some(notEmptyObject); +} + +program + .version(pkg.version) + .description(pkg.description) + .usage("[options] ") + .option("-c, --config [configFile]", "Configuration file"); + +program.parse(process.argv); + +var files = program.args; + +if (files && files.length > 0) { + var config = readConfiguration(program); + var lintResult = lint(files, config); + printResult(lintResult); + if (isResultCorrect(lintResult)) { + process.exit(1); + } +} else { + program.help(); +} diff --git a/package.json b/package.json index 5875e5db..dad75877 100644 --- a/package.json +++ b/package.json @@ -11,16 +11,24 @@ "url": "https://github.com/DavidAnson/markdownlint.git" }, "bugs": "https://github.com/DavidAnson/markdownlint/issues", + "bin": { + "markdownlint": "./bin/markdownlint-cli.js" + }, "scripts": { + "start": "node ./bin/markdownlint-cli.js", "test": "nodeunit", "test-cover": "istanbul cover node_modules/nodeunit/bin/nodeunit", "debug": "node debug node_modules/nodeunit/bin/nodeunit", - "lint": "eslint lib test && eslint --env browser --global markdownit --global markdownlint --rule \"no-unused-vars: 0, no-extend-native: 0, max-statements: 0, no-console: 0\" demo && eslint --rule \"no-console: 0, no-shadow: 0\" example", + "lint": "eslint lib test bin && eslint --env browser --global markdownit --global markdownlint --rule \"no-unused-vars: 0, no-extend-native: 0, max-statements: 0, no-console: 0\" demo && eslint --rule \"no-console: 0, no-shadow: 0\" example", "build-demo": "cpy node_modules/markdown-it/dist/markdown-it.min.js demo && cd demo && rimraf markdownlint-browser.* && cpy file-header.js . --rename=markdownlint-browser.js && browserify browser-polyfills.js ../lib/markdownlint.js --standalone markdownlint >> markdownlint-browser.js && uglifyjs markdownlint-browser.js --compress --mangle --comments --output markdownlint-browser.min.js", "example": "npm install through2 && cd example && node standalone.js && grunt markdownlint --force && gulp markdownlint" }, "dependencies": { - "markdown-it": "^5.1.0" + "commander": "~2.9.0", + "deep-extend": "~0.4.1", + "lodash": "~3.10.1", + "markdown-it": "^5.1.0", + "rc": "~1.1.6" }, "devDependencies": { "browserify": "^13.0.0",