Skip to content

Commit d52b52e

Browse files
authored
Merge pull request #148 from webdoc-labs/fix/assignment-pattern-type-infererence
Fix: Type inference for parameters with assignment pattern
2 parents f0d5432 + edd31b1 commit d52b52e

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

packages/webdoc-parser/src/symbols-babel/extract-metadata.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
type BabelNodeQualifiedName,
99
type BabelNodeTSTypeAnnotation,
1010
type BabelNodeTypeAnnotation,
11+
type BabelTSTypeAnnotation,
1112
type ClassDeclaration,
1213
type ClassExpression,
1314
type ClassMethod,
@@ -196,6 +197,7 @@ export function extractParams(
196197
for (let i = 0; i < nodeParams.length; i++) {
197198
let paramNode = nodeParams[i];
198199
let param: ?$Shape<Param>;
200+
let paramTypeAnnotation: ?BabelTSTypeAnnotation;
199201

200202
if (isTSParameterProperty(paramNode)) {
201203
paramNode = paramNode.parameter;
@@ -216,6 +218,7 @@ export function extractParams(
216218
} else if (isAssignmentPattern(paramNode)) {
217219
const extraRaw = paramNode.right.extra && paramNode.right.extra.raw;
218220

221+
paramTypeAnnotation = paramNode.left.typeAnnotation;
219222
param = {
220223
identifier: paramNode.left.name,
221224
optional: paramNode.optional || false,
@@ -233,9 +236,12 @@ export function extractParams(
233236
console.error("Parameter node couldn't be parsed");
234237
}
235238

236-
if (param && paramNode.typeAnnotation) {
239+
if (param && paramTypeAnnotation) {
240+
param.dataType = extractType(paramTypeAnnotation);
241+
} else if (param && paramNode.typeAnnotation) {
237242
param.dataType = extractType(paramNode.typeAnnotation);
238243
}
244+
239245
if (param) {
240246
params.push(param);
241247
}

packages/webdoc-parser/test/lang-ts.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,4 +194,13 @@ describe("@webdoc/parser.LanguageIntegration{@lang ts}", function() {
194194
expect(symbolTree.members[0].members[0].meta.dataType[0]).to.equal("Array<T>");
195195
expect(symbolTree.members[0].members[1].meta.dataType[0]).to.equal("Map<K, V>");
196196
});
197+
198+
it("should parse parameter types", function() {
199+
const symbolTree = buildSymbolTree(`
200+
function mark(what: object | string = 'test') {
201+
}
202+
`);
203+
204+
expect(symbolTree.members[0].meta.params[0].dataType[0]).to.equal("object | string");
205+
});
197206
});

0 commit comments

Comments
 (0)