Skip to content

Commit 2519261

Browse files
authored
refactor: handle using program instead of module (#649)
1 parent 17b4603 commit 2519261

File tree

4 files changed

+58
-62
lines changed

4 files changed

+58
-62
lines changed

Cargo.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ repository = "https://github.com/denoland/deno_doc"
1111
members = ["lib"]
1212

1313
[workspace.dependencies]
14-
deno_graph = { version = "0.83.0", default-features = false, features = ["symbols"] }
15-
deno_ast = { version = "0.42.0" }
14+
deno_graph = { version = "0.84.0", default-features = false, features = ["symbols"] }
15+
deno_ast = { version = "0.43.0" }
1616
import_map = "0.20.0"
1717
serde = { version = "1.0.204", features = ["derive"] }
1818

src/parser.rs

Lines changed: 48 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,12 @@
11
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
22

3-
use crate::diagnostics::DiagnosticsCollector;
4-
use crate::diagnostics::DocDiagnostic;
5-
use crate::js_doc::JsDoc;
6-
use crate::node;
7-
use crate::node::DeclarationKind;
8-
use crate::node::DocNode;
9-
use crate::node::ModuleDoc;
10-
use crate::node::NamespaceDef;
11-
use crate::ts_type::infer_simple_ts_type_from_init;
12-
use crate::ts_type::PropertyDef;
13-
use crate::ts_type::TsTypeDef;
14-
use crate::ts_type::TsTypeDefKind;
15-
use crate::ts_type::TsTypeLiteralDef;
16-
use crate::util::graph::resolve_deno_graph_module;
17-
use crate::util::swc::get_location;
18-
use crate::util::swc::get_text_info_location;
19-
use crate::util::swc::js_doc_for_range;
20-
use crate::util::swc::module_export_name_value;
21-
use crate::util::swc::module_js_doc_for_source;
22-
use crate::util::symbol::get_module_info;
23-
use crate::variable::VariableDef;
24-
use crate::visibility::SymbolVisibility;
25-
use crate::DocNodeKind;
26-
use crate::ImportDef;
27-
use crate::Location;
28-
use crate::ReexportKind;
3+
use std::borrow::Cow;
4+
use std::cell::RefCell;
5+
use std::collections::HashMap;
6+
use std::collections::HashSet;
7+
use std::error::Error;
8+
use std::fmt;
9+
use std::rc::Rc;
2910

3011
use deno_ast::swc::ast::ClassDecl;
3112
use deno_ast::swc::ast::Decl;
@@ -38,7 +19,6 @@ use deno_ast::swc::ast::FnDecl;
3819
use deno_ast::swc::ast::Ident;
3920
use deno_ast::swc::ast::ImportSpecifier;
4021
use deno_ast::swc::ast::ModuleDecl;
41-
use deno_ast::swc::ast::ModuleItem;
4222
use deno_ast::swc::ast::TsEnumDecl;
4323
use deno_ast::swc::ast::TsInterfaceDecl;
4424
use deno_ast::swc::ast::TsModuleDecl;
@@ -47,6 +27,7 @@ use deno_ast::swc::ast::TsTypeAliasDecl;
4727
use deno_ast::swc::ast::VarDecl;
4828
use deno_ast::swc::ast::VarDeclKind;
4929
use deno_ast::swc::ast::VarDeclarator;
30+
use deno_ast::ModuleItemRef;
5031
use deno_ast::ParsedSource;
5132
use deno_ast::SourceRange;
5233
use deno_ast::SourceRanged;
@@ -58,18 +39,37 @@ use deno_graph::symbols::ModuleInfoRef;
5839
use deno_graph::symbols::Symbol;
5940
use deno_graph::symbols::SymbolNodeRef;
6041
use deno_graph::symbols::UniqueSymbolId;
42+
use deno_graph::EsParser;
6143
use deno_graph::Module;
6244
use deno_graph::ModuleGraph;
63-
use deno_graph::ModuleParser;
6445
use deno_graph::ModuleSpecifier;
6546

66-
use std::borrow::Cow;
67-
use std::cell::RefCell;
68-
use std::collections::HashMap;
69-
use std::collections::HashSet;
70-
use std::error::Error;
71-
use std::fmt;
72-
use std::rc::Rc;
47+
use crate::diagnostics::DiagnosticsCollector;
48+
use crate::diagnostics::DocDiagnostic;
49+
use crate::js_doc::JsDoc;
50+
use crate::node;
51+
use crate::node::DeclarationKind;
52+
use crate::node::DocNode;
53+
use crate::node::ModuleDoc;
54+
use crate::node::NamespaceDef;
55+
use crate::ts_type::infer_simple_ts_type_from_init;
56+
use crate::ts_type::PropertyDef;
57+
use crate::ts_type::TsTypeDef;
58+
use crate::ts_type::TsTypeDefKind;
59+
use crate::ts_type::TsTypeLiteralDef;
60+
use crate::util::graph::resolve_deno_graph_module;
61+
use crate::util::swc::get_location;
62+
use crate::util::swc::get_text_info_location;
63+
use crate::util::swc::js_doc_for_range;
64+
use crate::util::swc::module_export_name_value;
65+
use crate::util::swc::module_js_doc_for_source;
66+
use crate::util::symbol::get_module_info;
67+
use crate::variable::VariableDef;
68+
use crate::visibility::SymbolVisibility;
69+
use crate::DocNodeKind;
70+
use crate::ImportDef;
71+
use crate::Location;
72+
use crate::ReexportKind;
7373

7474
#[derive(Debug)]
7575
pub enum DocError {
@@ -132,7 +132,7 @@ pub struct DocParser<'a> {
132132
impl<'a> DocParser<'a> {
133133
pub fn new(
134134
graph: &'a ModuleGraph,
135-
parser: &'a dyn ModuleParser,
135+
parser: &'a dyn EsParser,
136136
options: DocParserOptions,
137137
) -> Result<Self, anyhow::Error> {
138138
let root_symbol =
@@ -317,11 +317,8 @@ impl<'a> DocParser<'a> {
317317
let referrer = module_info.specifier();
318318
let mut imports = vec![];
319319

320-
for node in &parsed_source.module().body {
321-
if let deno_ast::swc::ast::ModuleItem::ModuleDecl(ModuleDecl::Import(
322-
import_decl,
323-
)) = node
324-
{
320+
for node in parsed_source.program_ref().body() {
321+
if let ModuleItemRef::ModuleDecl(ModuleDecl::Import(import_decl)) = node {
325322
if let Some(js_doc) =
326323
js_doc_for_range(parsed_source, &import_decl.range())
327324
{
@@ -781,14 +778,14 @@ impl<'a> DocParser<'a> {
781778
}
782779
}
783780

784-
fn get_imports_for_module_body(
781+
fn get_imports_for_module_body<'item>(
785782
&self,
786-
module_body: &[ModuleItem],
783+
module_body: impl Iterator<Item = ModuleItemRef<'item>>,
787784
) -> HashMap<String, Import> {
788785
let mut imports = HashMap::new();
789786

790-
for node in module_body.iter() {
791-
if let ModuleItem::ModuleDecl(ModuleDecl::Import(import_decl)) = node {
787+
for node in module_body {
788+
if let ModuleItemRef::ModuleDecl(ModuleDecl::Import(import_decl)) = node {
792789
for specifier in &import_decl.specifiers {
793790
let import = match specifier {
794791
ImportSpecifier::Named(named_specifier) => Import {
@@ -835,9 +832,9 @@ impl<'a> DocParser<'a> {
835832
let Some(module_info) = module_info.esm() else {
836833
return Vec::new();
837834
};
838-
let module_body = &module_info.source().module().body;
835+
let program = module_info.source().program_ref();
839836

840-
let imports = self.get_imports_for_module_body(module_body);
837+
let imports = self.get_imports_for_module_body(program.body());
841838

842839
let mut reexports: Vec<node::Reexport> = vec![];
843840

@@ -853,8 +850,8 @@ impl<'a> DocParser<'a> {
853850
}))
854851
}
855852

856-
for node in module_body.iter() {
857-
if let deno_ast::swc::ast::ModuleItem::ModuleDecl(module_decl) = node {
853+
for node in program.body() {
854+
if let ModuleItemRef::ModuleDecl(module_decl) = node {
858855
let r = match module_decl {
859856
ModuleDecl::ExportNamed(named_export) => {
860857
if let Some(src) = &named_export.src {
@@ -1425,10 +1422,10 @@ fn parse_json_module_type(value: &serde_json::Value) -> TsTypeDef {
14251422
}
14261423

14271424
fn module_has_import(module_info: &EsModuleInfo) -> bool {
1428-
module_info.source().module().body.iter().any(|m| {
1425+
module_info.source().program_ref().body().any(|m| {
14291426
matches!(
14301427
m,
1431-
ModuleItem::ModuleDecl(
1428+
ModuleItemRef::ModuleDecl(
14321429
ModuleDecl::Import(_) | ModuleDecl::TsImportEquals(_)
14331430
)
14341431
)

src/util/swc.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,8 @@ pub(crate) fn module_js_doc_for_source(
7171
parsed_source: &ParsedSource,
7272
) -> Option<Option<(JsDoc, SourceRange)>> {
7373
let shebang_length = parsed_source
74-
.module()
75-
.shebang
76-
.as_ref()
74+
.program_ref()
75+
.shebang()
7776
.map_or(0, |shebang| shebang.len());
7877
let pos_leading_comment =
7978
parsed_source.comments().leading_map().keys().min()?;

0 commit comments

Comments
 (0)