Skip to content

Commit 7b5cfc9

Browse files
authored
feat: upgrade to deno_ast 0.9 (#332)
1 parent 955e7f3 commit 7b5cfc9

File tree

9 files changed

+129
-100
lines changed

9 files changed

+129
-100
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ jobs:
3636
- name: Build debug
3737
if: matrix.config.kind == 'test_debug'
3838
run: cargo build
39+
#- name: Lint
40+
# if: matrix.config.kind == 'test_debug'
41+
# run: cargo clippy
3942
- name: Test debug
4043
if: matrix.config.kind == 'test_debug'
4144
run: cargo test

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "dprint-plugin-typescript"
3-
version = "0.61.0"
3+
version = "0.62.0"
44
authors = ["David Sherret <[email protected]>"]
55
edition = "2021"
66
homepage = "https://github.com/dprint/dprint-plugin-typescript"
@@ -26,7 +26,7 @@ tracing = ["dprint-core/tracing"]
2626

2727
[dependencies]
2828
anyhow = "1.0.51"
29-
deno_ast = { version = "0.8.0", features = ["view"] }
29+
deno_ast = { version = "0.9.0", features = ["view"] }
3030
dprint-core = { version = "0.49.0", features = ["formatting"] }
3131
rustc-hash = "1.1.0"
3232
serde = { version = "1.0.118", features = ["derive"] }

src/generation/parser.rs renamed to src/generation/generate.rs

Lines changed: 47 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ fn gen_node_with_inner_gen<'a>(node: Node<'a>, context: &mut Context<'a>, inner_
169169
Node::AwaitExpr(node) => gen_await_expr(node, context),
170170
Node::BinExpr(node) => gen_binary_expr(node, context),
171171
Node::CallExpr(node) => gen_call_expr(node, context),
172+
Node::Import(_) => "import".into(),
172173
Node::ClassExpr(node) => gen_class_expr(node, context),
173174
Node::CondExpr(node) => gen_conditional_expr(node, context),
174175
Node::ExprOrSpread(node) => gen_expr_or_spread(node, context),
@@ -178,6 +179,7 @@ fn gen_node_with_inner_gen<'a>(node: Node<'a>, context: &mut Context<'a>, inner_
178179
Node::AssignProp(node) => gen_assign_prop(node, context),
179180
Node::MemberExpr(node) => gen_member_expr(node, context),
180181
Node::MetaPropExpr(node) => gen_meta_prop_expr(node, context),
182+
Node::SuperPropExpr(node) => gen_super_prop_expr(node, context),
181183
Node::NewExpr(node) => gen_new_expr(node, context),
182184
Node::ObjectLit(node) => gen_object_lit(node, context),
183185
Node::OptChainExpr(node) => gen_node(node.expr.into(), context),
@@ -474,7 +476,7 @@ fn gen_class_prop<'a>(node: &'a ClassProp, context: &mut Context<'a>) -> PrintIt
474476
type_ann: &node.type_ann,
475477
is_static: node.is_static(),
476478
decorators: &node.decorators,
477-
computed: node.key.kind() == NodeKind::ComputedPropName,
479+
computed: matches!(node.key, PropName::Computed(_)),
478480
is_declare: node.declare(),
479481
accessibility: node.accessibility(),
480482
is_abstract: node.is_abstract(),
@@ -1925,9 +1927,9 @@ fn gen_call_expr<'a>(node: &'a CallExpr, context: &mut Context<'a>) -> PrintItem
19251927
items.extend(gen_test_library_arguments(&node.args, context));
19261928
return items;
19271929

1928-
fn gen_test_library_callee<'a>(callee: &'a ExprOrSuper, context: &mut Context<'a>) -> PrintItems {
1930+
fn gen_test_library_callee<'a>(callee: &'a Callee, context: &mut Context<'a>) -> PrintItems {
19291931
match callee {
1930-
ExprOrSuper::Expr(expr) => match expr {
1932+
Callee::Expr(expr) => match expr {
19311933
Expr::Member(member_expr) => {
19321934
let mut items = PrintItems::new();
19331935
items.extend(gen_node(member_expr.obj.into(), context));
@@ -2241,7 +2243,7 @@ fn should_add_parens_around_expr(node: Node, context: &Context) -> bool {
22412243
}
22422244
Node::ExprStmt(_) => return true,
22432245
Node::MemberExpr(expr) => {
2244-
if expr.computed() && expr.prop.span().contains(original_node.span()) {
2246+
if matches!(expr.prop, MemberProp::Computed(_)) && expr.prop.span().contains(original_node.span()) {
22452247
return false;
22462248
}
22472249
}
@@ -2315,6 +2317,11 @@ fn gen_meta_prop_expr<'a>(node: &'a MetaPropExpr, context: &mut Context<'a>) ->
23152317
gen_for_flattened_member_like_expr(flattened_meta_prop_expr, context)
23162318
}
23172319

2320+
fn gen_super_prop_expr<'a>(node: &'a SuperPropExpr, context: &mut Context<'a>) -> PrintItems {
2321+
let flattened_member_expr = flatten_member_like_expr(node.into(), context.program);
2322+
gen_for_flattened_member_like_expr(flattened_member_expr, context)
2323+
}
2324+
23182325
fn gen_new_expr<'a>(node: &'a NewExpr, context: &mut Context<'a>) -> PrintItems {
23192326
let mut items = PrintItems::new();
23202327
items.push_str("new ");
@@ -2433,7 +2440,13 @@ fn should_skip_paren_expr(node: &ParenExpr, context: &Context) -> bool {
24332440
let parent = node.parent();
24342441
if matches!(
24352442
parent.kind(),
2436-
NodeKind::ParenExpr | NodeKind::ExprStmt | NodeKind::JSXElement | NodeKind::JSXFragment | NodeKind::JSXExprContainer | NodeKind::UpdateExpr
2443+
NodeKind::ParenExpr
2444+
| NodeKind::ExprStmt
2445+
| NodeKind::JSXElement
2446+
| NodeKind::JSXFragment
2447+
| NodeKind::JSXExprContainer
2448+
| NodeKind::UpdateExpr
2449+
| NodeKind::ComputedPropName
24372450
) {
24382451
return true;
24392452
}
@@ -2455,7 +2468,7 @@ fn should_skip_paren_expr(node: &ParenExpr, context: &Context) -> bool {
24552468
}
24562469

24572470
if let Node::MemberExpr(member_expr) = parent {
2458-
if member_expr.computed() && member_expr.prop.span().contains(node.span()) {
2471+
if matches!(member_expr.prop, MemberProp::Computed(_)) && member_expr.prop.span().contains(node.span()) {
24592472
return true;
24602473
}
24612474
}
@@ -2615,7 +2628,7 @@ fn gen_template_literal<'a>(quasis: Vec<Node<'a>>, exprs: Vec<Node<'a>>, context
26152628
// handle this on a case by case basis for now
26162629
fn get_keep_on_one_line(node: &Node) -> bool {
26172630
match node {
2618-
Node::Ident(_) | Node::ThisExpr(_) | Node::Super(_) | Node::Str(_) | Node::PrivateName(_) => true,
2631+
Node::Ident(_) | Node::ThisExpr(_) | Node::SuperPropExpr(_) | Node::MetaPropExpr(_) | Node::Str(_) | Node::PrivateName(_) => true,
26192632
Node::MemberExpr(expr) => keep_member_expr_on_one_line(expr),
26202633
Node::CallExpr(expr) => keep_call_expr_on_one_line(expr),
26212634
_ => false,
@@ -2633,7 +2646,7 @@ fn gen_template_literal<'a>(quasis: Vec<Node<'a>>, exprs: Vec<Node<'a>>, context
26332646
}
26342647

26352648
fn keep_member_expr_on_one_line(expr: &MemberExpr) -> bool {
2636-
get_keep_on_one_line(&expr.obj.into()) && get_keep_on_one_line(&expr.prop.into()) && !expr.computed()
2649+
get_keep_on_one_line(&expr.obj.into()) && get_keep_on_one_line(&expr.prop.into()) && !matches!(expr.prop, MemberProp::Computed(_))
26372650
}
26382651

26392652
fn keep_call_expr_on_one_line(expr: &CallExpr) -> bool {
@@ -6464,10 +6477,8 @@ where
64646477

64656478
fn is_dynamic_import(node: &Node) -> bool {
64666479
if let Node::CallExpr(call_expr) = &node {
6467-
if let ExprOrSuper::Expr(Expr::Ident(ident)) = &call_expr.callee {
6468-
if (ident.sym() as &str) == "import" {
6469-
return true;
6470-
}
6480+
if let Callee::Import(_) = &call_expr.callee {
6481+
return true;
64716482
}
64726483
}
64736484

@@ -6571,10 +6582,7 @@ fn gen_close_paren_with_type<'a>(opts: GenCloseParenWithTypeOptions<'a>, context
65716582
// look good especially when the return type then becomes multi-line.
65726583
match type_node {
65736584
Node::TsUnionType(_) | Node::TsIntersectionType(_) => false,
6574-
Node::TsTypeAnn(type_ann) => match type_ann.type_ann {
6575-
TsType::TsUnionOrIntersectionType(_) => false,
6576-
_ => true,
6577-
},
6585+
Node::TsTypeAnn(type_ann) => !matches!(type_ann.type_ann, TsType::TsUnionOrIntersectionType(_)),
65786586
_ => true,
65796587
}
65806588
} else {
@@ -7096,35 +7104,21 @@ fn gen_for_member_like_expr_item<'a>(item: &MemberLikeExprItem<'a>, context: &mu
70967104
if !is_first {
70977105
if is_optional {
70987106
items.push_str("?.");
7099-
} else {
7107+
} else if node.kind() != NodeKind::ComputedPropName {
71007108
items.push_str(".");
71017109
}
71027110
}
71037111
items.extend(node_items);
71047112
items
71057113
})
71067114
}
7107-
MemberLikeExprItem::Computed(node) => {
7108-
let is_optional = item.is_optional();
7115+
MemberLikeExprItem::Token(token) => {
7116+
// don't bother with intertwined comments as its too much trouble
71097117
let mut items = PrintItems::new();
7110-
7111-
if is_optional {
7112-
items.push_str("?.");
7118+
if !is_first {
7119+
items.push_str(".");
71137120
}
7114-
items.extend(gen_computed_prop_like(
7115-
|context| gen_node(node.inner_node, context),
7116-
GenComputedPropLikeOptions {
7117-
inner_node_span: node.inner_node.span(),
7118-
},
7119-
context,
7120-
));
7121-
7122-
if !is_last {
7123-
// Manually generate the trailing comments of the close bracket token
7124-
// because it doesn't go through the gen_node method
7125-
items.extend(gen_trailing_comments(item, context));
7126-
}
7127-
7121+
items.push_str(token.text_fast(context.program));
71287122
items
71297123
}
71307124
MemberLikeExprItem::CallExpr(node) => {
@@ -7164,8 +7158,7 @@ fn gen_for_flattened_member_like_expr<'a>(node: FlattenedMemberLikeExpr<'a>, con
71647158
for (i, item) in node.nodes.iter().enumerate().skip(1) {
71657159
let force_use_new_line =
71667160
!context.config.member_expression_prefer_single_line && node_helpers::get_use_new_lines_for_nodes(&node.nodes[i - 1], &node.nodes[i], context.program);
7167-
let is_optional = item.is_optional();
7168-
if is_optional || !item.is_computed() {
7161+
if item.is_optional() || !item.is_computed() {
71697162
if force_use_new_line {
71707163
items.push_signal(Signal::NewLine);
71717164
} else if !context.config.member_expression_line_per_expression {
@@ -7909,7 +7902,7 @@ fn gen_jsx_children<'a>(opts: GenJsxChildrenOptions<'a>, context: &mut Context<'
79097902
inner_span,
79107903
items: children.into_iter().map(|(a, b)| (a, Some(b.into()))).collect(),
79117904
should_use_space: Some(Box::new(|previous, next, context| {
7912-
if has_jsx_space_between(previous, next, &context.program) {
7905+
if has_jsx_space_between(previous, next, context.program) {
79137906
true
79147907
} else if let Node::JSXText(element) = previous {
79157908
element.text_fast(context.program).ends_with(' ')
@@ -7920,7 +7913,7 @@ fn gen_jsx_children<'a>(opts: GenJsxChildrenOptions<'a>, context: &mut Context<'
79207913
}
79217914
})),
79227915
should_use_new_line: Some(Box::new(|previous, next, context| {
7923-
if has_jsx_space_between(previous, next, &context.program) {
7916+
if has_jsx_space_between(previous, next, context.program) {
79247917
false // prefer collapsing
79257918
} else if let Node::JSXText(next) = next {
79267919
!utils::has_no_new_lines_in_leading_whitespace(next.text_fast(context.program))
@@ -8512,16 +8505,21 @@ fn allows_inline_multi_line(node: &Node, context: &Context, has_siblings: bool)
85128505

85138506
fn allow_inline_for_call_expr(node: &CallExpr) -> bool {
85148507
// do not allow call exprs with nested call exprs in the member expr to be inline
8515-
return allow_for_expr_or_super(&node.callee);
8508+
return allow_for_callee(&node.callee);
85168509

8517-
fn allow_for_expr_or_super(expr_or_super: &ExprOrSuper) -> bool {
8518-
match expr_or_super {
8519-
ExprOrSuper::Expr(expr) => match expr {
8520-
Expr::Member(member_expr) => allow_for_expr_or_super(&member_expr.obj),
8521-
Expr::Call(_) => false,
8522-
_ => true,
8523-
},
8524-
ExprOrSuper::Super(_) => true,
8510+
fn allow_for_callee(callee: &Callee) -> bool {
8511+
match callee {
8512+
Callee::Expr(expr) => allow_for_expr(expr),
8513+
Callee::Import(_) => false,
8514+
Callee::Super(_) => true,
8515+
}
8516+
}
8517+
8518+
fn allow_for_expr(expr: &Expr) -> bool {
8519+
match expr {
8520+
Expr::Member(member_expr) => allow_for_expr(&member_expr.obj),
8521+
Expr::Call(_) => false,
8522+
_ => true,
85258523
}
85268524
}
85278525
}
File renamed without changes.

src/generation/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
mod comments;
22
mod context;
3+
mod generate;
4+
mod generate_types;
35
mod helpers;
46
mod node_helpers;
5-
mod parser;
6-
mod parser_types;
77
mod sorting;
88
mod swc;
99
mod tokens;
1010

1111
use comments::*;
1212
use context::*;
13+
use generate_types::*;
1314
use helpers::*;
14-
use parser_types::*;
1515
use tokens::*;
1616

17-
pub use parser::generate;
17+
pub use generate::generate;

src/generation/node_helpers.rs

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ pub fn is_test_library_call_expr(node: &CallExpr, program: &Program) -> bool {
172172

173173
return node.start_line_fast(program) == node.args[1].start_line_fast(program);
174174

175-
fn is_valid_callee(callee: &ExprOrSuper) -> bool {
176-
return match get_first_identifier_text(&callee) {
175+
fn is_valid_callee(callee: &Callee) -> bool {
176+
return match get_first_identifier_text_from_callee(&callee) {
177177
Some("it") | Some("describe") | Some("test") => true,
178178
_ => {
179179
// support call expressions like `Deno.test("description", ...)`
@@ -184,27 +184,38 @@ pub fn is_test_library_call_expr(node: &CallExpr, program: &Program) -> bool {
184184
}
185185
};
186186

187-
fn get_first_identifier_text<'a>(callee: &'a ExprOrSuper<'a>) -> Option<&'a str> {
188-
return match callee {
189-
ExprOrSuper::Super(_) => None,
190-
ExprOrSuper::Expr(expr) => match expr {
191-
Expr::Ident(ident) => Some(ident.sym()),
192-
Expr::Member(member) if member.prop.kind() == NodeKind::Ident => get_first_identifier_text(&member.obj),
193-
_ => None,
194-
},
195-
};
187+
fn get_first_identifier_text_from_callee<'a>(callee: &'a Callee<'a>) -> Option<&'a str> {
188+
match callee {
189+
Callee::Super(_) | Callee::Import(_) => None,
190+
Callee::Expr(expr) => get_first_identifier_text_from_expr(expr),
191+
}
192+
}
193+
194+
fn get_first_identifier_text_from_expr<'a>(expr: &'a Expr<'a>) -> Option<&'a str> {
195+
match expr {
196+
Expr::Ident(ident) => Some(ident.sym()),
197+
Expr::Member(member) if member.prop.kind() == NodeKind::Ident => get_first_identifier_text_from_expr(&member.obj),
198+
_ => None,
199+
}
196200
}
197201

198-
fn get_last_identifier_text<'a>(callee: &'a ExprOrSuper<'a>) -> Option<&'a str> {
202+
fn get_last_identifier_text<'a>(callee: &'a Callee<'a>) -> Option<&'a str> {
199203
return match callee {
200-
ExprOrSuper::Super(_) => None,
201-
ExprOrSuper::Expr(expr) => get_last_identifier_text_from_expr(expr),
204+
Callee::Expr(expr) => from_expr(expr),
205+
Callee::Super(_) | Callee::Import(_) => None,
202206
};
203207

204-
fn get_last_identifier_text_from_expr<'a>(expr: &'a Expr<'a>) -> Option<&'a str> {
208+
fn from_expr<'a>(expr: &'a Expr<'a>) -> Option<&'a str> {
205209
match expr {
206210
Expr::Ident(ident) => Some(ident.sym()),
207-
Expr::Member(member) if (member.obj).kind() == NodeKind::Ident => get_last_identifier_text_from_expr(&member.prop),
211+
Expr::Member(member) if (member.obj).kind() == NodeKind::Ident => from_member_prop(&member.prop),
212+
_ => None,
213+
}
214+
}
215+
216+
fn from_member_prop<'a>(member_prop: &'a MemberProp<'a>) -> Option<&'a str> {
217+
match member_prop {
218+
MemberProp::Ident(ident) => Some(ident.sym()),
208219
_ => None,
209220
}
210221
}

0 commit comments

Comments
 (0)