Skip to content

Commit 355e992

Browse files
committed
cleanup
Signed-off-by: flakey5 <[email protected]>
1 parent 953f248 commit 355e992

File tree

5 files changed

+150
-102
lines changed

5 files changed

+150
-102
lines changed

src/generators.mjs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import availableGenerators from './generators/index.mjs';
2323
* @param {ApiDocMetadataEntry} markdownInput The parsed API doc metadata entries
2424
* @param {Array<import('acorn').Program>} parsedJsFiles
2525
*/
26-
const createGenerator = (markdownInput, jsInput) => {
26+
const createGenerator = markdownInput => {
2727
/**
2828
* We store all the registered generators to be processed
2929
* within a Record, so we can access their results at any time whenever needed
@@ -33,7 +33,6 @@ const createGenerator = (markdownInput, jsInput) => {
3333
*/
3434
const cachedGenerators = {
3535
ast: Promise.resolve(markdownInput),
36-
'ast-js': Promise.resolve(jsInput),
3736
};
3837

3938
/**

src/generators/api-links/utils/checkIndirectReferences.mjs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { visit } from 'estree-util-visit';
22

33
/**
4-
*
54
* @param program
65
* @param {import('../types.d.ts').ProgramExports} exports
76
* @param {Record<string, number>} nameToLineNumberMap

src/generators/api-links/utils/extractExports.mjs

Lines changed: 10 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
'use strict';
22

33
import { visit } from 'estree-util-visit';
4-
import { CONSTRUCTOR_EXPRESSION } from '../constants.mjs';
4+
import { handleExportedPropertyExpression } from './handleExportedPropertyExpression.mjs';
5+
import { handleExportedObjectExpression } from './handleExportedObjectExpression.mjs';
56

67
/**
78
* @see https://github.com/estree/estree/blob/master/es5.md#assignmentexpression
@@ -18,8 +19,7 @@ function handleExpression(node, basename, nameToLineNumberMap) {
1819
return;
1920
}
2021

21-
// `a=b`, lhs=`a` and rhs=`b`
22-
let { left: lhs, right: rhs, loc } = expression;
22+
let { left: lhs } = expression;
2323

2424
if (lhs.type !== 'MemberExpression') {
2525
return undefined;
@@ -41,105 +41,16 @@ function handleExpression(node, basename, nameToLineNumberMap) {
4141
if (lhs.object.name === 'exports') {
4242
// This is an assignment to a property in `module.exports` or `exports`
4343
// (i.e. `module.exports.asd = ...`)
44-
45-
switch (rhs.type) {
46-
/** @see https://github.com/estree/estree/blob/master/es5.md#functionexpression */
47-
case 'FunctionExpression': {
48-
// module.exports.something = () => {}
49-
nameToLineNumberMap[`${basename}.${lhs.property.name}`] =
50-
loc.start.line;
51-
52-
break;
53-
}
54-
/** @see https://github.com/estree/estree/blob/master/es5.md#identifier */
55-
case 'Identifier': {
56-
// Save this for later in case it's referenced
57-
// module.exports.asd = something
58-
if (rhs.name === lhs.property.name) {
59-
exports.indirects[lhs.property.name] =
60-
`${basename}.${lhs.property.name}`;
61-
}
62-
63-
break;
64-
}
65-
default: {
66-
if (lhs.property.name !== undefined) {
67-
// Something else, let's save it for when we're searching for
68-
// declarations
69-
exports.identifiers.push(lhs.property.name);
70-
}
71-
72-
break;
73-
}
74-
}
44+
handleExportedPropertyExpression(
45+
exports,
46+
expression,
47+
basename,
48+
nameToLineNumberMap
49+
);
7550
} else if (lhs.object.name === 'module' && lhs.property.name === 'exports') {
7651
// This is an assignment to `module.exports` as a whole
7752
// (i.e. `module.exports = {}`)
78-
79-
// We need to move right until we find the value of the assignment.
80-
// (if `a=b`, we want `b`)
81-
while (rhs.type === 'AssignmentExpression') {
82-
rhs = rhs.right;
83-
}
84-
85-
switch (rhs.type) {
86-
/** @see https://github.com/estree/estree/blob/master/es5.md#newexpression */
87-
case 'NewExpression': {
88-
// module.exports = new Asd()
89-
exports.ctors.push(rhs.callee.name);
90-
break;
91-
}
92-
/** @see https://github.com/estree/estree/blob/master/es5.md#objectexpression */
93-
case 'ObjectExpression': {
94-
// module.exports = {}
95-
// we need to go through all of the properties and register them
96-
rhs.properties.forEach(({ value }) => {
97-
switch (value.type) {
98-
case 'Identifier': {
99-
exports.identifiers.push(value.name);
100-
101-
if (CONSTRUCTOR_EXPRESSION.test(value.name[0])) {
102-
exports.ctors.push(value.name);
103-
}
104-
105-
break;
106-
}
107-
case 'CallExpression': {
108-
if (value.callee.name !== 'deprecate') {
109-
break;
110-
}
111-
112-
// Handle exports wrapped in the `deprecate` function
113-
// Ex/ https://github.com/nodejs/node/blob/e96072ad57348ce423a8dd7639dcc3d1c34e847d/lib/buffer.js#L1334
114-
115-
exports.identifiers.push(value.arguments[0].name);
116-
117-
break;
118-
}
119-
default: {
120-
// Not relevant
121-
}
122-
}
123-
});
124-
125-
break;
126-
}
127-
/** @see https://github.com/estree/estree/blob/master/es5.md#identifier */
128-
case 'Identifier': {
129-
// Something else, let's save it for when we're searching for
130-
// declarations
131-
132-
if (rhs.name !== undefined) {
133-
exports.identifiers.push(rhs.name);
134-
}
135-
136-
break;
137-
}
138-
default: {
139-
// Not relevant
140-
break;
141-
}
142-
}
53+
handleExportedObjectExpression(exports, expression);
14354
}
14455

