Skip to content

Commit b9d6b19

Browse files
paulobmarcossatazor
authored andcommittedSep 23, 2019
feat: enable jsx-fragment rule (#71)
1 parent 6b38251 commit b9d6b19

File tree

3 files changed

+88
-38
lines changed

3 files changed

+88
-38
lines changed
 

‎rules/react.js

+2
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ module.exports = {
4141
'react/jsx-filename-extension': [2, { 'extensions': ['.js'] }],
4242
// Ensure correct position of the first property.
4343
'react/jsx-first-prop-new-line': 0,
44+
// Enforce shorthand or standard form for React fragments
45+
'react/jsx-fragments': [1, 'syntax'],
4446
// Enforce event handler naming conventions in JSX
4547
'react/jsx-handler-names': [2, {
4648
'eventHandlerPrefix': 'handle',

‎test/__snapshots__/index.spec.js.snap

+43-37
Original file line numberDiff line numberDiff line change
@@ -927,225 +927,231 @@ Array [
927927
"rule": "react/jsx-equals-spacing",
928928
"severity": 2,
929929
},
930+
Object {
931+
"column": 17,
932+
"line": 158,
933+
"rule": "react/jsx-fragments",
934+
"severity": 1,
935+
},
930936
Object {
931937
"column": 35,
932-
"line": 165,
938+
"line": 207,
933939
"rule": "react/jsx-handler-names",
934940
"severity": 2,
935941
},
936942
Object {
937943
"column": 35,
938-
"line": 169,
944+
"line": 211,
939945
"rule": "react/jsx-handler-names",
940946
"severity": 2,
941947
},
942948
Object {
943949
"column": 1,
944-
"line": 188,
950+
"line": 230,
945951
"rule": "indent",
946952
"severity": 2,
947953
},
948954
Object {
949955
"column": 9,
950-
"line": 188,
956+
"line": 230,
951957
"rule": "react/jsx-indent-props",
952958
"severity": 2,
953959
},
954960
Object {
955961
"column": 1,
956-
"line": 204,
962+
"line": 246,
957963
"rule": "indent",
958964
"severity": 2,
959965
},
960966
Object {
961967
"column": 7,
962-
"line": 204,
968+
"line": 246,
963969
"rule": "react/jsx-indent",
964970
"severity": 2,
965971
},
966972
Object {
967973
"column": 29,
968-
"line": 218,
974+
"line": 260,
969975
"rule": "react/jsx-key",
970976
"severity": 1,
971977
},
972978
Object {
973979
"column": 35,
974-
"line": 239,
980+
"line": 281,
975981
"rule": "react/jsx-no-bind",
976982
"severity": 1,
977983
},
978984
Object {
979985
"column": 35,
980-
"line": 243,
986+
"line": 285,
981987
"rule": "react/jsx-no-bind",
982988
"severity": 1,
983989
},
984990
Object {
985991
"column": 22,
986-
"line": 268,
992+
"line": 310,
987993
"rule": "react/jsx-no-comment-textnodes",
988994
"severity": 2,
989995
},
990996
Object {
991997
"column": 22,
992-
"line": 276,
998+
"line": 318,
993999
"rule": "react/jsx-no-comment-textnodes",
9941000
"severity": 2,
9951001
},
9961002
Object {
9971003
"column": 44,
998-
"line": 300,
1004+
"line": 342,
9991005
"rule": "react/jsx-no-duplicate-props",
10001006
"severity": 2,
10011007
},
10021008
Object {
10031009
"column": 72,
1004-
"line": 318,
1010+
"line": 360,
10051011
"rule": "react/jsx-no-target-blank",
10061012
"severity": 1,
10071013
},
10081014
Object {
10091015
"column": 24,
1010-
"line": 329,
1016+
"line": 371,
10111017
"rule": "react/jsx-no-undef",
10121018
"severity": 2,
10131019
},
10141020
Object {
10151021
"column": 17,
1016-
"line": 343,
1022+
"line": 385,
10171023
"rule": "react/jsx-pascal-case",
10181024
"severity": 2,
10191025
},
10201026
Object {
10211027
"column": 31,
1022-
"line": 363,
1028+
"line": 405,
10231029
"rule": "react/jsx-tag-spacing",
10241030
"severity": 2,
10251031
},
10261032
Object {
10271033
"column": 20,
1028-
"line": 374,
1034+
"line": 416,
10291035
"rule": "react/jsx-tag-spacing",
10301036
"severity": 2,
10311037
},
10321038
Object {
10331039
"column": 23,
1034-
"line": 393,
1040+
"line": 435,
10351041
"rule": "react/jsx-wrap-multilines",
10361042
"severity": 2,
10371043
},
10381044
Object {
10391045
"column": 28,
1040-
"line": 417,
1046+
"line": 459,
10411047
"rule": "react/no-children-prop",
10421048
"severity": 2,
10431049
},
10441050
Object {
10451051
"column": 1,
1046-
"line": 446,
1052+
"line": 488,
10471053
"rule": "react/no-deprecated",
10481054
"severity": 1,
10491055
},
10501056
Object {
10511057
"column": 13,
1052-
"line": 478,
1058+
"line": 520,
10531059
"rule": "react/no-direct-mutation-state",
10541060
"severity": 2,
10551061
},
10561062
Object {
10571063
"column": 21,
1058-
"line": 509,
1064+
"line": 551,
10591065
"rule": "react/no-is-mounted",
10601066
"severity": 2,
10611067
},
10621068
Object {
10631069
"column": 18,
1064-
"line": 545,
1070+
"line": 587,
10651071
"rule": "react/no-render-return-value",
10661072
"severity": 2,
10671073
},
10681074
Object {
10691075
"column": 25,
1070-
"line": 570,
1076+
"line": 612,
10711077
"rule": "react/no-string-refs",
10721078
"severity": 2,
10731079
},
10741080
Object {
10751081
"column": 48,
1076-
"line": 570,
1082+
"line": 612,
10771083
"rule": "babel/semi",
10781084
"severity": 2,
10791085
},
10801086
Object {
10811087
"column": 11,
1082-
"line": 601,
1088+
"line": 643,
10831089
"rule": "react/no-unescaped-entities",
10841090
"severity": 2,
10851091
},
10861092
Object {
10871093
"column": 13,
1088-
"line": 601,
1094+
"line": 643,
10891095
"rule": "react/no-unescaped-entities",
10901096
"severity": 2,
10911097
},
10921098
Object {
10931099
"column": 14,
1094-
"line": 601,
1100+
"line": 643,
10951101
"rule": "react/no-unescaped-entities",
10961102
"severity": 2,
10971103
},
10981104
Object {
10991105
"column": 22,
1100-
"line": 621,
1106+
"line": 663,
11011107
"rule": "react/no-unknown-property",
11021108
"severity": 2,
11031109
},
11041110
Object {
11051111
"column": 42,
1106-
"line": 647,
1112+
"line": 689,
11071113
"rule": "react/prefer-es6-class",
11081114
"severity": 2,
11091115
},
11101116
Object {
11111117
"column": 44,
1112-
"line": 675,
1118+
"line": 717,
11131119
"rule": "react/prop-types",
11141120
"severity": 2,
11151121
},
11161122
Object {
11171123
"column": 25,
1118-
"line": 715,
1124+
"line": 757,
11191125
"rule": "prefer-import/prefer-import-over-require",
11201126
"severity": 1,
11211127
},
11221128
Object {
11231129
"column": 5,
1124-
"line": 726,
1130+
"line": 768,
11251131
"rule": "react/require-render-return",
11261132
"severity": 2,
11271133
},
11281134
Object {
11291135
"column": 23,
1130-
"line": 745,
1136+
"line": 787,
11311137
"rule": "react/self-closing-comp",
11321138
"severity": 2,
11331139
},
11341140
Object {
11351141
"column": 9,
1136-
"line": 763,
1142+
"line": 805,
11371143
"rule": "react/sort-comp",
11381144
"severity": 2,
11391145
},
11401146
Object {
11411147
"column": 22,
1142-
"line": 807,
1148+
"line": 849,
11431149
"rule": "react/style-prop-object",
11441150
"severity": 2,
11451151
},
11461152
Object {
11471153
"column": 15,
1148-
"line": 819,
1154+
"line": 861,
11491155
"rule": "react/void-dom-elements-no-children",
11501156
"severity": 2,
11511157
},

‎test/fixtures/rules/react/react.js

+43-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { Component, ReactDOM } from 'react';
1+
import React, { Component, ReactDOM, Fragment } from 'react';
22
import PropTypes from 'prop-types';
33
import createReactClass from 'create-react-class';
44

@@ -148,6 +148,48 @@ Component.propTypes = {
148148
// ---------------------------------------------------------------------
149149
// See file ./react-jsx-extension.js
150150

151+
// `jsx-fragments` - enforce shorthand or standard form for React fragments
152+
// ---------------------------------------------------------------------
153+
// Disencouraged
154+
(function () {
155+
class MyComponent extends Component {
156+
render() {
157+
return (
158+
<Fragment>
159+
<p>foo</p>
160+
<p>bar</p>
161+
</Fragment>
162+
);
163+
}
164+
}
165+
})();
166+
// Good
167+
(function () {
168+
class MyComponent extends Component {
169+
render() {
170+
return (
171+
<>
172+
<p>foo</p>
173+
<p>bar</p>
174+
</>
175+
);
176+
}
177+
}
178+
})();
179+
// Good
180+
(function () {
181+
class MyComponent extends Component {
182+
render() {
183+
return (
184+
<Fragment key="1">
185+
<p>foo</p>
186+
<p>bar</p>
187+
</Fragment>
188+
);
189+
}
190+
}
191+
})();
192+
151193
// `jsx-first-prop-new-line` - configure the position of the first property
152194
// ---------------------------------------------------------------------
153195
// Not active

0 commit comments

Comments
 (0)
Please sign in to comment.