diff --git a/types/esprima/esprima-tests.ts b/types/esprima/esprima-tests.ts
index a315d0569d..c7a9b796c6 100644
--- a/types/esprima/esprima-tests.ts
+++ b/types/esprima/esprima-tests.ts
@@ -1,10 +1,9 @@
import esprima = require('esprima');
import * as ESTree from 'estree';
-var token: esprima.Token;
-var comment: ESTree.Comment;
-var program: ESTree.Program;
-var string: string;
+let token: esprima.Token;
+let program: ESTree.Program;
+let string: string;
// esprima
string = esprima.version;
@@ -14,7 +13,8 @@ program = esprima.parseScript('answer = 42');
program = esprima.parseModule('import { sqrt } from "math.js"');
// Parsing Options
-program = esprima.parseScript('var el=
${product}', { jsx: true });
+const title = 'Hello World!';
+program = esprima.parseScript(`var el= ${title}`, { jsx: true });
program = esprima.parseScript('if (x) function y() {}');
program = esprima.parseScript('"use strict"; with (x) {}', { tolerant: true });
program = esprima.parseScript('answer = 42', { range: true });
@@ -28,9 +28,8 @@ token = esprima.tokenize('code')[0];
token = esprima.tokenize('code', {range: true})[0];
// Syntax Delegate
-esprima.parseScript('answer = 42', {}, function (node) {
+esprima.parseScript('answer = 42', {}, (node) => {
if (node.type === esprima.Syntax.VariableDeclaration) {
-
}
});
@@ -38,11 +37,8 @@ esprima.parseScript('answer = 42', {}, function (node) {
string = token.type;
string = token.value;
-// Comment
-string = comment.value;
-
// Type narrowing
-var node: ESTree.Node;
-if(node.type === esprima.Syntax.IfStatement){
+const node: ESTree.Node = program.body[0];
+if (node.type === esprima.Syntax.IfStatement) {
node.consequent = node;
}
diff --git a/types/esprima/index.d.ts b/types/esprima/index.d.ts
index 34311cb96e..627d72df73 100644
--- a/types/esprima/index.d.ts
+++ b/types/esprima/index.d.ts
@@ -1,110 +1,102 @@
-// Type definitions for Esprima v4.0.0
+// Type definitions for Esprima 4.0
// Project: http://esprima.org
// Definitions by: teppeis , RReverser , peter-scott
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
-///
-
-export = esprima;
-export as namespace esprima;
import * as ESTree from 'estree';
-declare namespace esprima {
+export const version: string;
- const version: string;
-
- function parseScript(input: string, config?: ParseOptions, delegate?: (node: ESTree.Node, meta: any) => void): ESTree.Program;
- function parseModule(input: string, config?: ParseOptions, delegate?: (node: ESTree.Node, meta: any) => void): ESTree.Program;
- function tokenize(input: string, config?: TokenizeOptions): Array;
-
- interface Token {
- type: string;
- value: string;
- }
-
- interface ParseOptions {
- jsx?: boolean,
- range?: boolean;
- loc?: boolean;
- tolerant?: boolean;
- tokens?: boolean;
- comment?: boolean;
- }
-
- interface TokenizeOptions {
- range?: boolean;
- loc?: boolean;
- comment?: boolean;
- }
-
- const Syntax: {
- ArrayExpression: 'ArrayExpression',
- ArrayPattern: 'ArrayPattern',
- ArrowFunctionExpression: 'ArrowFunctionExpression',
- AssignmentExpression: 'AssignmentExpression',
- AssignmentPattern: 'AssignmentPattern',
- AwaitExpression: 'AwaitExpression',
- BinaryExpression: 'BinaryExpression',
- BlockStatement: 'BlockStatement',
- BreakStatement: 'BreakStatement',
- CallExpression: 'CallExpression',
- CatchClause: 'CatchClause',
- ClassBody: 'ClassBody',
- ClassDeclaration: 'ClassDeclaration',
- ClassExpression: 'ClassExpression',
- ConditionalExpression: 'ConditionalExpression',
- ContinueStatement: 'ContinueStatement',
- DebuggerStatement: 'DebuggerStatement',
- DoWhileStatement: 'DoWhileStatement',
- EmptyStatement: 'EmptyStatement',
- ExportAllDeclaration: 'ExportAllDeclaration',
- ExportDefaultDeclaration: 'ExportDefaultDeclaration',
- ExportNamedDeclaration: 'ExportNamedDeclaration',
- ExportSpecifier: 'ExportSpecifier',
- ExpressionStatement: 'ExpressionStatement',
- ForInStatement: 'ForInStatement',
- ForOfStatement: 'ForOfStatement',
- ForStatement: 'ForStatement',
- FunctionDeclaration: 'FunctionDeclaration',
- FunctionExpression: 'FunctionExpression',
- Identifier: 'Identifier',
- IfStatement: 'IfStatement',
- Import: 'Import',
- ImportDeclaration: 'ImportDeclaration',
- ImportDefaultSpecifier: 'ImportDefaultSpecifier',
- ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',
- ImportSpecifier: 'ImportSpecifier',
- LabeledStatement: 'LabeledStatement',
- Literal: 'Literal',
- LogicalExpression: 'LogicalExpression',
- MemberExpression: 'MemberExpression',
- MetaProperty: 'MetaProperty',
- MethodDefinition: 'MethodDefinition',
- NewExpression: 'NewExpression',
- ObjectExpression: 'ObjectExpression',
- ObjectPattern: 'ObjectPattern',
- Program: 'Program',
- Property: 'Property',
- RestElement: 'RestElement',
- ReturnStatement: 'ReturnStatement',
- SequenceExpression: 'SequenceExpression',
- SpreadElement: 'SpreadElement',
- Super: 'Super',
- SwitchCase: 'SwitchCase',
- SwitchStatement: 'SwitchStatement',
- TaggedTemplateExpression: 'TaggedTemplateExpression',
- TemplateElement: 'TemplateElement',
- TemplateLiteral: 'TemplateLiteral',
- ThisExpression: 'ThisExpression',
- ThrowStatement: 'ThrowStatement',
- TryStatement: 'TryStatement',
- UnaryExpression: 'UnaryExpression',
- UpdateExpression: 'UpdateExpression',
- VariableDeclaration: 'VariableDeclaration',
- VariableDeclarator: 'VariableDeclarator',
- WhileStatement: 'WhileStatement',
- WithStatement: 'WithStatement',
- YieldExpression: 'YieldExpression'
- };
+export function parseScript(input: string, config?: ParseOptions, delegate?: (node: ESTree.Node, meta: any) => void): ESTree.Program;
+export function parseModule(input: string, config?: ParseOptions, delegate?: (node: ESTree.Node, meta: any) => void): ESTree.Program;
+export function tokenize(input: string, config?: TokenizeOptions): Token[];
+export interface Token {
+ type: string;
+ value: string;
}
+
+export interface ParseOptions {
+ jsx?: boolean;
+ range?: boolean;
+ loc?: boolean;
+ tolerant?: boolean;
+ tokens?: boolean;
+ comment?: boolean;
+}
+
+export interface TokenizeOptions {
+ range?: boolean;
+ loc?: boolean;
+ comment?: boolean;
+}
+
+export const Syntax: {
+ ArrayExpression: 'ArrayExpression',
+ ArrayPattern: 'ArrayPattern',
+ ArrowFunctionExpression: 'ArrowFunctionExpression',
+ AssignmentExpression: 'AssignmentExpression',
+ AssignmentPattern: 'AssignmentPattern',
+ AwaitExpression: 'AwaitExpression',
+ BinaryExpression: 'BinaryExpression',
+ BlockStatement: 'BlockStatement',
+ BreakStatement: 'BreakStatement',
+ CallExpression: 'CallExpression',
+ CatchClause: 'CatchClause',
+ ClassBody: 'ClassBody',
+ ClassDeclaration: 'ClassDeclaration',
+ ClassExpression: 'ClassExpression',
+ ConditionalExpression: 'ConditionalExpression',
+ ContinueStatement: 'ContinueStatement',
+ DebuggerStatement: 'DebuggerStatement',
+ DoWhileStatement: 'DoWhileStatement',
+ EmptyStatement: 'EmptyStatement',
+ ExportAllDeclaration: 'ExportAllDeclaration',
+ ExportDefaultDeclaration: 'ExportDefaultDeclaration',
+ ExportNamedDeclaration: 'ExportNamedDeclaration',
+ ExportSpecifier: 'ExportSpecifier',
+ ExpressionStatement: 'ExpressionStatement',
+ ForInStatement: 'ForInStatement',
+ ForOfStatement: 'ForOfStatement',
+ ForStatement: 'ForStatement',
+ FunctionDeclaration: 'FunctionDeclaration',
+ FunctionExpression: 'FunctionExpression',
+ Identifier: 'Identifier',
+ IfStatement: 'IfStatement',
+ Import: 'Import',
+ ImportDeclaration: 'ImportDeclaration',
+ ImportDefaultSpecifier: 'ImportDefaultSpecifier',
+ ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',
+ ImportSpecifier: 'ImportSpecifier',
+ LabeledStatement: 'LabeledStatement',
+ Literal: 'Literal',
+ LogicalExpression: 'LogicalExpression',
+ MemberExpression: 'MemberExpression',
+ MetaProperty: 'MetaProperty',
+ MethodDefinition: 'MethodDefinition',
+ NewExpression: 'NewExpression',
+ ObjectExpression: 'ObjectExpression',
+ ObjectPattern: 'ObjectPattern',
+ Program: 'Program',
+ Property: 'Property',
+ RestElement: 'RestElement',
+ ReturnStatement: 'ReturnStatement',
+ SequenceExpression: 'SequenceExpression',
+ SpreadElement: 'SpreadElement',
+ Super: 'Super',
+ SwitchCase: 'SwitchCase',
+ SwitchStatement: 'SwitchStatement',
+ TaggedTemplateExpression: 'TaggedTemplateExpression',
+ TemplateElement: 'TemplateElement',
+ TemplateLiteral: 'TemplateLiteral',
+ ThisExpression: 'ThisExpression',
+ ThrowStatement: 'ThrowStatement',
+ TryStatement: 'TryStatement',
+ UnaryExpression: 'UnaryExpression',
+ UpdateExpression: 'UpdateExpression',
+ VariableDeclaration: 'VariableDeclaration',
+ VariableDeclarator: 'VariableDeclarator',
+ WhileStatement: 'WhileStatement',
+ WithStatement: 'WithStatement',
+ YieldExpression: 'YieldExpression'
+};
diff --git a/types/esprima/tslint.json b/types/esprima/tslint.json
new file mode 100644
index 0000000000..f93cf8562a
--- /dev/null
+++ b/types/esprima/tslint.json
@@ -0,0 +1,3 @@
+{
+ "extends": "dtslint/dt.json"
+}