Skip to content

Commit bf4dbfa

Browse files
authored
Flatten imports (#30)
* Minor performance improvements * Flatten utils to be directly imported
1 parent 2df5876 commit bf4dbfa

File tree

4 files changed

+36
-34
lines changed

4 files changed

+36
-34
lines changed

src/arborist.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,15 @@ const Arborist = class {
2626
* @return {ASTNode}
2727
*/
2828
_getCorrectTargetForDeletion(startNode) {
29+
const relevantTypes = ['ExpressionStatement', 'UnaryExpression', 'UpdateExpression'];
30+
const relevantClauses = ['consequent', 'alternate'];
2931
let currentNode = startNode;
30-
while (
31-
['ExpressionStatement', 'UnaryExpression', 'UpdateExpression'].includes(currentNode?.parentNode?.type) ||
32+
while (relevantTypes.includes(currentNode?.parentNode?.type) ||
3233
(currentNode.parentNode.type === 'VariableDeclaration' &&
3334
(currentNode.parentNode.declarations.length === 1 ||
34-
!currentNode.parentNode.declarations.filter(d => d.nodeId !== currentNode.nodeId && !d.isMarked).length)
35+
!currentNode.parentNode.declarations.filter(d => d !== currentNode && !d.isMarked).length)
3536
)) currentNode = currentNode.parentNode;
36-
if (['consequent', 'alternate'].includes(currentNode.parentKey)) currentNode.isEmpty = true;
37+
if (relevantClauses.includes(currentNode.parentKey)) currentNode.isEmpty = true;
3738
return currentNode;
3839
}
3940

@@ -90,7 +91,8 @@ const Arborist = class {
9091
} else {
9192
for (const targetNodeId of this.markedForDeletion) {
9293
try {
93-
const targetNode = this.ast.find(n => n.nodeId === targetNodeId);
94+
let targetNode = this.ast[targetNodeId];
95+
targetNode = targetNode.nodeId === targetNodeId ? targetNode : this.ast.find(n => n.nodeId === targetNodeId);
9496
if (targetNode) {
9597
const parent = targetNode.parentNode;
9698
if (parent[targetNode.parentKey] === targetNode) {

src/utils/index.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
export const utils = {
2-
applyIteratively: (await import('./applyIteratively.js')).applyIteratively,
3-
logger: (await import('./logger.js')).logger,
4-
treeModifier: (await import('./treeModifier.js')).treeModifier,
5-
};
1+
export * from './applyIteratively.js';
2+
export * from './logger.js';
3+
export * from './treeModifier.js';

tests/functionality.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ describe('Functionality tests', () => {
3434
'generateCode',
3535
'generateFlatAST',
3636
'parseCode',
37-
'utils',
37+
'applyIteratively',
38+
'logger',
39+
'treeModifier',
3840
];
3941
const flast = await import(path.resolve(__dirname + '/../src/index.js'));
4042
for (const importName of availableImports) {

tests/utils.test.js

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import assert from 'node:assert';
2-
import {utils} from '../src/index.js';
32
import {describe, it} from 'node:test';
3+
import {treeModifier, applyIteratively, logger} from '../src/index.js';
44

55
describe('Utils tests: treeModifier', () => {
66
it(`Verify treeModifier sets a generic function name`, () => {
77
const expectedFuncName = 'func';
8-
const generatedFunc = utils.treeModifier(() => {}, () => {});
8+
const generatedFunc = treeModifier(() => {}, () => {});
99
assert.equal(generatedFunc.name, expectedFuncName, `The default name of the generated function does not match`);
1010
});
1111
it(`Verify treeModifier sets the function's name properly`, () => {
1212
const expectedFuncName = 'expectedFuncName';
13-
const generatedFunc = utils.treeModifier(() => {}, () => {}, expectedFuncName);
13+
const generatedFunc = treeModifier(() => {}, () => {}, expectedFuncName);
1414
assert.equal(generatedFunc.name, expectedFuncName, `The name of the generated function does not match`);
1515
});
1616
});
@@ -20,15 +20,15 @@ describe('Utils tests: applyIteratively', () => {
2020
const expectedOutput = code;
2121
const f = n => n.type === 'Program';
2222
const m = (n, arb) => arb.markNode(n);
23-
const generatedFunc = utils.treeModifier(f, m);
24-
const result = utils.applyIteratively(code, [generatedFunc]);
23+
const generatedFunc = treeModifier(f, m);
24+
const result = applyIteratively(code, [generatedFunc]);
2525

2626
assert.equal(result, expectedOutput, `Result does not match expected output`);
2727
});
2828
it('Verify applyIteratively catches a critical exception', () => {
2929
const code = `a`;
3030
// noinspection JSCheckFunctionSignatures
31-
const result = utils.applyIteratively(code, {length: 4});
31+
const result = applyIteratively(code, {length: 4});
3232
assert.equal(result, code, `Result does not match expected output`);
3333
});
3434
it('Verify applyIteratively works as expected', () => {
@@ -44,39 +44,39 @@ describe('Utils tests: applyIteratively', () => {
4444
type: 'Literal',
4545
value: replacements[n.value],
4646
});
47-
const generatedFunc = utils.treeModifier(f, m);
48-
result = utils.applyIteratively(result, [generatedFunc]);
47+
const generatedFunc = treeModifier(f, m);
48+
result = applyIteratively(result, [generatedFunc]);
4949

5050
assert.equal(result, expectedOutput, `Result does not match expected output`);
5151
});
5252
});
5353
describe('Utils tests: logger', () => {
5454
it(`Verify logger sets the log level to DEBUG properly`, () => {
55-
const expectedLogLevel = utils.logger.logLevels.DEBUG;
56-
utils.logger.setLogLevelDebug();
57-
assert.equal(utils.logger.currentLogLevel, expectedLogLevel, `The log level DEBUG was not set properly`);
55+
const expectedLogLevel = logger.logLevels.DEBUG;
56+
logger.setLogLevelDebug();
57+
assert.equal(logger.currentLogLevel, expectedLogLevel, `The log level DEBUG was not set properly`);
5858
});
5959
it(`Verify logger sets the log level to NONE properly`, () => {
60-
const expectedLogLevel = utils.logger.logLevels.NONE;
61-
utils.logger.setLogLevelNone();
62-
assert.equal(utils.logger.currentLogLevel, expectedLogLevel, `The log level NONE was not set properly`);
60+
const expectedLogLevel = logger.logLevels.NONE;
61+
logger.setLogLevelNone();
62+
assert.equal(logger.currentLogLevel, expectedLogLevel, `The log level NONE was not set properly`);
6363
});
6464
it(`Verify logger sets the log level to LOG properly`, () => {
65-
const expectedLogLevel = utils.logger.logLevels.LOG;
66-
utils.logger.setLogLevelLog();
67-
assert.equal(utils.logger.currentLogLevel, expectedLogLevel, `The log level LOG was not set properly`);
65+
const expectedLogLevel = logger.logLevels.LOG;
66+
logger.setLogLevelLog();
67+
assert.equal(logger.currentLogLevel, expectedLogLevel, `The log level LOG was not set properly`);
6868
});
6969
it(`Verify logger sets the log level to ERROR properly`, () => {
70-
const expectedLogLevel = utils.logger.logLevels.ERROR;
71-
utils.logger.setLogLevelError();
72-
assert.equal(utils.logger.currentLogLevel, expectedLogLevel, `The log level ERROR was not set properly`);
70+
const expectedLogLevel = logger.logLevels.ERROR;
71+
logger.setLogLevelError();
72+
assert.equal(logger.currentLogLevel, expectedLogLevel, `The log level ERROR was not set properly`);
7373
});
7474
it(`Verify logger sets the log function properly`, () => {
7575
const expectedLogFunc = () => 'test';
76-
utils.logger.setLogFunc(expectedLogFunc);
77-
assert.equal(utils.logger.logFunc, expectedLogFunc, `The log function was not set properly`);
76+
logger.setLogFunc(expectedLogFunc);
77+
assert.equal(logger.logFunc, expectedLogFunc, `The log function was not set properly`);
7878
});
7979
it(`Verify logger throws an error when setting an unknown log level`, () => {
80-
assert.throws(() => utils.logger.setLogLevel(0), Error, `An error was not thrown when setting an unknown log level`);
80+
assert.throws(() => logger.setLogLevel(0), Error, `An error was not thrown when setting an unknown log level`);
8181
});
8282
});

0 commit comments

Comments
 (0)