diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-08-23 15:48:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-23 15:48:35 +0200 |
commit | 2600d5ac090536117109f0b72e2d52f06bf4523a (patch) | |
tree | 6a36f47758d14dd5cc130dbc7cec0085e9671327 | |
parent | c1558beffbb5f7941059be2e4e91ba2d1454adaa (diff) |
fix(doc): stack overflow for .d.ts files (#7167)
-rw-r--r-- | cli/main.rs | 10 | ||||
-rw-r--r-- | cli/swc_util.rs | 6 | ||||
-rw-r--r-- | cli/tests/deno_doc.out | 2 | ||||
-rw-r--r-- | cli/tests/deno_doc.ts | 4 | ||||
-rw-r--r-- | cli/tests/deno_doc_builtin.out | 3 | ||||
-rw-r--r-- | cli/tests/integration_tests.rs | 10 |
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", |