From 69c11462646390c8a61f15c33ee80232e76e0a77 Mon Sep 17 00:00:00 2001 From: Peter Scott Date: Wed, 23 Aug 2017 14:34:45 +0100 Subject: [PATCH 1/4] esprima v4.0.0 --- types/esprima/esprima-tests.ts | 26 ++++++++++++++++++--- types/esprima/index.d.ts | 42 +++++++++++++++++++--------------- 2 files changed, 47 insertions(+), 21 deletions(-) diff --git a/types/esprima/esprima-tests.ts b/types/esprima/esprima-tests.ts index 60b54e0679..a315d0569d 100644 --- a/types/esprima/esprima-tests.ts +++ b/types/esprima/esprima-tests.ts @@ -8,12 +8,32 @@ var string: string; // esprima string = esprima.version; -program = esprima.parse('code'); -program = esprima.parse('code', {range: true}); -program = esprima.parse('import * as code from "code"', {sourceType: 'module'}) + +// Parse Module & Parse Script +program = esprima.parseScript('answer = 42'); +program = esprima.parseModule('import { sqrt } from "math.js"'); + +// Parsing Options +program = esprima.parseScript('var el= ${product}', { 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 }); +program = esprima.parseScript('answer = 42', { range: true }); +program = esprima.parseScript('const answer = 42', { tokens: true }); +program = esprima.parseScript('answer = 42 // TODO: why', { comment: true }); +program = esprima.parseScript('answer = 42 // TODO: why', { comment: true, range: true }); + +// Tokenizing token = esprima.tokenize('code')[0]; token = esprima.tokenize('code', {range: true})[0]; +// Syntax Delegate +esprima.parseScript('answer = 42', {}, function (node) { + if (node.type === esprima.Syntax.VariableDeclaration) { + + } +}); + // Token string = token.type; string = token.value; diff --git a/types/esprima/index.d.ts b/types/esprima/index.d.ts index 2d5f933cad..34311cb96e 100644 --- a/types/esprima/index.d.ts +++ b/types/esprima/index.d.ts @@ -1,6 +1,6 @@ -// Type definitions for Esprima v2.1.0 +// Type definitions for Esprima v4.0.0 // Project: http://esprima.org -// Definitions by: teppeis , RReverser +// Definitions by: teppeis , RReverser , peter-scott // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /// @@ -13,34 +13,39 @@ declare namespace esprima { const version: string; - function parse(code: string, options?: Options, delegate?: (node: ESTree.Node, meta: any) => void): ESTree.Program; - function tokenize(code: string, options?: Options): Array; + 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 Options { - loc?: boolean; + interface ParseOptions { + jsx?: boolean, range?: boolean; - raw?: boolean; + loc?: boolean; + tolerant?: boolean; tokens?: boolean; comment?: boolean; - attachComment?: boolean; - tolerant?: boolean; - source?: boolean; - sourceType?: 'script' | 'module'; + } + + interface TokenizeOptions { + range?: boolean; + loc?: boolean; + comment?: boolean; } const Syntax: { - AssignmentExpression: 'AssignmentExpression', - AssignmentPattern: 'AssignmentPattern', ArrayExpression: 'ArrayExpression', ArrayPattern: 'ArrayPattern', ArrowFunctionExpression: 'ArrowFunctionExpression', - BlockStatement: 'BlockStatement', + AssignmentExpression: 'AssignmentExpression', + AssignmentPattern: 'AssignmentPattern', + AwaitExpression: 'AwaitExpression', BinaryExpression: 'BinaryExpression', + BlockStatement: 'BlockStatement', BreakStatement: 'BreakStatement', CallExpression: 'CallExpression', CatchClause: 'CatchClause', @@ -49,27 +54,28 @@ declare namespace esprima { ClassExpression: 'ClassExpression', ConditionalExpression: 'ConditionalExpression', ContinueStatement: 'ContinueStatement', - DoWhileStatement: 'DoWhileStatement', DebuggerStatement: 'DebuggerStatement', + DoWhileStatement: 'DoWhileStatement', EmptyStatement: 'EmptyStatement', ExportAllDeclaration: 'ExportAllDeclaration', ExportDefaultDeclaration: 'ExportDefaultDeclaration', ExportNamedDeclaration: 'ExportNamedDeclaration', ExportSpecifier: 'ExportSpecifier', ExpressionStatement: 'ExpressionStatement', - ForStatement: 'ForStatement', - ForOfStatement: 'ForOfStatement', ForInStatement: 'ForInStatement', + ForOfStatement: 'ForOfStatement', + ForStatement: 'ForStatement', FunctionDeclaration: 'FunctionDeclaration', FunctionExpression: 'FunctionExpression', Identifier: 'Identifier', IfStatement: 'IfStatement', + Import: 'Import', ImportDeclaration: 'ImportDeclaration', ImportDefaultSpecifier: 'ImportDefaultSpecifier', ImportNamespaceSpecifier: 'ImportNamespaceSpecifier', ImportSpecifier: 'ImportSpecifier', - Literal: 'Literal', LabeledStatement: 'LabeledStatement', + Literal: 'Literal', LogicalExpression: 'LogicalExpression', MemberExpression: 'MemberExpression', MetaProperty: 'MetaProperty', From cfca4c1fdc4613fdd76cb77b4989e8f8b2f071f4 Mon Sep 17 00:00:00 2001 From: Peter Scott Date: Wed, 23 Aug 2017 15:06:23 +0100 Subject: [PATCH 2/4] esprima 4.0 with linting --- types/esprima/esprima-tests.ts | 20 ++-- types/esprima/index.d.ts | 194 ++++++++++++++++----------------- types/esprima/tslint.json | 3 + 3 files changed, 104 insertions(+), 113 deletions(-) create mode 100644 types/esprima/tslint.json 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" +} From 1ed313ea9b2f7874217dfcf3edee8a8a1d646bce Mon Sep 17 00:00:00 2001 From: Peter Scott Date: Wed, 23 Aug 2017 15:21:35 +0100 Subject: [PATCH 3/4] corrected ESPrima API reference in static-eval-tests --- types/static-eval/static-eval-tests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/static-eval/static-eval-tests.ts b/types/static-eval/static-eval-tests.ts index bfe30f723f..10899086b1 100644 --- a/types/static-eval/static-eval-tests.ts +++ b/types/static-eval/static-eval-tests.ts @@ -2,7 +2,7 @@ import evaluate = require('static-eval'); import esprima = require('esprima'); import * as ESTree from 'estree'; -var parse = esprima.parse; +var parse = esprima.parseScript; var src = '[1,2,3+4*10+n,foo(3+5),obj[""+"x"].y]'; From 199ef32ca6522ee5a9e1b66af7c3bc0391fee530 Mon Sep 17 00:00:00 2001 From: Peter Scott Date: Wed, 30 Aug 2017 07:33:47 +0100 Subject: [PATCH 4/4] moved current esprima type definitions to version subfolder --- types/esprima/tsconfig.json | 2 +- types/esprima/v2/esprima-tests.ts | 28 ++++++++ types/esprima/v2/index.d.ts | 104 ++++++++++++++++++++++++++++++ types/esprima/v2/tsconfig.json | 27 ++++++++ 4 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 types/esprima/v2/esprima-tests.ts create mode 100644 types/esprima/v2/index.d.ts create mode 100644 types/esprima/v2/tsconfig.json diff --git a/types/esprima/tsconfig.json b/types/esprima/tsconfig.json index b94d0875ed..e70c3e04a4 100644 --- a/types/esprima/tsconfig.json +++ b/types/esprima/tsconfig.json @@ -6,7 +6,7 @@ ], "noImplicitAny": true, "noImplicitThis": true, - "strictNullChecks": false, + "strictNullChecks": true, "baseUrl": "../", "typeRoots": [ "../" diff --git a/types/esprima/v2/esprima-tests.ts b/types/esprima/v2/esprima-tests.ts new file mode 100644 index 0000000000..376a9a7562 --- /dev/null +++ b/types/esprima/v2/esprima-tests.ts @@ -0,0 +1,28 @@ +import esprima = require('esprima'); +import * as ESTree from 'estree'; + +var token: esprima.Token; +var comment: ESTree.Comment; +var program: ESTree.Program; +var string: string; + +// esprima +string = esprima.version; +program = esprima.parse('code'); +program = esprima.parse('code', {range: true}); +program = esprima.parse('import * as code from "code"', {sourceType: 'module'}) +token = esprima.tokenize('code')[0]; +token = esprima.tokenize('code', {range: true})[0]; + +// Token +string = token.type; +string = token.value; + +// Comment +string = comment.value; + +// Type narrowing +var node: ESTree.Node; +if(node.type === esprima.Syntax.IfStatement){ + node.consequent = node; +} \ No newline at end of file diff --git a/types/esprima/v2/index.d.ts b/types/esprima/v2/index.d.ts new file mode 100644 index 0000000000..d602f72d30 --- /dev/null +++ b/types/esprima/v2/index.d.ts @@ -0,0 +1,104 @@ +// Type definitions for Esprima v2.1.0 +// Project: http://esprima.org +// Definitions by: teppeis , RReverser +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +export = esprima; +export as namespace esprima; +import * as ESTree from 'estree'; + +declare namespace esprima { + + const version: string; + + function parse(code: string, options?: Options, delegate?: (node: ESTree.Node, meta: any) => void): ESTree.Program; + function tokenize(code: string, options?: Options): Array; + + interface Token { + type: string; + value: string; + } + + interface Options { + loc?: boolean; + range?: boolean; + raw?: boolean; + tokens?: boolean; + comment?: boolean; + attachComment?: boolean; + tolerant?: boolean; + source?: boolean; + sourceType?: 'script' | 'module'; + } + + const Syntax: { + AssignmentExpression: 'AssignmentExpression', + AssignmentPattern: 'AssignmentPattern', + ArrayExpression: 'ArrayExpression', + ArrayPattern: 'ArrayPattern', + ArrowFunctionExpression: 'ArrowFunctionExpression', + BlockStatement: 'BlockStatement', + BinaryExpression: 'BinaryExpression', + BreakStatement: 'BreakStatement', + CallExpression: 'CallExpression', + CatchClause: 'CatchClause', + ClassBody: 'ClassBody', + ClassDeclaration: 'ClassDeclaration', + ClassExpression: 'ClassExpression', + ConditionalExpression: 'ConditionalExpression', + ContinueStatement: 'ContinueStatement', + DoWhileStatement: 'DoWhileStatement', + DebuggerStatement: 'DebuggerStatement', + EmptyStatement: 'EmptyStatement', + ExportAllDeclaration: 'ExportAllDeclaration', + ExportDefaultDeclaration: 'ExportDefaultDeclaration', + ExportNamedDeclaration: 'ExportNamedDeclaration', + ExportSpecifier: 'ExportSpecifier', + ExpressionStatement: 'ExpressionStatement', + ForStatement: 'ForStatement', + ForOfStatement: 'ForOfStatement', + ForInStatement: 'ForInStatement', + FunctionDeclaration: 'FunctionDeclaration', + FunctionExpression: 'FunctionExpression', + Identifier: 'Identifier', + IfStatement: 'IfStatement', + ImportDeclaration: 'ImportDeclaration', + ImportDefaultSpecifier: 'ImportDefaultSpecifier', + ImportNamespaceSpecifier: 'ImportNamespaceSpecifier', + ImportSpecifier: 'ImportSpecifier', + Literal: 'Literal', + LabeledStatement: 'LabeledStatement', + 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' + }; + +} \ No newline at end of file diff --git a/types/esprima/v2/tsconfig.json b/types/esprima/v2/tsconfig.json new file mode 100644 index 0000000000..7de8cc1403 --- /dev/null +++ b/types/esprima/v2/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": false, + "baseUrl": "../../", + "typeRoots": [ + "../../" + ], + "types": [], + "paths": { + "esprima": [ + "esprima/v2" + ] + }, + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "esprima-tests.ts" + ] +} \ No newline at end of file