Skip to content

Commit 6620a0a

Browse files
randycoulmanyannickcr
authored andcommitted
Add deprecated metadata to deprecated rules
1 parent 16a3b22 commit 6620a0a

File tree

5 files changed

+49
-25
lines changed

5 files changed

+49
-25
lines changed

index.js

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
'use strict';
22

3-
var deprecatedRules = {
4-
'no-comment-textnodes': require('./lib/rules/no-comment-textnodes'),
5-
'require-extension': require('./lib/rules/require-extension'),
6-
'wrap-multilines': require('./lib/rules/wrap-multilines')
7-
};
8-
9-
var rules = {
3+
var allRules = {
104
'jsx-uses-react': require('./lib/rules/jsx-uses-react'),
115
'no-multi-comp': require('./lib/rules/no-multi-comp'),
126
'prop-types': require('./lib/rules/prop-types'),
@@ -58,32 +52,45 @@ var rules = {
5852
'no-danger-with-children': require('./lib/rules/no-danger-with-children'),
5953
'style-prop-object': require('./lib/rules/style-prop-object'),
6054
'no-unused-prop-types': require('./lib/rules/no-unused-prop-types'),
61-
'no-children-prop': require('./lib/rules/no-children-prop')
55+
'no-children-prop': require('./lib/rules/no-children-prop'),
56+
'no-comment-textnodes': require('./lib/rules/no-comment-textnodes'),
57+
'require-extension': require('./lib/rules/require-extension'),
58+
'wrap-multilines': require('./lib/rules/wrap-multilines')
6259
};
6360

64-
var ruleNames = Object.keys(rules);
65-
var allRules = {};
66-
for (var i = 0; i < ruleNames.length; i++) {
67-
allRules['react/' + ruleNames[i]] = 2;
68-
}
69-
70-
var exportedRules = {};
71-
for (var key in rules) {
72-
if (!rules.hasOwnProperty(key)) {
73-
continue;
61+
function filterRules(rules, predicate) {
62+
var result = {};
63+
for (var key in rules) {
64+
if (rules.hasOwnProperty(key) && predicate(rules[key])) {
65+
result[key] = rules[key];
66+
}
7467
}
75-
exportedRules[key] = rules[key];
68+
return result;
7669
}
77-
for (var deprecatedKey in deprecatedRules) {
78-
if (!deprecatedRules.hasOwnProperty(deprecatedKey)) {
79-
continue;
70+
71+
function configureAsError(rules) {
72+
var result = {};
73+
for (var key in rules) {
74+
if (!rules.hasOwnProperty(key)) {
75+
continue;
76+
}
77+
result['react/' + key] = 2;
8078
}
81-
exportedRules[deprecatedKey] = deprecatedRules[deprecatedKey];
79+
return result;
8280
}
8381

82+
var activeRules = filterRules(allRules, function(rule) {
83+
return !rule.meta.deprecated;
84+
});
85+
var activeRulesConfig = configureAsError(activeRules);
86+
87+
var deprecatedRules = filterRules(allRules, function(rule) {
88+
return rule.meta.deprecated;
89+
});
90+
8491
module.exports = {
8592
deprecatedRules: deprecatedRules,
86-
rules: exportedRules,
93+
rules: allRules,
8794
configs: {
8895
recommended: {
8996
plugin: [
@@ -120,7 +127,7 @@ module.exports = {
120127
jsx: true
121128
}
122129
},
123-
rules: allRules
130+
rules: activeRulesConfig
124131
}
125132
}
126133
};

lib/rules/no-comment-textnodes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ var isWarnedForDeprecation = false;
1515

1616
module.exports = {
1717
meta: {
18+
deprecated: true,
1819
docs: {
1920
description: 'Comments inside children section of tag should be placed inside braces',
2021
category: 'Possible Errors',

lib/rules/require-extension.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ var PKG_REGEX = /^[^\.]((?!\/).)*$/;
2424

2525
module.exports = {
2626
meta: {
27+
deprecated: true,
2728
docs: {
2829
description: 'Restrict file extensions that may be required',
2930
category: 'Stylistic Issues',

lib/rules/wrap-multilines.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ var isWarnedForDeprecation = false;
1515

1616
module.exports = {
1717
meta: {
18+
deprecated: true,
1819
docs: {
1920
description: 'Prevent missing parentheses around multilines JSX',
2021
category: 'Stylistic Issues',

tests/index.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,20 @@ describe('all rule files should be exported by the plugin', function() {
2323
});
2424
});
2525

26+
describe('deprecated rules', function() {
27+
it('marks all deprecated rules as deprecated', function() {
28+
ruleFiles.forEach(function(ruleName) {
29+
var inDeprecatedRules = Boolean(plugin.deprecatedRules[ruleName]);
30+
var isDeprecated = plugin.rules[ruleName].meta.deprecated;
31+
if (inDeprecatedRules) {
32+
assert(isDeprecated, ruleName + ' metadata should mark it as deprecated');
33+
} else {
34+
assert(!isDeprecated, ruleName + ' metadata should not mark it as deprecated');
35+
}
36+
});
37+
});
38+
});
39+
2640
describe('configurations', function() {
2741
it('should export a \'recommended\' configuration', function() {
2842
assert(plugin.configs.recommended);

0 commit comments

Comments
 (0)