diff --git a/espree.js b/espree.js index 209cc1ef..c2a67df4 100644 --- a/espree.js +++ b/espree.js @@ -4704,6 +4704,272 @@ function parseYieldExpression() { return markerApply(marker, astNodeFactory.createYieldExpression(expr, delegateFlag)); } +// Modules grammar from: +// people.mozilla.org/~jorendorff/es6-draft.html + +function parseModuleSpecifier() { + var marker = markerCreate(), + specifier; + + if (lookahead.type !== Token.StringLiteral) { + throwError({}, Messages.InvalidModuleSpecifier); + } + specifier = astNodeFactory.createLiteralFromSource(lex(), source); + return markerApply(marker, specifier); +} + +function parseExportSpecifier() { + var exported, local, marker = markerCreate(); + if (matchKeyword("default")) { + lex(); + local = markerApply(marker, astNodeFactory.createIdentifier("default")); + // export {default} from "something"; + } else { + local = parseVariableIdentifier(); + } + if (matchContextualKeyword("as")) { + lex(); + exported = parseNonComputedProperty(); + } + return markerApply(marker, astNodeFactory.createExportSpecifier(local, exported)); +} + +function parseExportNamedDeclaration() { + var declaration = null, + isExportFromIdentifier, + src = null, specifiers = [], + marker = markerCreate(); + + expectKeyword("export"); + + // non-default export + if (lookahead.type === Token.Keyword) { + // covers: + // export var f = 1; + switch (lookahead.value) { + case "let": + case "const": + case "var": + // TODO: enable this case when Class gets implemented + // case "class": + case "function": + declaration = parseSourceElement(); + return markerApply(marker, astNodeFactory.createExportNamedDeclaration(declaration, specifiers, null)); + default: + break; + } + } + + expect("{"); + if (!match("}")) { + do { + isExportFromIdentifier = isExportFromIdentifier || matchKeyword("default"); + specifiers.push(parseExportSpecifier()); + } while (match(",") && lex()); + } + expect("}"); + + if (matchContextualKeyword("from")) { + // covering: + // export {default} from "foo"; + // export {foo} from "foo"; + lex(); + src = parseModuleSpecifier(); + consumeSemicolon(); + } else if (isExportFromIdentifier) { + // covering: + // export {default}; // missing fromClause + throwError({}, lookahead.value ? + Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); + } else { + // cover + // export {foo}; + consumeSemicolon(); + } + return markerApply(marker, astNodeFactory.createExportNamedDeclaration(declaration, specifiers, src)); +} + +function parseExportDefaultDeclaration() { + var declaration = null, + expression = null, + possibleIdentifierToken, + marker = markerCreate(); + + // covers: + // export default ... + expectKeyword("export"); + expectKeyword("default"); + // TODO: or matchKeyword("class") after implementing classes + if (matchKeyword("function")) { + possibleIdentifierToken = lookahead2(); + if (isIdentifierName(possibleIdentifierToken)) { + // covers: + // export default function foo () {} + // export default class foo {} + declaration = parseSourceElement(); + return markerApply(marker, astNodeFactory.createExportDefaultDeclaration(declaration)); + } + // covers: + // export default function () {} + // export default class {} + if (lookahead.value === "function") { + // TODO: change this to declaration once we get FunctionDeclaration with nullable name + declaration = parseFunctionExpression(); + return markerApply(marker, astNodeFactory.createExportDefaultDeclaration(declaration)); + } + // TODO: enable after implementing classes + // else if (lookahead.value === "class") { + // // TODO: change this to declaration once we get ClassDeclaration with nullable name + // parseClassExpression() + // return markerApply(marker, astNodeFactory.createExportDefaultDeclaration(declaration)); + // } + } + + if (matchContextualKeyword("from")) { + throwError({}, Messages.UnexpectedToken, lookahead.value); + } + + // covers: + // export default {}; + // export default []; + // export default (1 + 2); + if (match("{")) { + expression = parseObjectInitialiser(); + } else if (match("[")) { + expression = parseArrayInitialiser(); + } else { + expression = parseAssignmentExpression(); + } + consumeSemicolon(); + return markerApply(marker, astNodeFactory.createExportDefaultDeclaration(expression)); +} + + +function parseExportAllDeclaration() { + var src, + marker = markerCreate(); + + // covers: + // export * from "foo"; + expectKeyword("export"); + expect("*"); + if (!matchContextualKeyword("from")) { + throwError({}, lookahead.value ? + Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); + } + lex(); + src = parseModuleSpecifier(); + consumeSemicolon(); + + return markerApply(marker, astNodeFactory.createExportAllDeclaration(src)); +} + +function parseExportDeclaration() { + var declarationType = lookahead2().value; + if (declarationType === "default") { + return parseExportDefaultDeclaration(); + } else if (declarationType === "*") { + return parseExportAllDeclaration(); + } else { + return parseExportNamedDeclaration(); + } +} + +function parseImportSpecifier() { + // import {} ...; + var local, imported, marker = markerCreate(); + + imported = parseNonComputedProperty(); + if (matchContextualKeyword("as")) { + lex(); + local = parseVariableIdentifier(); + } + + return markerApply(marker, astNodeFactory.createImportSpecifier(local, imported)); +} + +function parseNamedImports() { + var specifiers = []; + // {foo, bar as bas} + expect("{"); + if (!match("}")) { + do { + specifiers.push(parseImportSpecifier()); + } while (match(",") && lex()); + } + expect("}"); + return specifiers; +} + +function parseImportDefaultSpecifier() { + // import ...; + var local, marker = markerCreate(); + + local = parseNonComputedProperty(); + + return markerApply(marker, astNodeFactory.createImportDefaultSpecifier(local)); +} + +function parseImportNamespaceSpecifier() { + // import <* as foo> ...; + var local, marker = markerCreate(); + + expect("*"); + if (!matchContextualKeyword("as")) { + throwError({}, Messages.NoAsAfterImportNamespace); + } + lex(); + local = parseNonComputedProperty(); + + return markerApply(marker, astNodeFactory.createImportNamespaceSpecifier(local)); +} + +function parseImportDeclaration() { + var specifiers, src, marker = markerCreate(); + + expectKeyword("import"); + specifiers = []; + + if (lookahead.type === Token.StringLiteral) { + // covers: + // import "foo"; + src = parseModuleSpecifier(); + consumeSemicolon(); + return markerApply(marker, astNodeFactory.createImportDeclaration(specifiers, src)); + } + + if (!matchKeyword("default") && isIdentifierName(lookahead)) { + // covers: + // import foo + // import foo, ... + specifiers.push(parseImportDefaultSpecifier()); + if (match(",")) { + lex(); + } + } + if (match("*")) { + // covers: + // import foo, * as foo + // import * as foo + specifiers.push(parseImportNamespaceSpecifier()); + } else if (match("{")) { + // covers: + // import foo, {bar} + // import {bar} + specifiers = specifiers.concat(parseNamedImports()); + } + + if (!matchContextualKeyword("from")) { + throwError({}, lookahead.value ? + Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); + } + lex(); + src = parseModuleSpecifier(); + consumeSemicolon(); + + return markerApply(marker, astNodeFactory.createImportDeclaration(specifiers, src)); +} + // 14 Functions and classes // 14.1 Functions is defined above (13 in ES5) @@ -4839,6 +5105,16 @@ function parseSourceElement() { if (lookahead.type === Token.Keyword) { switch (lookahead.value) { + case "export": + if (!extra.isModule) { + throwErrorTolerant({}, Messages.IllegalExportDeclaration); + } + return parseExportDeclaration(); + case "import": + if (!extra.isModule) { + throwErrorTolerant({}, Messages.IllegalImportDeclaration); + } + return parseImportDeclaration(); case "function": return parseFunctionDeclaration(); case "class": @@ -4908,7 +5184,7 @@ function parseProgram() { skipComment(); peek(); marker = markerCreate(); - strict = false; + strict = extra.isModule; body = parseSourceElements(); return markerApply(marker, astNodeFactory.createProgram(body)); @@ -5080,7 +5356,7 @@ function parse(code, options) { }; extra = { - ecmaFeatures: defaultFeatures + ecmaFeatures: Object.create(defaultFeatures) }; // for template strings @@ -5116,6 +5392,25 @@ function parse(code, options) { extra.trailingComments = []; extra.leadingComments = []; } + if (options.sourceType === "module") { + // TODO: enable all other ES6 features that are supported in modules + extra.ecmaFeatures.blockBindings = true; + extra.ecmaFeatures.regexUFlag = true; + extra.ecmaFeatures.regexYFlag = true; + extra.ecmaFeatures.templateStrings = true; + extra.ecmaFeatures.binaryLiterals = true; + extra.ecmaFeatures.octalLiterals = true; + extra.ecmaFeatures.unicodeCodePointEscapes = true; + extra.ecmaFeatures.defaultParams = true; + extra.ecmaFeatures.forOf = true; + extra.ecmaFeatures.objectLiteralComputedProperties = true; + extra.ecmaFeatures.objectLiteralShorthandMethods = true; + extra.ecmaFeatures.objectLiteralShorthandProperties = true; + extra.ecmaFeatures.objectLiteralDuplicateProperties = true; + extra.ecmaFeatures.generators = true; + extra.isModule = true; + // TODO: enable classes when it becomes available + } } try { diff --git a/lib/ast-node-factory.js b/lib/ast-node-factory.js index 86b22d5a..1cf1b40b 100644 --- a/lib/ast-node-factory.js +++ b/lib/ast-node-factory.js @@ -842,6 +842,67 @@ module.exports = { type: astNodeTypes.JSXClosingElement, name: name }; + }, + + createExportSpecifier: function (local, exported) { + return { + type: astNodeTypes.ExportSpecifier, + exported: exported || local, + local: local + }; + }, + + createImportDefaultSpecifier: function (local) { + return { + type: astNodeTypes.ImportDefaultSpecifier, + local: local + }; + }, + + createImportNamespaceSpecifier: function (local) { + return { + type: astNodeTypes.ImportNamespaceSpecifier, + local: local + }; + }, + + createExportNamedDeclaration: function (declaration, specifiers, source) { + return { + type: astNodeTypes.ExportNamedDeclaration, + declaration: declaration, + specifiers: specifiers, + source: source + }; + }, + + createExportDefaultDeclaration: function (declaration) { + return { + type: astNodeTypes.ExportDefaultDeclaration, + declaration: declaration + }; + }, + + createExportAllDeclaration: function (source) { + return { + type: astNodeTypes.ExportAllDeclaration, + source: source + }; + }, + + createImportSpecifier: function (local, imported) { + return { + type: astNodeTypes.ImportSpecifier, + local: local || imported, + imported: imported + }; + }, + + createImportDeclaration: function (specifiers, source) { + return { + type: astNodeTypes.ImportDeclaration, + specifiers: specifiers, + source: source + }; } }; diff --git a/lib/ast-node-types.js b/lib/ast-node-types.js index e52ddec0..3e041cc3 100644 --- a/lib/ast-node-types.js +++ b/lib/ast-node-types.js @@ -101,5 +101,13 @@ module.exports = { JSXOpeningElement: "JSXOpeningElement", JSXAttribute: "JSXAttribute", JSXSpreadAttribute: "JSXSpreadAttribute", - JSXText: "JSXText" + JSXText: "JSXText", + ExportDefaultDeclaration: "ExportDefaultDeclaration", + ExportNamedDeclaration: "ExportNamedDeclaration", + ExportAllDeclaration: "ExportAllDeclaration", + ExportSpecifier: "ExportSpecifier", + ImportDeclaration: "ImportDeclaration", + ImportSpecifier: "ImportSpecifier", + ImportDefaultSpecifier: "ImportDefaultSpecifier", + ImportNamespaceSpecifier: "ImportNamespaceSpecifier" }; diff --git a/lib/messages.js b/lib/messages.js index 41651c8f..2618f993 100644 --- a/lib/messages.js +++ b/lib/messages.js @@ -89,5 +89,10 @@ module.exports = { StrictReservedWord: "Use of future reserved word in strict mode", InvalidJSXAttributeValue: "JSX value should be either an expression or a quoted JSX text", ExpectedJSXClosingTag: "Expected corresponding JSX closing tag for %0", - AdjacentJSXElements: "Adjacent JSX elements must be wrapped in an enclosing tag" + AdjacentJSXElements: "Adjacent JSX elements must be wrapped in an enclosing tag", + MissingFromClause: "Missing from clause", + NoAsAfterImportNamespace: "Missing as after import *", + InvalidModuleSpecifier: "Invalid module specifier", + IllegalImportDeclaration: "Illegal import declaration", + IllegalExportDeclaration: "Illegal export declaration" }; diff --git a/tests/fixtures/modules/export/export-const-number.result.js b/tests/fixtures/modules/export/export-const-number.result.js new file mode 100644 index 00000000..ecc8e96b --- /dev/null +++ b/tests/fixtures/modules/export/export-const-number.result.js @@ -0,0 +1,112 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": { + "type": "VariableDeclaration", + "declarations": [ + { + "type": "VariableDeclarator", + "id": { + "type": "Identifier", + "name": "foo", + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + }, + "init": { + "type": "Literal", + "value": 3, + "raw": "3", + "range": [ + 19, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 19 + }, + "end": { + "line": 1, + "column": 20 + } + } + }, + "range": [ + 13, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 20 + } + } + } + ], + "kind": "const", + "range": [ + 7, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 21 + } + } + }, + "specifiers": [], + "source": null, + "range": [ + 0, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 21 + } + } + } + ], + "range": [ + 0, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 21 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-const-number.src.js b/tests/fixtures/modules/export/export-const-number.src.js new file mode 100644 index 00000000..0146d2af --- /dev/null +++ b/tests/fixtures/modules/export/export-const-number.src.js @@ -0,0 +1 @@ +export const foo = 3; diff --git a/tests/fixtures/modules/export/export-const-object.result.js b/tests/fixtures/modules/export/export-const-object.result.js new file mode 100644 index 00000000..4a756cdb --- /dev/null +++ b/tests/fixtures/modules/export/export-const-object.result.js @@ -0,0 +1,111 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": { + "type": "VariableDeclaration", + "declarations": [ + { + "type": "VariableDeclarator", + "id": { + "type": "Identifier", + "name": "foo", + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + }, + "init": { + "type": "ObjectExpression", + "properties": [], + "range": [ + 19, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 19 + }, + "end": { + "line": 1, + "column": 21 + } + } + }, + "range": [ + 13, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 21 + } + } + } + ], + "kind": "const", + "range": [ + 7, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 2, + "column": 0 + } + } + }, + "specifiers": [], + "source": null, + "range": [ + 0, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 0 + } + } + } + ], + "range": [ + 0, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 0 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-const-object.src.js b/tests/fixtures/modules/export/export-const-object.src.js new file mode 100644 index 00000000..5a76a5bc --- /dev/null +++ b/tests/fixtures/modules/export/export-const-object.src.js @@ -0,0 +1 @@ +export const foo = {} diff --git a/tests/fixtures/modules/export/export-default-array.result.js b/tests/fixtures/modules/export/export-default-array.result.js new file mode 100644 index 00000000..c3d34c59 --- /dev/null +++ b/tests/fixtures/modules/export/export-default-array.result.js @@ -0,0 +1,54 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportDefaultDeclaration", + "declaration": { + "type": "ArrayExpression", + "elements": [], + "range": [ + 15, + 17 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 17 + } + } + }, + "range": [ + 0, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 18 + } + } + } + ], + "range": [ + 0, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 18 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-default-array.src.js b/tests/fixtures/modules/export/export-default-array.src.js new file mode 100644 index 00000000..d6d1738d --- /dev/null +++ b/tests/fixtures/modules/export/export-default-array.src.js @@ -0,0 +1 @@ +export default []; diff --git a/tests/fixtures/modules/export/export-default-expression.result.js b/tests/fixtures/modules/export/export-default-expression.result.js new file mode 100644 index 00000000..19b6a8d7 --- /dev/null +++ b/tests/fixtures/modules/export/export-default-expression.result.js @@ -0,0 +1,92 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportDefaultDeclaration", + "declaration": { + "type": "BinaryExpression", + "operator": "+", + "left": { + "type": "Literal", + "value": 1, + "raw": "1", + "range": [ + 16, + 17 + ], + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 17 + } + } + }, + "right": { + "type": "Literal", + "value": 2, + "raw": "2", + "range": [ + 20, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 20 + }, + "end": { + "line": 1, + "column": 21 + } + } + }, + "range": [ + 16, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 21 + } + } + }, + "range": [ + 0, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 23 + } + } + } + ], + "range": [ + 0, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 23 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-default-expression.src.js b/tests/fixtures/modules/export/export-default-expression.src.js new file mode 100644 index 00000000..f30c184a --- /dev/null +++ b/tests/fixtures/modules/export/export-default-expression.src.js @@ -0,0 +1 @@ +export default (1 + 2); diff --git a/tests/fixtures/modules/export/export-default-function.result.js b/tests/fixtures/modules/export/export-default-function.result.js new file mode 100644 index 00000000..cf61e520 --- /dev/null +++ b/tests/fixtures/modules/export/export-default-function.result.js @@ -0,0 +1,77 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportDefaultDeclaration", + "declaration": { + "type": "FunctionExpression", + "id": null, + "params": [], + "defaults": [], + "body": { + "type": "BlockStatement", + "body": [], + "range": [ + 27, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 27 + }, + "end": { + "line": 1, + "column": 29 + } + } + }, + "rest": null, + "generator": false, + "expression": false, + "range": [ + 15, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 29 + } + } + }, + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 29 + } + } + } + ], + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 29 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-default-function.src.js b/tests/fixtures/modules/export/export-default-function.src.js new file mode 100644 index 00000000..ea9b101e --- /dev/null +++ b/tests/fixtures/modules/export/export-default-function.src.js @@ -0,0 +1 @@ +export default function () {} diff --git a/tests/fixtures/modules/export/export-default-named-function.result.js b/tests/fixtures/modules/export/export-default-named-function.result.js new file mode 100644 index 00000000..7113ee8a --- /dev/null +++ b/tests/fixtures/modules/export/export-default-named-function.result.js @@ -0,0 +1,94 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportDefaultDeclaration", + "declaration": { + "type": "FunctionDeclaration", + "id": { + "type": "Identifier", + "name": "foo", + "range": [ + 24, + 27 + ], + "loc": { + "start": { + "line": 1, + "column": 24 + }, + "end": { + "line": 1, + "column": 27 + } + } + }, + "params": [], + "defaults": [], + "body": { + "type": "BlockStatement", + "body": [], + "range": [ + 30, + 32 + ], + "loc": { + "start": { + "line": 1, + "column": 30 + }, + "end": { + "line": 1, + "column": 32 + } + } + }, + "rest": null, + "generator": false, + "expression": false, + "range": [ + 15, + 32 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 32 + } + } + }, + "range": [ + 0, + 32 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 32 + } + } + } + ], + "range": [ + 0, + 32 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 32 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-default-named-function.src.js b/tests/fixtures/modules/export/export-default-named-function.src.js new file mode 100644 index 00000000..386baca1 --- /dev/null +++ b/tests/fixtures/modules/export/export-default-named-function.src.js @@ -0,0 +1 @@ +export default function foo() {} diff --git a/tests/fixtures/modules/export/export-default-number.result.js b/tests/fixtures/modules/export/export-default-number.result.js new file mode 100644 index 00000000..0d286302 --- /dev/null +++ b/tests/fixtures/modules/export/export-default-number.result.js @@ -0,0 +1,55 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportDefaultDeclaration", + "declaration": { + "type": "Literal", + "value": 42, + "raw": "42", + "range": [ + 15, + 17 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 17 + } + } + }, + "range": [ + 0, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 18 + } + } + } + ], + "range": [ + 0, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 18 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-default-number.src.js b/tests/fixtures/modules/export/export-default-number.src.js new file mode 100644 index 00000000..7a4e8a72 --- /dev/null +++ b/tests/fixtures/modules/export/export-default-number.src.js @@ -0,0 +1 @@ +export default 42; diff --git a/tests/fixtures/modules/export/export-default-object.result.js b/tests/fixtures/modules/export/export-default-object.result.js new file mode 100644 index 00000000..2ed74e69 --- /dev/null +++ b/tests/fixtures/modules/export/export-default-object.result.js @@ -0,0 +1,113 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportDefaultDeclaration", + "declaration": { + "type": "ObjectExpression", + "properties": [ + { + "type": "Property", + "key": { + "type": "Identifier", + "name": "foo", + "range": [ + 17, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 20 + } + } + }, + "value": { + "type": "Literal", + "value": 1, + "raw": "1", + "range": [ + 22, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 22 + }, + "end": { + "line": 1, + "column": 23 + } + } + }, + "kind": "init", + "method": false, + "shorthand": false, + "computed": false, + "range": [ + 17, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 23 + } + } + } + ], + "range": [ + 15, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 25 + } + } + }, + "range": [ + 0, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 26 + } + } + } + ], + "range": [ + 0, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 26 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-default-object.src.js b/tests/fixtures/modules/export/export-default-object.src.js new file mode 100644 index 00000000..f8266ca2 --- /dev/null +++ b/tests/fixtures/modules/export/export-default-object.src.js @@ -0,0 +1 @@ +export default { foo: 1 }; diff --git a/tests/fixtures/modules/export/export-default-value.result.js b/tests/fixtures/modules/export/export-default-value.result.js new file mode 100644 index 00000000..663bf99c --- /dev/null +++ b/tests/fixtures/modules/export/export-default-value.result.js @@ -0,0 +1,54 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportDefaultDeclaration", + "declaration": { + "type": "Identifier", + "name": "foo", + "range": [ + 15, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 18 + } + } + }, + "range": [ + 0, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 19 + } + } + } + ], + "range": [ + 0, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 19 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-default-value.src.js b/tests/fixtures/modules/export/export-default-value.src.js new file mode 100644 index 00000000..f7b318b3 --- /dev/null +++ b/tests/fixtures/modules/export/export-default-value.src.js @@ -0,0 +1 @@ +export default foo; diff --git a/tests/fixtures/modules/export/export-from-batch.result.js b/tests/fixtures/modules/export/export-from-batch.result.js new file mode 100644 index 00000000..ffc8c323 --- /dev/null +++ b/tests/fixtures/modules/export/export-from-batch.result.js @@ -0,0 +1,55 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportAllDeclaration", + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 14, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 19 + } + } + }, + "range": [ + 0, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 20 + } + } + } + ], + "range": [ + 0, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 20 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-from-batch.src.js b/tests/fixtures/modules/export/export-from-batch.src.js new file mode 100644 index 00000000..9ec8f63a --- /dev/null +++ b/tests/fixtures/modules/export/export-from-batch.src.js @@ -0,0 +1 @@ +export * from "foo"; diff --git a/tests/fixtures/modules/export/export-from-default.result.js b/tests/fixtures/modules/export/export-from-default.result.js new file mode 100644 index 00000000..386f243d --- /dev/null +++ b/tests/fixtures/modules/export/export-from-default.result.js @@ -0,0 +1,111 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": null, + "specifiers": [ + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "default", + "range": [ + 8, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 15 + } + } + }, + "local": { + "type": "Identifier", + "name": "default", + "range": [ + 8, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 15 + } + } + }, + "range": [ + 8, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 15 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 22, + 27 + ], + "loc": { + "start": { + "line": 1, + "column": 22 + }, + "end": { + "line": 1, + "column": 27 + } + } + }, + "range": [ + 0, + 28 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 28 + } + } + } + ], + "range": [ + 0, + 28 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 28 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-from-default.src.js b/tests/fixtures/modules/export/export-from-default.src.js new file mode 100644 index 00000000..2c7930d9 --- /dev/null +++ b/tests/fixtures/modules/export/export-from-default.src.js @@ -0,0 +1 @@ +export {default} from "foo"; diff --git a/tests/fixtures/modules/export/export-from-named-as-default.result.js b/tests/fixtures/modules/export/export-from-named-as-default.result.js new file mode 100644 index 00000000..e51f18a4 --- /dev/null +++ b/tests/fixtures/modules/export/export-from-named-as-default.result.js @@ -0,0 +1,111 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": null, + "specifiers": [ + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "default", + "range": [ + 15, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 22 + } + } + }, + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 22 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 29, + 34 + ], + "loc": { + "start": { + "line": 1, + "column": 29 + }, + "end": { + "line": 1, + "column": 34 + } + } + }, + "range": [ + 0, + 35 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 35 + } + } + } + ], + "range": [ + 0, + 35 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 35 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-from-named-as-default.src.js b/tests/fixtures/modules/export/export-from-named-as-default.src.js new file mode 100644 index 00000000..5be9a685 --- /dev/null +++ b/tests/fixtures/modules/export/export-from-named-as-default.src.js @@ -0,0 +1 @@ +export {foo as default} from "foo"; diff --git a/tests/fixtures/modules/export/export-from-named-as-specifier.result.js b/tests/fixtures/modules/export/export-from-named-as-specifier.result.js new file mode 100644 index 00000000..989ad034 --- /dev/null +++ b/tests/fixtures/modules/export/export-from-named-as-specifier.result.js @@ -0,0 +1,111 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": null, + "specifiers": [ + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "bar", + "range": [ + 15, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 18 + } + } + }, + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 18 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 25, + 30 + ], + "loc": { + "start": { + "line": 1, + "column": 25 + }, + "end": { + "line": 1, + "column": 30 + } + } + }, + "range": [ + 0, + 31 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 31 + } + } + } + ], + "range": [ + 0, + 31 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 31 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-from-named-as-specifier.src.js b/tests/fixtures/modules/export/export-from-named-as-specifier.src.js new file mode 100644 index 00000000..9fff903b --- /dev/null +++ b/tests/fixtures/modules/export/export-from-named-as-specifier.src.js @@ -0,0 +1 @@ +export {foo as bar} from "foo"; diff --git a/tests/fixtures/modules/export/export-from-named-as-specifiers.result.js b/tests/fixtures/modules/export/export-from-named-as-specifiers.result.js new file mode 100644 index 00000000..6a8eec14 --- /dev/null +++ b/tests/fixtures/modules/export/export-from-named-as-specifiers.result.js @@ -0,0 +1,164 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": null, + "specifiers": [ + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "default", + "range": [ + 15, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 22 + } + } + }, + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 22 + } + } + }, + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "bar", + "range": [ + 24, + 27 + ], + "loc": { + "start": { + "line": 1, + "column": 24 + }, + "end": { + "line": 1, + "column": 27 + } + } + }, + "local": { + "type": "Identifier", + "name": "bar", + "range": [ + 24, + 27 + ], + "loc": { + "start": { + "line": 1, + "column": 24 + }, + "end": { + "line": 1, + "column": 27 + } + } + }, + "range": [ + 24, + 27 + ], + "loc": { + "start": { + "line": 1, + "column": 24 + }, + "end": { + "line": 1, + "column": 27 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 34, + 39 + ], + "loc": { + "start": { + "line": 1, + "column": 34 + }, + "end": { + "line": 1, + "column": 39 + } + } + }, + "range": [ + 0, + 40 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 40 + } + } + } + ], + "range": [ + 0, + 40 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 40 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-from-named-as-specifiers.src.js b/tests/fixtures/modules/export/export-from-named-as-specifiers.src.js new file mode 100644 index 00000000..4461d79e --- /dev/null +++ b/tests/fixtures/modules/export/export-from-named-as-specifiers.src.js @@ -0,0 +1 @@ +export {foo as default, bar} from "foo"; diff --git a/tests/fixtures/modules/export/export-from-specifier.result.js b/tests/fixtures/modules/export/export-from-specifier.result.js new file mode 100644 index 00000000..3c64ea7b --- /dev/null +++ b/tests/fixtures/modules/export/export-from-specifier.result.js @@ -0,0 +1,111 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": null, + "specifiers": [ + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 18, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 23 + } + } + }, + "range": [ + 0, + 24 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 24 + } + } + } + ], + "range": [ + 0, + 24 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 24 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-from-specifier.src.js b/tests/fixtures/modules/export/export-from-specifier.src.js new file mode 100644 index 00000000..83b7b67c --- /dev/null +++ b/tests/fixtures/modules/export/export-from-specifier.src.js @@ -0,0 +1 @@ +export {foo} from "foo"; diff --git a/tests/fixtures/modules/export/export-from-specifiers.result.js b/tests/fixtures/modules/export/export-from-specifiers.result.js new file mode 100644 index 00000000..e5dcea6f --- /dev/null +++ b/tests/fixtures/modules/export/export-from-specifiers.result.js @@ -0,0 +1,164 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": null, + "specifiers": [ + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "bar", + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + }, + "local": { + "type": "Identifier", + "name": "bar", + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + }, + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 23, + 28 + ], + "loc": { + "start": { + "line": 1, + "column": 23 + }, + "end": { + "line": 1, + "column": 28 + } + } + }, + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 29 + } + } + } + ], + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 29 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-from-specifiers.src.js b/tests/fixtures/modules/export/export-from-specifiers.src.js new file mode 100644 index 00000000..35c2762a --- /dev/null +++ b/tests/fixtures/modules/export/export-from-specifiers.src.js @@ -0,0 +1 @@ +export {foo, bar} from "foo"; diff --git a/tests/fixtures/modules/export/export-function.result.js b/tests/fixtures/modules/export/export-function.result.js new file mode 100644 index 00000000..dffbd2ac --- /dev/null +++ b/tests/fixtures/modules/export/export-function.result.js @@ -0,0 +1,96 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": { + "type": "FunctionDeclaration", + "id": { + "type": "Identifier", + "name": "foo", + "range": [ + 16, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 19 + } + } + }, + "params": [], + "defaults": [], + "body": { + "type": "BlockStatement", + "body": [], + "range": [ + 23, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 23 + }, + "end": { + "line": 1, + "column": 25 + } + } + }, + "rest": null, + "generator": false, + "expression": false, + "range": [ + 7, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 25 + } + } + }, + "specifiers": [], + "source": null, + "range": [ + 0, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 25 + } + } + } + ], + "range": [ + 0, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 25 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-function.src.js b/tests/fixtures/modules/export/export-function.src.js new file mode 100644 index 00000000..768586d7 --- /dev/null +++ b/tests/fixtures/modules/export/export-function.src.js @@ -0,0 +1 @@ +export function foo () {} diff --git a/tests/fixtures/modules/export/export-let-number.result.js b/tests/fixtures/modules/export/export-let-number.result.js new file mode 100644 index 00000000..5daf4c8d --- /dev/null +++ b/tests/fixtures/modules/export/export-let-number.result.js @@ -0,0 +1,112 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": { + "type": "VariableDeclaration", + "declarations": [ + { + "type": "VariableDeclarator", + "id": { + "type": "Identifier", + "name": "foo", + "range": [ + 11, + 14 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 14 + } + } + }, + "init": { + "type": "Literal", + "value": 2, + "raw": "2", + "range": [ + 17, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 18 + } + } + }, + "range": [ + 11, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 18 + } + } + } + ], + "kind": "let", + "range": [ + 7, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 19 + } + } + }, + "specifiers": [], + "source": null, + "range": [ + 0, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 19 + } + } + } + ], + "range": [ + 0, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 19 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-let-number.src.js b/tests/fixtures/modules/export/export-let-number.src.js new file mode 100644 index 00000000..a3bcdb0d --- /dev/null +++ b/tests/fixtures/modules/export/export-let-number.src.js @@ -0,0 +1 @@ +export let foo = 2; diff --git a/tests/fixtures/modules/export/export-let-object.result.js b/tests/fixtures/modules/export/export-let-object.result.js new file mode 100644 index 00000000..da9ab342 --- /dev/null +++ b/tests/fixtures/modules/export/export-let-object.result.js @@ -0,0 +1,111 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": { + "type": "VariableDeclaration", + "declarations": [ + { + "type": "VariableDeclarator", + "id": { + "type": "Identifier", + "name": "foo", + "range": [ + 11, + 14 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 14 + } + } + }, + "init": { + "type": "ObjectExpression", + "properties": [], + "range": [ + 17, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 19 + } + } + }, + "range": [ + 11, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 19 + } + } + } + ], + "kind": "let", + "range": [ + 7, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 2, + "column": 0 + } + } + }, + "specifiers": [], + "source": null, + "range": [ + 0, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 0 + } + } + } + ], + "range": [ + 0, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 0 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-let-object.src.js b/tests/fixtures/modules/export/export-let-object.src.js new file mode 100644 index 00000000..12613c64 --- /dev/null +++ b/tests/fixtures/modules/export/export-let-object.src.js @@ -0,0 +1 @@ +export let foo = {} diff --git a/tests/fixtures/modules/export/export-let.result.js b/tests/fixtures/modules/export/export-let.result.js new file mode 100644 index 00000000..c8e211fa --- /dev/null +++ b/tests/fixtures/modules/export/export-let.result.js @@ -0,0 +1,94 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": { + "type": "VariableDeclaration", + "declarations": [ + { + "type": "VariableDeclarator", + "id": { + "type": "Identifier", + "name": "bar", + "range": [ + 11, + 14 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 14 + } + } + }, + "init": null, + "range": [ + 11, + 14 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 14 + } + } + } + ], + "kind": "let", + "range": [ + 7, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 15 + } + } + }, + "specifiers": [], + "source": null, + "range": [ + 0, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 15 + } + } + } + ], + "range": [ + 0, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 15 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-let.src.js b/tests/fixtures/modules/export/export-let.src.js new file mode 100644 index 00000000..c2aed8a3 --- /dev/null +++ b/tests/fixtures/modules/export/export-let.src.js @@ -0,0 +1 @@ +export let bar; diff --git a/tests/fixtures/modules/export/export-named-as-default.result.js b/tests/fixtures/modules/export/export-named-as-default.result.js new file mode 100644 index 00000000..b512d908 --- /dev/null +++ b/tests/fixtures/modules/export/export-named-as-default.result.js @@ -0,0 +1,93 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": null, + "specifiers": [ + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "default", + "range": [ + 15, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 22 + } + } + }, + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 22 + } + } + } + ], + "source": null, + "range": [ + 0, + 24 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 24 + } + } + } + ], + "range": [ + 0, + 24 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 24 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-named-as-default.src.js b/tests/fixtures/modules/export/export-named-as-default.src.js new file mode 100644 index 00000000..5d32a24d --- /dev/null +++ b/tests/fixtures/modules/export/export-named-as-default.src.js @@ -0,0 +1 @@ +export {foo as default}; diff --git a/tests/fixtures/modules/export/export-named-as-specifier.result.js b/tests/fixtures/modules/export/export-named-as-specifier.result.js new file mode 100644 index 00000000..e9084f67 --- /dev/null +++ b/tests/fixtures/modules/export/export-named-as-specifier.result.js @@ -0,0 +1,93 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": null, + "specifiers": [ + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "bar", + "range": [ + 15, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 18 + } + } + }, + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 18 + } + } + } + ], + "source": null, + "range": [ + 0, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 20 + } + } + } + ], + "range": [ + 0, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 20 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-named-as-specifier.src.js b/tests/fixtures/modules/export/export-named-as-specifier.src.js new file mode 100644 index 00000000..e7820a6f --- /dev/null +++ b/tests/fixtures/modules/export/export-named-as-specifier.src.js @@ -0,0 +1 @@ +export {foo as bar}; diff --git a/tests/fixtures/modules/export/export-named-as-specifiers.result.js b/tests/fixtures/modules/export/export-named-as-specifiers.result.js new file mode 100644 index 00000000..351f0e37 --- /dev/null +++ b/tests/fixtures/modules/export/export-named-as-specifiers.result.js @@ -0,0 +1,146 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": null, + "specifiers": [ + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "default", + "range": [ + 15, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 22 + } + } + }, + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 22 + } + } + }, + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "bar", + "range": [ + 24, + 27 + ], + "loc": { + "start": { + "line": 1, + "column": 24 + }, + "end": { + "line": 1, + "column": 27 + } + } + }, + "local": { + "type": "Identifier", + "name": "bar", + "range": [ + 24, + 27 + ], + "loc": { + "start": { + "line": 1, + "column": 24 + }, + "end": { + "line": 1, + "column": 27 + } + } + }, + "range": [ + 24, + 27 + ], + "loc": { + "start": { + "line": 1, + "column": 24 + }, + "end": { + "line": 1, + "column": 27 + } + } + } + ], + "source": null, + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 29 + } + } + } + ], + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 29 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-named-as-specifiers.src.js b/tests/fixtures/modules/export/export-named-as-specifiers.src.js new file mode 100644 index 00000000..ff579278 --- /dev/null +++ b/tests/fixtures/modules/export/export-named-as-specifiers.src.js @@ -0,0 +1 @@ +export {foo as default, bar}; diff --git a/tests/fixtures/modules/export/export-named-empty.result.js b/tests/fixtures/modules/export/export-named-empty.result.js new file mode 100644 index 00000000..38f5825b --- /dev/null +++ b/tests/fixtures/modules/export/export-named-empty.result.js @@ -0,0 +1,39 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": null, + "specifiers": [], + "source": null, + "range": [ + 0, + 10 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 10 + } + } + } + ], + "range": [ + 0, + 10 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 10 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-named-empty.src.js b/tests/fixtures/modules/export/export-named-empty.src.js new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/tests/fixtures/modules/export/export-named-empty.src.js @@ -0,0 +1 @@ +export {}; diff --git a/tests/fixtures/modules/export/export-named-specifier.result.js b/tests/fixtures/modules/export/export-named-specifier.result.js new file mode 100644 index 00000000..efb72302 --- /dev/null +++ b/tests/fixtures/modules/export/export-named-specifier.result.js @@ -0,0 +1,93 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": null, + "specifiers": [ + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + } + ], + "source": null, + "range": [ + 0, + 13 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 13 + } + } + } + ], + "range": [ + 0, + 13 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 13 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-named-specifier.src.js b/tests/fixtures/modules/export/export-named-specifier.src.js new file mode 100644 index 00000000..df5f5e60 --- /dev/null +++ b/tests/fixtures/modules/export/export-named-specifier.src.js @@ -0,0 +1 @@ +export {foo}; diff --git a/tests/fixtures/modules/export/export-named-specifiers.result.js b/tests/fixtures/modules/export/export-named-specifiers.result.js new file mode 100644 index 00000000..4519c38a --- /dev/null +++ b/tests/fixtures/modules/export/export-named-specifiers.result.js @@ -0,0 +1,146 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": null, + "specifiers": [ + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + { + "type": "ExportSpecifier", + "exported": { + "type": "Identifier", + "name": "bar", + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + }, + "local": { + "type": "Identifier", + "name": "bar", + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + }, + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + } + ], + "source": null, + "range": [ + 0, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 18 + } + } + } + ], + "range": [ + 0, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 18 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-named-specifiers.src.js b/tests/fixtures/modules/export/export-named-specifiers.src.js new file mode 100644 index 00000000..fdbc9427 --- /dev/null +++ b/tests/fixtures/modules/export/export-named-specifiers.src.js @@ -0,0 +1 @@ +export {foo, bar}; diff --git a/tests/fixtures/modules/export/export-var-anonymous-function.result.js b/tests/fixtures/modules/export/export-var-anonymous-function.result.js new file mode 100644 index 00000000..921a8338 --- /dev/null +++ b/tests/fixtures/modules/export/export-var-anonymous-function.result.js @@ -0,0 +1,134 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": { + "type": "VariableDeclaration", + "declarations": [ + { + "type": "VariableDeclarator", + "id": { + "type": "Identifier", + "name": "foo", + "range": [ + 11, + 14 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 14 + } + } + }, + "init": { + "type": "FunctionExpression", + "id": null, + "params": [], + "defaults": [], + "body": { + "type": "BlockStatement", + "body": [], + "range": [ + 29, + 31 + ], + "loc": { + "start": { + "line": 1, + "column": 29 + }, + "end": { + "line": 1, + "column": 31 + } + } + }, + "rest": null, + "generator": false, + "expression": false, + "range": [ + 17, + 31 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 31 + } + } + }, + "range": [ + 11, + 31 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 31 + } + } + } + ], + "kind": "var", + "range": [ + 7, + 32 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 32 + } + } + }, + "specifiers": [], + "source": null, + "range": [ + 0, + 32 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 32 + } + } + } + ], + "range": [ + 0, + 32 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 32 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-var-anonymous-function.src.js b/tests/fixtures/modules/export/export-var-anonymous-function.src.js new file mode 100644 index 00000000..f8af2882 --- /dev/null +++ b/tests/fixtures/modules/export/export-var-anonymous-function.src.js @@ -0,0 +1 @@ +export var foo = function () {}; diff --git a/tests/fixtures/modules/export/export-var-number.result.js b/tests/fixtures/modules/export/export-var-number.result.js new file mode 100644 index 00000000..9bebd2f8 --- /dev/null +++ b/tests/fixtures/modules/export/export-var-number.result.js @@ -0,0 +1,112 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": { + "type": "VariableDeclaration", + "declarations": [ + { + "type": "VariableDeclarator", + "id": { + "type": "Identifier", + "name": "foo", + "range": [ + 11, + 14 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 14 + } + } + }, + "init": { + "type": "Literal", + "value": 1, + "raw": "1", + "range": [ + 17, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 18 + } + } + }, + "range": [ + 11, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 18 + } + } + } + ], + "kind": "var", + "range": [ + 7, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 19 + } + } + }, + "specifiers": [], + "source": null, + "range": [ + 0, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 19 + } + } + } + ], + "range": [ + 0, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 19 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-var-number.src.js b/tests/fixtures/modules/export/export-var-number.src.js new file mode 100644 index 00000000..e2e71aa4 --- /dev/null +++ b/tests/fixtures/modules/export/export-var-number.src.js @@ -0,0 +1 @@ +export var foo = 1; diff --git a/tests/fixtures/modules/export/export-var.result.js b/tests/fixtures/modules/export/export-var.result.js new file mode 100644 index 00000000..8f2ebf55 --- /dev/null +++ b/tests/fixtures/modules/export/export-var.result.js @@ -0,0 +1,94 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ExportNamedDeclaration", + "declaration": { + "type": "VariableDeclaration", + "declarations": [ + { + "type": "VariableDeclarator", + "id": { + "type": "Identifier", + "name": "bar", + "range": [ + 11, + 14 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 14 + } + } + }, + "init": null, + "range": [ + 11, + 14 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 14 + } + } + } + ], + "kind": "var", + "range": [ + 7, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 15 + } + } + }, + "specifiers": [], + "source": null, + "range": [ + 0, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 15 + } + } + } + ], + "range": [ + 0, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 15 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/export-var.src.js b/tests/fixtures/modules/export/export-var.src.js new file mode 100644 index 00000000..62da3e60 --- /dev/null +++ b/tests/fixtures/modules/export/export-var.src.js @@ -0,0 +1 @@ +export var bar; diff --git a/tests/fixtures/modules/export/invalid-export-batch-missing-from-clause.result.js b/tests/fixtures/modules/export/invalid-export-batch-missing-from-clause.result.js new file mode 100644 index 00000000..d9b99b9b --- /dev/null +++ b/tests/fixtures/modules/export/invalid-export-batch-missing-from-clause.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 8, + "lineNumber": 1, + "column": 9, + "description": "Missing from clause" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/invalid-export-batch-missing-from-clause.src.js b/tests/fixtures/modules/export/invalid-export-batch-missing-from-clause.src.js new file mode 100644 index 00000000..3f576881 --- /dev/null +++ b/tests/fixtures/modules/export/invalid-export-batch-missing-from-clause.src.js @@ -0,0 +1 @@ +export * diff --git a/tests/fixtures/modules/export/invalid-export-batch-token.result.js b/tests/fixtures/modules/export/invalid-export-batch-token.result.js new file mode 100644 index 00000000..7da37cc2 --- /dev/null +++ b/tests/fixtures/modules/export/invalid-export-batch-token.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 8, + "lineNumber": 1, + "column": 9, + "description": "Unexpected token +" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/invalid-export-batch-token.src.js b/tests/fixtures/modules/export/invalid-export-batch-token.src.js new file mode 100644 index 00000000..32cb28ea --- /dev/null +++ b/tests/fixtures/modules/export/invalid-export-batch-token.src.js @@ -0,0 +1 @@ +export * + diff --git a/tests/fixtures/modules/export/invalid-export-default-equal.result.js b/tests/fixtures/modules/export/invalid-export-default-equal.result.js new file mode 100644 index 00000000..f0f77428 --- /dev/null +++ b/tests/fixtures/modules/export/invalid-export-default-equal.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 15, + "lineNumber": 1, + "column": 16, + "description": "Unexpected token =" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/invalid-export-default-equal.src.js b/tests/fixtures/modules/export/invalid-export-default-equal.src.js new file mode 100644 index 00000000..0dfb038e --- /dev/null +++ b/tests/fixtures/modules/export/invalid-export-default-equal.src.js @@ -0,0 +1 @@ +export default = 42 diff --git a/tests/fixtures/modules/export/invalid-export-default-token.result.js b/tests/fixtures/modules/export/invalid-export-default-token.result.js new file mode 100644 index 00000000..0b8d997f --- /dev/null +++ b/tests/fixtures/modules/export/invalid-export-default-token.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 16, + "lineNumber": 1, + "column": 17, + "description": "Unexpected token +" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/invalid-export-default-token.src.js b/tests/fixtures/modules/export/invalid-export-default-token.src.js new file mode 100644 index 00000000..a0af03d2 --- /dev/null +++ b/tests/fixtures/modules/export/invalid-export-default-token.src.js @@ -0,0 +1 @@ +export {default} + diff --git a/tests/fixtures/modules/export/invalid-export-default.result.js b/tests/fixtures/modules/export/invalid-export-default.result.js new file mode 100644 index 00000000..9ae31d2c --- /dev/null +++ b/tests/fixtures/modules/export/invalid-export-default.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 14, + "lineNumber": 1, + "column": 15, + "description": "Unexpected token from" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/invalid-export-default.src.js b/tests/fixtures/modules/export/invalid-export-default.src.js new file mode 100644 index 00000000..8dfa0a19 --- /dev/null +++ b/tests/fixtures/modules/export/invalid-export-default.src.js @@ -0,0 +1 @@ +export default from "foo" diff --git a/tests/fixtures/modules/export/invalid-export-named-default.result.js b/tests/fixtures/modules/export/invalid-export-named-default.result.js new file mode 100644 index 00000000..074e0216 --- /dev/null +++ b/tests/fixtures/modules/export/invalid-export-named-default.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 16, + "lineNumber": 1, + "column": 17, + "description": "Missing from clause" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/export/invalid-export-named-default.src.js b/tests/fixtures/modules/export/invalid-export-named-default.src.js new file mode 100644 index 00000000..8f3cde5c --- /dev/null +++ b/tests/fixtures/modules/export/invalid-export-named-default.src.js @@ -0,0 +1 @@ +export {default} diff --git a/tests/fixtures/modules/import/import-default-and-named-specifiers.result.js b/tests/fixtures/modules/import/import-default-and-named-specifiers.result.js new file mode 100644 index 00000000..1f904cb9 --- /dev/null +++ b/tests/fixtures/modules/import/import-default-and-named-specifiers.result.js @@ -0,0 +1,145 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [ + { + "type": "ImportDefaultSpecifier", + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 7, + 10 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 10 + } + } + }, + "range": [ + 7, + 10 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 10 + } + } + }, + { + "type": "ImportSpecifier", + "local": { + "type": "Identifier", + "name": "bar", + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + }, + "imported": { + "type": "Identifier", + "name": "bar", + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + }, + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 23, + 28 + ], + "loc": { + "start": { + "line": 1, + "column": 23 + }, + "end": { + "line": 1, + "column": 28 + } + } + }, + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 29 + } + } + } + ], + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 29 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-default-and-named-specifiers.src.js b/tests/fixtures/modules/import/import-default-and-named-specifiers.src.js new file mode 100644 index 00000000..e544977b --- /dev/null +++ b/tests/fixtures/modules/import/import-default-and-named-specifiers.src.js @@ -0,0 +1 @@ +import foo, {bar} from "foo"; diff --git a/tests/fixtures/modules/import/import-default-and-namespace-specifiers.result.js b/tests/fixtures/modules/import/import-default-and-namespace-specifiers.result.js new file mode 100644 index 00000000..359823b7 --- /dev/null +++ b/tests/fixtures/modules/import/import-default-and-namespace-specifiers.result.js @@ -0,0 +1,127 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [ + { + "type": "ImportDefaultSpecifier", + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 7, + 10 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 10 + } + } + }, + "range": [ + 7, + 10 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 10 + } + } + }, + { + "type": "ImportNamespaceSpecifier", + "local": { + "type": "Identifier", + "name": "bar", + "range": [ + 17, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 20 + } + } + }, + "range": [ + 12, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 20 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 26, + 31 + ], + "loc": { + "start": { + "line": 1, + "column": 26 + }, + "end": { + "line": 1, + "column": 31 + } + } + }, + "range": [ + 0, + 32 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 32 + } + } + } + ], + "range": [ + 0, + 32 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 32 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-default-and-namespace-specifiers.src.js b/tests/fixtures/modules/import/import-default-and-namespace-specifiers.src.js new file mode 100644 index 00000000..084fa0cd --- /dev/null +++ b/tests/fixtures/modules/import/import-default-and-namespace-specifiers.src.js @@ -0,0 +1 @@ +import foo, * as bar from "foo"; diff --git a/tests/fixtures/modules/import/import-default-as.result.js b/tests/fixtures/modules/import/import-default-as.result.js new file mode 100644 index 00000000..e5c96f39 --- /dev/null +++ b/tests/fixtures/modules/import/import-default-as.result.js @@ -0,0 +1,110 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [ + { + "type": "ImportSpecifier", + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 19, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 19 + }, + "end": { + "line": 1, + "column": 22 + } + } + }, + "imported": { + "type": "Identifier", + "name": "default", + "range": [ + 8, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 15 + } + } + }, + "range": [ + 8, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 22 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 29, + 34 + ], + "loc": { + "start": { + "line": 1, + "column": 29 + }, + "end": { + "line": 1, + "column": 34 + } + } + }, + "range": [ + 0, + 35 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 35 + } + } + } + ], + "range": [ + 0, + 35 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 35 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-default-as.src.js b/tests/fixtures/modules/import/import-default-as.src.js new file mode 100644 index 00000000..96c936db --- /dev/null +++ b/tests/fixtures/modules/import/import-default-as.src.js @@ -0,0 +1 @@ +import {default as foo} from "foo"; diff --git a/tests/fixtures/modules/import/import-default.result.js b/tests/fixtures/modules/import/import-default.result.js new file mode 100644 index 00000000..43104699 --- /dev/null +++ b/tests/fixtures/modules/import/import-default.result.js @@ -0,0 +1,92 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [ + { + "type": "ImportDefaultSpecifier", + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 7, + 10 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 10 + } + } + }, + "range": [ + 7, + 10 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 10 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 16, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 21 + } + } + }, + "range": [ + 0, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 22 + } + } + } + ], + "range": [ + 0, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 22 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-default.src.js b/tests/fixtures/modules/import/import-default.src.js new file mode 100644 index 00000000..8d142005 --- /dev/null +++ b/tests/fixtures/modules/import/import-default.src.js @@ -0,0 +1 @@ +import foo from "foo"; diff --git a/tests/fixtures/modules/import/import-jquery.result.js b/tests/fixtures/modules/import/import-jquery.result.js new file mode 100644 index 00000000..70d7350b --- /dev/null +++ b/tests/fixtures/modules/import/import-jquery.result.js @@ -0,0 +1,92 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [ + { + "type": "ImportDefaultSpecifier", + "local": { + "type": "Identifier", + "name": "$", + "range": [ + 7, + 8 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 8 + } + } + }, + "range": [ + 7, + 8 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 8 + } + } + } + ], + "source": { + "type": "Literal", + "value": "jquery", + "raw": "\"jquery\"", + "range": [ + 14, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 22 + } + } + }, + "range": [ + 0, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 0 + } + } + } + ], + "range": [ + 0, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 0 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-jquery.src.js b/tests/fixtures/modules/import/import-jquery.src.js new file mode 100644 index 00000000..ea74241b --- /dev/null +++ b/tests/fixtures/modules/import/import-jquery.src.js @@ -0,0 +1 @@ +import $ from "jquery" diff --git a/tests/fixtures/modules/import/import-module.result.js b/tests/fixtures/modules/import/import-module.result.js new file mode 100644 index 00000000..2aaad8ce --- /dev/null +++ b/tests/fixtures/modules/import/import-module.result.js @@ -0,0 +1,56 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 7, + 12 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 12 + } + } + }, + "range": [ + 0, + 13 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 13 + } + } + } + ], + "range": [ + 0, + 13 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 13 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-module.src.js b/tests/fixtures/modules/import/import-module.src.js new file mode 100644 index 00000000..c0748305 --- /dev/null +++ b/tests/fixtures/modules/import/import-module.src.js @@ -0,0 +1 @@ +import "foo"; diff --git a/tests/fixtures/modules/import/import-named-as-specifier.result.js b/tests/fixtures/modules/import/import-named-as-specifier.result.js new file mode 100644 index 00000000..b6045fd8 --- /dev/null +++ b/tests/fixtures/modules/import/import-named-as-specifier.result.js @@ -0,0 +1,110 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [ + { + "type": "ImportSpecifier", + "local": { + "type": "Identifier", + "name": "baz", + "range": [ + 15, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 18 + } + } + }, + "imported": { + "type": "Identifier", + "name": "bar", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 18 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 25, + 30 + ], + "loc": { + "start": { + "line": 1, + "column": 25 + }, + "end": { + "line": 1, + "column": 30 + } + } + }, + "range": [ + 0, + 31 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 31 + } + } + } + ], + "range": [ + 0, + 31 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 31 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-named-as-specifier.src.js b/tests/fixtures/modules/import/import-named-as-specifier.src.js new file mode 100644 index 00000000..769f3b3d --- /dev/null +++ b/tests/fixtures/modules/import/import-named-as-specifier.src.js @@ -0,0 +1 @@ +import {bar as baz} from "foo"; diff --git a/tests/fixtures/modules/import/import-named-as-specifiers.result.js b/tests/fixtures/modules/import/import-named-as-specifiers.result.js new file mode 100644 index 00000000..3beefe58 --- /dev/null +++ b/tests/fixtures/modules/import/import-named-as-specifiers.result.js @@ -0,0 +1,163 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [ + { + "type": "ImportSpecifier", + "local": { + "type": "Identifier", + "name": "baz", + "range": [ + 15, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 18 + } + } + }, + "imported": { + "type": "Identifier", + "name": "bar", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 18 + } + } + }, + { + "type": "ImportSpecifier", + "local": { + "type": "Identifier", + "name": "xyz", + "range": [ + 20, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 20 + }, + "end": { + "line": 1, + "column": 23 + } + } + }, + "imported": { + "type": "Identifier", + "name": "xyz", + "range": [ + 20, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 20 + }, + "end": { + "line": 1, + "column": 23 + } + } + }, + "range": [ + 20, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 20 + }, + "end": { + "line": 1, + "column": 23 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 30, + 35 + ], + "loc": { + "start": { + "line": 1, + "column": 30 + }, + "end": { + "line": 1, + "column": 35 + } + } + }, + "range": [ + 0, + 36 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 36 + } + } + } + ], + "range": [ + 0, + 36 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 36 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-named-as-specifiers.src.js b/tests/fixtures/modules/import/import-named-as-specifiers.src.js new file mode 100644 index 00000000..5198ead3 --- /dev/null +++ b/tests/fixtures/modules/import/import-named-as-specifiers.src.js @@ -0,0 +1 @@ +import {bar as baz, xyz} from "foo"; diff --git a/tests/fixtures/modules/import/import-named-empty.result.js b/tests/fixtures/modules/import/import-named-empty.result.js new file mode 100644 index 00000000..afd3cb1d --- /dev/null +++ b/tests/fixtures/modules/import/import-named-empty.result.js @@ -0,0 +1,56 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 15, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 20 + } + } + }, + "range": [ + 0, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 21 + } + } + } + ], + "range": [ + 0, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 21 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-named-empty.src.js b/tests/fixtures/modules/import/import-named-empty.src.js new file mode 100644 index 00000000..5faab37e --- /dev/null +++ b/tests/fixtures/modules/import/import-named-empty.src.js @@ -0,0 +1 @@ +import {} from "foo"; diff --git a/tests/fixtures/modules/import/import-named-specifier.result.js b/tests/fixtures/modules/import/import-named-specifier.result.js new file mode 100644 index 00000000..c92cf2be --- /dev/null +++ b/tests/fixtures/modules/import/import-named-specifier.result.js @@ -0,0 +1,110 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [ + { + "type": "ImportSpecifier", + "local": { + "type": "Identifier", + "name": "bar", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "imported": { + "type": "Identifier", + "name": "bar", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 18, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 23 + } + } + }, + "range": [ + 0, + 24 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 24 + } + } + } + ], + "range": [ + 0, + 24 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 24 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-named-specifier.src.js b/tests/fixtures/modules/import/import-named-specifier.src.js new file mode 100644 index 00000000..fc80c74d --- /dev/null +++ b/tests/fixtures/modules/import/import-named-specifier.src.js @@ -0,0 +1 @@ +import {bar} from "foo"; diff --git a/tests/fixtures/modules/import/import-named-specifiers.result.js b/tests/fixtures/modules/import/import-named-specifiers.result.js new file mode 100644 index 00000000..654848eb --- /dev/null +++ b/tests/fixtures/modules/import/import-named-specifiers.result.js @@ -0,0 +1,163 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [ + { + "type": "ImportSpecifier", + "local": { + "type": "Identifier", + "name": "bar", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "imported": { + "type": "Identifier", + "name": "bar", + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + "range": [ + 8, + 11 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 11 + } + } + }, + { + "type": "ImportSpecifier", + "local": { + "type": "Identifier", + "name": "baz", + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + }, + "imported": { + "type": "Identifier", + "name": "baz", + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + }, + "range": [ + 13, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 16 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 23, + 28 + ], + "loc": { + "start": { + "line": 1, + "column": 23 + }, + "end": { + "line": 1, + "column": 28 + } + } + }, + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 29 + } + } + } + ], + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 29 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-named-specifiers.src.js b/tests/fixtures/modules/import/import-named-specifiers.src.js new file mode 100644 index 00000000..2fb83c23 --- /dev/null +++ b/tests/fixtures/modules/import/import-named-specifiers.src.js @@ -0,0 +1 @@ +import {bar, baz} from "foo"; diff --git a/tests/fixtures/modules/import/import-namespace-specifier.result.js b/tests/fixtures/modules/import/import-namespace-specifier.result.js new file mode 100644 index 00000000..810b93c9 --- /dev/null +++ b/tests/fixtures/modules/import/import-namespace-specifier.result.js @@ -0,0 +1,92 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [ + { + "type": "ImportNamespaceSpecifier", + "local": { + "type": "Identifier", + "name": "foo", + "range": [ + 12, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 15 + } + } + }, + "range": [ + 7, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 15 + } + } + } + ], + "source": { + "type": "Literal", + "value": "foo", + "raw": "\"foo\"", + "range": [ + 21, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 21 + }, + "end": { + "line": 1, + "column": 26 + } + } + }, + "range": [ + 0, + 27 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 27 + } + } + } + ], + "range": [ + 0, + 27 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 27 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-namespace-specifier.src.js b/tests/fixtures/modules/import/import-namespace-specifier.src.js new file mode 100644 index 00000000..e55c0775 --- /dev/null +++ b/tests/fixtures/modules/import/import-namespace-specifier.src.js @@ -0,0 +1 @@ +import * as foo from "foo"; diff --git a/tests/fixtures/modules/import/import-null-as-nil.result.js b/tests/fixtures/modules/import/import-null-as-nil.result.js new file mode 100644 index 00000000..9f7c61e0 --- /dev/null +++ b/tests/fixtures/modules/import/import-null-as-nil.result.js @@ -0,0 +1,110 @@ +module.exports = { + "type": "Program", + "body": [ + { + "type": "ImportDeclaration", + "specifiers": [ + { + "type": "ImportSpecifier", + "local": { + "type": "Identifier", + "name": "nil", + "range": [ + 17, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 20 + } + } + }, + "imported": { + "type": "Identifier", + "name": "null", + "range": [ + 9, + 13 + ], + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 13 + } + } + }, + "range": [ + 9, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 20 + } + } + } + ], + "source": { + "type": "Literal", + "value": "bar", + "raw": "\"bar\"", + "range": [ + 28, + 33 + ], + "loc": { + "start": { + "line": 1, + "column": 28 + }, + "end": { + "line": 1, + "column": 33 + } + } + }, + "range": [ + 0, + 34 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 0 + } + } + } + ], + "range": [ + 0, + 34 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 0 + } + } +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/import-null-as-nil.src.js b/tests/fixtures/modules/import/import-null-as-nil.src.js new file mode 100644 index 00000000..ced8a86b --- /dev/null +++ b/tests/fixtures/modules/import/import-null-as-nil.src.js @@ -0,0 +1 @@ +import { null as nil } from "bar" diff --git a/tests/fixtures/modules/import/invalid-import-default-after-named-after-default.result.js b/tests/fixtures/modules/import/invalid-import-default-after-named-after-default.result.js new file mode 100644 index 00000000..37801017 --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-default-after-named-after-default.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 17, + "lineNumber": 1, + "column": 18, + "description": "Unexpected token ," +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/invalid-import-default-after-named-after-default.src.js b/tests/fixtures/modules/import/invalid-import-default-after-named-after-default.src.js new file mode 100644 index 00000000..69aac7e8 --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-default-after-named-after-default.src.js @@ -0,0 +1 @@ +import foo, {bar}, foo from "foo"; diff --git a/tests/fixtures/modules/import/invalid-import-default-after-named.result.js b/tests/fixtures/modules/import/invalid-import-default-after-named.result.js new file mode 100644 index 00000000..c10592aa --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-default-after-named.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 12, + "lineNumber": 1, + "column": 13, + "description": "Unexpected token ," +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/invalid-import-default-after-named.src.js b/tests/fixtures/modules/import/invalid-import-default-after-named.src.js new file mode 100644 index 00000000..5be12dab --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-default-after-named.src.js @@ -0,0 +1 @@ +import {bar}, foo from "foo" diff --git a/tests/fixtures/modules/import/invalid-import-default-missing-module-specifier.result.js b/tests/fixtures/modules/import/invalid-import-default-missing-module-specifier.result.js new file mode 100644 index 00000000..bea09d12 --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-default-missing-module-specifier.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 10, + "lineNumber": 1, + "column": 11, + "description": "Missing from clause" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/invalid-import-default-missing-module-specifier.src.js b/tests/fixtures/modules/import/invalid-import-default-missing-module-specifier.src.js new file mode 100644 index 00000000..ddf55747 --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-default-missing-module-specifier.src.js @@ -0,0 +1 @@ +import foo diff --git a/tests/fixtures/modules/import/invalid-import-default-module-specifier.result.js b/tests/fixtures/modules/import/invalid-import-default-module-specifier.result.js new file mode 100644 index 00000000..af7f274f --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-default-module-specifier.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 16, + "lineNumber": 1, + "column": 17, + "description": "Invalid module specifier" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/invalid-import-default-module-specifier.src.js b/tests/fixtures/modules/import/invalid-import-default-module-specifier.src.js new file mode 100644 index 00000000..16e3ea28 --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-default-module-specifier.src.js @@ -0,0 +1 @@ +import foo from bar; diff --git a/tests/fixtures/modules/import/invalid-import-default.result.js b/tests/fixtures/modules/import/invalid-import-default.result.js new file mode 100644 index 00000000..b9ac8905 --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-default.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 6, + "lineNumber": 1, + "column": 7, + "description": "Unexpected token default" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/invalid-import-default.src.js b/tests/fixtures/modules/import/invalid-import-default.src.js new file mode 100644 index 00000000..6399a1a6 --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-default.src.js @@ -0,0 +1 @@ +import default from "foo" diff --git a/tests/fixtures/modules/import/invalid-import-missing-module-specifier.result.js b/tests/fixtures/modules/import/invalid-import-missing-module-specifier.result.js new file mode 100644 index 00000000..09708d5f --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-missing-module-specifier.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 19, + "lineNumber": 1, + "column": 20, + "description": "Missing from clause" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/invalid-import-missing-module-specifier.src.js b/tests/fixtures/modules/import/invalid-import-missing-module-specifier.src.js new file mode 100644 index 00000000..338ebc12 --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-missing-module-specifier.src.js @@ -0,0 +1 @@ +import { foo, bar } diff --git a/tests/fixtures/modules/import/invalid-import-module-specifier.result.js b/tests/fixtures/modules/import/invalid-import-module-specifier.result.js new file mode 100644 index 00000000..df9c58b2 --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-module-specifier.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 18, + "lineNumber": 1, + "column": 19, + "description": "Invalid module specifier" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/invalid-import-module-specifier.src.js b/tests/fixtures/modules/import/invalid-import-module-specifier.src.js new file mode 100644 index 00000000..15dda167 --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-module-specifier.src.js @@ -0,0 +1 @@ +export {foo} from bar diff --git a/tests/fixtures/modules/import/invalid-import-named-after-named.result.js b/tests/fixtures/modules/import/invalid-import-named-after-named.result.js new file mode 100644 index 00000000..c10592aa --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-named-after-named.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 12, + "lineNumber": 1, + "column": 13, + "description": "Unexpected token ," +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/invalid-import-named-after-named.src.js b/tests/fixtures/modules/import/invalid-import-named-after-named.src.js new file mode 100644 index 00000000..a0557bf0 --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-named-after-named.src.js @@ -0,0 +1 @@ +import {bar}, {foo} from "foo"; diff --git a/tests/fixtures/modules/import/invalid-import-named-after-namespace.result.js b/tests/fixtures/modules/import/invalid-import-named-after-namespace.result.js new file mode 100644 index 00000000..b70f9acc --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-named-after-namespace.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 15, + "lineNumber": 1, + "column": 16, + "description": "Unexpected token ," +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/invalid-import-named-after-namespace.src.js b/tests/fixtures/modules/import/invalid-import-named-after-namespace.src.js new file mode 100644 index 00000000..24cede9d --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-named-after-namespace.src.js @@ -0,0 +1 @@ +import * as foo, {bar} from "foo"; diff --git a/tests/fixtures/modules/import/invalid-import-named-as-missing-from.result.js b/tests/fixtures/modules/import/invalid-import-named-as-missing-from.result.js new file mode 100644 index 00000000..1e2f3f1a --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-named-as-missing-from.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 23, + "lineNumber": 1, + "column": 24, + "description": "Missing from clause" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/invalid-import-named-as-missing-from.src.js b/tests/fixtures/modules/import/invalid-import-named-as-missing-from.src.js new file mode 100644 index 00000000..5d7daedf --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-named-as-missing-from.src.js @@ -0,0 +1 @@ +import {default as foo} diff --git a/tests/fixtures/modules/import/invalid-import-namespace-after-named.result.js b/tests/fixtures/modules/import/invalid-import-namespace-after-named.result.js new file mode 100644 index 00000000..c10592aa --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-namespace-after-named.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 12, + "lineNumber": 1, + "column": 13, + "description": "Unexpected token ," +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/invalid-import-namespace-after-named.src.js b/tests/fixtures/modules/import/invalid-import-namespace-after-named.src.js new file mode 100644 index 00000000..09d0d344 --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-namespace-after-named.src.js @@ -0,0 +1 @@ +import {bar}, * as foo from "foo"; diff --git a/tests/fixtures/modules/import/invalid-import-namespace-missing-as.result.js b/tests/fixtures/modules/import/invalid-import-namespace-missing-as.result.js new file mode 100644 index 00000000..9a00bcfe --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-namespace-missing-as.result.js @@ -0,0 +1,6 @@ +module.exports = { + "index": 8, + "lineNumber": 1, + "column": 9, + "description": "Missing as after import *" +}; \ No newline at end of file diff --git a/tests/fixtures/modules/import/invalid-import-namespace-missing-as.src.js b/tests/fixtures/modules/import/invalid-import-namespace-missing-as.src.js new file mode 100644 index 00000000..4382a94a --- /dev/null +++ b/tests/fixtures/modules/import/invalid-import-namespace-missing-as.src.js @@ -0,0 +1 @@ +import * from "foo" diff --git a/tests/lib/modules.js b/tests/lib/modules.js new file mode 100644 index 00000000..a8be3d4a --- /dev/null +++ b/tests/lib/modules.js @@ -0,0 +1,148 @@ +/** + * @fileoverview Tests for ECMA feature flags + * @author Nicholas C. Zakas + * @copyright 2014 Nicholas C. Zakas. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +var assert = require("chai").assert, + leche = require("leche"), + path = require("path"), + espree = require("../../espree"), + shelljs = require("shelljs"); + +// var espree = require("esprima-fb"); +//------------------------------------------------------------------------------ +// Setup +//------------------------------------------------------------------------------ + +var MODULES_IMPORT_DIR = "./tests/fixtures/modules/import"; +var MODULES_EXPORT_DIR = "./tests/fixtures/modules/export"; + +var testImportFiles = shelljs.find(MODULES_IMPORT_DIR).filter(function(filename) { + return filename.indexOf(".src.js") > -1; +}).map(function(filename) { + return filename.substring(MODULES_IMPORT_DIR.length - 1, filename.length - 7); // strip off ".src.js" +}); + +var testExportFiles = shelljs.find(MODULES_EXPORT_DIR).filter(function(filename) { + return filename.indexOf(".src.js") > -1; +}).map(function(filename) { + return filename.substring(MODULES_EXPORT_DIR.length - 1, filename.length - 7); // strip off ".src.js" +}); + + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +describe("modules", function() { + + leche.withData(testImportFiles, function(filename) { + // Uncomment and fill in filename to focus on a single file + // var filename = "jsx/invalid-matching-placeholder-in-closing-tag"; + var code = shelljs.cat(path.resolve(MODULES_IMPORT_DIR, filename) + ".src.js"); + + it("should parse import declarations correctly when sourceType is `module`", function() { + var expected = require(path.resolve(__dirname, "../../", MODULES_IMPORT_DIR, filename) + ".result.js"); + var result; + + try { + result = espree.parse(code, { + loc: true, + range: true, + sourceType: "module" + }); + } catch (ex) { + + // if the result is an error, create an error object so deepEqual works + if (expected.message || expected.description) { + var expectedError = new Error(expected.message || expected.description); + Object.keys(expected).forEach(function(key) { + expectedError[key] = expected[key]; + }); + expected = expectedError; + } + + result = ex; // if an error is thrown, match the error + } + assert.deepEqual(result, expected); + }); + + it("should throw an error for import declarations when sourceType is not `module`", function() { + assert.throws(function() { + espree.parse(code, { + loc: true, + range: true + }); + }); + }); + }); + + leche.withData(testExportFiles, function(filename) { + // Uncomment and fill in filename to focus on a single file + // var filename = "jsx/invalid-matching-placeholder-in-closing-tag"; + var code = shelljs.cat(path.resolve(MODULES_EXPORT_DIR, filename) + ".src.js"); + + it("should parse export declarations correctly when sourceType is `module`", function() { + var expected = require(path.resolve(__dirname, "../../", MODULES_EXPORT_DIR, filename) + ".result.js"); + var result; + + try { + result = espree.parse(code, { + loc: true, + range: true, + sourceType: "module" + }); + } catch (ex) { + + // if the result is an error, create an error object so deepEqual works + if (expected.message || expected.description) { + var expectedError = new Error(expected.message || expected.description); + Object.keys(expected).forEach(function(key) { + expectedError[key] = expected[key]; + }); + expected = expectedError; + } + + result = ex; // if an error is thrown, match the error + } + assert.deepEqual(result, expected); + }); + + it("should throw an error for export declarations when sourceType is not `module`", function() { + assert.throws(function() { + espree.parse(code, { + loc: true, + range: true + }); + }); + }); + }); + +}); diff --git a/tools/update-tests.js b/tools/update-tests.js index e22e7c26..f682d7fe 100644 --- a/tools/update-tests.js +++ b/tools/update-tests.js @@ -69,11 +69,15 @@ function outputResult(result, testResultFilename) { // Setup //------------------------------------------------------------------------------ -var FIXTURES_DIR = "./tests/fixtures/ecma-features", +var MODULES_IMPORT_DIR = "./tests/fixtures/modules/import", + MODULES_EXPORT_DIR = "./tests/fixtures/modules/export", + FIXTURES_DIR = "./tests/fixtures/ecma-features", FIXTURES_MIX_DIR = "./tests/fixtures/ecma-features-mix", COMMENTS_DIR = "./tests/fixtures/attach-comments"; -var testFiles = getTestFilenames(FIXTURES_DIR), +var moduleImportFiles = getTestFilenames(MODULES_IMPORT_DIR), + moduleExportFiles = getTestFilenames(MODULES_EXPORT_DIR), + testFiles = getTestFilenames(FIXTURES_DIR), mixFiles = getTestFilenames(FIXTURES_MIX_DIR), commentFiles = getTestFilenames(COMMENTS_DIR); @@ -90,6 +94,40 @@ commentFiles.forEach(function(filename) { outputResult(result, testResultFilename); }); +// update all tests in modules/import +moduleImportFiles.forEach(function(filename) { + + var code = shelljs.cat(path.resolve(MODULES_IMPORT_DIR, filename) + ".src.js"), + config = { + loc: true, + range: true, + ecmaFeatures: {}, + sourceType: "module" + }; + + var testResultFilename = path.resolve(__dirname, "..", MODULES_IMPORT_DIR, filename) + ".result.js"; + var result = getExpectedResult(code, config); + + outputResult(result, testResultFilename); +}); + +// update all tests in modules/export +moduleExportFiles.forEach(function(filename) { + + var code = shelljs.cat(path.resolve(MODULES_EXPORT_DIR, filename) + ".src.js"), + config = { + loc: true, + range: true, + ecmaFeatures: {}, + sourceType: "module" + }; + + var testResultFilename = path.resolve(__dirname, "..", MODULES_EXPORT_DIR, filename) + ".result.js"; + var result = getExpectedResult(code, config); + + outputResult(result, testResultFilename); +}); + // update all tests in ecma-features testFiles.forEach(function(filename) {