Skip to content

Commit b271c89

Browse files
committed
More cleanup
1 parent 1ad6322 commit b271c89

3 files changed

Lines changed: 25 additions & 23 deletions

File tree

src/parser/hbs-parser.js

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
const eslintScope = require('eslint-scope');
22
const DocumentLines = require('../utils/document');
3-
const { visitorKeys: glimmerVisitorKeys } = require('@glimmer/syntax');
4-
const { processGlimmerTemplate } = require('./transforms');
3+
const { processGlimmerTemplate, buildGlimmerVisitorKeys } = require('./transforms');
54

65
/**
76
* implements https://eslint.org/docs/latest/extend/custom-parsers
@@ -64,15 +63,8 @@ module.exports = {
6463
},
6564
};
6665

67-
// Build visitor keys: Program + all Glimmer node types prefixed
68-
const visitorKeys = { Program: ['body'] };
69-
for (const [k, v] of Object.entries(glimmerVisitorKeys)) {
70-
visitorKeys[`Glimmer${k}`] = [...v];
71-
}
72-
if (!visitorKeys.GlimmerElementNode.includes('blockParamNodes')) {
73-
visitorKeys.GlimmerElementNode.push('blockParamNodes', 'parts');
74-
}
75-
visitorKeys.GlimmerTemplate = ['body'];
66+
// Build visitor keys: Program + all Glimmer node types
67+
const visitorKeys = { Program: ['body'], ...buildGlimmerVisitorKeys() };
7668

7769
// Create an empty scope manager.
7870
// For HBS, all locals are assumed to be defined at runtime,

src/parser/transforms.js

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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
*/
121139
function 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) {
727735
module.exports.traverse = traverse;
728736
module.exports.tokenize = tokenize;
729737
module.exports.processGlimmerTemplate = processGlimmerTemplate;
738+
module.exports.buildGlimmerVisitorKeys = buildGlimmerVisitorKeys;

tests/hbs-parser.test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ describe('hbs-parser', () => {
4242
expectedVisitorKeys[`Glimmer${k}`] = [...v];
4343
}
4444
expectedVisitorKeys.GlimmerTemplate = ['body'];
45+
expectedVisitorKeys.GlimmerProgram = ['body', 'blockParamNodes'];
4546
if (!expectedVisitorKeys.GlimmerElementNode.includes('blockParamNodes')) {
4647
expectedVisitorKeys.GlimmerElementNode.push('blockParamNodes', 'parts');
4748
}

0 commit comments

Comments
 (0)