summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2020-05-19 18:55:06 -0400
committerGitHub <noreply@github.com>2020-05-19 18:55:06 -0400
commit0fb5f23466a84835cb1b4202d06ec53dc1592961 (patch)
tree947b69424d02b53888eb2f8b665e692107a6ef68
parent949061c4b68e41aa93da97125cd15ad8c9e7f44f (diff)
fix(doc): crash on formatting type predicate (#5651)
-rw-r--r--cli/doc/printer.rs3
-rw-r--r--cli/doc/tests.rs13
2 files changed, 16 insertions, 0 deletions
diff --git a/cli/doc/printer.rs b/cli/doc/printer.rs
index 7a6b9e731..f7f41079d 100644
--- a/cli/doc/printer.rs
+++ b/cli/doc/printer.rs
@@ -127,6 +127,9 @@ fn render_params(params: Vec<doc::ParamDef>) -> String {
}
fn render_ts_type(ts_type: doc::ts_type::TsTypeDef) -> String {
+ if ts_type.kind.is_none() {
+ return "<UNIMPLEMENTED>".to_string();
+ }
let kind = ts_type.kind.unwrap();
match kind {
TsTypeDefKind::Array => {
diff --git a/cli/doc/tests.rs b/cli/doc/tests.rs
index f8e693c9a..7f2c18639 100644
--- a/cli/doc/tests.rs
+++ b/cli/doc/tests.rs
@@ -162,6 +162,19 @@ export function foo(a: string, b?: number, cb: (...cbArgs: unknown[]) => void, .
}
#[tokio::test]
+async fn format_type_predicate() {
+ let source_code = r#"
+export function isFish(pet: Fish | Bird): pet is Fish {
+ return (pet as Fish).swim !== undefined;
+}
+"#;
+ let loader =
+ TestLoader::new(vec![("test.ts".to_string(), source_code.to_string())]);
+ let entries = DocParser::new(loader).parse("test.ts").await.unwrap();
+ super::printer::format(entries);
+}
+
+#[tokio::test]
async fn export_fn2() {
let source_code = r#"
interface AssignOpts {