Skip to content

Commit d8ff91a

Browse files
authored
Merge pull request #93 from webdoc-labs/fix/default-ve
Resolve default value expressions for negative numbers, fail in CI on linting & unit-testing
2 parents 2509bd4 + b20b260 commit d8ff91a

File tree

4 files changed

+33
-4
lines changed

4 files changed

+33
-4
lines changed

azure-pipelines.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,11 @@ steps:
3636
rush flow
3737
displayName: "Type check"
3838
workingDirectory: webdoc
39-
continueOnError: true
4039

4140
- script: |
4241
rush lint
4342
displayName: "Lint"
4443
workingDirectory: webdoc
45-
continueOnError: true
4644

4745
- script: |
4846
rush unit-test

packages/webdoc-default-template/helper/renderer-plugins/signature.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ exports.signaturePlugin = {
6262
if (!options.noTail && doc.dataType) {
6363
signature += ": " + linker.linkTo(doc.dataType, undefined, {htmlSafe: false});
6464
}
65+
if (doc.defaultValue) {
66+
signature += " = " + doc.defaultValue;
67+
}
6568
break;
6669
case "ClassDoc":
6770
if (doc.extends) {

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import {
77
type ArrowFunctionExpression,
8+
type BabelNodeExpression,
89
type FunctionExpression,
910
type MemberExpression,
1011
type Node,
@@ -18,6 +19,7 @@ import {
1819
isClassExpression,
1920
isClassMethod,
2021
isClassProperty,
22+
isExpression,
2123
isExpressionStatement,
2224
isFunctionDeclaration,
2325
isFunctionExpression,
@@ -40,6 +42,7 @@ import {
4042
isTSPropertySignature,
4143
isTSTypeElement,
4244
isThisExpression,
45+
isUnaryExpression,
4346
isVariableDeclarator,
4447
} from "@babel/types";
4548

@@ -129,6 +132,16 @@ export default function extractSymbol(
129132
nodeSymbol.meta.dataType = createSimpleKeywordType("boolean");
130133
}
131134
}
135+
} else if (isExpression(node.value)) {
136+
const defaultValue = resolveExpression(node.value);
137+
138+
if (typeof defaultValue === "string") {
139+
nodeSymbol.meta.defaultValue = defaultValue;
140+
141+
if (!isNaN(parseFloat(defaultValue))) {
142+
nodeSymbol.meta.dataType = createSimpleKeywordType("number");
143+
}
144+
}
132145
}
133146
} else if (isClassDeclaration(node) || isClassExpression(node)) {
134147
// Example:
@@ -391,6 +404,21 @@ function resolveRootObject(expression: MemberExpression): string {
391404
return isThisExpression(expression) ? "this" : expression.name;
392405
}
393406

407+
// Used to get default value
408+
// TODO: Resolve a lot more expressions
409+
function resolveExpression(expression: BabelNodeExpression): string | void {
410+
if (isLiteral(expression)) {
411+
if (isStringLiteral(expression)) {
412+
return `"${expression.value}"`;
413+
} else {
414+
return `${expression.value}`;
415+
}
416+
}
417+
if (isUnaryExpression(expression)) {
418+
return `-${resolveExpression(expression.argument) || ""}`;
419+
}
420+
}
421+
394422
// Whether the member expression assigns to this, e.g.
395423
// this.member.inside.deep -> true
396424
// top.inside -> false

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ describe("@webdoc/parser.LanguageIntegration{@lang ts}", function() {
88
it("should parse classes correctly", function() {
99
let symtree = buildSymbolTree(`
1010
class ClassName {
11-
private readonly initProperty: number = 11;
11+
private readonly initProperty: number = -11;
1212
1313
constructor() {
1414
/**
@@ -47,7 +47,7 @@ describe("@webdoc/parser.LanguageIntegration{@lang ts}", function() {
4747
expect(symbolInitProperty.meta.dataType).to.not.equal(undefined);
4848
expect(symbolInitProperty.meta.dataType[0]).to.equal("number");
4949
expect(symbolInitProperty.meta.access).to.equal("private");
50-
expect(symbolInitProperty.meta.defaultValue).to.equal("11");
50+
expect(symbolInitProperty.meta.defaultValue).to.equal("-11");
5151
expect(symbolInitProperty.comment).to.not.equal("");
5252
expect(symbolInitProperty.meta.readonly).to.equal(true);
5353
});

0 commit comments

Comments
 (0)