From 4b927ffd10bc3300a68d16555dd79b83fba56b4b Mon Sep 17 00:00:00 2001 From: Gerrit Birkeland Date: Sun, 10 Oct 2021 11:19:59 -0600 Subject: [PATCH] Add support for initializers which are identifiers Resolves #1730. --- CHANGELOG.md | 4 ++++ src/lib/converter/convert-expression.ts | 18 +++++++++++++++++- src/test/converter/exports/specs.json | 8 ++++---- src/test/converter/function/specs.json | 2 +- src/test/converter/variables/specs.json | 2 +- 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eddc350c8..9fe826f58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Unreleased +### Features + +- Added support for displaying identifiers & property access expressions in initializers, #1730. + ### Bug Fixes - Fixed flash when navigating to a second page when OS theme does not match selected theme, #1709. diff --git a/src/lib/converter/convert-expression.ts b/src/lib/converter/convert-expression.ts index d3cb461c0..59e4fab86 100644 --- a/src/lib/converter/convert-expression.ts +++ b/src/lib/converter/convert-expression.ts @@ -17,7 +17,7 @@ export function convertDefaultValue( } } -export function convertExpression(expression: ts.Expression) { +export function convertExpression(expression: ts.Expression): string { switch (expression.kind) { case ts.SyntaxKind.StringLiteral: case ts.SyntaxKind.TrueKeyword: @@ -25,6 +25,7 @@ export function convertExpression(expression: ts.Expression) { case ts.SyntaxKind.NullKeyword: case ts.SyntaxKind.NumericLiteral: case ts.SyntaxKind.PrefixUnaryExpression: + case ts.SyntaxKind.Identifier: return expression.getText(); } @@ -42,6 +43,21 @@ export function convertExpression(expression: ts.Expression) { return "{}"; } + // a.b.c.d + if (ts.isPropertyAccessExpression(expression)) { + const parts = [expression.name.getText()]; + let iter = expression.expression; + while (ts.isPropertyAccessExpression(iter)) { + parts.unshift(iter.name.getText()); + iter = iter.expression; + } + + if (ts.isIdentifier(iter)) { + parts.unshift(iter.text); + return parts.join("."); + } + } + // More complex expressions are generally not useful in the documentation. // Show that there was a value, but not specifics. return "..."; diff --git a/src/test/converter/exports/specs.json b/src/test/converter/exports/specs.json index 16d99d2d4..6956cbd7d 100644 --- a/src/test/converter/exports/specs.json +++ b/src/test/converter/exports/specs.json @@ -110,7 +110,7 @@ "type": "literal", "value": 1 }, - "defaultValue": "..." + "defaultValue": "Mod.a" }, { "id": 24, @@ -123,7 +123,7 @@ "id": 29, "name": "__module" }, - "defaultValue": "..." + "defaultValue": "Mod" }, { "id": 27, @@ -136,7 +136,7 @@ "id": 29, "name": "a" }, - "defaultValue": "..." + "defaultValue": "Mod.a" }, { "id": 25, @@ -149,7 +149,7 @@ "id": 29, "name": "__module" }, - "defaultValue": "..." + "defaultValue": "Mod" } ], "groups": [ diff --git a/src/test/converter/function/specs.json b/src/test/converter/function/specs.json index 50f0aa6b2..b6541c84f 100644 --- a/src/test/converter/function/specs.json +++ b/src/test/converter/function/specs.json @@ -1090,7 +1090,7 @@ "type": "intrinsic", "name": "number" }, - "defaultValue": "..." + "defaultValue": "Number.NaN" }, { "id": 18, diff --git a/src/test/converter/variables/specs.json b/src/test/converter/variables/specs.json index 2992c2dd2..2b857e717 100644 --- a/src/test/converter/variables/specs.json +++ b/src/test/converter/variables/specs.json @@ -911,7 +911,7 @@ "type": "intrinsic", "name": "string" }, - "defaultValue": "..." + "defaultValue": "z" } ], "groups": [