Skip to content

Commit ebdce21

Browse files
committed
fixup: initialize immediately after class def
1 parent 24d7d4f commit ebdce21

File tree

1 file changed

+37
-6
lines changed
  • packages/async-rewriter3/src

1 file changed

+37
-6
lines changed

packages/async-rewriter3/src/lib.rs

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::{borrow::Borrow, collections::VecDeque, fmt::Debug};
22
use wasm_bindgen::prelude::*;
3-
use rslint_parser::{ast::{ArrowExpr, AssignExpr, BracketExpr, BreakStmt, CallExpr, ClassDecl, Constructor, ContinueStmt, DotExpr, Expr, ExprOrBlock, ExprStmt, FnDecl, FnExpr, ForStmtInit, GroupingExpr, Literal, Method, NameRef, ObjectPatternProp, ParameterList, Pattern, PropName, ReturnStmt, ThisExpr, UnaryExpr, VarDecl}, parse_text, AstNode, SyntaxKind, SyntaxNode, TextSize};
3+
use rslint_parser::{ast::{ArrayExpr, ArrowExpr, AssignExpr, BinExpr, BracketExpr, BreakStmt, CallExpr, ClassDecl, ClassExpr, CondExpr, Constructor, ContinueStmt, DotExpr, Expr, ExprOrBlock, ExprStmt, FnDecl, FnExpr, ForStmtInit, GroupingExpr, Literal, Method, NameRef, NewExpr, NewTarget, ObjectExpr, ObjectPatternProp, ParameterList, Pattern, PropName, ReturnStmt, SequenceExpr, ThisExpr, UnaryExpr, VarDecl}, parse_text, AstNode, SyntaxKind, SyntaxNode, TextSize};
44

55
#[derive(Debug)]
66
enum InsertionText {
@@ -179,13 +179,25 @@ fn is_in_async_function(node: &SyntaxNode) -> bool {
179179
if Constructor::can_cast(parent.kind()) {
180180
return false;
181181
}
182+
if ClassDecl::can_cast(parent.kind()) {
183+
return false;
184+
}
185+
if ClassExpr::can_cast(parent.kind()) {
186+
return false;
187+
}
182188
assert!(!is_function_node(&parent));
183189
return is_in_async_function(&parent)
184190
});
185191
}
186192

187193
fn is_function_node(node: &SyntaxNode) -> bool {
188-
return FnExpr::can_cast(node.kind()) || FnDecl::can_cast(node.kind()) || ArrowExpr::can_cast(node.kind()) || Method::can_cast(node.kind()) || Constructor::can_cast(node.kind());
194+
return FnExpr::can_cast(node.kind()) ||
195+
FnDecl::can_cast(node.kind()) ||
196+
ArrowExpr::can_cast(node.kind()) ||
197+
Method::can_cast(node.kind()) ||
198+
Constructor::can_cast(node.kind()) ||
199+
ClassExpr::can_cast(node.kind()) ||
200+
ClassDecl::can_cast(node.kind());
189201
}
190202

191203
fn add_all_variables_from_declaration(patterns: impl Iterator<Item = impl Borrow<Pattern>>) -> InsertionList {
@@ -243,7 +255,11 @@ fn add_all_variables_from_declaration(patterns: impl Iterator<Item = impl Borrow
243255
fn is_name_ref(syntax_node: &SyntaxNode, names: Option<&'static[&'static str]>) -> bool {
244256
if !NameRef::can_cast(syntax_node.kind()) {
245257
if GroupingExpr::can_cast(syntax_node.kind()) {
246-
return is_name_ref(GroupingExpr::cast(syntax_node.clone()).unwrap().inner().unwrap().syntax(), names);
258+
let inner = GroupingExpr::cast(syntax_node.clone()).unwrap().inner();
259+
if inner.is_none() {
260+
return false;
261+
}
262+
return is_name_ref(inner.unwrap().syntax(), names);
247263
}
248264
return false;
249265
}
@@ -321,6 +337,9 @@ fn collect_insertions(node: &SyntaxNode, nesting_depth: u32) -> InsertionList {
321337
insertions.push_back(Insertion::new_dynamic(range.start(),
322338
["_cr = ", name.text().as_str(), " = "].concat()
323339
));
340+
insertions.push_back(Insertion::new(range.end(),
341+
";"
342+
));
324343
insertions.add_variable(name.to_string());
325344
}
326345
}
@@ -386,17 +405,29 @@ fn collect_insertions(node: &SyntaxNode, nesting_depth: u32) -> InsertionList {
386405
let is_argument_default_value = ParameterList::can_cast(as_expr.syntax().parent().unwrap().parent().unwrap().kind());
387406
let is_literal = Literal::can_cast(as_expr.syntax().kind());
388407
let is_label_in_continue_or_break = is_name_ref(as_expr.syntax(), None) &&
389-
ContinueStmt::can_cast(as_expr.syntax().parent().unwrap().kind()) || BreakStmt::can_cast(as_expr.syntax().parent().unwrap().kind());
408+
ContinueStmt::can_cast(as_expr.syntax().parent().unwrap().kind()) || BreakStmt::can_cast(as_expr.syntax().parent().unwrap().kind());
390409
let is_for_in_of_lvalue =
391-
ForStmtInit::can_cast(as_expr.syntax().parent().unwrap().kind());
410+
ForStmtInit::can_cast(as_expr.syntax().parent().unwrap().kind());
411+
let is_known_non_async_expr =
412+
ObjectExpr::can_cast(as_expr.syntax().kind()) || ArrayExpr::can_cast(as_expr.syntax().kind()) ||
413+
UnaryExpr::can_cast(as_expr.syntax().kind()) ||
414+
AssignExpr::can_cast(as_expr.syntax().kind()) ||
415+
BinExpr::can_cast(as_expr.syntax().kind()) ||
416+
CondExpr::can_cast(as_expr.syntax().kind()) ||
417+
GroupingExpr::can_cast(as_expr.syntax().kind()) ||
418+
SequenceExpr::can_cast(as_expr.syntax().kind()) ||
419+
NewExpr::can_cast(as_expr.syntax().kind()) ||
420+
NewTarget::can_cast(as_expr.syntax().kind());
392421
let wants_implicit_await_wrapper =
393422
!is_lhs_of_assign_expr &&
394423
!is_argument_default_value &&
395424
!is_eval_this_super_reference &&
396425
!is_literal &&
397426
!is_label_in_continue_or_break &&
398427
!is_for_in_of_lvalue &&
399-
!is_dot_call_expression;
428+
!is_dot_call_expression &&
429+
!is_known_non_async_expr &&
430+
!is_function_node(as_expr.syntax());
400431

401432
if is_named_typeof_rhs {
402433
insertions.push_back(Insertion::new_dynamic(as_expr.syntax().parent().unwrap().text_range().start(), [

0 commit comments

Comments
 (0)