summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock69
-rw-r--r--cli/Cargo.toml7
-rw-r--r--cli/doc/class.rs23
-rw-r--r--cli/doc/display.rs19
-rw-r--r--cli/doc/enum.rs5
-rw-r--r--cli/doc/function.rs5
-rw-r--r--cli/doc/interface.rs11
-rw-r--r--cli/doc/module.rs7
-rw-r--r--cli/doc/namespace.rs11
-rw-r--r--cli/doc/node.rs3
-rw-r--r--cli/doc/params.rs23
-rw-r--r--cli/doc/parser.rs53
-rw-r--r--cli/doc/printer.rs15
-rw-r--r--cli/doc/ts_type.rs25
-rw-r--r--cli/doc/ts_type_param.rs4
-rw-r--r--cli/doc/type_alias.rs3
-rw-r--r--cli/doc/variable.rs9
-rw-r--r--cli/fmt.rs2
-rw-r--r--cli/lint.rs2
-rw-r--r--cli/main.rs6
-rw-r--r--cli/swc_util.rs202
-rw-r--r--cli/tsc.rs128
22 files changed, 298 insertions, 334 deletions
diff --git a/Cargo.lock b/Cargo.lock
index ebb21f892..c12748689 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -384,6 +384,7 @@ dependencies = [
"deno_lint",
"dissimilar",
"dlopen",
+ "dprint-plugin-typescript",
"futures",
"fwdansi",
"http",
@@ -406,8 +407,8 @@ dependencies = [
"serde_derive",
"serde_json",
"sourcemap",
- "swc_ecma_codegen",
- "swc_ecma_transforms",
+ "swc_common",
+ "swc_ecmascript",
"sys-info",
"tempfile",
"termcolor",
@@ -445,16 +446,16 @@ dependencies = [
[[package]]
name = "deno_lint"
-version = "0.1.19"
+version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fbdf386c931a0c09550f80ea3ac6c59e115d3e8c2cffb5e196d4cda1aeff690c"
+checksum = "97e2a1067a263cd8cbf75d115c253a152263f67da33711eaafce48132068c1b8"
dependencies = [
- "dprint-plugin-typescript",
"lazy_static",
"log 0.4.11",
"regex",
"swc_atoms",
- "swc_ecma_visit",
+ "swc_common",
+ "swc_ecmascript",
]
[[package]]
@@ -523,16 +524,15 @@ dependencies = [
[[package]]
name = "dprint-plugin-typescript"
-version = "0.24.0"
+version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "afab3ed9d8240f14f68e05ccf200dd6034a8bb55fcf0e945f775030d0fca78fa"
+checksum = "41224324bd4b71daccb03fd971c38939999cd3115cd705cfb4d44b930cc91dc7"
dependencies = [
"dprint-core",
"serde",
"serde_json",
"swc_common",
- "swc_ecma_ast",
- "swc_ecma_parser",
+ "swc_ecmascript",
]
[[package]]
@@ -2188,14 +2188,12 @@ dependencies = [
[[package]]
name = "swc_common"
-version = "0.7.0"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6dfaba645cbfc03f574d154f800952e27f0176d91e24a7c9d3917f1afde7d12"
+checksum = "1063f58571575abc923955abdca528e007cd5a8036dcb9cdbd6c81754590c49a"
dependencies = [
"ast_node",
- "atty",
"cfg-if",
- "dashmap",
"either",
"from_variant",
"fxhash",
@@ -2204,17 +2202,15 @@ dependencies = [
"scoped-tls 1.0.0",
"serde",
"sourcemap",
- "string_cache",
"swc_visit",
- "termcolor",
"unicode-width",
]
[[package]]
name = "swc_ecma_ast"
-version = "0.26.0"
+version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9dcdd53f72ccc81568bcf789f9aeaa065588705ab46113e9f6ba4014f8829f5d"
+checksum = "f4d07502831a92f8f0825fc35821ef02a6f47fa348f2b9f73366948517a2648b"
dependencies = [
"enum_kind",
"is-macro",
@@ -2227,9 +2223,9 @@ dependencies = [
[[package]]
name = "swc_ecma_codegen"
-version = "0.29.1"
+version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d48467780147af9075def6d7c75198af57e1b74ad28e8508850974be785f8cd"
+checksum = "ebcf7baf25a6263cd03b5d53bfebf933a37aecf98290bf1ecd044f7d484a60ee"
dependencies = [
"bitflags",
"num-bigint",
@@ -2255,16 +2251,15 @@ dependencies = [
[[package]]
name = "swc_ecma_parser"
-version = "0.31.0"
+version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9226cca2e6d482ffe48be00b83c9745b9e574d6d5833e1e3735837a502784af9"
+checksum = "666f4248ee286eac1037d4427ed802f16da131f4eba3f83f2a44f0c3cd84411c"
dependencies = [
"either",
"enum_kind",
+ "fxhash",
"log 0.4.11",
"num-bigint",
- "once_cell",
- "regex",
"serde",
"smallvec 1.4.1",
"swc_atoms",
@@ -2290,9 +2285,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms"
-version = "0.16.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f37a55159354623098b9a54893d26c655109833df807d846c54e34103a349a4f"
+checksum = "55eb1141303c30c832ad86c91bd993ed5de543bafd8130e1cf0078bc52258dba"
dependencies = [
"Inflector",
"arrayvec",
@@ -2320,25 +2315,24 @@ dependencies = [
[[package]]
name = "swc_ecma_utils"
-version = "0.15.0"
+version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "229c983a8e263edaf1b8ec5b79d92664d158303cc1fa4bff93690b6a2585e668"
+checksum = "9d43744f8636967eadeae9902597e6f6919f9c23700cc731188795ecaece365d"
dependencies = [
"once_cell",
"scoped-tls 1.0.0",
"swc_atoms",
"swc_common",
"swc_ecma_ast",
- "swc_ecma_parser",
"swc_ecma_visit",
"unicode-xid 0.2.1",
]
[[package]]
name = "swc_ecma_visit"
-version = "0.11.0"
+version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9516e5e423776d9ee88628b0caef0bcdab1aacf3e33469b7fc4fdfb9aa7e1617"
+checksum = "a89d1b439c0db9a3df486c32dbd6754c0d0f6a9cef5b8d9f2bf4c46698ffcf12"
dependencies = [
"num-bigint",
"swc_atoms",
@@ -2348,6 +2342,19 @@ dependencies = [
]
[[package]]
+name = "swc_ecmascript"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bc49662be9e1203d7d95a84468a5f982bf5a7d7f6b02d19b2121f63a3ad4841"
+dependencies = [
+ "swc_ecma_ast",
+ "swc_ecma_codegen",
+ "swc_ecma_parser",
+ "swc_ecma_transforms",
+ "swc_ecma_visit",
+]
+
+[[package]]
name = "swc_macros_common"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/cli/Cargo.toml b/cli/Cargo.toml
index 076a4e6b0..f282e79f3 100644
--- a/cli/Cargo.toml
+++ b/cli/Cargo.toml
@@ -23,7 +23,7 @@ winapi = "0.3.8"
[dependencies]
deno_core = { path = "../core", version = "0.50.0" }
-deno_lint = "0.1.19"
+deno_lint = "0.1.20"
atty = "0.2.14"
base64 = "0.12.2"
@@ -32,6 +32,7 @@ byteorder = "1.3.4"
clap = "2.33.1"
dissimilar = "1.0.2"
dlopen = "0.1.8"
+dprint-plugin-typescript = "0.25.0"
futures = "0.3.5"
http = "0.2.1"
idna = "0.2.0"
@@ -50,8 +51,8 @@ serde_derive = "1.0.112"
serde_json = { version = "1.0.55", features = [ "preserve_order" ] }
sys-info = "0.7.0"
sourcemap = "6.0.0"
-swc_ecma_transforms = "=0.16.0"
-swc_ecma_codegen = "=0.29.1"
+swc_common = { version = "=0.8.0", features = ["sourcemap"] }
+swc_ecmascript = { version = "=0.1.0", features = ["codegen", "parser", "transforms", "visit"] }
tempfile = "3.1.0"
termcolor = "1.1.0"
tokio = { version = "0.2.22", features = ["full"] }
diff --git a/cli/doc/class.rs b/cli/doc/class.rs
index d8fa29ded..292aa4b97 100644
--- a/cli/doc/class.rs
+++ b/cli/doc/class.rs
@@ -5,9 +5,8 @@ use crate::doc::display::{
display_method, display_optional, display_readonly, display_static,
SliceDisplayer,
};
-use crate::swc_common::Spanned;
-use crate::swc_ecma_ast;
use serde::Serialize;
+use swc_common::Spanned;
use super::function::function_to_function_def;
use super::function::FunctionDef;
@@ -31,7 +30,7 @@ use std::fmt::{Display, Formatter, Result as FmtResult};
#[serde(rename_all = "camelCase")]
pub struct ClassConstructorDef {
pub js_doc: Option<String>,
- pub accessibility: Option<swc_ecma_ast::Accessibility>,
+ pub accessibility: Option<swc_ecmascript::ast::Accessibility>,
pub name: String,
pub params: Vec<ParamDef>,
pub location: Location,
@@ -55,7 +54,7 @@ pub struct ClassPropertyDef {
pub js_doc: Option<String>,
pub ts_type: Option<TsTypeDef>,
pub readonly: bool,
- pub accessibility: Option<swc_ecma_ast::Accessibility>,
+ pub accessibility: Option<swc_ecmascript::ast::Accessibility>,
pub optional: bool,
pub is_abstract: bool,
pub is_static: bool,
@@ -109,12 +108,12 @@ impl Display for ClassIndexSignatureDef {
#[serde(rename_all = "camelCase")]
pub struct ClassMethodDef {
pub js_doc: Option<String>,
- pub accessibility: Option<swc_ecma_ast::Accessibility>,
+ pub accessibility: Option<swc_ecmascript::ast::Accessibility>,
pub optional: bool,
pub is_abstract: bool,
pub is_static: bool,
pub name: String,
- pub kind: swc_ecma_ast::MethodKind,
+ pub kind: swc_ecmascript::ast::MethodKind,
pub function_def: FunctionDef,
pub location: Location,
}
@@ -158,7 +157,7 @@ pub struct ClassDef {
pub fn class_to_class_def(
doc_parser: &DocParser,
- class: &swc_ecma_ast::Class,
+ class: &swc_ecmascript::ast::Class,
) -> ClassDef {
let mut constructors = vec![];
let mut methods = vec![];
@@ -167,7 +166,7 @@ pub fn class_to_class_def(
let extends: Option<String> = match &class.super_class {
Some(boxed) => {
- use crate::swc_ecma_ast::Expr;
+ use swc_ecmascript::ast::Expr;
let expr: &Expr = &**boxed;
match expr {
Expr::Ident(ident) => Some(ident.sym.to_string()),
@@ -184,7 +183,7 @@ pub fn class_to_class_def(
.collect::<Vec<TsTypeDef>>();
for member in &class.body {
- use crate::swc_ecma_ast::ClassMember::*;
+ use swc_ecmascript::ast::ClassMember::*;
match member {
Constructor(ctor) => {
@@ -197,7 +196,7 @@ pub fn class_to_class_def(
let mut params = vec![];
for param in &ctor.params {
- use crate::swc_ecma_ast::ParamOrTsParamProp::*;
+ use swc_ecmascript::ast::ParamOrTsParamProp::*;
let param_def = match param {
Param(param) => pat_to_param_def(
@@ -205,7 +204,7 @@ pub fn class_to_class_def(
Some(&doc_parser.ast_parser.source_map),
),
TsParamProp(ts_param_prop) => {
- use swc_ecma_ast::TsParamPropParam;
+ use swc_ecmascript::ast::TsParamPropParam;
match &ts_param_prop.param {
TsParamPropParam::Ident(ident) => ident_to_param_def(
@@ -331,7 +330,7 @@ pub fn class_to_class_def(
pub fn get_doc_for_class_decl(
doc_parser: &DocParser,
- class_decl: &swc_ecma_ast::ClassDecl,
+ class_decl: &swc_ecmascript::ast::ClassDecl,
) -> (String, ClassDef) {
let class_name = class_decl.ident.sym.to_string();
let class_def = class_to_class_def(doc_parser, &class_decl.class);
diff --git a/cli/doc/display.rs b/cli/doc/display.rs
index 9da04363f..44ed62415 100644
--- a/cli/doc/display.rs
+++ b/cli/doc/display.rs
@@ -1,6 +1,5 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
use crate::colors;
-use crate::swc_ecma_ast;
use std::fmt::{Display, Formatter, Result};
pub(crate) struct Indent(pub i64);
@@ -50,13 +49,13 @@ pub(crate) fn display_abstract(is_abstract: bool) -> impl Display {
}
pub(crate) fn display_accessibility(
- accessibility: Option<swc_ecma_ast::Accessibility>,
+ accessibility: Option<swc_ecmascript::ast::Accessibility>,
) -> impl Display {
colors::magenta(
- match accessibility.unwrap_or(swc_ecma_ast::Accessibility::Public) {
- swc_ecma_ast::Accessibility::Public => "",
- swc_ecma_ast::Accessibility::Protected => "protected ",
- swc_ecma_ast::Accessibility::Private => "private ",
+ match accessibility.unwrap_or(swc_ecmascript::ast::Accessibility::Public) {
+ swc_ecmascript::ast::Accessibility::Public => "",
+ swc_ecmascript::ast::Accessibility::Protected => "protected ",
+ swc_ecmascript::ast::Accessibility::Private => "private ",
},
)
}
@@ -69,10 +68,12 @@ pub(crate) fn display_generator(is_generator: bool) -> impl Display {
colors::magenta(if is_generator { "*" } else { "" })
}
-pub(crate) fn display_method(method: swc_ecma_ast::MethodKind) -> impl Display {
+pub(crate) fn display_method(
+ method: swc_ecmascript::ast::MethodKind,
+) -> impl Display {
colors::magenta(match method {
- swc_ecma_ast::MethodKind::Getter => "get ",
- swc_ecma_ast::MethodKind::Setter => "set ",
+ swc_ecmascript::ast::MethodKind::Getter => "get ",
+ swc_ecmascript::ast::MethodKind::Setter => "set ",
_ => "",
})
}
diff --git a/cli/doc/enum.rs b/cli/doc/enum.rs
index bf561cf94..8161337ce 100644
--- a/cli/doc/enum.rs
+++ b/cli/doc/enum.rs
@@ -1,5 +1,4 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-use crate::swc_ecma_ast;
use serde::Serialize;
use super::parser::DocParser;
@@ -18,13 +17,13 @@ pub struct EnumDef {
pub fn get_doc_for_ts_enum_decl(
_doc_parser: &DocParser,
- enum_decl: &swc_ecma_ast::TsEnumDecl,
+ enum_decl: &swc_ecmascript::ast::TsEnumDecl,
) -> (String, EnumDef) {
let enum_name = enum_decl.id.sym.to_string();
let mut members = vec![];
for enum_member in &enum_decl.members {
- use crate::swc_ecma_ast::TsEnumMemberId::*;
+ use swc_ecmascript::ast::TsEnumMemberId::*;
let member_name = match &enum_member.id {
Ident(ident) => ident.sym.to_string(),
diff --git a/cli/doc/function.rs b/cli/doc/function.rs
index ede8bdbbd..ab6430ec6 100644
--- a/cli/doc/function.rs
+++ b/cli/doc/function.rs
@@ -6,7 +6,6 @@ use super::ts_type::TsTypeDef;
use super::ts_type_param::maybe_type_param_decl_to_type_param_defs;
use super::ts_type_param::TsTypeParamDef;
use super::ParamDef;
-use crate::swc_ecma_ast;
use serde::Serialize;
#[derive(Debug, Serialize, Clone)]
@@ -22,7 +21,7 @@ pub struct FunctionDef {
pub fn function_to_function_def(
doc_parser: &DocParser,
- function: &swc_ecma_ast::Function,
+ function: &swc_ecmascript::ast::Function,
) -> FunctionDef {
let mut params = vec![];
@@ -51,7 +50,7 @@ pub fn function_to_function_def(
pub fn get_doc_for_fn_decl(
doc_parser: &DocParser,
- fn_decl: &swc_ecma_ast::FnDecl,
+ fn_decl: &swc_ecmascript::ast::FnDecl,
) -> (String, FunctionDef) {
let name = fn_decl.ident.sym.to_string();
let fn_def = function_to_function_def(&doc_parser, &fn_decl.function);
diff --git a/cli/doc/interface.rs b/cli/doc/interface.rs
index d3caa8748..3c72bac23 100644
--- a/cli/doc/interface.rs
+++ b/cli/doc/interface.rs
@@ -1,7 +1,6 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
use crate::colors;
use crate::doc::display::{display_optional, display_readonly, SliceDisplayer};
-use crate::swc_ecma_ast;
use serde::Serialize;
use super::params::ts_fn_param_to_param_def;
@@ -115,9 +114,9 @@ pub struct InterfaceDef {
pub type_params: Vec<TsTypeParamDef>,
}
-pub fn expr_to_name(expr: &swc_ecma_ast::Expr) -> String {
- use crate::swc_ecma_ast::Expr::*;
- use crate::swc_ecma_ast::ExprOrSuper::*;
+pub fn expr_to_name(expr: &swc_ecmascript::ast::Expr) -> String {
+ use swc_ecmascript::ast::Expr::*;
+ use swc_ecmascript::ast::ExprOrSuper::*;
match expr {
Ident(ident) => ident.sym.to_string(),
@@ -135,7 +134,7 @@ pub fn expr_to_name(expr: &swc_ecma_ast::Expr) -> String {
pub fn get_doc_for_ts_interface_decl(
doc_parser: &DocParser,
- interface_decl: &swc_ecma_ast::TsInterfaceDecl,
+ interface_decl: &swc_ecmascript::ast::TsInterfaceDecl,
) -> (String, InterfaceDef) {
let interface_name = interface_decl.id.sym.to_string();
@@ -145,7 +144,7 @@ pub fn get_doc_for_ts_interface_decl(
let mut index_signatures = vec![];
for type_element in &interface_decl.body.body {
- use crate::swc_ecma_ast::TsTypeElement::*;
+ use swc_ecmascript::ast::TsTypeElement::*;
match &type_element {
TsMethodSignature(ts_method_sig) => {
diff --git a/cli/doc/module.rs b/cli/doc/module.rs
index 79b1b92be..74d5361eb 100644
--- a/cli/doc/module.rs
+++ b/cli/doc/module.rs
@@ -1,6 +1,5 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-use crate::swc_common::Spanned;
-use crate::swc_ecma_ast;
+use swc_common::Spanned;
use super::parser::DocParser;
use super::DocNode;
@@ -8,10 +7,10 @@ use super::DocNodeKind;
pub fn get_doc_node_for_export_decl(
doc_parser: &DocParser,
- export_decl: &swc_ecma_ast::ExportDecl,
+ export_decl: &swc_ecmascript::ast::ExportDecl,
) -> DocNode {
let export_span = export_decl.span();
- use crate::swc_ecma_ast::Decl;
+ use swc_ecmascript::ast::Decl;
let js_doc = doc_parser.js_doc_for_span(export_span);
let location = doc_parser.ast_parser.get_span_location(export_span).into();
diff --git a/cli/doc/namespace.rs b/cli/doc/namespace.rs
index 6cbc619e8..35f9233fd 100644
--- a/cli/doc/namespace.rs
+++ b/cli/doc/namespace.rs
@@ -1,5 +1,4 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-use crate::swc_ecma_ast;
use serde::Serialize;
use super::parser::DocParser;
@@ -13,7 +12,7 @@ pub struct NamespaceDef {
pub fn get_doc_for_ts_namespace_decl(
doc_parser: &DocParser,
- ts_namespace_decl: &swc_ecma_ast::TsNamespaceDecl,
+ ts_namespace_decl: &swc_ecmascript::ast::TsNamespaceDecl,
) -> DocNode {
let js_doc = doc_parser.js_doc_for_span(ts_namespace_decl.span);
let location = doc_parser
@@ -22,7 +21,7 @@ pub fn get_doc_for_ts_namespace_decl(
.into();
let namespace_name = ts_namespace_decl.id.sym.to_string();
- use crate::swc_ecma_ast::TsNamespaceBody::*;
+ use swc_ecmascript::ast::TsNamespaceBody::*;
let elements = match &*ts_namespace_decl.body {
TsModuleBlock(ts_module_block) => {
@@ -52,16 +51,16 @@ pub fn get_doc_for_ts_namespace_decl(
pub fn get_doc_for_ts_module(
doc_parser: &DocParser,
- ts_module_decl: &swc_ecma_ast::TsModuleDecl,
+ ts_module_decl: &swc_ecmascript::ast::TsModuleDecl,
) -> (String, NamespaceDef) {
- use crate::swc_ecma_ast::TsModuleName;
+ use swc_ecmascript::ast::TsModuleName;
let namespace_name = match &ts_module_decl.id {
TsModuleName::Ident(ident) => ident.sym.to_string(),
TsModuleName::Str(str_) => str_.value.to_string(),
};
let elements = if let Some(body) = &ts_module_decl.body {
- use crate::swc_ecma_ast::TsNamespaceBody::*;
+ use swc_ecmascript::ast::TsNamespaceBody::*;
match &body {
TsModuleBlock(ts_module_block) => {
diff --git a/cli/doc/node.rs b/cli/doc/node.rs
index 690221ed0..4946924c6 100644
--- a/cli/doc/node.rs
+++ b/cli/doc/node.rs
@@ -1,5 +1,4 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-use crate::swc_common;
use serde::Serialize;
#[derive(Debug, PartialEq, Serialize, Clone)]
@@ -23,7 +22,7 @@ pub struct Location {
impl Into<Location> for swc_common::Loc {
fn into(self) -> Location {
- use crate::swc_common::FileName::*;
+ use swc_common::FileName::*;
let filename = match &self.file.name {
Real(path_buf) => path_buf.to_string_lossy().to_string(),
diff --git a/cli/doc/params.rs b/cli/doc/params.rs
index 3e7967c81..088a4e283 100644
--- a/cli/doc/params.rs
+++ b/cli/doc/params.rs
@@ -1,11 +1,10 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
use super::display::{display_optional, SliceDisplayer};
use super::ts_type::{ts_type_ann_to_def, TsTypeDef};
-use crate::swc_common::SourceMap;
-use crate::swc_ecma_ast;
-use crate::swc_ecma_ast::{ObjectPatProp, Pat, TsFnParam};
use serde::Serialize;
use std::fmt::{Display, Formatter, Result as FmtResult};
+use swc_common::SourceMap;
+use swc_ecmascript::ast::{ObjectPatProp, Pat, TsFnParam};
#[derive(Debug, Serialize, Clone)]
#[serde(rename_all = "camelCase")]
@@ -146,7 +145,7 @@ impl Display for ObjectPatPropDef {
}
pub fn ident_to_param_def(
- ident: &swc_ecma_ast::Ident,
+ ident: &swc_ecmascript::ast::Ident,
_source_map: Option<&SourceMap>,
) -> ParamDef {
let ts_type = ident.type_ann.as_ref().map(|rt| ts_type_ann_to_def(rt));
@@ -159,7 +158,7 @@ pub fn ident_to_param_def(
}
fn rest_pat_to_param_def(
- rest_pat: &swc_ecma_ast::RestPat,
+ rest_pat: &swc_ecmascript::ast::RestPat,
source_map: Option<&SourceMap>,
) -> ParamDef {
let ts_type = rest_pat.type_ann.as_ref().map(|rt| ts_type_ann_to_def(rt));
@@ -190,7 +189,7 @@ fn object_pat_prop_to_def(
}
fn object_pat_to_param_def(
- object_pat: &swc_ecma_ast::ObjectPat,
+ object_pat: &swc_ecmascript::ast::ObjectPat,
source_map: Option<&SourceMap>,
) -> ParamDef {
let props = object_pat
@@ -211,7 +210,7 @@ fn object_pat_to_param_def(
}
fn array_pat_to_param_def(
- array_pat: &swc_ecma_ast::ArrayPat,
+ array_pat: &swc_ecmascript::ast::ArrayPat,
source_map: Option<&SourceMap>,
) -> ParamDef {
let elements = array_pat
@@ -229,7 +228,7 @@ fn array_pat_to_param_def(
}
pub fn assign_pat_to_param_def(
- assign_pat: &swc_ecma_ast::AssignPat,
+ assign_pat: &swc_ecmascript::ast::AssignPat,
source_map: Option<&SourceMap>,
) -> ParamDef {
let ts_type = assign_pat
@@ -245,7 +244,7 @@ pub fn assign_pat_to_param_def(
}
pub fn pat_to_param_def(
- pat: &swc_ecma_ast::Pat,
+ pat: &swc_ecmascript::ast::Pat,
source_map: Option<&SourceMap>,
) -> ParamDef {
match pat {
@@ -259,7 +258,7 @@ pub fn pat_to_param_def(
}
pub fn ts_fn_param_to_param_def(
- ts_fn_param: &swc_ecma_ast::TsFnParam,
+ ts_fn_param: &swc_ecmascript::ast::TsFnParam,
source_map: Option<&SourceMap>,
) -> ParamDef {
match ts_fn_param {
@@ -275,10 +274,10 @@ pub fn ts_fn_param_to_param_def(
}
pub fn prop_name_to_string(
- prop_name: &swc_ecma_ast::PropName,
+ prop_name: &swc_ecmascript::ast::PropName,
source_map: Option<&SourceMap>,
) -> String {
- use crate::swc_ecma_ast::PropName;
+ use swc_ecmascript::ast::PropName;
match prop_name {
PropName::Ident(ident) => ident.sym.to_string(),
PropName::Str(str_) => str_.value.to_string(),
diff --git a/cli/doc/parser.rs b/cli/doc/parser.rs
index 14e921237..e185e5bff 100644
--- a/cli/doc/parser.rs
+++ b/cli/doc/parser.rs
@@ -1,15 +1,14 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
use crate::file_fetcher::map_file_extension;
use crate::op_error::OpError;
-use crate::swc_common::comments::CommentKind;
-use crate::swc_common::Span;
-use crate::swc_ecma_ast;
-use crate::swc_ecma_ast::Decl;
-use crate::swc_ecma_ast::DefaultDecl;
-use crate::swc_ecma_ast::ModuleDecl;
-use crate::swc_ecma_ast::Stmt;
use crate::swc_util::AstParser;
use crate::swc_util::SwcDiagnosticBuffer;
+use swc_common::comments::CommentKind;
+use swc_common::Span;
+use swc_ecmascript::ast::Decl;
+use swc_ecmascript::ast::DefaultDecl;
+use swc_ecmascript::ast::ModuleDecl;
+use swc_ecmascript::ast::Stmt;
use deno_core::ErrBox;
use deno_core::ModuleSpecifier;
@@ -62,22 +61,18 @@ impl DocParser {
source_code: &str,
) -> Result<ModuleDoc, SwcDiagnosticBuffer> {
let media_type = map_file_extension(&PathBuf::from(file_name));
- self.ast_parser.parse_module(
- file_name,
- media_type,
- source_code,
- |parse_result| {
- let module = parse_result?;
- let doc_entries =
- self.get_doc_nodes_for_module_body(module.body.clone());
- let reexports = self.get_reexports_for_module_body(module.body);
- let module_doc = ModuleDoc {
- definitions: doc_entries,
- reexports,
- };
- Ok(module_doc)
- },
- )
+ let parse_result =
+ self
+ .ast_parser
+ .parse_module(file_name, media_type, source_code);
+ let module = parse_result?;
+ let doc_entries = self.get_doc_nodes_for_module_body(module.body.clone());
+ let reexports = self.get_reexports_for_module_body(module.body);
+ let module_doc = ModuleDoc {
+ definitions: doc_entries,
+ reexports,
+ };
+ Ok(module_doc)
}
pub async fn parse(&self, file_name: &str) -> Result<Vec<DocNode>, ErrBox> {
@@ -452,14 +447,14 @@ impl DocParser {
pub fn get_reexports_for_module_body(
&self,
- module_body: Vec<swc_ecma_ast::ModuleItem>,
+ module_body: Vec<swc_ecmascript::ast::ModuleItem>,
) -> Vec<node::Reexport> {
- use swc_ecma_ast::ExportSpecifier::*;
+ use swc_ecmascript::ast::ExportSpecifier::*;
let mut reexports: Vec<node::Reexport> = vec![];
for node in module_body.iter() {
- if let swc_ecma_ast::ModuleItem::ModuleDecl(module_decl) = node {
+ if let swc_ecmascript::ast::ModuleItem::ModuleDecl(module_decl) = node {
let r = match module_decl {
ModuleDecl::ExportNamed(named_export) => {
if let Some(src) = &named_export.src {
@@ -513,16 +508,16 @@ impl DocParser {
pub fn get_doc_nodes_for_module_body(
&self,
- module_body: Vec<swc_ecma_ast::ModuleItem>,
+ module_body: Vec<swc_ecmascript::ast::ModuleItem>,
) -> Vec<DocNode> {
let mut doc_entries: Vec<DocNode> = vec![];
for node in module_body.iter() {
match node {
- swc_ecma_ast::ModuleItem::ModuleDecl(module_decl) => {
+ swc_ecmascript::ast::ModuleItem::ModuleDecl(module_decl) => {
doc_entries
.extend(self.get_doc_nodes_for_module_exports(module_decl));
}
- swc_ecma_ast::ModuleItem::Stmt(stmt) => {
+ swc_ecmascript::ast::ModuleItem::Stmt(stmt) => {
if let Some(doc_node) = self.get_doc_node_for_stmt(stmt) {
doc_entries.push(doc_node);
}
diff --git a/cli/doc/printer.rs b/cli/doc/printer.rs
index 2e55c752a..a3ecd2718 100644
--- a/cli/doc/printer.rs
+++ b/cli/doc/printer.rs
@@ -16,7 +16,6 @@ use crate::doc::display::{
display_abstract, display_async, display_generator, Indent, SliceDisplayer,
};
use crate::doc::DocNodeKind;
-use crate::swc_ecma_ast;
use std::fmt::{Display, Formatter, Result as FmtResult};
pub struct DocPrinter<'a> {
@@ -193,8 +192,8 @@ impl<'a> DocPrinter<'a> {
self.private
|| node
.accessibility
- .unwrap_or(swc_ecma_ast::Accessibility::Public)
- != swc_ecma_ast::Accessibility::Private
+ .unwrap_or(swc_ecmascript::ast::Accessibility::Public)
+ != swc_ecmascript::ast::Accessibility::Private
}) {
writeln!(w, "{}{}", Indent(1), node,)?;
if let Some(js_doc) = &node.js_doc {
@@ -208,8 +207,8 @@ impl<'a> DocPrinter<'a> {
self.private
|| node
.accessibility
- .unwrap_or(swc_ecma_ast::Accessibility::Public)
- != swc_ecma_ast::Accessibility::Private
+ .unwrap_or(swc_ecmascript::ast::Accessibility::Public)
+ != swc_ecmascript::ast::Accessibility::Private
}) {
writeln!(w, "{}{}", Indent(1), node,)?;
if let Some(js_doc) = &node.js_doc {
@@ -454,9 +453,9 @@ impl<'a> DocPrinter<'a> {
"{}{} {}",
Indent(indent),
colors::magenta(match variable_def.kind {
- swc_ecma_ast::VarDeclKind::Const => "const",
- swc_ecma_ast::VarDeclKind::Let => "let",
- swc_ecma_ast::VarDeclKind::Var => "var",
+ swc_ecmascript::ast::VarDeclKind::Const => "const",
+ swc_ecmascript::ast::VarDeclKind::Let => "let",
+ swc_ecmascript::ast::VarDeclKind::Var => "var",
}),
colors::bold(&node.name),
)?;
diff --git a/cli/doc/ts_type.rs b/cli/doc/ts_type.rs
index 36502ee5e..b2eb3438d 100644
--- a/cli/doc/ts_type.rs
+++ b/cli/doc/ts_type.rs
@@ -7,16 +7,15 @@ use super::ts_type_param::TsTypeParamDef;
use super::ParamDef;
use crate::colors;
use crate::doc;
-use crate::swc_ecma_ast;
-use crate::swc_ecma_ast::{
+use serde::Serialize;
+use std::fmt::{Display, Formatter, Result as FmtResult};
+use swc_ecmascript::ast::{
TsArrayType, TsConditionalType, TsExprWithTypeArgs, TsFnOrConstructorType,
TsIndexedAccessType, TsKeywordType, TsLit, TsLitType, TsOptionalType,
TsParenthesizedType, TsRestType, TsThisType, TsTupleType, TsType, TsTypeAnn,
TsTypeLit, TsTypeOperator, TsTypeParamInstantiation, TsTypeQuery, TsTypeRef,
TsUnionOrIntersectionType,
};
-use serde::Serialize;
-use std::fmt::{Display, Formatter, Result as FmtResult};
// pub enum TsType {
// * TsKeywordType(TsKeywordType),
@@ -129,7 +128,7 @@ impl Into<TsTypeDef> for &TsTupleType {
impl Into<TsTypeDef> for &TsUnionOrIntersectionType {
fn into(self) -> TsTypeDef {
- use crate::swc_ecma_ast::TsUnionOrIntersectionType::*;
+ use swc_ecmascript::ast::TsUnionOrIntersectionType::*;
match self {
TsUnionType(union_type) => {
@@ -168,7 +167,7 @@ impl Into<TsTypeDef> for &TsUnionOrIntersectionType {
impl Into<TsTypeDef> for &TsKeywordType {
fn into(self) -> TsTypeDef {
- use crate::swc_ecma_ast::TsKeywordTypeKind::*;
+ use swc_ecmascript::ast::TsKeywordTypeKind::*;
let keyword_str = match self.kind {
TsAnyKeyword => "any",
@@ -258,9 +257,9 @@ impl Into<TsTypeDef> for &TsThisType {
}
pub fn ts_entity_name_to_name(
- entity_name: &swc_ecma_ast::TsEntityName,
+ entity_name: &swc_ecmascript::ast::TsEntityName,
) -> String {
- use crate::swc_ecma_ast::TsEntityName::*;
+ use swc_ecmascript::ast::TsEntityName::*;
match entity_name {
Ident(ident) => ident.sym.to_string(),
@@ -274,7 +273,7 @@ pub fn ts_entity_name_to_name(
impl Into<TsTypeDef> for &TsTypeQuery {
fn into(self) -> TsTypeDef {
- use crate::swc_ecma_ast::TsTypeQueryExpr::*;
+ use swc_ecmascript::ast::TsTypeQueryExpr::*;
let type_name = match &self.expr_name {
TsEntityName(entity_name) => ts_entity_name_to_name(&*entity_name),
@@ -374,7 +373,7 @@ impl Into<TsTypeDef> for &TsTypeLit {
let mut index_signatures = vec![];
for type_element in &self.members {
- use crate::swc_ecma_ast::TsTypeElement::*;
+ use swc_ecmascript::ast::TsTypeElement::*;
match &type_element {
TsMethodSignature(ts_method_sig) => {
@@ -511,7 +510,7 @@ impl Into<TsTypeDef> for &TsConditionalType {
impl Into<TsTypeDef> for &TsFnOrConstructorType {
fn into(self) -> TsTypeDef {
- use crate::swc_ecma_ast::TsFnOrConstructorType::*;
+ use swc_ecmascript::ast::TsFnOrConstructorType::*;
let fn_def = match self {
TsFnType(ts_fn_type) => {
@@ -563,7 +562,7 @@ impl Into<TsTypeDef> for &TsFnOrConstructorType {
impl Into<TsTypeDef> for &TsType {
fn into(self) -> TsTypeDef {
- use crate::swc_ecma_ast::TsType::*;
+ use swc_ecmascript::ast::TsType::*;
match self {
TsKeywordType(ref keyword_type) => keyword_type.into(),
@@ -829,7 +828,7 @@ pub struct TsTypeDef {
}
pub fn ts_type_ann_to_def(type_ann: &TsTypeAnn) -> TsTypeDef {
- use crate::swc_ecma_ast::TsType::*;
+ use swc_ecmascript::ast::TsType::*;
match &*type_ann.type_ann {
TsKeywordType(keyword_type) => keyword_type.into(),
diff --git a/cli/doc/ts_type_param.rs b/cli/doc/ts_type_param.rs
index 0483708b6..52ecb74cc 100644
--- a/cli/doc/ts_type_param.rs
+++ b/cli/doc/ts_type_param.rs
@@ -1,9 +1,9 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
use super::ts_type::TsTypeDef;
-use crate::swc_ecma_ast::TsTypeParam;
-use crate::swc_ecma_ast::TsTypeParamDecl;
use serde::Serialize;
use std::fmt::{Display, Formatter, Result as FmtResult};
+use swc_ecmascript::ast::TsTypeParam;
+use swc_ecmascript::ast::TsTypeParamDecl;
#[derive(Debug, Serialize, Clone)]
#[serde(rename_all = "camelCase")]
diff --git a/cli/doc/type_alias.rs b/cli/doc/type_alias.rs
index b26395c3f..446e8fbec 100644
--- a/cli/doc/type_alias.rs
+++ b/cli/doc/type_alias.rs
@@ -3,7 +3,6 @@ use super::parser::DocParser;
use super::ts_type::TsTypeDef;
use super::ts_type_param::maybe_type_param_decl_to_type_param_defs;
use super::ts_type_param::TsTypeParamDef;
-use crate::swc_ecma_ast;
use serde::Serialize;
#[derive(Debug, Serialize, Clone)]
@@ -15,7 +14,7 @@ pub struct TypeAliasDef {
pub fn get_doc_for_ts_type_alias_decl(
_doc_parser: &DocParser,
- type_alias_decl: &swc_ecma_ast::TsTypeAliasDecl,
+ type_alias_decl: &swc_ecmascript::ast::TsTypeAliasDecl,
) -> (String, TypeAliasDef) {
let alias_name = type_alias_decl.id.sym.to_string();
let ts_type = type_alias_decl.type_ann.as_ref().into();
diff --git a/cli/doc/variable.rs b/cli/doc/variable.rs
index 0b9c28a42..4c2fcea14 100644
--- a/cli/doc/variable.rs
+++ b/cli/doc/variable.rs
@@ -1,5 +1,4 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-use crate::swc_ecma_ast;
use serde::Serialize;
use super::ts_type::ts_type_ann_to_def;
@@ -9,23 +8,23 @@ use super::ts_type::TsTypeDef;
#[serde(rename_all = "camelCase")]
pub struct VariableDef {
pub ts_type: Option<TsTypeDef>,
- pub kind: swc_ecma_ast::VarDeclKind,
+ pub kind: swc_ecmascript::ast::VarDeclKind,
}
// TODO: change this function to return Vec<(String, VariableDef)> as single
// var declaration can have multiple declarators
pub fn get_doc_for_var_decl(
- var_decl: &swc_ecma_ast::VarDecl,
+ var_decl: &swc_ecmascript::ast::VarDecl,
) -> (String, VariableDef) {
assert!(!var_decl.decls.is_empty());
let var_declarator = var_decl.decls.get(0).unwrap();
let var_name = match &var_declarator.name {
- swc_ecma_ast::Pat::Ident(ident) => ident.sym.to_string(),
+ swc_ecmascript::ast::Pat::Ident(ident) => ident.sym.to_string(),
_ => "<TODO>".to_string(),
};
let maybe_ts_type = match &var_declarator.name {
- swc_ecma_ast::Pat::Ident(ident) => {
+ swc_ecmascript::ast::Pat::Ident(ident) => {
ident.type_ann.as_ref().map(|rt| ts_type_ann_to_def(rt))
}
_ => None,
diff --git a/cli/fmt.rs b/cli/fmt.rs
index cac4e5c5f..70bc0e8bc 100644
--- a/cli/fmt.rs
+++ b/cli/fmt.rs
@@ -9,10 +9,10 @@
use crate::colors;
use crate::diff::diff;
-use crate::dprint_plugin_typescript as dprint;
use crate::fs::files_in_subtree;
use crate::op_error::OpError;
use deno_core::ErrBox;
+use dprint_plugin_typescript as dprint;
use std::fs;
use std::io::stdin;
use std::io::stdout;
diff --git a/cli/lint.rs b/cli/lint.rs
index e3e1a81ab..e3013f302 100644
--- a/cli/lint.rs
+++ b/cli/lint.rs
@@ -12,7 +12,6 @@ use crate::file_fetcher::map_file_extension;
use crate::fmt::collect_files;
use crate::fmt::run_parallelized;
use crate::fmt_errors;
-use crate::swc_ecma_parser::Syntax;
use crate::swc_util;
use deno_core::ErrBox;
use deno_lint::diagnostic::LintDiagnostic;
@@ -24,6 +23,7 @@ use std::fs;
use std::path::PathBuf;
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::{Arc, Mutex};
+use swc_ecmascript::parser::Syntax;
pub async fn lint_files(args: Vec<String>) -> Result<(), ErrBox> {
let target_files = collect_files(args)?;
diff --git a/cli/main.rs b/cli/main.rs
index 3a6000c2b..cff401fba 100644
--- a/cli/main.rs
+++ b/cli/main.rs
@@ -67,12 +67,6 @@ pub mod version;
mod web_worker;
pub mod worker;
-pub use deno_lint::dprint_plugin_typescript;
-pub use deno_lint::swc_common;
-pub use deno_lint::swc_ecma_ast;
-pub use deno_lint::swc_ecma_parser;
-pub use deno_lint::swc_ecma_visit;
-
use crate::doc::parser::DocFileLoader;
use crate::file_fetcher::SourceFile;
use crate::file_fetcher::SourceFileFetcher;
diff --git a/cli/swc_util.rs b/cli/swc_util.rs
index d79f7cccb..e83a2ce18 100644
--- a/cli/swc_util.rs
+++ b/cli/swc_util.rs
@@ -1,40 +1,38 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
use crate::msg::MediaType;
-use crate::swc_common;
-use crate::swc_common::comments::Comments;
-use crate::swc_common::errors::Diagnostic;
-use crate::swc_common::errors::DiagnosticBuilder;
-use crate::swc_common::errors::Emitter;
-use crate::swc_common::errors::Handler;
-use crate::swc_common::errors::HandlerFlags;
-use crate::swc_common::FileName;
-use crate::swc_common::Globals;
-use crate::swc_common::SourceMap;
-use crate::swc_common::Span;
-use crate::swc_ecma_ast;
-use crate::swc_ecma_ast::Program;
-use crate::swc_ecma_parser::lexer::Lexer;
-use crate::swc_ecma_parser::EsConfig;
-use crate::swc_ecma_parser::JscTarget;
-use crate::swc_ecma_parser::Parser;
-use crate::swc_ecma_parser::SourceFileInput;
-use crate::swc_ecma_parser::Syntax;
-use crate::swc_ecma_parser::TsConfig;
-use crate::swc_ecma_visit::FoldWith;
use deno_core::ErrBox;
use std::error::Error;
use std::fmt;
use std::sync::Arc;
use std::sync::RwLock;
use swc_common::chain;
-use swc_ecma_codegen::text_writer::JsWriter;
-use swc_ecma_codegen::Node;
-use swc_ecma_transforms::fixer;
-use swc_ecma_transforms::typescript;
+use swc_common::comments::SingleThreadedComments;
+use swc_common::errors::Diagnostic;
+use swc_common::errors::DiagnosticBuilder;
+use swc_common::errors::Emitter;
+use swc_common::errors::Handler;
+use swc_common::errors::HandlerFlags;
+use swc_common::FileName;
+use swc_common::Globals;
+use swc_common::SourceMap;
+use swc_common::Span;
+use swc_ecmascript::ast::Program;
+use swc_ecmascript::codegen::text_writer::JsWriter;
+use swc_ecmascript::codegen::Node;
+use swc_ecmascript::parser::lexer::Lexer;
+use swc_ecmascript::parser::EsConfig;
+use swc_ecmascript::parser::JscTarget;
+use swc_ecmascript::parser::Parser;
+use swc_ecmascript::parser::StringInput;
+use swc_ecmascript::parser::Syntax;
+use swc_ecmascript::parser::TsConfig;
+use swc_ecmascript::transforms::fixer;
+use swc_ecmascript::transforms::typescript;
+use swc_ecmascript::visit::FoldWith;
struct DummyHandler;
-impl swc_ecma_codegen::Handlers for DummyHandler {}
+impl swc_ecmascript::codegen::Handlers for DummyHandler {}
fn get_default_es_config() -> EsConfig {
let mut config = EsConfig::default();
@@ -147,7 +145,7 @@ pub struct AstParser {
pub buffered_error: SwcErrorBuffer,
pub source_map: Arc<SourceMap>,
pub handler: Handler,
- pub comments: Comments,
+ pub comments: SingleThreadedComments,
pub globals: Globals,
}
@@ -168,46 +166,38 @@ impl AstParser {
buffered_error,
source_map: Arc::new(SourceMap::default()),
handler,
- comments: Comments::default(),
+ comments: SingleThreadedComments::default(),
globals: Globals::new(),
}
}
- pub fn parse_module<F, R>(
+ pub fn parse_module(
&self,
file_name: &str,
media_type: MediaType,
source_code: &str,
- callback: F,
- ) -> R
- where
- F: FnOnce(Result<swc_ecma_ast::Module, SwcDiagnosticBuffer>) -> R,
- {
- swc_common::GLOBALS.set(&self.globals, || {
- let swc_source_file = self.source_map.new_source_file(
- FileName::Custom(file_name.to_string()),
- source_code.to_string(),
- );
-
- let buffered_err = self.buffered_error.clone();
- let syntax = get_syntax_for_media_type(media_type);
-
- let lexer = Lexer::new(
- syntax,
- JscTarget::Es2019,
- SourceFileInput::from(&*swc_source_file),
- Some(&self.comments),
- );
-
- let mut parser = Parser::new_from(lexer);
-
- let parse_result = parser.parse_module().map_err(move |err| {
- let mut diagnostic = err.into_diagnostic(&self.handler);
- diagnostic.emit();
- SwcDiagnosticBuffer::from_swc_error(buffered_err, self)
- });
-
- callback(parse_result)
+ ) -> Result<swc_ecmascript::ast::Module, SwcDiagnosticBuffer> {
+ let swc_source_file = self.source_map.new_source_file(
+ FileName::Custom(file_name.to_string()),
+ source_code.to_string(),
+ );
+
+ let buffered_err = self.buffered_error.clone();
+ let syntax = get_syntax_for_media_type(media_type);
+
+ let lexer = Lexer::new(
+ syntax,
+ JscTarget::Es2019,
+ StringInput::from(&*swc_source_file),
+ Some(&self.comments),
+ );
+
+ let mut parser = Parser::new_from(lexer);
+
+ parser.parse_module().map_err(move |err| {
+ let mut diagnostic = err.into_diagnostic(&self.handler);
+ diagnostic.emit();
+ SwcDiagnosticBuffer::from_swc_error(buffered_err, self)
})
}
@@ -217,48 +207,47 @@ impl AstParser {
media_type: MediaType,
source_code: &str,
) -> Result<String, ErrBox> {
- self.parse_module(file_name, media_type, source_code, |parse_result| {
- let module = parse_result?;
- let program = Program::Module(module);
- let mut compiler_pass = chain!(typescript::strip(), fixer());
- let program = swc_ecma_transforms::util::COMMENTS
- .set(&self.comments, || program.fold_with(&mut compiler_pass));
-
- let mut src_map_buf = vec![];
+ let parse_result = self.parse_module(file_name, media_type, source_code);
+ let module = parse_result?;
+ let program = Program::Module(module);
+ let mut compiler_pass =
+ chain!(typescript::strip(), fixer(Some(&self.comments)));
+ let program = program.fold_with(&mut compiler_pass);
+
+ let mut src_map_buf = vec![];
+ let mut buf = vec![];
+ {
+ let handlers = Box::new(DummyHandler);
+ let writer = Box::new(JsWriter::new(
+ self.source_map.clone(),
+ "\n",
+ &mut buf,
+ Some(&mut src_map_buf),
+ ));
+ let config = swc_ecmascript::codegen::Config { minify: false };
+ let mut emitter = swc_ecmascript::codegen::Emitter {
+ cfg: config,
+ comments: Some(&self.comments),
+ cm: self.source_map.clone(),
+ wr: writer,
+ handlers,
+ };
+ program.emit_with(&mut emitter)?;
+ }
+ let mut src = String::from_utf8(buf).map_err(ErrBox::from)?;
+ {
let mut buf = vec![];
- {
- let handlers = Box::new(DummyHandler);
- let writer = Box::new(JsWriter::new(
- self.source_map.clone(),
- "\n",
- &mut buf,
- Some(&mut src_map_buf),
- ));
- let config = swc_ecma_codegen::Config { minify: false };
- let mut emitter = swc_ecma_codegen::Emitter {
- cfg: config,
- comments: Some(&self.comments),
- cm: self.source_map.clone(),
- wr: writer,
- handlers,
- };
- program.emit_with(&mut emitter)?;
- }
- let mut src = String::from_utf8(buf).map_err(ErrBox::from)?;
- {
- let mut buf = vec![];
- self
- .source_map
- .build_source_map_from(&mut src_map_buf, None)
- .to_writer(&mut buf)?;
- let map = String::from_utf8(buf)?;
-
- src.push_str("//# sourceMappingURL=data:application/json;base64,");
- let encoded_map = base64::encode(map.as_bytes());
- src.push_str(&encoded_map);
- }
- Ok(src)
- })
+ self
+ .source_map
+ .build_source_map_from(&mut src_map_buf, None)
+ .to_writer(&mut buf)?;
+ let map = String::from_utf8(buf)?;
+
+ src.push_str("//# sourceMappingURL=data:application/json;base64,");
+ let encoded_map = base64::encode(map.as_bytes());
+ src.push_str(&encoded_map);
+ }
+ Ok(src)
}
pub fn get_span_location(&self, span: Span) -> swc_common::Loc {
@@ -269,16 +258,9 @@ impl AstParser {
&self,
span: Span,
) -> Vec<swc_common::comments::Comment> {
- let maybe_comments = self.comments.take_leading_comments(span.lo());
-
- if let Some(comments) = maybe_comments {
- // clone the comments and put them back in map
- let to_return = comments.clone();
- self.comments.add_leading(span.lo(), comments);
- to_return
- } else {
- vec![]
- }
+ self
+ .comments
+ .with_leading(span.lo(), |comments| comments.to_vec())
}
}
diff --git a/cli/tsc.rs b/cli/tsc.rs
index 7bc70c786..fb25df8d5 100644
--- a/cli/tsc.rs
+++ b/cli/tsc.rs
@@ -19,12 +19,6 @@ use crate::permissions::Permissions;
use crate::source_maps::SourceMapGetter;
use crate::startup_data;
use crate::state::State;
-use crate::swc_common::comments::CommentKind;
-use crate::swc_common::Span;
-use crate::swc_ecma_ast;
-use crate::swc_ecma_visit;
-use crate::swc_ecma_visit::Node;
-use crate::swc_ecma_visit::Visit;
use crate::swc_util::AstParser;
use crate::swc_util::SwcDiagnosticBuffer;
use crate::version;
@@ -57,6 +51,10 @@ use std::sync::atomic::Ordering;
use std::sync::Arc;
use std::sync::Mutex;
use std::task::Poll;
+use swc_common::comments::CommentKind;
+use swc_common::Span;
+use swc_ecmascript::visit::Node;
+use swc_ecmascript::visit::Visit;
use url::Url;
pub const AVAILABLE_LIBS: &[&str] = &[
@@ -1262,7 +1260,7 @@ struct DependencyVisitor {
impl Visit for DependencyVisitor {
fn visit_import_decl(
&mut self,
- import_decl: &swc_ecma_ast::ImportDecl,
+ import_decl: &swc_ecmascript::ast::ImportDecl,
_parent: &dyn Node,
) {
let src_str = import_decl.src.value.to_string();
@@ -1275,7 +1273,7 @@ impl Visit for DependencyVisitor {
fn visit_named_export(
&mut self,
- named_export: &swc_ecma_ast::NamedExport,
+ named_export: &swc_ecmascript::ast::NamedExport,
_parent: &dyn Node,
) {
if let Some(src) = &named_export.src {
@@ -1290,7 +1288,7 @@ impl Visit for DependencyVisitor {
fn visit_export_all(
&mut self,
- export_all: &swc_ecma_ast::ExportAll,
+ export_all: &swc_ecmascript::ast::ExportAll,
_parent: &dyn Node,
) {
let src_str = export_all.src.value.to_string();
@@ -1303,7 +1301,7 @@ impl Visit for DependencyVisitor {
fn visit_ts_import_type(
&mut self,
- ts_import_type: &swc_ecma_ast::TsImportType,
+ ts_import_type: &swc_ecmascript::ast::TsImportType,
_parent: &dyn Node,
) {
// TODO(bartlomieju): possibly add separate DependencyKind
@@ -1317,13 +1315,13 @@ impl Visit for DependencyVisitor {
fn visit_call_expr(
&mut self,
- call_expr: &swc_ecma_ast::CallExpr,
+ call_expr: &swc_ecmascript::ast::CallExpr,
parent: &dyn Node,
) {
- use swc_ecma_ast::Expr::*;
- use swc_ecma_ast::ExprOrSuper::*;
+ use swc_ecmascript::ast::Expr::*;
+ use swc_ecmascript::ast::ExprOrSuper::*;
- swc_ecma_visit::visit_call_expr(self, call_expr, parent);
+ swc_ecmascript::visit::visit_call_expr(self, call_expr, parent);
let boxed_expr = match call_expr.callee.clone() {
Super(_) => return,
Expr(boxed) => boxed,
@@ -1341,7 +1339,7 @@ impl Visit for DependencyVisitor {
if let Some(arg) = call_expr.args.get(0) {
match &*arg.expr {
Lit(lit) => {
- if let swc_ecma_ast::Lit::Str(str_) = lit {
+ if let swc_ecmascript::ast::Lit::Str(str_) = lit {
let src_str = str_.value.to_string();
self.dependencies.push(DependencyDescriptor {
specifier: src_str,
@@ -1389,61 +1387,59 @@ pub fn pre_process_file(
analyze_dynamic_imports: bool,
) -> Result<(Vec<ImportDesc>, Vec<TsReferenceDesc>), SwcDiagnosticBuffer> {
let parser = AstParser::default();
- parser.parse_module(file_name, media_type, source_code, |parse_result| {
- let module = parse_result?;
- let mut collector = DependencyVisitor {
- dependencies: vec![],
- };
- let module_span = module.span;
- collector.visit_module(&module, &module);
-
- let dependency_descriptors = collector.dependencies;
-
- // for each import check if there's relevant @deno-types directive
- let imports = dependency_descriptors
- .iter()
- .filter(|desc| {
- if analyze_dynamic_imports {
- return true;
- }
-
- desc.kind != DependencyKind::DynamicImport
- })
- .map(|desc| {
- let location = parser.get_span_location(desc.span);
- let deno_types = get_deno_types(&parser, desc.span);
- ImportDesc {
- specifier: desc.specifier.to_string(),
- deno_types,
- location: location.into(),
- }
- })
- .collect();
-
- // analyze comment from beginning of the file and find TS directives
- let comments = parser
- .comments
- .take_leading_comments(module_span.lo())
- .unwrap_or_else(Vec::new);
-
- let mut references = vec![];
- for comment in comments {
- if comment.kind != CommentKind::Line {
- continue;
+ let parse_result = parser.parse_module(file_name, media_type, source_code);
+ let module = parse_result?;
+ let mut collector = DependencyVisitor {
+ dependencies: vec![],
+ };
+ let module_span = module.span;
+ collector.visit_module(&module, &module);
+
+ let dependency_descriptors = collector.dependencies;
+
+ // for each import check if there's relevant @deno-types directive
+ let imports = dependency_descriptors
+ .iter()
+ .filter(|desc| {
+ if analyze_dynamic_imports {
+ return true;
}
- let text = comment.text.to_string();
- if let Some((kind, specifier)) = parse_ts_reference(text.trim()) {
- let location = parser.get_span_location(comment.span);
- references.push(TsReferenceDesc {
- kind,
- specifier,
- location: location.into(),
- });
+ desc.kind != DependencyKind::DynamicImport
+ })
+ .map(|desc| {
+ let location = parser.get_span_location(desc.span);
+ let deno_types = get_deno_types(&parser, desc.span);
+ ImportDesc {
+ specifier: desc.specifier.to_string(),
+ deno_types,
+ location: location.into(),
}
+ })
+ .collect();
+
+ // analyze comment from beginning of the file and find TS directives
+ let comments = parser
+ .comments
+ .with_leading(module_span.lo(), |cmts| cmts.to_vec());
+
+ let mut references = vec![];
+ for comment in comments {
+ if comment.kind != CommentKind::Line {
+ continue;
}
- Ok((imports, references))
- })
+
+ let text = comment.text.to_string();
+ if let Some((kind, specifier)) = parse_ts_reference(text.trim()) {
+ let location = parser.get_span_location(comment.span);
+ references.push(TsReferenceDesc {
+ kind,
+ specifier,
+ location: location.into(),
+ });
+ }
+ }
+ Ok((imports, references))
}
fn get_deno_types(parser: &AstParser, span: Span) -> Option<String> {