1
1
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
2
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 ;
29
10
30
11
use deno_ast:: swc:: ast:: ClassDecl ;
31
12
use deno_ast:: swc:: ast:: Decl ;
@@ -38,7 +19,6 @@ use deno_ast::swc::ast::FnDecl;
38
19
use deno_ast:: swc:: ast:: Ident ;
39
20
use deno_ast:: swc:: ast:: ImportSpecifier ;
40
21
use deno_ast:: swc:: ast:: ModuleDecl ;
41
- use deno_ast:: swc:: ast:: ModuleItem ;
42
22
use deno_ast:: swc:: ast:: TsEnumDecl ;
43
23
use deno_ast:: swc:: ast:: TsInterfaceDecl ;
44
24
use deno_ast:: swc:: ast:: TsModuleDecl ;
@@ -47,6 +27,7 @@ use deno_ast::swc::ast::TsTypeAliasDecl;
47
27
use deno_ast:: swc:: ast:: VarDecl ;
48
28
use deno_ast:: swc:: ast:: VarDeclKind ;
49
29
use deno_ast:: swc:: ast:: VarDeclarator ;
30
+ use deno_ast:: ModuleItemRef ;
50
31
use deno_ast:: ParsedSource ;
51
32
use deno_ast:: SourceRange ;
52
33
use deno_ast:: SourceRanged ;
@@ -58,18 +39,37 @@ use deno_graph::symbols::ModuleInfoRef;
58
39
use deno_graph:: symbols:: Symbol ;
59
40
use deno_graph:: symbols:: SymbolNodeRef ;
60
41
use deno_graph:: symbols:: UniqueSymbolId ;
42
+ use deno_graph:: EsParser ;
61
43
use deno_graph:: Module ;
62
44
use deno_graph:: ModuleGraph ;
63
- use deno_graph:: ModuleParser ;
64
45
use deno_graph:: ModuleSpecifier ;
65
46
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 ;
73
73
74
74
#[ derive( Debug ) ]
75
75
pub enum DocError {
@@ -132,7 +132,7 @@ pub struct DocParser<'a> {
132
132
impl < ' a > DocParser < ' a > {
133
133
pub fn new (
134
134
graph : & ' a ModuleGraph ,
135
- parser : & ' a dyn ModuleParser ,
135
+ parser : & ' a dyn EsParser ,
136
136
options : DocParserOptions ,
137
137
) -> Result < Self , anyhow:: Error > {
138
138
let root_symbol =
@@ -317,11 +317,8 @@ impl<'a> DocParser<'a> {
317
317
let referrer = module_info. specifier ( ) ;
318
318
let mut imports = vec ! [ ] ;
319
319
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 {
325
322
if let Some ( js_doc) =
326
323
js_doc_for_range ( parsed_source, & import_decl. range ( ) )
327
324
{
@@ -781,14 +778,14 @@ impl<'a> DocParser<'a> {
781
778
}
782
779
}
783
780
784
- fn get_imports_for_module_body (
781
+ fn get_imports_for_module_body < ' item > (
785
782
& self ,
786
- module_body : & [ ModuleItem ] ,
783
+ module_body : impl Iterator < Item = ModuleItemRef < ' item > > ,
787
784
) -> HashMap < String , Import > {
788
785
let mut imports = HashMap :: new ( ) ;
789
786
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 {
792
789
for specifier in & import_decl. specifiers {
793
790
let import = match specifier {
794
791
ImportSpecifier :: Named ( named_specifier) => Import {
@@ -835,9 +832,9 @@ impl<'a> DocParser<'a> {
835
832
let Some ( module_info) = module_info. esm ( ) else {
836
833
return Vec :: new ( ) ;
837
834
} ;
838
- let module_body = & module_info. source ( ) . module ( ) . body ;
835
+ let program = module_info. source ( ) . program_ref ( ) ;
839
836
840
- let imports = self . get_imports_for_module_body ( module_body ) ;
837
+ let imports = self . get_imports_for_module_body ( program . body ( ) ) ;
841
838
842
839
let mut reexports: Vec < node:: Reexport > = vec ! [ ] ;
843
840
@@ -853,8 +850,8 @@ impl<'a> DocParser<'a> {
853
850
} ) )
854
851
}
855
852
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 {
858
855
let r = match module_decl {
859
856
ModuleDecl :: ExportNamed ( named_export) => {
860
857
if let Some ( src) = & named_export. src {
@@ -1425,10 +1422,10 @@ fn parse_json_module_type(value: &serde_json::Value) -> TsTypeDef {
1425
1422
}
1426
1423
1427
1424
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| {
1429
1426
matches ! (
1430
1427
m,
1431
- ModuleItem :: ModuleDecl (
1428
+ ModuleItemRef :: ModuleDecl (
1432
1429
ModuleDecl :: Import ( _) | ModuleDecl :: TsImportEquals ( _)
1433
1430
)
1434
1431
)
0 commit comments