From b04f6c7c336f5614b100cbc1c0d04badf731314d Mon Sep 17 00:00:00 2001 From: Armano Date: Mon, 21 Jan 2019 02:45:52 +0100 Subject: [PATCH 1/5] refactor(typescript-estree): correct warnings reported by sonarlint --- packages/typescript-estree/src/ast-converter.ts | 4 ++-- packages/typescript-estree/src/convert.ts | 8 ++++---- packages/typescript-estree/src/parser.ts | 4 +--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/typescript-estree/src/ast-converter.ts b/packages/typescript-estree/src/ast-converter.ts index ce6f14b63f71..76bdf20bcdc8 100644 --- a/packages/typescript-estree/src/ast-converter.ts +++ b/packages/typescript-estree/src/ast-converter.ts @@ -11,11 +11,11 @@ import { convertTokens } from './node-utils'; import ts from 'typescript'; import { Extra } from './temp-types-based-on-js-source'; -export default ( +export default function astConverter ( ast: ts.SourceFile, extra: Extra, shouldProvideParserServices: boolean -) => { +) { /** * The TypeScript compiler produced fundamental parse errors when parsing the * source. diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index f75547953df8..5d3c4df99734 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -694,8 +694,8 @@ export default function convert(config: ConvertConfig): ESTreeNode | null { } if (node.type) { - (result as any).id.typeAnnotation = convertTypeAnnotation(node.type); - fixTypeAnnotationParentLocation((result as any).id); + result.id!.typeAnnotation = convertTypeAnnotation(node.type); + fixTypeAnnotationParentLocation(result.id!); } break; } @@ -1249,7 +1249,7 @@ export default function convert(config: ConvertConfig): ESTreeNode | null { expressions: [] }); - node.templateSpans.forEach((templateSpan: any) => { + node.templateSpans.forEach(templateSpan => { (result as any).expressions.push(convertChild(templateSpan.expression)); (result as any).quasis.push(convertChild(templateSpan.literal)); }); @@ -1333,7 +1333,7 @@ export default function convert(config: ConvertConfig): ESTreeNode | null { } if (node.questionToken) { - (parameter as any).optional = true; + parameter.optional = true; } if (node.modifiers) { diff --git a/packages/typescript-estree/src/parser.ts b/packages/typescript-estree/src/parser.ts index 2f6347e0a7a2..ff2784aa9963 100644 --- a/packages/typescript-estree/src/parser.ts +++ b/packages/typescript-estree/src/parser.ts @@ -213,10 +213,8 @@ function generateAST( tsNodeToESTreeNodeMap?: WeakMap; }; } { - const toString = String; - if (typeof code !== 'string' && !((code as any) instanceof String)) { - code = toString(code); + code = String(code); } resetExtra(); From 14b6207838a9c6c5eeaf3856d1b139bec8b6f27f Mon Sep 17 00:00:00 2001 From: Armano Date: Mon, 21 Jan 2019 03:08:27 +0100 Subject: [PATCH 2/5] chore: fix linting issue --- packages/typescript-estree/src/ast-converter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/typescript-estree/src/ast-converter.ts b/packages/typescript-estree/src/ast-converter.ts index 76bdf20bcdc8..13d2212c5c4f 100644 --- a/packages/typescript-estree/src/ast-converter.ts +++ b/packages/typescript-estree/src/ast-converter.ts @@ -11,7 +11,7 @@ import { convertTokens } from './node-utils'; import ts from 'typescript'; import { Extra } from './temp-types-based-on-js-source'; -export default function astConverter ( +export default function astConverter( ast: ts.SourceFile, extra: Extra, shouldProvideParserServices: boolean @@ -59,4 +59,4 @@ export default function astConverter ( } return { estree, astMaps }; -}; +} From 0cc25b2c9a0ed3a5f7f1e78eb2d78378febbd5a2 Mon Sep 17 00:00:00 2001 From: Armano Date: Mon, 21 Jan 2019 21:26:50 +0100 Subject: [PATCH 3/5] test(ts-estree): test cases for loggerFn and non string code --- .../tests/lib/__snapshots__/parse.ts.snap | 80 +++++++++++++++++++ packages/typescript-estree/tests/lib/parse.ts | 62 +++++++++++++- .../typescript-estree/tools/test-utils.ts | 1 + 3 files changed, 139 insertions(+), 4 deletions(-) diff --git a/packages/typescript-estree/tests/lib/__snapshots__/parse.ts.snap b/packages/typescript-estree/tests/lib/__snapshots__/parse.ts.snap index ae6a9a339e17..4509f7441037 100644 --- a/packages/typescript-estree/tests/lib/__snapshots__/parse.ts.snap +++ b/packages/typescript-estree/tests/lib/__snapshots__/parse.ts.snap @@ -188,3 +188,83 @@ Object { "type": "Program", } `; + +exports[`parse() non string code should correctly convert code to string 1`] = ` +Object { + "body": Array [ + Object { + "expression": Object { + "loc": Object { + "end": Object { + "column": 5, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "range": Array [ + 0, + 5, + ], + "raw": "12345", + "type": "Literal", + "value": 12345, + }, + "loc": Object { + "end": Object { + "column": 5, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "range": Array [ + 0, + 5, + ], + "type": "ExpressionStatement", + }, + ], + "comments": Array [], + "loc": Object { + "end": Object { + "column": 5, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "range": Array [ + 0, + 5, + ], + "sourceType": "script", + "tokens": Array [ + Object { + "loc": Object { + "end": Object { + "column": 5, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "range": Array [ + 0, + 5, + ], + "type": "Numeric", + "value": "12345", + }, + ], + "type": "Program", +} +`; diff --git a/packages/typescript-estree/tests/lib/parse.ts b/packages/typescript-estree/tests/lib/parse.ts index cbb9bebfd052..624875d1ce5a 100644 --- a/packages/typescript-estree/tests/lib/parse.ts +++ b/packages/typescript-estree/tests/lib/parse.ts @@ -6,6 +6,7 @@ * MIT License */ import * as parser from '../../src/parser'; +import * as astConverter from '../../src/ast-converter'; import { ParserOptions } from '../../src/temp-types-based-on-js-source'; import { createSnapshotTestBlock } from '../../tools/test-utils'; @@ -16,8 +17,8 @@ import { createSnapshotTestBlock } from '../../tools/test-utils'; describe('parse()', () => { describe('basic functionality', () => { it('should parse an empty string', () => { - expect((parser as any).parse('').body).toEqual([]); - expect(parser.parse('', {} as any).body).toEqual([]); + expect(parser.parse('').body).toEqual([]); + expect(parser.parse('', {}).body).toEqual([]); }); }); @@ -33,7 +34,7 @@ describe('parse()', () => { describe('general', () => { const code = 'let foo = bar;'; - const config = { + const config: ParserOptions = { comment: true, tokens: true, range: true, @@ -42,7 +43,60 @@ describe('parse()', () => { it( 'output tokens, comments, locs, and ranges when called with those options', - createSnapshotTestBlock(code, config as ParserOptions) + createSnapshotTestBlock(code, config) ); }); + + describe('non string code', () => { + const code = (12345 as any) as string; + const config: ParserOptions = { + comment: true, + tokens: true, + range: true, + loc: true + }; + + it( + 'should correctly convert code to string', + createSnapshotTestBlock(code, config) + ); + }); + + describe('non string code', () => { + it('output tokens, comments, locs, and ranges when called with those options', () => { + const spy = jest.spyOn(astConverter, 'default'); + + const loggerFn = jest.fn(() => true); + + parser.parse('let foo = bar;', { + loggerFn, + comment: true, + tokens: true, + range: true, + loc: true + }); + + expect(spy).toHaveBeenCalledWith( + jasmine.any(Object), + { + code: 'let foo = bar;', + comment: true, + comments: [], + errorOnTypeScriptSyntacticAndSemanticIssues: false, + errorOnUnknownASTType: false, + extraFileExtensions: [], + jsx: false, + loc: true, + log: loggerFn, + projects: [], + range: true, + strict: false, + tokens: jasmine.any(Array), + tsconfigRootDir: jasmine.any(String), + useJSXTextNode: false + }, + false + ); + }); + }); }); diff --git a/packages/typescript-estree/tools/test-utils.ts b/packages/typescript-estree/tools/test-utils.ts index dc507d78e1e8..9191ae5e518a 100644 --- a/packages/typescript-estree/tools/test-utils.ts +++ b/packages/typescript-estree/tools/test-utils.ts @@ -36,6 +36,7 @@ export function parseCodeAndGenerateServices( * and which performs an assertion on the snapshot for the given code and config. * @param {string} code The source code to parse * @param {ParserOptions} config the parser configuration + * @param {boolean} generateServices Flag determining whether to generate ast maps and program or not * @returns {jest.ProvidesCallback} callback for Jest it() block */ export function createSnapshotTestBlock( From a242d84779775d0cce7ce179d7012dd0f0a714d7 Mon Sep 17 00:00:00 2001 From: Armano Date: Mon, 21 Jan 2019 21:33:05 +0100 Subject: [PATCH 4/5] test(ts-estree): update test message --- packages/typescript-estree/tests/lib/parse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typescript-estree/tests/lib/parse.ts b/packages/typescript-estree/tests/lib/parse.ts index 624875d1ce5a..cdb96ec63e27 100644 --- a/packages/typescript-estree/tests/lib/parse.ts +++ b/packages/typescript-estree/tests/lib/parse.ts @@ -62,7 +62,7 @@ describe('parse()', () => { ); }); - describe('non string code', () => { + describe('if defined loggerFn should be propagated to ast-converter', () => { it('output tokens, comments, locs, and ranges when called with those options', () => { const spy = jest.spyOn(astConverter, 'default'); From 03013f7373c63437d7874a88bcd9105bf12a913f Mon Sep 17 00:00:00 2001 From: Armano Date: Mon, 21 Jan 2019 21:45:47 +0100 Subject: [PATCH 5/5] test(ts-estree): update test message --- packages/typescript-estree/tests/lib/parse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typescript-estree/tests/lib/parse.ts b/packages/typescript-estree/tests/lib/parse.ts index cdb96ec63e27..74f02d03792c 100644 --- a/packages/typescript-estree/tests/lib/parse.ts +++ b/packages/typescript-estree/tests/lib/parse.ts @@ -62,7 +62,7 @@ describe('parse()', () => { ); }); - describe('if defined loggerFn should be propagated to ast-converter', () => { + describe('loggerFn should be propagated to ast-converter', () => { it('output tokens, comments, locs, and ranges when called with those options', () => { const spy = jest.spyOn(astConverter, 'default');