Skip to content

Commit

Permalink
feat(es): Support type-only import equals declaration (#1695)
Browse files Browse the repository at this point in the history
Co-authored-by: 강동윤 <kdy1997.dev@gmail.com>
  • Loading branch information
g-plane and kdy1 authored May 15, 2021
1 parent f0d7a3d commit 1dbc364
Show file tree
Hide file tree
Showing 180 changed files with 434 additions and 146 deletions.
18 changes: 9 additions & 9 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc"
repository = "https://github.com/swc-project/swc.git"
version = "0.19.0"
version = "0.20.0"

[lib]
name = "swc"
Expand All @@ -30,21 +30,21 @@ serde_json = "1"
sourcemap = "6"
swc_atoms = {version = "0.2", path = "./atoms"}
swc_common = {version = "0.10.16", path = "./common", features = ["sourcemap", "concurrent"]}
swc_ecma_ast = {version = "0.44.0", path = "./ecmascript/ast"}
swc_ecma_codegen = {version = "0.54.0", path = "./ecmascript/codegen"}
swc_ecma_ext_transforms = {version = "0.14.0", path = "./ecmascript/ext-transforms"}
swc_ecma_parser = {version = "0.56.0", path = "./ecmascript/parser"}
swc_ecma_preset_env = {version = "0.19.0", path = "./ecmascript/preset_env"}
swc_ecma_transforms = {version = "0.49.0", path = "./ecmascript/transforms", features = [
swc_ecma_ast = {version = "0.45.0", path = "./ecmascript/ast"}
swc_ecma_codegen = {version = "0.55.0", path = "./ecmascript/codegen"}
swc_ecma_ext_transforms = {version = "0.15.0", path = "./ecmascript/ext-transforms"}
swc_ecma_parser = {version = "0.57.0", path = "./ecmascript/parser"}
swc_ecma_preset_env = {version = "0.20.0", path = "./ecmascript/preset_env"}
swc_ecma_transforms = {version = "0.50.0", path = "./ecmascript/transforms", features = [
"compat",
"module",
"optimization",
"proposal",
"react",
"typescript",
]}
swc_ecma_utils = {version = "0.35.0", path = "./ecmascript/utils"}
swc_ecma_visit = {version = "0.30.0", path = "./ecmascript/visit"}
swc_ecma_utils = {version = "0.36.0", path = "./ecmascript/utils"}
swc_ecma_visit = {version = "0.31.0", path = "./ecmascript/visit"}
swc_node_base = {version = "0.1.0", path = "./node/base"}
swc_visit = {version = "0.2.3", path = "./visit"}

Expand Down
16 changes: 8 additions & 8 deletions bundler/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ include = ["Cargo.toml", "build.rs", "src/**/*.rs", "src/**/*.js"]
license = "Apache-2.0/MIT"
name = "swc_bundler"
repository = "https://github.com/swc-project/swc.git"
version = "0.36.0"
version = "0.37.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]
Expand All @@ -33,19 +33,19 @@ relative-path = "1.2"
retain_mut = "0.1.2"
swc_atoms = {version = "0.2.4", path = "../atoms"}
swc_common = {version = "0.10.16", path = "../common"}
swc_ecma_ast = {version = "0.44.0", path = "../ecmascript/ast"}
swc_ecma_codegen = {version = "0.54.0", path = "../ecmascript/codegen"}
swc_ecma_parser = {version = "0.56.0", path = "../ecmascript/parser"}
swc_ecma_transforms = {version = "0.49.0", path = "../ecmascript/transforms", features = ["optimization"]}
swc_ecma_utils = {version = "0.35.0", path = "../ecmascript/utils"}
swc_ecma_visit = {version = "0.30.0", path = "../ecmascript/visit"}
swc_ecma_ast = {version = "0.45.0", path = "../ecmascript/ast"}
swc_ecma_codegen = {version = "0.55.0", path = "../ecmascript/codegen"}
swc_ecma_parser = {version = "0.57.0", path = "../ecmascript/parser"}
swc_ecma_transforms = {version = "0.50.0", path = "../ecmascript/transforms", features = ["optimization"]}
swc_ecma_utils = {version = "0.36.0", path = "../ecmascript/utils"}
swc_ecma_visit = {version = "0.31.0", path = "../ecmascript/visit"}

[dev-dependencies]
hex = "0.4"
ntest = "0.7.2"
reqwest = {version = "0.10.8", features = ["blocking"]}
sha-1 = "0.9"
swc_ecma_transforms = {version = "0.49.0", path = "../ecmascript/transforms", features = ["react", "typescript"]}
swc_ecma_transforms = {version = "0.50.0", path = "../ecmascript/transforms", features = ["react", "typescript"]}
tempfile = "3.1.0"
testing = {version = "0.10.5", path = "../testing"}
url = "2.1.1"
Expand Down
16 changes: 8 additions & 8 deletions ecmascript/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecmascript"
repository = "https://github.com/swc-project/swc.git"
version = "0.35.0"
version = "0.36.0"

[package.metadata.docs.rs]
all-features = true
Expand All @@ -27,12 +27,12 @@ react = ["swc_ecma_transforms/react"]
typescript = ["swc_ecma_transforms/typescript"]

[dependencies]
swc_ecma_ast = {version = "0.44.0", path = "./ast"}
swc_ecma_codegen = {version = "0.54.0", path = "./codegen", optional = true}
swc_ecma_dep_graph = {version = "0.24.0", path = "./dep-graph", optional = true}
swc_ecma_parser = {version = "0.56.0", path = "./parser", optional = true}
swc_ecma_transforms = {version = "0.49.0", path = "./transforms", optional = true}
swc_ecma_utils = {version = "0.35.0", path = "./utils", optional = true}
swc_ecma_visit = {version = "0.30.0", path = "./visit", optional = true}
swc_ecma_ast = {version = "0.45.0", path = "./ast"}
swc_ecma_codegen = {version = "0.55.0", path = "./codegen", optional = true}
swc_ecma_dep_graph = {version = "0.25.0", path = "./dep-graph", optional = true}
swc_ecma_parser = {version = "0.57.0", path = "./parser", optional = true}
swc_ecma_transforms = {version = "0.50.0", path = "./transforms", optional = true}
swc_ecma_utils = {version = "0.36.0", path = "./utils", optional = true}
swc_ecma_visit = {version = "0.31.0", path = "./visit", optional = true}

[dev-dependencies]
2 changes: 1 addition & 1 deletion ecmascript/ast/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecma_ast"
repository = "https://github.com/swc-project/swc.git"
version = "0.44.0"
version = "0.45.0"

[features]
default = []
Expand Down
1 change: 1 addition & 0 deletions ecmascript/ast/src/typescript.rs
Original file line number Diff line number Diff line change
Expand Up @@ -911,6 +911,7 @@ pub struct TsImportEqualsDecl {
pub span: Span,
pub declare: bool,
pub is_export: bool,
pub is_type_only: bool,
pub id: Ident,
pub module_ref: TsModuleRef,
}
Expand Down
6 changes: 3 additions & 3 deletions ecmascript/codegen/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@ include = ["Cargo.toml", "src/**/*.rs"]
license = "Apache-2.0/MIT"
name = "swc_ecma_codegen"
repository = "https://github.com/swc-project/swc.git"
version = "0.54.0"
version = "0.55.0"

[dependencies]
bitflags = "1"
num-bigint = {version = "0.2", features = ["serde"]}
sourcemap = "6"
swc_atoms = {version = "0.2", path = "../../atoms"}
swc_common = {version = "0.10.16", path = "../../common"}
swc_ecma_ast = {version = "0.44.0", path = "../ast"}
swc_ecma_ast = {version = "0.45.0", path = "../ast"}
swc_ecma_codegen_macros = {version = "0.5.2", path = "./macros"}
swc_ecma_parser = {version = "0.56.0", path = "../parser"}
swc_ecma_parser = {version = "0.57.0", path = "../parser"}

[dev-dependencies]
swc_common = {version = "0.10.16", path = "../../common", features = ["sourcemap"]}
Expand Down
10 changes: 10 additions & 0 deletions ecmascript/codegen/src/typescript.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,17 @@ impl<'a> Emitter<'a> {
}

keyword!("import");
space!();

if n.is_type_only {
keyword!("type");
space!();
}

emit!(n.id);

formatting_space!();

punct!("=");
formatting_space!();

Expand Down
8 changes: 4 additions & 4 deletions ecmascript/dep-graph/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecma_dep_graph"
repository = "https://github.com/swc-project/swc.git"
version = "0.24.0"
version = "0.25.0"

[dependencies]
swc_atoms = {version = "0.2", path = "../../atoms"}
swc_common = {version = "0.10.16", path = "../../common"}
swc_ecma_ast = {version = "0.44.0", path = "../ast"}
swc_ecma_visit = {version = "0.30.0", path = "../visit"}
swc_ecma_ast = {version = "0.45.0", path = "../ast"}
swc_ecma_visit = {version = "0.31.0", path = "../visit"}

[dev-dependencies]
swc_ecma_parser = {version = "0.56.0", path = "../parser"}
swc_ecma_parser = {version = "0.57.0", path = "../parser"}
testing = {version = "0.10.5", path = "../../testing"}
10 changes: 5 additions & 5 deletions ecmascript/ext-transforms/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ documentation = "https://rustdoc.swc.rs/swc_ecma_ext_transforms/"
edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecma_ext_transforms"
version = "0.14.0"
version = "0.15.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
phf = {version = "0.8.0", features = ["macros"]}
swc_atoms = {version = "0.2", path = "../../atoms"}
swc_common = {version = "0.10.16", path = "../../common"}
swc_ecma_ast = {version = "0.44.0", path = "../ast"}
swc_ecma_parser = {version = "0.56.0", path = "../parser"}
swc_ecma_utils = {version = "0.35.0", path = "../utils"}
swc_ecma_visit = {version = "0.30.0", path = "../visit"}
swc_ecma_ast = {version = "0.45.0", path = "../ast"}
swc_ecma_parser = {version = "0.57.0", path = "../parser"}
swc_ecma_utils = {version = "0.36.0", path = "../utils"}
swc_ecma_visit = {version = "0.31.0", path = "../visit"}
6 changes: 3 additions & 3 deletions ecmascript/jsdoc/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ documentation = "https://rustdoc.swc.rs/jsdoc/"
edition = "2018"
license = "Apache-2.0/MIT"
name = "jsdoc"
version = "0.24.0"
version = "0.25.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

Expand All @@ -18,7 +18,7 @@ swc_common = {version = "0.10.16", path = "../../common"}
[dev-dependencies]
anyhow = "1"
dashmap = "4.0.2"
swc_ecma_ast = {version = "0.44.0", path = "../ast"}
swc_ecma_parser = {version = "0.56.0", path = "../parser"}
swc_ecma_ast = {version = "0.45.0", path = "../ast"}
swc_ecma_parser = {version = "0.57.0", path = "../parser"}
testing = {version = "0.10.5", path = "../../testing"}
walkdir = "2"
6 changes: 3 additions & 3 deletions ecmascript/loader/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecma_loader"
repository = "https://github.com/swc-project/swc.git"
version = "0.5.0"
version = "0.6.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
swc_atoms = {version = "0.2.3", path = "../../atoms"}
swc_common = {version = "0.10.16", path = "../../common"}
swc_ecma_ast = {version = "0.44.0", path = "../ast"}
swc_ecma_visit = {version = "0.30.0", path = "../visit"}
swc_ecma_ast = {version = "0.45.0", path = "../ast"}
swc_ecma_visit = {version = "0.31.0", path = "../visit"}

[dev-dependencies]
testing = {version = "0.10.5", path = "../../testing"}
6 changes: 3 additions & 3 deletions ecmascript/parser/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ include = ["Cargo.toml", "src/**/*.rs", "examples/**/*.rs"]
license = "Apache-2.0/MIT"
name = "swc_ecma_parser"
repository = "https://github.com/swc-project/swc.git"
version = "0.56.3"
version = "0.57.0"

[features]
default = []
Expand All @@ -22,8 +22,8 @@ serde = {version = "1", features = ["derive"]}
smallvec = "1"
swc_atoms = {version = "0.2.3", path = "../../atoms"}
swc_common = {version = "0.10.16", path = "../../common"}
swc_ecma_ast = {version = "0.44.0", path = "../ast"}
swc_ecma_visit = {version = "0.30.0", path = "../visit"}
swc_ecma_ast = {version = "0.45.0", path = "../ast"}
swc_ecma_visit = {version = "0.31.0", path = "../visit"}
unicode-xid = "0.2"

[dev-dependencies]
Expand Down
17 changes: 15 additions & 2 deletions ecmascript/parser/src/parser/stmt/module_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ impl<'a, I: Tokens> Parser<I> {

if self.input.syntax().typescript() && is!(self, IdentRef) && peeked_is!(self, '=') {
return self
.parse_ts_import_equals_decl(start, false)
.parse_ts_import_equals_decl(
start, /* is_export */ false, /* is_type_only */ false,
)
.map(ModuleDecl::from)
.map(ModuleItem::from);
}
Expand Down Expand Up @@ -81,6 +83,15 @@ impl<'a, I: Tokens> Parser<I> {

if type_only {
assert_and_bump!(self, "type");

if is!(self, IdentRef) && peeked_is!(self, '=') {
return self
.parse_ts_import_equals_decl(
start, /* is_export */ false, /* is_type_only */ true,
)
.map(ModuleDecl::from)
.map(ModuleItem::from);
}
}

let mut specifiers = vec![];
Expand Down Expand Up @@ -262,7 +273,9 @@ impl<'a, I: Tokens> Parser<I> {
if eat!(self, "import") {
// export import A = B
return self
.parse_ts_import_equals_decl(start, /* is_export */ true)
.parse_ts_import_equals_decl(
start, /* is_export */ true, /* is_type_only */ false,
)
.map(From::from);
}

Expand Down
2 changes: 2 additions & 0 deletions ecmascript/parser/src/parser/typescript.rs
Original file line number Diff line number Diff line change
Expand Up @@ -973,6 +973,7 @@ impl<I: Tokens> Parser<I> {
&mut self,
start: BytePos,
is_export: bool,
is_type_only: bool,
) -> PResult<TsImportEqualsDecl> {
debug_assert!(self.input.syntax().typescript());

Expand All @@ -986,6 +987,7 @@ impl<I: Tokens> Parser<I> {
declare: false,
id,
is_export,
is_type_only,
module_ref,
})
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import type { MyType } = require('commonjs-package')
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
error: Expected from, got =
--> $DIR/tests/typescript-errors/type-only-import-equals-decl/named/input.ts:1:24
|
1 | import type { MyType } = require('commonjs-package')
| ^

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import type * as MyType = require('commonjs-package')
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
error: Expected from, got =
--> $DIR/tests/typescript-errors/type-only-import-equals-decl/namespace/input.ts:1:25
|
1 | import type * as MyType = require('commonjs-package')
| ^

Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
},
"declare": false,
"isExport": false,
"isTypeOnly": false,
"id": {
"type": "Identifier",
"span": {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import type MyType = require('commonjs-package')
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
{
"type": "Module",
"span": {
"start": 0,
"end": 48,
"ctxt": 0
},
"body": [
{
"type": "TsImportEqualsDeclaration",
"span": {
"start": 0,
"end": 48,
"ctxt": 0
},
"declare": false,
"isExport": false,
"isTypeOnly": true,
"id": {
"type": "Identifier",
"span": {
"start": 12,
"end": 18,
"ctxt": 0
},
"value": "MyType",
"optional": false
},
"moduleRef": {
"type": "TsExternalModuleReference",
"span": {
"start": 21,
"end": 48,
"ctxt": 0
},
"expression": {
"type": "StringLiteral",
"span": {
"start": 29,
"end": 47,
"ctxt": 0
},
"value": "commonjs-package",
"hasEscape": false,
"kind": {
"type": "normal",
"containsQuote": true
}
}
}
}
],
"interpreter": null
}
Loading

0 comments on commit 1dbc364

Please sign in to comment.