@@ -435,6 +435,7 @@ export function getAttributeKeyText(
435435 | SvAST . SvelteStyleDirective
436436 | SvAST . SvelteDirective
437437 | SvAST . SvelteSpecialDirective ,
438+ context : RuleContext ,
438439) : string {
439440 switch ( node . type ) {
440441 case "SvelteAttribute" :
@@ -446,7 +447,7 @@ export function getAttributeKeyText(
446447 return node . kind
447448 case "SvelteDirective" : {
448449 const dir = getDirectiveName ( node )
449- return `${ dir } :${ node . key . name . name } ${
450+ return `${ dir } :${ getSimpleNameFromNode ( node . key . name , context ) } ${
450451 node . key . modifiers . length ? `|${ node . key . modifiers . join ( "|" ) } ` : ""
451452 } `
452453 }
@@ -518,17 +519,7 @@ function getAttributeValueRangeTokens(
518519 * Returns name of SvelteElement
519520 */
520521export 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 )
532523}
533524
534525/**
@@ -586,3 +577,49 @@ export function isExpressionIdentifier(
586577
587578 return true
588579}
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