Skip to content

Commit 5b73798

Browse files
committed
refactor: use switches for succinct, ability to assess checks more easily at-a-glance
1 parent f45c22a commit 5b73798

File tree

1 file changed

+52
-31
lines changed

1 file changed

+52
-31
lines changed

src/exportParser.js

Lines changed: 52 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ let createSymbol = null;
4646
const getSymbol = function (node, globals, scope, opt) {
4747
const opts = opt || {};
4848
let block = scope;
49-
if (node.type === 'Identifier') {
49+
switch (node.type) {
50+
case 'Identifier': {
5051
return getIdentifier(node, globals, scope, opts);
51-
} else if (node.type === 'MemberExpression') {
52+
} case 'MemberExpression': {
5253
const obj = getSymbol(node.object, globals, scope, opts);
5354
const propertySymbol = getSymbol(node.property, globals, scope, {simpleIdentifier: !node.computed});
5455
const propertyValue = getSymbolValue(propertySymbol);
@@ -57,26 +58,26 @@ const getSymbol = function (node, globals, scope, opt) {
5758
block = obj.props[propertyValue];
5859

5960
return block;
60-
} else if (opts.createMissingProps && propertyValue) {
61+
}
62+
if (opts.createMissingProps && propertyValue) {
6163
obj.props[propertyValue] = createNode();
6264

6365
return obj.props[propertyValue];
64-
} else {
65-
debug('MemberExpression: Missing property ' + node.property.name);
66-
67-
return null;
6866
}
69-
} else if (node.type === 'FunctionExpression' || node.type === 'FunctionDeclaration' || node.type === 'ArrowFunctionExpression') {
67+
debug('MemberExpression: Missing property ' + node.property.name);
68+
69+
return null;
70+
} case 'FunctionExpression': case 'FunctionDeclaration': case 'ArrowFunctionExpression': {
7071
const val = createNode();
7172
val.props.prototype = createNode();
7273
val.props.prototype.type = 'object';
7374
val.type = 'object';
7475
val.value = node;
7576

7677
return val;
77-
} else if (node.type === 'AssignmentExpression') {
78+
} case 'AssignmentExpression': {
7879
return createSymbol(node.left, globals, node.right, scope, opts);
79-
} else if (node.type === 'ClassBody') {
80+
} case 'ClassBody': {
8081
const val = createNode();
8182
node.body.forEach((method) => {
8283
val.props[method.key.name] = createNode();
@@ -87,7 +88,7 @@ const getSymbol = function (node, globals, scope, opt) {
8788
val.value = node;
8889

8990
return val;
90-
} else if (node.type === 'ObjectExpression') {
91+
} case 'ObjectExpression': {
9192
const val = createNode();
9293
val.type = 'object';
9394
node.properties.forEach((prop) => {
@@ -98,36 +99,38 @@ const getSymbol = function (node, globals, scope, opt) {
9899
});
99100

100101
return val;
101-
} else if (node.type === 'Literal') {
102+
} case 'Literal': {
102103
const val = createNode();
103104
val.type = 'literal';
104105
val.value = node;
105106

106107
return val;
107108
}
109+
}
108110

109111
return null;
110112
};
111113

112114
createSymbol = function (node, globals, value, scope) {
113115
const block = scope || globals;
114116
let symbol;
115-
if (node.type === 'Identifier') {
117+
switch (node.type) {
118+
case 'Identifier': {
116119
if (value) {
117120
const valueSymbol = getSymbol(value, globals, block);
118121
if (valueSymbol) {
119122
block.props[node.name] = valueSymbol;
120123

121124
return block.props[node.name];
122-
} else {
123-
debug('Identifier: Missing value symbol for %s', node.name);
124125
}
126+
debug('Identifier: Missing value symbol for %s', node.name);
125127
} else {
126128
block.props[node.name] = createNode();
127129

128130
return block.props[node.name];
129131
}
130-
} else if (node.type === 'MemberExpression') {
132+
break;
133+
} case 'MemberExpression': {
131134
symbol = getSymbol(node.object, globals, block);
132135

133136
const propertySymbol = getSymbol(node.property, globals, block, {simpleIdentifier: !node.computed});
@@ -136,27 +139,32 @@ createSymbol = function (node, globals, value, scope) {
136139
symbol.props[propertyValue] = getSymbol(value, globals, block);
137140

138141
return symbol.props[propertyValue];
139-
} else {
140-
debug('MemberExpression: Missing symbol: %s', node.property.name);
141142
}
142-
} else if (node.type === 'FunctionDeclaration') {
143+
debug('MemberExpression: Missing symbol: %s', node.property.name);
144+
break;
145+
} case 'FunctionDeclaration': {
143146
if (node.id.type === 'Identifier') {
144147
return createSymbol(node.id, globals, node, globals);
145148
}
149+
break;
150+
}
146151
}
147152

148153
return null;
149154
};
150155

151156
// Creates variables from variable definitions
152157
const initVariables = function (node, globals) {
153-
if (node.type === 'Program') {
158+
switch (node.type) {
159+
case 'Program': {
154160
node.body.forEach((childNode) => {
155161
initVariables(childNode, globals);
156162
});
157-
} else if (node.type === 'ExpressionStatement') {
163+
break;
164+
} case 'ExpressionStatement': {
158165
initVariables(node.expression, globals);
159-
} else if (node.type === 'VariableDeclaration') {
166+
break;
167+
} case 'VariableDeclaration': {
160168
node.declarations.forEach((declaration) => {
161169
// let and const
162170
const symbol = createSymbol(declaration.id, globals, null, globals);
@@ -165,43 +173,56 @@ const initVariables = function (node, globals) {
165173
globals.props.window.props[declaration.id.name] = symbol;
166174
}
167175
});
176+
break;
177+
}
168178
}
169179
};
170180

171181
// Populates variable maps using AST
172182
const mapVariables = function (node, globals) {
173-
if (node.type === 'Program') {
183+
switch (node.type) {
184+
case 'Program': {
174185
node.body.forEach((childNode) => {
175186
mapVariables(childNode, globals);
176187
});
177-
} else if (node.type === 'ExpressionStatement') {
188+
break;
189+
} case 'ExpressionStatement': {
178190
mapVariables(node.expression, globals);
179-
} else if (node.type === 'AssignmentExpression') {
191+
break;
192+
} case 'AssignmentExpression': {
180193
createSymbol(node.left, globals, node.right);
181-
} else if (node.type === 'VariableDeclaration') {
194+
break;
195+
} case 'VariableDeclaration': {
182196
node.declarations.forEach((declaration) => {
183197
createSymbol(declaration.id, globals, declaration.init);
184198
});
185-
} else if (node.type === 'FunctionDeclaration') {
199+
break;
200+
} case 'FunctionDeclaration': {
186201
if (node.id.type === 'Identifier') {
187202
createSymbol(node.id, globals, node, globals);
188203
}
189-
} else if (node.type === 'ExportDefaultDeclaration') {
204+
break;
205+
} case 'ExportDefaultDeclaration': {
190206
const symbol = createSymbol(node.declaration, globals, node.declaration);
191207
symbol.exported = true;
192-
} else if (node.type === 'ExportNamedDeclaration') {
208+
break;
209+
} case 'ExportNamedDeclaration': {
193210
if (node.declaration) {
194211
const symbol = createSymbol(node.declaration, globals, node.declaration);
195212
symbol.exported = true;
196213
}
197214
node.specifiers.forEach((specifier) => {
198215
mapVariables(specifier, globals);
199216
});
200-
} else if (node.type === 'ExportSpecifier') {
217+
break;
218+
} case 'ExportSpecifier': {
201219
const symbol = getSymbol(node.local, globals, globals);
202220
symbol.exported = true;
203-
} else if (node.type === 'ClassDeclaration') {
221+
break;
222+
} case 'ClassDeclaration': {
204223
createSymbol(node.id, globals, node.body, globals);
224+
break;
225+
}
205226
}
206227
};
207228

0 commit comments

Comments
 (0)