More variants of import added (#1738)
- `import * from "x.js"` - `import * as Name from "x.js"`
This commit is contained in:
committed by
Alex Lam S.L
parent
a729c43e87
commit
2f93058c6e
@@ -1242,17 +1242,21 @@ function OutputStream(options) {
|
|||||||
output.space();
|
output.space();
|
||||||
}
|
}
|
||||||
if (self.imported_names) {
|
if (self.imported_names) {
|
||||||
output.print("{");
|
if (self.imported_names.length === 1 && self.imported_names[0].foreign_name.name === "*") {
|
||||||
self.imported_names.forEach(function(name_import, i) {
|
self.imported_names[0].print(output);
|
||||||
output.space();
|
} else {
|
||||||
name_import.print(output);
|
output.print("{");
|
||||||
if (i < self.imported_names.length - 1) {
|
self.imported_names.forEach(function (name_import, i) {
|
||||||
output.print(",");
|
|
||||||
output.space();
|
output.space();
|
||||||
}
|
name_import.print(output);
|
||||||
});
|
if (i < self.imported_names.length - 1) {
|
||||||
output.space();
|
output.print(",");
|
||||||
output.print("}");
|
output.space();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
output.space();
|
||||||
|
output.print("}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (self.imported_name || self.imported_names) {
|
if (self.imported_name || self.imported_names) {
|
||||||
output.space();
|
output.space();
|
||||||
|
|||||||
57
lib/parse.js
57
lib/parse.js
@@ -2176,17 +2176,7 @@ function parse($TEXT, options) {
|
|||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is("punc", "{")) {
|
imported_names = import_names(true);
|
||||||
next();
|
|
||||||
imported_names = [];
|
|
||||||
while (!is("punc", "}")) {
|
|
||||||
imported_names.push(import_name());
|
|
||||||
if (is("punc", ",")) {
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (imported_names || imported_name) {
|
if (imported_names || imported_name) {
|
||||||
expect_token("name", "from");
|
expect_token("name", "from");
|
||||||
@@ -2237,16 +2227,14 @@ function parse($TEXT, options) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function import_nameAsterisk() {
|
function import_nameAsterisk(name) {
|
||||||
var start = S.token;
|
var start = S.token;
|
||||||
var foreign_name;
|
var foreign_name;
|
||||||
var name;
|
|
||||||
|
|
||||||
next();
|
|
||||||
|
|
||||||
var end = prev();
|
var end = prev();
|
||||||
|
|
||||||
name = new AST_SymbolImport({
|
name = name || new AST_SymbolImport({
|
||||||
name: '*',
|
name: '*',
|
||||||
start: start,
|
start: start,
|
||||||
end: end,
|
end: end,
|
||||||
@@ -2266,6 +2254,30 @@ function parse($TEXT, options) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function import_names(allow_as) {
|
||||||
|
var names;
|
||||||
|
if (is("punc", "{")) {
|
||||||
|
next();
|
||||||
|
names = [];
|
||||||
|
while (!is("punc", "}")) {
|
||||||
|
names.push(import_name());
|
||||||
|
if (is("punc", ",")) {
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next();
|
||||||
|
} else if (is("operator", "*")) {
|
||||||
|
var name;
|
||||||
|
next();
|
||||||
|
if (allow_as && is("name", "as")) {
|
||||||
|
next(); // The "as" word
|
||||||
|
name = as_symbol(AST_SymbolImportForeign);
|
||||||
|
}
|
||||||
|
names = [import_nameAsterisk(name)];
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
function export_() {
|
function export_() {
|
||||||
var start = S.token;
|
var start = S.token;
|
||||||
var is_default;
|
var is_default;
|
||||||
@@ -2278,20 +2290,7 @@ function parse($TEXT, options) {
|
|||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is("punc", "{")) {
|
exported_names = import_names(false);
|
||||||
next();
|
|
||||||
exported_names = [];
|
|
||||||
while (!is("punc", "}")) {
|
|
||||||
exported_names.push(import_name());
|
|
||||||
if (is("punc", ",")) {
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
next();
|
|
||||||
} else if (is("operator", "*")) {
|
|
||||||
var st = prev();
|
|
||||||
exported_names = [import_nameAsterisk()];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exported_names) {
|
if (exported_names) {
|
||||||
if (is("name", "from")) {
|
if (is("name", "from")) {
|
||||||
|
|||||||
@@ -184,7 +184,15 @@ import_statement: {
|
|||||||
import Bar, { Foo } from 'lel';
|
import Bar, { Foo } from 'lel';
|
||||||
import { Bar as kex, Baz as food } from 'lel';
|
import { Bar as kex, Baz as food } from 'lel';
|
||||||
}
|
}
|
||||||
expect_exact: "import\"mod-name\";import Foo from\"bar\";import{Bar,Baz}from\"lel\";import Bar,{Foo}from\"lel\";import{Bar as kex,Baz as food}from\"lel\";"
|
expect_exact: 'import"mod-name";import Foo from"bar";import{Bar,Baz}from"lel";import Bar,{Foo}from"lel";import{Bar as kex,Baz as food}from"lel";'
|
||||||
|
}
|
||||||
|
|
||||||
|
import_all_statement: {
|
||||||
|
input: {
|
||||||
|
import * from 'lel';
|
||||||
|
import * as Lel from 'lel';
|
||||||
|
}
|
||||||
|
expect_exact: 'import*from"lel";import*as Lel from"lel";'
|
||||||
}
|
}
|
||||||
|
|
||||||
export_statement: {
|
export_statement: {
|
||||||
|
|||||||
Reference in New Issue
Block a user