@@ -435,6 +435,7 @@ export function getAttributeKeyText(
435
435
| SvAST . SvelteStyleDirective
436
436
| SvAST . SvelteDirective
437
437
| SvAST . SvelteSpecialDirective ,
438
+ context : RuleContext ,
438
439
) : string {
439
440
switch ( node . type ) {
440
441
case "SvelteAttribute" :
@@ -446,7 +447,7 @@ export function getAttributeKeyText(
446
447
return node . kind
447
448
case "SvelteDirective" : {
448
449
const dir = getDirectiveName ( node )
449
- return `${ dir } :${ node . key . name . name } ${
450
+ return `${ dir } :${ getSimpleNameFromNode ( node . key . name , context ) } ${
450
451
node . key . modifiers . length ? `|${ node . key . modifiers . join ( "|" ) } ` : ""
451
452
} `
452
453
}
@@ -518,17 +519,7 @@ function getAttributeValueRangeTokens(
518
519
* Returns name of SvelteElement
519
520
*/
520
521
export function getNodeName ( node : SvAST . SvelteElement ) : string {
521
- if ( node . name . type === "Identifier" || node . name . type === "SvelteName" ) {
522
- return node . name . name
523
- }
524
- const memberPath = [ node . name . property . name ]
525
- let currentObject = node . name . object
526
- while ( currentObject . type === "SvelteMemberExpressionName" ) {
527
- memberPath . unshift ( currentObject . property . name )
528
- currentObject = currentObject . object
529
- }
530
- memberPath . unshift ( currentObject . name )
531
- return memberPath . join ( "." )
522
+ return getSimpleNameFromNode ( node . name )
532
523
}
533
524
534
525
/**
@@ -586,3 +577,49 @@ export function isExpressionIdentifier(
586
577
587
578
return true
588
579
}
580
+
581
+ function getSimpleNameFromNode (
582
+ node :
583
+ | SvAST . SvelteName
584
+ | SvAST . SvelteMemberExpressionName
585
+ | TSESTree . Identifier ,
586
+ context ?: RuleContext ,
587
+ ) : string
588
+ function getSimpleNameFromNode (
589
+ node :
590
+ | SvAST . SvelteName
591
+ | SvAST . SvelteMemberExpressionName
592
+ | TSESTree . PrivateIdentifier
593
+ | TSESTree . Expression ,
594
+ context : RuleContext ,
595
+ ) : string
596
+ /** Get simple name from give node */
597
+ function getSimpleNameFromNode (
598
+ node :
599
+ | SvAST . SvelteName
600
+ | SvAST . SvelteMemberExpressionName
601
+ | TSESTree . PrivateIdentifier
602
+ | TSESTree . Expression ,
603
+ context : RuleContext | undefined ,
604
+ ) : string {
605
+ if ( node . type === "Identifier" || node . type === "SvelteName" ) {
606
+ return node . name
607
+ }
608
+ if (
609
+ node . type === "SvelteMemberExpressionName" ||
610
+ ( node . type === "MemberExpression" && ! node . computed )
611
+ ) {
612
+ return `${ getSimpleNameFromNode (
613
+ node . object ,
614
+ context ! ,
615
+ ) } .${ getSimpleNameFromNode ( node . property , context ! ) } `
616
+ }
617
+
618
+ // No nodes other than those listed above are currently expected to be used in names.
619
+
620
+ if ( ! context ) {
621
+ throw new Error ( "Rule context is required" )
622
+ }
623
+
624
+ return context . getSourceCode ( ) . getText ( node )
625
+ }
0 commit comments