14556
return exports;
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
'use strict';
2+
3+
import { CONSTRUCTOR_EXPRESSION } from '../constants.mjs';
4+
5+
/**
6+
* @param {import('../types').ProgramExports} exports
7+
* @param {import('acorn').NewExpression} rhs
8+
*/
9+
function handleNewExpression(exports, rhs) {
10+
// module.exports = new Asd()
11+
exports.ctors.push(rhs.callee.name);
12+
}
13+
14+
/**
15+
* @param {import('../types').ProgramExports} exports
16+
* @param {import('acorn').ObjectExpression} rhs
17+
*/
18+
function handleObjectExpression(exports, rhs) {
19+
// module.exports = {}
20+
// We need to go through all of the properties and register them
21+
rhs.properties.forEach(({ value }) => {
22+
switch (value.type) {
23+
case 'Identifier': {
24+
exports.identifiers.push(value.name);
25+
26+
if (CONSTRUCTOR_EXPRESSION.test(value.name[0])) {
27+
exports.ctors.push(value.name);
28+
}
29+
30+
break;
31+
}
32+
case 'CallExpression': {
33+
if (value.callee.name !== 'deprecate') {
34+
break;
35+
}
36+
37+
// Handle exports wrapped in the `deprecate` function
38+
// Ex/ https://github.com/nodejs/node/blob/e96072ad57348ce423a8dd7639dcc3d1c34e847d/lib/buffer.js#L1334
39+
40+
exports.identifiers.push(value.arguments[0].name);
41+
42+
break;
43+
}
44+
default: {
45+
// Not relevant
46+
}
47+
}
48+
});
49+
}
50+
51+
/**
52+
* @param {import('../types').ProgramExports} exports
53+
* @param {import('acorn').Identifier} rhs
54+
*/
55+
function handleIdentifier(exports, rhs) {
56+
// Something else, let's save it for when we're searching for
57+
// declarations
58+
if (rhs.name !== undefined) {
59+
exports.identifiers.push(rhs.name);
60+
}
61+
}
62+
63+
/**
64+
* @param {import('../types').ProgramExports} exports
65+
* @param {import('acorn').AssignmentExpression} param0
66+
*/
67+
export function handleExportedObjectExpression(exports, { right: rhs }) {
68+
// We need to move right until we find the value of the assignment.
69+
// (if `a=b`, we want `b`)
70+
while (rhs.type === 'AssignmentExpression') {
71+
rhs = rhs.right;
72+
}
73+
74+
switch (rhs.type) {
75+
/** @see https://github.com/estree/estree/blob/master/es5.md#newexpression */
76+
case 'NewExpression': {
77+
handleNewExpression(exports, rhs);
78+
break;
79+
}
80+
/** @see https://github.com/estree/estree/blob/master/es5.md#objectexpression */
81+
case 'ObjectExpression': {
82+
handleObjectExpression(exports, rhs);
83+
break;
84+
}
85+
/** @see https://github.com/estree/estree/blob/master/es5.md#identifier */
86+
case 'Identifier': {
87+
handleIdentifier(exports, rhs);
88+
break;
89+
}
90+
default: {
91+
// Not relevant
92+
break;
93+
}
94+
}
95+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
'use strict';
2+
3+
/**
4+
* @param {import('../types.d.ts').ProgramExports} exports
5+
* @param {import('acorn').AssignmentExpression} param1
6+
* @param {string} basename
7+
* @param {Record<string, number>} nameToLineNumberMap
8+
*/
9+
export function handleExportedPropertyExpression(
10+
exports,
11+
{ left: lhs, right: rhs, loc },
12+
basename,
13+
nameToLineNumberMap
14+
) {
15+
switch (rhs.type) {
16+
/** @see https://github.com/estree/estree/blob/master/es5.md#functionexpression */
17+
case 'FunctionExpression': {
18+
// module.exports.something = () => {}
19+
nameToLineNumberMap[`${basename}.${lhs.property.name}`] = loc.start.line;
20+
21+
break;
22+
}
23+
/** @see https://github.com/estree/estree/blob/master/es5.md#identifier */
24+
case 'Identifier': {
25+
// Save this for later in case it's referenced
26+
// module.exports.asd = something
27+
if (rhs.name === lhs.property.name) {
28+
exports.indirects[lhs.property.name] =
29+
`${basename}.${lhs.property.name}`;
30+
}
31+
32+
break;
33+
}
34+
default: {
35+
if (lhs.property.name !== undefined) {
36+
// Something else, let's save it for when we're searching for
37+
// declarations
38+
exports.identifiers.push(lhs.property.name);
39+
}
40+
41+
break;
42+
}
43+
}
44+
}

0 commit comments

Comments
 (0)