mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-09-22 05:40:48 +02:00
Add support for shareable/extendable configuration via "extends" and helper functions (fixes #33).
This commit is contained in:
parent
d826833a82
commit
7528295cae
11 changed files with 385 additions and 25 deletions
|
@ -1,6 +1,7 @@
|
|||
"use strict";
|
||||
|
||||
var fs = require("fs");
|
||||
var path = require("path");
|
||||
var md = require("markdown-it")({ "html": true });
|
||||
var rules = require("./rules");
|
||||
var shared = require("./shared");
|
||||
|
@ -329,7 +330,7 @@ function markdownlintSynchronousCallback() {
|
|||
}
|
||||
|
||||
/**
|
||||
* Lint specified Markdown files according to configurable rules.
|
||||
* Lint specified Markdown files.
|
||||
*
|
||||
* @param {Object} options Configuration options.
|
||||
* @param {Function} callback Callback (err, result) function.
|
||||
|
@ -387,7 +388,7 @@ function markdownlint(options, callback) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Lint specified Markdown files according to configurable rules.
|
||||
* Lint specified Markdown files synchronously.
|
||||
*
|
||||
* @param {Object} options Configuration options.
|
||||
* @returns {Object} Result object.
|
||||
|
@ -396,6 +397,63 @@ function markdownlintSync(options) {
|
|||
return markdownlint(options, markdownlintSynchronousCallback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Read specified configuration file.
|
||||
*
|
||||
* @param {String} file Configuration file name/path.
|
||||
* @param {Function} callback Callback (err, result) function.
|
||||
* @returns {void}
|
||||
*/
|
||||
function readConfig(file, callback) {
|
||||
// Read file
|
||||
fs.readFile(file, shared.utf8Encoding, function handleFile(err, content) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
// Parse file
|
||||
var config = null;
|
||||
try {
|
||||
config = JSON.parse(content);
|
||||
} catch (ex) {
|
||||
return callback(ex);
|
||||
}
|
||||
if (config.extends) {
|
||||
// Extend configuration
|
||||
var extendsFile = path.resolve(path.dirname(file), config.extends);
|
||||
readConfig(extendsFile, function handleConfig(errr, extendsConfig) {
|
||||
if (errr) {
|
||||
return callback(errr);
|
||||
}
|
||||
delete config.extends;
|
||||
callback(null, shared.assign(extendsConfig, config));
|
||||
});
|
||||
} else {
|
||||
callback(null, config);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Read specified configuration file synchronously.
|
||||
*
|
||||
* @param {String} file Configuration file name/path.
|
||||
* @returns {Object} Configuration object.
|
||||
*/
|
||||
function readConfigSync(file) {
|
||||
// Parse file
|
||||
var config = JSON.parse(fs.readFileSync(file, shared.utf8Encoding));
|
||||
if (config.extends) {
|
||||
// Extend configuration
|
||||
config = shared.assign(
|
||||
readConfigSync(path.resolve(path.dirname(file), config.extends)),
|
||||
config);
|
||||
delete config.extends;
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
// Export a/synchronous APIs
|
||||
module.exports = markdownlint;
|
||||
module.exports.sync = markdownlintSync;
|
||||
module.exports.readConfig = readConfig;
|
||||
module.exports.readConfigSync = readConfigSync;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue