Skip to content

Commit 0aedb2b

Browse files
ESLint React plugin not required to install and could be omited.
All React rules will be added to Ezhome ESLint config only if React plugin installed. So config can be used for project without React dependency as well.
1 parent 9e2c199 commit 0aedb2b

7 files changed

Lines changed: 59 additions & 17 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
0.6.0 (2015-12-17)
2+
==================
3+
4+
* Enable `eslint-plugin-react` rules only if plugin installed and available
5+
16
0.5.0 (2015-12-02)
27
==================
38

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@ This package provides Ezhome's `.eslintrc` as an extensible shared config.
1515
npm install --save-dev babel-eslint eslint eslint-config-ezhome eslint-plugin-react
1616
```
1717

18+
If your project doesn't use React, you don't need to install
19+
`eslint-plugin-react` dev dep.
20+
1821
2. Add `"extends": "ezhome"` to your `.eslintrc`
1922

2023
### Note on preferred ESLint versions
2124

22-
As of `0.5.0` release, `eslint-config-ezhome` prefers:
25+
As of `0.6.0` release, `eslint-config-ezhome` prefers:
2326

2427
* `eslint@1.10.3`
2528
* `babel-eslint@4.1.6`

alternate/index.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
var config = require("../");
2+
var utils = require("../base/utils.js");
23

34
config.rules["comma-dangle"] = [2, "always-multiline"];
45
config.rules["indent"] = [2, 2, {"SwitchCase": 1}];
56
config.rules["max-len"] = [2, 79, 4];
6-
config.rules["react/jsx-handler-names"] = 2;
7-
config.rules["react/jsx-indent-props"] = [2, 2];
7+
8+
if (utils.reactPluginInstalled) {
9+
config.rules["react/jsx-handler-names"] = 2;
10+
config.rules["react/jsx-indent-props"] = [2, 2];
11+
}
812

913
module.exports = config;

base/index.js

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
module.exports = {
1+
var objectAssign = require("object-assign");
2+
var utils = require("./utils");
3+
4+
var config = {
25
extends: "eslint:recommended",
36
parser: "babel-eslint",
47

@@ -41,6 +44,18 @@ module.exports = {
4144
"object-curly-spacing": [2, "never"],
4245
"quotes": [2, "double", "avoid-escape"],
4346
"radix": 2,
47+
"semi": [2, "always"],
48+
"space-after-keywords": 2,
49+
"space-before-blocks": 2,
50+
"space-before-function-paren": [2, "never"],
51+
"space-in-parens": [2, "never"],
52+
"spaced-comment": [2, "always"],
53+
"wrap-regex": 2
54+
}
55+
};
56+
57+
if (utils.reactPluginInstalled) {
58+
config.rules = objectAssign(config.rules, {
4459
"react/display-name": 1,
4560
"react/jsx-closing-bracket-location": [2, "after-props"],
4661
"react/jsx-curly-spacing": [2, "never", {"allowMultiline": false}],
@@ -62,13 +77,8 @@ module.exports = {
6277
"react/prop-types": 2,
6378
"react/react-in-jsx-scope": 1,
6479
"react/self-closing-comp": 2,
65-
"react/wrap-multilines": 2,
66-
"semi": [2, "always"],
67-
"space-after-keywords": 2,
68-
"space-before-blocks": 2,
69-
"space-before-function-paren": [2, "never"],
70-
"space-in-parens": [2, "never"],
71-
"spaced-comment": [2, "always"],
72-
"wrap-regex": 2
73-
}
74-
};
80+
"react/wrap-multilines": 2
81+
});
82+
}
83+
84+
module.exports = config;

base/utils.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
var hasModuleInstalled = function(name) {
2+
try {
3+
require.resolve(name);
4+
return true;
5+
} catch (err) {
6+
return false;
7+
}
8+
9+
};
10+
11+
module.exports = {
12+
reactPluginInstalled: hasModuleInstalled("eslint-plugin-react")
13+
};

index.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
var config = require("./base");
2+
var utils = require("./base/utils.js");
23

3-
delete config.rules["react/display-name"];
44
config.rules["no-var"] = 2;
55
config.rules["object-shorthand"] = 2;
66
config.rules["prefer-const"] = 2;
77
config.rules["prefer-template"] = 2;
8-
config.rules["react/prefer-es6-class"] = 2;
8+
9+
if (utils.reactPluginInstalled) {
10+
delete config.rules["react/display-name"];
11+
config.rules["react/prefer-es6-class"] = 2;
12+
}
913

1014
module.exports = config;

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "eslint-config-ezhome",
3-
"version": "0.5.0",
3+
"version": "0.6.0",
44

55
"author": "Igor Davydenko",
66
"authorEmail": "igor@ezhome.com",
@@ -23,6 +23,9 @@
2323
"url": "https://github.com/ezhome/eslint-config-ezhome"
2424
},
2525

26+
"dependencies": {
27+
"object-assign": "4.0.1"
28+
},
2629
"devDependencies": {
2730
"babel-eslint": "4.1.6",
2831
"eslint": "1.10.3",

0 commit comments

Comments
 (0)