Skip to content

Commit 29965a3

Browse files
zceiwooorm
authored andcommitted
Adds support for automatic doc generation for file-less rules
1 parent 77b8bfd commit 29965a3

File tree

2 files changed

+43
-14
lines changed

2 files changed

+43
-14
lines changed

lib/rules/meta.js

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module.exports = {
2+
'reset': {
3+
description: 'By default, all rules are turned on unless explicitly set to `false`.\nWhen `reset: true`, the opposite is true: all rules are turned off,\nunless when given a non-nully and non-false value.',
4+
example: 'reset: true\n<!-- Now you need to explicitly activate rules -->\nfinal-newline: true\n'
5+
}
6+
};

script/build-rule-documentation.js

+37-14
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ var dox = require('dox');
1919
var mdast = require('mdast');
2020
var toc = require('mdast-toc');
2121
var rules = require('../lib/rules');
22+
var metaRules = require('../lib/rules/meta');
2223

2324
function find(tags, key) {
2425
var value = null;
@@ -135,21 +136,43 @@ children.push({
135136
* Add rules.
136137
*/
137138

138-
Object.keys(rules).sort().forEach(function (ruleId) {
139-
var filePath = path.join('lib', 'rules', ruleId + '.js');
140-
var code = fs.readFileSync(filePath, 'utf-8');
141-
var tags = dox.parseComments(code)[0].tags;
142-
var description = find(tags, 'fileoverview');
143-
var example = find(tags, 'example');
144-
145-
if (!description) {
146-
throw new Error(ruleId + ' is missing a `@fileoverview`');
147-
} else {
148-
description = description.string;
149-
}
139+
Object.keys(rules)
140+
.concat(Object.keys(metaRules))
141+
.sort()
142+
.forEach(function (ruleId) {
143+
var description;
144+
var filePath;
145+
var example;
146+
var code;
147+
var rule;
148+
var tags;
149+
150+
try {
151+
filePath = path.join('lib', 'rules', ruleId + '.js');
152+
code = fs.readFileSync(filePath, 'utf-8');
153+
tags = dox.parseComments(code)[0].tags;
154+
description = find(tags, 'fileoverview');
155+
example = find(tags, 'example');
156+
157+
if (!description) {
158+
throw new Error(ruleId + ' is missing a `@fileoverview`');
159+
} else {
160+
description = description.string;
161+
}
150162

151-
if (example) {
152-
example = example.string;
163+
if (example) {
164+
example = example.string;
165+
}
166+
167+
} catch (e) {
168+
// Handle file-less rules
169+
if (e.code === 'ENOENT') {
170+
rule = metaRules[ruleId];
171+
description = rule.description;
172+
example = rule.example;
173+
} else {
174+
throw e;
175+
}
153176
}
154177

155178
children.push({

0 commit comments

Comments
 (0)