@@ -112,14 +112,32 @@ function registerNodeInScope(node, scope, variable) {
112112 scope . references . push ( ref ) ;
113113}
114114
115+ /**
116+ * Builds the complete Glimmer visitor keys map with "Glimmer" prefix and
117+ * additional keys needed for traversal (blockParamNodes, parts, etc).
118+ * @return {object }
119+ */
120+ function buildGlimmerVisitorKeys ( ) {
121+ const keys = { } ;
122+ for ( const [ k , v ] of Object . entries ( glimmerVisitorKeys ) ) {
123+ keys [ `Glimmer${ k } ` ] = [ ...v ] ;
124+ }
125+ if ( ! keys . GlimmerElementNode . includes ( 'blockParamNodes' ) ) {
126+ keys . GlimmerElementNode . push ( 'blockParamNodes' , 'parts' ) ;
127+ }
128+ keys . GlimmerProgram = [ 'body' , 'blockParamNodes' ] ;
129+ keys . GlimmerTemplate = [ 'body' ] ;
130+ return keys ;
131+ }
132+
115133/**
116134 * traverses all nodes using the {visitorKeys} calling the callback function, visitor
117135 * @param visitorKeys
118136 * @param node
119137 * @param visitor
120138 */
121139function traverse ( visitorKeys , node , visitor ) {
122- const allVisitorKeys = visitorKeys ;
140+ const allVisitorKeys = { ... visitorKeys , ... buildGlimmerVisitorKeys ( ) } ;
123141 const queue = [ ] ;
124142
125143 queue . push ( {
@@ -137,17 +155,7 @@ function traverse(visitorKeys, node, visitor) {
137155
138156 if ( ! currentPath . node ) continue ;
139157
140- const visitorKeys = [ ...( allVisitorKeys [ currentPath . node . type ] || [ ] ) ] ;
141- if ( currentPath . node . type === 'GlimmerElementNode' ) {
142- if ( ! visitorKeys . includes ( 'blockParamNodes' ) ) {
143- visitorKeys . push ( 'blockParamNodes' , 'parts' ) ;
144- }
145- }
146- if ( currentPath . node . type === 'GlimmerProgram' ) {
147- if ( ! visitorKeys . includes ( 'blockParamNodes' ) ) {
148- visitorKeys . push ( 'blockParamNodes' ) ;
149- }
150- }
158+ const visitorKeys = allVisitorKeys [ currentPath . node . type ] ;
151159 if ( ! visitorKeys ) {
152160 continue ;
153161 }
@@ -727,3 +735,4 @@ module.exports.transformForLint = function transformForLint(code, fileName) {
727735module . exports . traverse = traverse ;
728736module . exports . tokenize = tokenize ;
729737module . exports . processGlimmerTemplate = processGlimmerTemplate ;
738+ module . exports . buildGlimmerVisitorKeys = buildGlimmerVisitorKeys ;
0 commit comments