From 721698c72881026e6317bf7c88b92126b8030250 Mon Sep 17 00:00:00 2001 From: im3dabasia Date: Thu, 27 Feb 2025 23:08:26 +0530 Subject: [PATCH] refactor: split code for checkNeedsOrdering --- .../eslint-plugin/rules/dependency-group.js | 110 +++++++++--------- 1 file changed, 57 insertions(+), 53 deletions(-) diff --git a/packages/eslint-plugin/rules/dependency-group.js b/packages/eslint-plugin/rules/dependency-group.js index 8dc41e23db2525..87fdab786fe72a 100644 --- a/packages/eslint-plugin/rules/dependency-group.js +++ b/packages/eslint-plugin/rules/dependency-group.js @@ -152,6 +152,62 @@ module.exports = { return { value }; } + /** + * Checks if a group of imports needs reordering + * @param {Array<[Node, string]>} candidates + * @return {boolean} Whether the group needs reordering + */ + function checkNeedsReordering( candidates ) { + for ( const [ importNode, source ] of candidates ) { + if ( ! importNode.range ) { + continue; + } + + const locality = getPackageLocality( source ); + const importStart = importNode.range[ 0 ]; + + const isNotGrouped = candidates.some( + ( [ otherNode, otherSource ] ) => { + if ( importNode === otherNode || ! otherNode.range ) { + return false; + } + + const otherLocality = getPackageLocality( otherSource ); + const otherStart = otherNode.range[ 0 ]; + + return candidates.some( + ( [ middleNode, middleSource ] ) => { + if ( + ! middleNode.range || + middleNode === importNode || + middleNode === otherNode + ) { + return false; + } + + const middleLocality = + getPackageLocality( middleSource ); + const middleStart = middleNode.range[ 0 ]; + + return ( + locality === otherLocality && + middleLocality !== locality && + middleStart > importStart && + middleStart < otherStart + ); + } + ); + } + ); + + if ( isNotGrouped ) { + return true; + } + } + + return false; + } + return { /** * @param {import('estree').Program} node Program node. @@ -267,59 +323,7 @@ module.exports = { groups[ locality ].push( [ importNode, source ] ); } - let needsReordering = false; - for ( const [ importNode, source ] of candidates ) { - // Skip if no range available - if ( ! importNode.range ) { - continue; - } - - const locality = getPackageLocality( source ); - const importStart = importNode.range[ 0 ]; - - const isNotGrouped = candidates.some( - ( [ otherNode, otherSource ] ) => { - if ( - importNode === otherNode || - ! otherNode.range - ) { - return false; - } - - const otherLocality = - getPackageLocality( otherSource ); - const otherStart = otherNode.range[ 0 ]; - - return candidates.some( - ( [ middleNode, middleSource ] ) => { - if ( - ! middleNode.range || - middleNode === importNode || - middleNode === otherNode - ) { - return false; - } - - const middleLocality = - getPackageLocality( middleSource ); - const middleStart = middleNode.range[ 0 ]; - - return ( - locality === otherLocality && - middleLocality !== locality && - middleStart > importStart && - middleStart < otherStart - ); - } - ); - } - ); - - if ( isNotGrouped ) { - needsReordering = true; - break; - } - } + const needsReordering = checkNeedsReordering( candidates ); if ( needsReordering && candidates.length > 0 ) { const firstImport = candidates[ 0 ][ 0 ];