Skip to content

Commit d272ff2

Browse files
committed
Add support for rules as any trough ware
1 parent 31f82b2 commit d272ff2

File tree

2 files changed

+35
-52
lines changed

2 files changed

+35
-52
lines changed

lib/index.js

Lines changed: 32 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ var decamelize = require('decamelize');
2525
var sort = require('vfile-sort');
2626
var control = require('remark-message-control');
2727
var loadPlugin = require('load-plugin');
28+
var trough = require('trough');
29+
var wrapped = require('wrapped');
2830
var internals = require('./rules');
2931

3032
/**
@@ -37,64 +39,32 @@ var internals = require('./rules');
3739
* @param {string} id - Identifier.
3840
* @param {Function} rule - Rule
3941
* @param {*} options - Options for respective rule.
40-
* @return {Function} - See `attach` below.
42+
* @return {Function} - Trough ware.
4143
*/
42-
function attachFactory(id, rule, options) {
43-
/**
44-
* Attach the rule to a remark instance, unless `false`
45-
* is passed as an option.
46-
*
47-
* @return {Function?} - See `plugin` below.
48-
*/
49-
function attach() {
50-
/**
51-
* Attach the rule to a remark instance, unless `false`
52-
* is passed as an option.
53-
*
54-
* @param {Node} ast - Root node.
55-
* @param {File} [file] - Virtual file.
56-
* @param {Function} next - Signal end.
57-
*/
58-
function plugin(ast, file, next) {
59-
var scope = file.namespace('remark-lint');
60-
61-
/*
62-
* Track new messages per file.
63-
*/
64-
65-
if (scope.index === undefined || scope.index === null) {
66-
scope.index = file.messages.length;
67-
}
44+
function ruleFactory(id, rule, options) {
45+
var fn = wrapped(rule);
6846

69-
/**
70-
* Add `ruleId` to each new message.
71-
*
72-
* @param {Error?} err - Optional failure.
73-
*/
74-
function done(err) {
75-
var messages = file.messages;
47+
return function (ast, file, next) {
48+
var scope = file.namespace('remark-lint');
7649

77-
while (scope.index < messages.length) {
78-
messages[scope.index].ruleId = id;
79-
messages[scope.index].source = SOURCE;
80-
81-
scope.index++;
82-
}
50+
/* Track new messages per file. */
51+
if (scope.index === undefined || scope.index === null) {
52+
scope.index = file.messages.length;
53+
}
8354

84-
next(err);
85-
}
55+
fn(ast, file, options, function (err) {
56+
var messages = file.messages;
8657

87-
/*
88-
* Invoke `rule`, with `options`
89-
*/
58+
while (scope.index < messages.length) {
59+
messages[scope.index].ruleId = id;
60+
messages[scope.index].source = SOURCE;
9061

91-
rule(ast, file, options, done);
92-
}
62+
scope.index++;
63+
}
9364

94-
return plugin;
65+
next(err);
66+
});
9567
}
96-
97-
return attach;
9868
}
9969

10070
/**
@@ -180,6 +150,7 @@ function lint(remark, options) {
180150
var enable = [];
181151
var disable = [];
182152
var known = [];
153+
var pipeline = trough();
183154
var setting;
184155
var id;
185156

@@ -206,9 +177,19 @@ function lint(remark, options) {
206177
}
207178
}
208179

209-
remark.use(attachFactory(id, rules[id], setting));
180+
pipeline.use(ruleFactory(id, rules[id], setting));
210181
}
211182

183+
/*
184+
* Run all rules.
185+
*/
186+
187+
remark.use(function () {
188+
return function (node, file, next) {
189+
pipeline.run(node, file, next);
190+
};
191+
});
192+
212193
/*
213194
* Allow comments to toggle messages.
214195
*/

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@
2626
"npm-prefix": "^1.1.1",
2727
"plur": "^2.0.0",
2828
"remark-message-control": "^2.0.0",
29+
"trough": "^1.0.0",
2930
"unist-util-position": "^2.0.1",
3031
"unist-util-visit": "^1.0.0",
3132
"vfile-location": "^2.0.0",
32-
"vfile-sort": "^1.0.0"
33+
"vfile-sort": "^1.0.0",
34+
"wrapped": "^1.0.1"
3335
},
3436
"files": [
3537
"index.js",

0 commit comments

Comments
 (0)