Skip to content

Commit 1de3794

Browse files
committed
cleanup
Signed-off-by: flakey5 <[email protected]>
1 parent 84583d9 commit 1de3794

File tree

5 files changed

+152
-102
lines changed

5 files changed

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

0 commit comments

Comments
 (0)