summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/doc/parser.rs8
-rw-r--r--cli/flags.rs64
-rw-r--r--cli/js/globals.ts2
-rw-r--r--cli/lib.rs34
4 files changed, 79 insertions, 29 deletions
diff --git a/cli/doc/parser.rs b/cli/doc/parser.rs
index 4b37c5fae..35694aa9a 100644
--- a/cli/doc/parser.rs
+++ b/cli/doc/parser.rs
@@ -184,6 +184,14 @@ impl DocParser {
pub async fn parse(&self, file_name: &str) -> Result<Vec<DocNode>, ErrBox> {
let source_code = self.loader.load_source_code(file_name).await?;
+ self.parse_source(file_name, source_code.as_str())
+ }
+
+ pub fn parse_source(
+ &self,
+ file_name: &str,
+ source_code: &str,
+ ) -> Result<Vec<DocNode>, ErrBox> {
let module_doc = self.parse_module(file_name, &source_code)?;
Ok(module_doc.exports)
}
diff --git a/cli/flags.rs b/cli/flags.rs
index 021a5074c..5f9740852 100644
--- a/cli/flags.rs
+++ b/cli/flags.rs
@@ -34,7 +34,7 @@ pub enum DenoSubcommand {
},
Doc {
json: bool,
- source_file: String,
+ source_file: Option<String>,
filter: Option<String>,
},
Eval {
@@ -566,7 +566,7 @@ fn upgrade_parse(flags: &mut Flags, matches: &clap::ArgMatches) {
fn doc_parse(flags: &mut Flags, matches: &clap::ArgMatches) {
reload_arg_parse(flags, matches);
- let source_file = matches.value_of("source_file").map(String::from).unwrap();
+ let source_file = matches.value_of("source_file").map(String::from);
let json = matches.is_present("json");
let filter = matches.value_of("filter").map(String::from);
flags.subcommand = DenoSubcommand::Doc {
@@ -581,7 +581,7 @@ fn types_subcommand<'a, 'b>() -> App<'a, 'b> {
.about("Print runtime TypeScript declarations")
.long_about(
"Print runtime TypeScript declarations.
- deno types > lib.deno_runtime.d.ts
+ deno types > lib.deno.d.ts
The declaration file could be saved and used for typing information.",
)
@@ -799,18 +799,22 @@ and is used to replace the current executable.",
fn doc_subcommand<'a, 'b>() -> App<'a, 'b> {
SubCommand::with_name("doc")
- .about("Show documentation for module")
+ .about("Show documentation for a module")
.long_about(
- "Show documentation for module.
+ "Show documentation for a module.
-Output documentation to terminal:
+Output documentation to standard output:
deno doc ./path/to/module.ts
-Show detail of symbol:
+Output documentation in JSON format:
+ deno doc --json ./path/to/module.ts
+
+Target a specific symbol:
deno doc ./path/to/module.ts MyClass.someField
-Output documentation in JSON format:
- deno doc --json ./path/to/module.ts",
+Show documentation for runtime built-ins:
+ deno doc
+ deno doc --builtin Deno.Listener",
)
.arg(reload_arg())
.arg(
@@ -819,11 +823,12 @@ Output documentation in JSON format:
.help("Output documentation in JSON format.")
.takes_value(false),
)
- .arg(
- Arg::with_name("source_file")
- .takes_value(true)
- .required(true),
- )
+ // TODO(nayeemrmn): Make `--builtin` a proper option. Blocked by
+ // https://github.com/clap-rs/clap/issues/1794. Currently `--builtin` is
+ // just a possible value of `source_file` so leading hyphens must be
+ // enabled.
+ .setting(clap::AppSettings::AllowLeadingHyphen)
+ .arg(Arg::with_name("source_file").takes_value(true))
.arg(
Arg::with_name("filter")
.help("Dot separated path to symbol.")
@@ -2534,7 +2539,7 @@ mod tests {
Flags {
subcommand: DenoSubcommand::Doc {
json: true,
- source_file: "path/to/module.ts".to_string(),
+ source_file: Some("path/to/module.ts".to_string()),
filter: None,
},
..Flags::default()
@@ -2552,12 +2557,39 @@ mod tests {
Flags {
subcommand: DenoSubcommand::Doc {
json: false,
- source_file: "path/to/module.ts".to_string(),
+ source_file: Some("path/to/module.ts".to_string()),
filter: Some("SomeClass.someField".to_string()),
},
..Flags::default()
}
);
+
+ let r = flags_from_vec_safe(svec!["deno", "doc"]);
+ assert_eq!(
+ r.unwrap(),
+ Flags {
+ subcommand: DenoSubcommand::Doc {
+ json: false,
+ source_file: None,
+ filter: None,
+ },
+ ..Flags::default()
+ }
+ );
+
+ let r =
+ flags_from_vec_safe(svec!["deno", "doc", "--builtin", "Deno.Listener"]);
+ assert_eq!(
+ r.unwrap(),
+ Flags {
+ subcommand: DenoSubcommand::Doc {
+ json: false,
+ source_file: Some("--builtin".to_string()),
+ filter: Some("Deno.Listener".to_string()),
+ },
+ ..Flags::default()
+ }
+ );
}
#[test]
diff --git a/cli/js/globals.ts b/cli/js/globals.ts
index 6eedb9289..0aed3a252 100644
--- a/cli/js/globals.ts
+++ b/cli/js/globals.ts
@@ -25,7 +25,7 @@ import * as streams from "./web/streams/mod.ts";
import { core } from "./core.ts";
// This global augmentation is just enough types to be able to build Deno,
-// the runtime types are fully defined in `lib.deno_runtime.d.ts`.
+// the runtime types are fully defined in `lib.deno.*.d.ts`.
declare global {
interface CallSite {
getThis(): unknown;
diff --git a/cli/lib.rs b/cli/lib.rs
index a87846c11..79fe312a1 100644
--- a/cli/lib.rs
+++ b/cli/lib.rs
@@ -251,6 +251,15 @@ async fn print_file_info(
Ok(())
}
+fn get_types() -> String {
+ format!(
+ "{}\n{}\n{}",
+ crate::js::DENO_NS_LIB,
+ crate::js::SHARED_GLOBALS_LIB,
+ crate::js::WINDOW_LIB
+ )
+}
+
async fn info_command(
flags: Flags,
file: Option<String>,
@@ -369,13 +378,12 @@ async fn bundle_command(
async fn doc_command(
flags: Flags,
- source_file: String,
+ source_file: Option<String>,
json: bool,
maybe_filter: Option<String>,
) -> Result<(), ErrBox> {
let global_state = GlobalState::new(flags.clone())?;
- let module_specifier =
- ModuleSpecifier::resolve_url_or_path(&source_file).unwrap();
+ let source_file = source_file.unwrap_or_else(|| "--builtin".to_string());
impl DocFileLoader for SourceFileFetcher {
fn load_source_code(
@@ -397,9 +405,16 @@ async fn doc_command(
let loader = Box::new(global_state.file_fetcher.clone());
let doc_parser = doc::DocParser::new(loader);
- let parse_result = doc_parser
- .parse_with_reexports(&module_specifier.to_string())
- .await;
+
+ let parse_result = if source_file == "--builtin" {
+ doc_parser.parse_source("lib.deno.d.ts", get_types().as_str())
+ } else {
+ let module_specifier =
+ ModuleSpecifier::resolve_url_or_path(&source_file).unwrap();
+ doc_parser
+ .parse_with_reexports(&module_specifier.to_string())
+ .await
+ };
let doc_nodes = match parse_result {
Ok(nodes) => nodes,
@@ -580,12 +595,7 @@ pub fn main() {
return;
}
DenoSubcommand::Types => {
- let types = format!(
- "{}\n{}\n{}",
- crate::js::DENO_NS_LIB,
- crate::js::SHARED_GLOBALS_LIB,
- crate::js::WINDOW_LIB
- );
+ let types = get_types();
if let Err(e) = write_to_stdout_ignore_sigpipe(types.as_bytes()) {
eprintln!("{}", e);
std::process::exit(1);