@@ -511,10 +511,30 @@ function processIgnore(
511
511
512
512
/** Get warning node */
513
513
function getWarningNode ( warning : Warning ) {
514
- const index = getWarningIndex ( warning )
515
- if ( index == null ) {
516
- return null
514
+ const indexes = getWarningIndexes ( warning )
515
+ if ( indexes . start != null ) {
516
+ const node = getWarningTargetNodeFromIndex ( indexes . start )
517
+ if ( node ) {
518
+ return node
519
+ }
520
+ if ( indexes . end != null ) {
521
+ const center = Math . floor (
522
+ indexes . start + ( indexes . end - indexes . start ) / 2 ,
523
+ )
524
+ return getWarningTargetNodeFromIndex ( center )
525
+ }
526
+ }
527
+ if ( indexes . end != null ) {
528
+ return getWarningTargetNodeFromIndex ( indexes . end )
517
529
}
530
+
531
+ return null
532
+ }
533
+
534
+ /**
535
+ * Get warning target node from the given index
536
+ */
537
+ function getWarningTargetNodeFromIndex ( index : number ) {
518
538
let targetNode = sourceCode . getNodeByRangeIndex ( index )
519
539
while ( targetNode ) {
520
540
if (
@@ -535,18 +555,14 @@ function processIgnore(
535
555
}
536
556
targetNode = targetNode . parent || null
537
557
}
538
-
539
558
return null
540
559
}
541
560
542
561
/** Get warning index */
543
- function getWarningIndex ( warning : Warning ) {
562
+ function getWarningIndexes ( warning : Warning ) {
544
563
const start = warning . start && sourceCode . getIndexFromLoc ( warning . start )
545
564
const end = warning . end && sourceCode . getIndexFromLoc ( warning . end )
546
- if ( start != null && end != null ) {
547
- return Math . floor ( start + ( end - start ) / 2 )
548
- }
549
- return start ?? end
565
+ return { start, end }
550
566
}
551
567
}
552
568
0 commit comments