summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2020-08-23 15:48:35 +0200
committerGitHub <noreply@github.com>2020-08-23 15:48:35 +0200
commit2600d5ac090536117109f0b72e2d52f06bf4523a (patch)
tree6a36f47758d14dd5cc130dbc7cec0085e9671327
parentc1558beffbb5f7941059be2e4e91ba2d1454adaa (diff)
fix(doc): stack overflow for .d.ts files (#7167)
-rw-r--r--cli/main.rs10
-rw-r--r--cli/swc_util.rs6
-rw-r--r--cli/tests/deno_doc.out2
-rw-r--r--cli/tests/deno_doc.ts4
-rw-r--r--cli/tests/deno_doc_builtin.out3
-rw-r--r--cli/tests/integration_tests.rs10
6 files changed, 33 insertions, 2 deletions
diff --git a/cli/main.rs b/cli/main.rs
index 353b7763f..7cf698d5a 100644
--- a/cli/main.rs
+++ b/cli/main.rs
@@ -545,16 +545,22 @@ async fn doc_command(
let loader = Box::new(global_state.file_fetcher.clone());
let doc_parser = doc::DocParser::new(loader, private);
- let media_type = map_file_extension(&PathBuf::from(&source_file));
- let syntax = swc_util::get_syntax_for_media_type(media_type);
let parse_result = if source_file == "--builtin" {
+ let syntax = swc_util::get_syntax_for_dts();
doc_parser.parse_source(
"lib.deno.d.ts",
syntax,
get_types(flags.unstable).as_str(),
)
} else {
+ let path = PathBuf::from(&source_file);
+ let syntax = if path.ends_with("d.ts") {
+ swc_util::get_syntax_for_dts()
+ } else {
+ let media_type = map_file_extension(&path);
+ swc_util::get_syntax_for_media_type(media_type)
+ };
let module_specifier =
ModuleSpecifier::resolve_url_or_path(&source_file).unwrap();
doc_parser
diff --git a/cli/swc_util.rs b/cli/swc_util.rs
index be1e6cad7..934bed01a 100644
--- a/cli/swc_util.rs
+++ b/cli/swc_util.rs
@@ -80,6 +80,12 @@ fn get_default_ts_config() -> TsConfig {
ts_config
}
+pub fn get_syntax_for_dts() -> Syntax {
+ let mut ts_config = TsConfig::default();
+ ts_config.dts = true;
+ Syntax::Typescript(ts_config)
+}
+
pub fn get_syntax_for_media_type(media_type: MediaType) -> Syntax {
match media_type {
MediaType::JavaScript => Syntax::Es(get_default_es_config()),
diff --git a/cli/tests/deno_doc.out b/cli/tests/deno_doc.out
new file mode 100644
index 000000000..86a77a9cc
--- /dev/null
+++ b/cli/tests/deno_doc.out
@@ -0,0 +1,2 @@
+[WILDCARD]
+function foo[WILDCARD] \ No newline at end of file
diff --git a/cli/tests/deno_doc.ts b/cli/tests/deno_doc.ts
new file mode 100644
index 000000000..92ba2f174
--- /dev/null
+++ b/cli/tests/deno_doc.ts
@@ -0,0 +1,4 @@
+/** Some JSDoc */
+// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
+export function foo() {
+}
diff --git a/cli/tests/deno_doc_builtin.out b/cli/tests/deno_doc_builtin.out
new file mode 100644
index 000000000..b4a90d6bc
--- /dev/null
+++ b/cli/tests/deno_doc_builtin.out
@@ -0,0 +1,3 @@
+[WILDCARD]
+namespace Deno
+[WILDCARD] \ No newline at end of file
diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs
index 690b30798..2b7ffa26b 100644
--- a/cli/tests/integration_tests.rs
+++ b/cli/tests/integration_tests.rs
@@ -2262,6 +2262,16 @@ itest!(deno_lint_glob {
exit_code: 1,
});
+itest!(deno_doc_builtin {
+ args: "doc",
+ output: "deno_doc_builtin.out",
+});
+
+itest!(deno_doc {
+ args: "doc deno_doc.ts",
+ output: "deno_doc.out",
+});
+
itest!(compiler_js_error {
args: "run --unstable compiler_js_error.ts",
output: "compiler_js_error.ts.out",