|
2 | 2 |
|
3 | 3 | use swc_atoms::Atom;
|
4 | 4 | use swc_common::{Span, SyntaxContext};
|
5 |
| -use swc_ecma_ast::{BindingIdent, Expr, Ident, Number, Pat, Str}; |
| 5 | +use swc_ecma_ast::{BindingIdent, Ident, Number, Str}; |
6 | 6 |
|
7 | 7 | use crate::{
|
8 | 8 | error::{Error, ErrorKind},
|
9 | 9 | token::{Token, TokenType, TokenValue},
|
10 | 10 | };
|
11 | 11 |
|
12 |
| -/// Trait for getting spans from AST nodes |
13 |
| -pub trait GetSpan { |
14 |
| - fn span(&self) -> Span; |
15 |
| -} |
16 |
| - |
17 |
| -// Implement GetSpan for Box<Expr> |
18 |
| -impl GetSpan for Box<Expr> { |
19 |
| - fn span(&self) -> Span { |
20 |
| - match &**self { |
21 |
| - Expr::Array(e) => e.span, |
22 |
| - Expr::Arrow(e) => e.span, |
23 |
| - Expr::Assign(e) => e.span, |
24 |
| - Expr::Await(e) => e.span, |
25 |
| - Expr::Bin(e) => e.span, |
26 |
| - Expr::Call(e) => e.span, |
27 |
| - Expr::Class(e) => { |
28 |
| - if let Some(ident) = &e.ident { |
29 |
| - ident.span |
30 |
| - } else { |
31 |
| - e.class.span |
32 |
| - } |
33 |
| - } |
34 |
| - Expr::Cond(e) => e.span, |
35 |
| - Expr::Fn(e) => { |
36 |
| - if let Some(ident) = &e.ident { |
37 |
| - ident.span |
38 |
| - } else { |
39 |
| - e.function.span |
40 |
| - } |
41 |
| - } |
42 |
| - Expr::Ident(e) => e.span, |
43 |
| - Expr::Lit(e) => match e { |
44 |
| - swc_ecma_ast::Lit::Str(s) => s.span, |
45 |
| - swc_ecma_ast::Lit::Bool(b) => b.span, |
46 |
| - swc_ecma_ast::Lit::Null(n) => n.span, |
47 |
| - swc_ecma_ast::Lit::Num(n) => n.span, |
48 |
| - swc_ecma_ast::Lit::BigInt(b) => b.span, |
49 |
| - swc_ecma_ast::Lit::Regex(r) => r.span, |
50 |
| - swc_ecma_ast::Lit::JSXText(j) => j.span, |
51 |
| - }, |
52 |
| - Expr::Member(e) => e.span, |
53 |
| - Expr::MetaProp(e) => e.span, |
54 |
| - Expr::New(e) => e.span, |
55 |
| - Expr::Object(e) => e.span, |
56 |
| - Expr::OptChain(e) => e.span, |
57 |
| - Expr::Paren(e) => e.span, |
58 |
| - Expr::PrivateName(e) => e.span, |
59 |
| - Expr::Seq(e) => e.span, |
60 |
| - Expr::SuperProp(e) => e.span, |
61 |
| - Expr::TaggedTpl(e) => e.span, |
62 |
| - Expr::This(e) => e.span, |
63 |
| - Expr::Tpl(e) => e.span, |
64 |
| - Expr::Unary(e) => e.span, |
65 |
| - Expr::Update(e) => e.span, |
66 |
| - Expr::Yield(e) => e.span, |
67 |
| - Expr::JSXMember(e) => e.span, |
68 |
| - Expr::JSXNamespacedName(e) => e.span, |
69 |
| - Expr::JSXEmpty(e) => e.span, |
70 |
| - Expr::JSXElement(e) => e.span, |
71 |
| - Expr::JSXFragment(e) => e.span, |
72 |
| - Expr::TsTypeAssertion(e) => e.span, |
73 |
| - Expr::TsConstAssertion(e) => e.span, |
74 |
| - Expr::TsNonNull(e) => e.span, |
75 |
| - Expr::TsAs(e) => e.span, |
76 |
| - Expr::TsInstantiation(e) => e.span, |
77 |
| - Expr::TsSatisfies(e) => e.span, |
78 |
| - Expr::Invalid(e) => e.span, |
79 |
| - } |
80 |
| - } |
81 |
| -} |
82 |
| - |
83 |
| -// Implement GetSpan for Pat |
84 |
| -impl GetSpan for Pat { |
85 |
| - fn span(&self) -> Span { |
86 |
| - match self { |
87 |
| - Pat::Ident(i) => i.id.span, |
88 |
| - Pat::Array(a) => a.span, |
89 |
| - Pat::Rest(r) => r.span, |
90 |
| - Pat::Object(o) => o.span, |
91 |
| - Pat::Assign(a) => a.span, |
92 |
| - Pat::Invalid(i) => i.span, |
93 |
| - Pat::Expr(e) => e.span(), |
94 |
| - } |
95 |
| - } |
96 |
| -} |
97 |
| - |
98 |
| -// Implement GetSpan for BindingIdent |
99 |
| -impl GetSpan for BindingIdent { |
100 |
| - fn span(&self) -> Span { |
101 |
| - self.id.span |
102 |
| - } |
103 |
| -} |
104 |
| - |
105 | 12 | /// Convert a token value to an identifier
|
106 | 13 | pub fn token_value_to_ident(token: &Token, span: Span) -> Ident {
|
107 | 14 | if let TokenValue::Str { value, .. } = &token.value {
|
|
0 commit comments