diff --git a/lib/util/propTypesSort.js b/lib/util/propTypesSort.js index 0bf8998128..3d7f2460a1 100644 --- a/lib/util/propTypesSort.js +++ b/lib/util/propTypesSort.js @@ -127,30 +127,26 @@ function fixPropTypesSort(fixer, context, declarations, ignoreCase, requiredFirs const node = allNodes[i]; let commentAfter = []; let commentBefore = []; + let newStart = 0; + let newEnd = 0; try { commentBefore = sourceCode.getCommentsBefore(node); commentAfter = sourceCode.getCommentsAfter(node); - } catch (e) { /**/ } - if (commentAfter.length === 0 && commentBefore.length === 0) { - commentnodeMap.set(node, { start: node.range[0], end: node.range[1], hasComment: false }); - } else { - const firstCommentBefore = commentBefore[0]; - if (commentBefore.length === 1) { - commentnodeMap.set(node, { start: firstCommentBefore.range[0], end: node.range[1], hasComment: true }); - } - const firstCommentAfter = commentAfter[0]; - if (commentAfter.length === 1) { - commentnodeMap.set(node, { start: node.range[0], end: firstCommentAfter.range[1], hasComment: true }); - } - if (commentBefore.length === 1 && commentAfter.length === 1) { - commentnodeMap.set(node, { - start: firstCommentBefore.range[0], - end: firstCommentAfter.range[1], - hasComment: true, - }); - } + } catch (e) { /**/ }; + if (commentAfter.length === 0 || commentBefore.length === 0) { + newStart = node.range[0] + newEnd = node.range[1] } - } + const firstCommentBefore = commentBefore[0]; + if (commentBefore.length >= 1) { + newStart = firstCommentBefore.range[0] + } + const lastCommentAfter = commentAfter[commentAfter.length - 1]; + if (commentAfter.length >= 1) { + newEnd = lastCommentAfter.range[1] + } + commentnodeMap.set(node, { start: newStart, end: newEnd, hasComment: true }); + }; const nodeGroups = allNodes.reduce((acc, curr) => { if (curr.type === 'ExperimentalSpreadProperty' || curr.type === 'SpreadElement') { acc.push([]); diff --git a/tests/lib/rules/sort-prop-types.js b/tests/lib/rules/sort-prop-types.js index 8b3ca36442..09391a92bc 100644 --- a/tests/lib/rules/sort-prop-types.js +++ b/tests/lib/rules/sort-prop-types.js @@ -2098,6 +2098,56 @@ ruleTester.run('sort-prop-types', rule, { type: 'Property', }, ], - } : [] + } : [], + semver.satisfies(eslintPkg.version, '> 3') ? { + code: ` + var First = createReactClass({ + propTypes: { + /* z */ + /* z */ + z: PropTypes.string /* z */, + /* a */ + a: PropTypes.any /* a */ + /* a */ + /* a */, + b: PropTypes.any + }, + render: function() { + return
; + } + }); + `, + output: ` + var First = createReactClass({ + propTypes: { + /* a */ + a: PropTypes.any /* a */ + /* a */ + /* a */, + b: PropTypes.any, + /* z */ + /* z */ + z: PropTypes.string /* z */ + }, + render: function() { + return ; + } + }); + `, + errors: [ + { + messageId: 'propsNotSorted', + line: 8, + column: 13, + type: 'Property', + }, + { + messageId: 'propsNotSorted', + line: 11, + column: 13, + type: 'Property', + }, + ], + } : [], )), });