From 2b11a18d6a27d5680cd2bf754907ef7594530490 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Fri, 16 Aug 2019 11:54:12 +0300 Subject: [PATCH] remove typescript dependency from boolean-trivia, no-double-space rules --- scripts/eslint/rules/boolean-trivia.ts | 17 +++++----- scripts/eslint/rules/no-double-space.ts | 34 +++++++------------ scripts/eslint/rules/utils.ts | 18 +--------- scripts/eslint/tests/boolean-trivia.test.ts | 22 ++++-------- scripts/eslint/tests/fixtures/file.ts | 0 scripts/eslint/tests/fixtures/tsconfig.json | 9 ----- scripts/eslint/tests/no-double-space.test.ts | 35 +------------------- scripts/eslint/tsconfig.json | 4 --- 8 files changed, 30 insertions(+), 109 deletions(-) delete mode 100644 scripts/eslint/tests/fixtures/file.ts delete mode 100644 scripts/eslint/tests/fixtures/tsconfig.json diff --git a/scripts/eslint/rules/boolean-trivia.ts b/scripts/eslint/rules/boolean-trivia.ts index a9712513964..a611e73be53 100644 --- a/scripts/eslint/rules/boolean-trivia.ts +++ b/scripts/eslint/rules/boolean-trivia.ts @@ -1,6 +1,5 @@ -import { SyntaxKind } from "typescript"; import { AST_NODE_TYPES, TSESTree } from "@typescript-eslint/experimental-utils"; -import { getEsTreeNodeToTSNodeMap, createRule } from "./utils"; +import { createRule } from "./utils"; export = createRule({ name: "boolean-trivia", @@ -20,19 +19,21 @@ export = createRule({ defaultOptions: [], create(context) { - const esTreeNodeToTSNodeMap = getEsTreeNodeToTSNodeMap(context.parserServices); const sourceCode = context.getSourceCode(); const sourceCodeText = sourceCode.getText(); const isSetOrAssert = (name: string): boolean => name.startsWith("set") || name.startsWith("assert"); const isTrivia = (node: TSESTree.Expression): boolean => { - const tsNode = esTreeNodeToTSNodeMap.get(node); - - if (tsNode.kind === SyntaxKind.Identifier) { - return tsNode.originalKeywordKind === SyntaxKind.UndefinedKeyword; + if (node.type === AST_NODE_TYPES.Identifier) { + return node.name === "undefined"; } - return [SyntaxKind.TrueKeyword, SyntaxKind.FalseKeyword, SyntaxKind.NullKeyword].indexOf(tsNode.kind) >= 0; + if (node.type === AST_NODE_TYPES.Literal) { + // eslint-disable-next-line no-null/no-null + return node.value === null || node.value === true || node.value === false; + } + + return false; }; const shouldIgnoreCalledExpression = (node: TSESTree.CallExpression): boolean => { diff --git a/scripts/eslint/rules/no-double-space.ts b/scripts/eslint/rules/no-double-space.ts index 69f65d4eb8b..7884c4c108b 100644 --- a/scripts/eslint/rules/no-double-space.ts +++ b/scripts/eslint/rules/no-double-space.ts @@ -1,6 +1,5 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { SyntaxKind } from "typescript"; -import { getEsTreeNodeToTSNodeMap, createRule } from "./utils"; +import { TSESTree, AST_NODE_TYPES } from "@typescript-eslint/experimental-utils"; +import { createRule } from "./utils"; export = createRule({ name: "no-double-space", @@ -19,28 +18,19 @@ export = createRule({ defaultOptions: [], create(context) { - const esTreeNodeToTSNodeMap = getEsTreeNodeToTSNodeMap(context.parserServices); const sourceCode = context.getSourceCode(); const lines = sourceCode.getLines(); - const isLiteral = (node: TSESTree.Node | null) => { - if (!node) { - return false; - } + const isStringLiteral = (node: TSESTree.Node | null): boolean => { + return !!(node && ( + (node.type === AST_NODE_TYPES.TemplateElement) || + (node.type === AST_NODE_TYPES.TemplateLiteral && node.quasis) || + (node.type === AST_NODE_TYPES.Literal && typeof node.value === "string") + )); + }; - const tsNode = esTreeNodeToTSNodeMap.get(node); - if (!tsNode) { - return false; - } - - return [ - SyntaxKind.NoSubstitutionTemplateLiteral, - SyntaxKind.RegularExpressionLiteral, - SyntaxKind.TemplateMiddle, - SyntaxKind.StringLiteral, - SyntaxKind.TemplateHead, - SyntaxKind.TemplateTail, - ].indexOf(tsNode.kind) >= 0; + const isRegexLiteral = (node: TSESTree.Node | null): boolean => { + return !!(node && node.type === AST_NODE_TYPES.Literal && node.regex); }; const checkDoubleSpace = (node: TSESTree.Node) => { @@ -66,7 +56,7 @@ export = createRule({ const locIndex = sourceCode.getIndexFromLoc({ column: doubleSpace.index, line: index + 1 }); const sourceNode = sourceCode.getNodeByRangeIndex(locIndex); - if (isLiteral(sourceNode)) { + if (isStringLiteral(sourceNode) || isRegexLiteral(sourceNode)) { return; } diff --git a/scripts/eslint/rules/utils.ts b/scripts/eslint/rules/utils.ts index 2e14fd22f79..161948de34d 100644 --- a/scripts/eslint/rules/utils.ts +++ b/scripts/eslint/rules/utils.ts @@ -1,18 +1,2 @@ -import { ParserServices, ESLintUtils } from "@typescript-eslint/experimental-utils"; +import { ESLintUtils } from "@typescript-eslint/experimental-utils"; export const createRule = ESLintUtils.RuleCreator(() => ""); - -export const getTypeChecker = (parserServices: ParserServices | undefined) => { - if (!parserServices || !parserServices.program || !parserServices.program.getTypeChecker) { - throw new Error("'typeChecker' was not found"); - } - - return parserServices.program.getTypeChecker(); -}; - -export const getEsTreeNodeToTSNodeMap = (parserServices: ParserServices | undefined) => { - if (!parserServices || !parserServices.esTreeNodeToTSNodeMap) { - throw new Error("'esTreeNodeToTSNodeMap' was not found"); - } - - return parserServices.esTreeNodeToTSNodeMap; -}; diff --git a/scripts/eslint/tests/boolean-trivia.test.ts b/scripts/eslint/tests/boolean-trivia.test.ts index 189ae4dbef8..df8ba4e34cd 100644 --- a/scripts/eslint/tests/boolean-trivia.test.ts +++ b/scripts/eslint/tests/boolean-trivia.test.ts @@ -1,14 +1,9 @@ -import { RuleTester, ROOT_DIR, FILENAME } from "./support/RuleTester"; +import { RuleTester } from "./support/RuleTester"; import rule = require("../rules/boolean-trivia"); const ruleTester = new RuleTester({ parserOptions: { warnOnUnsupportedTypeScriptVersion: false, - tsconfigRootDir: ROOT_DIR, - ecmaFeatures: {}, - ecmaVersion: 6, - sourceType: "module", - project: "./tsconfig.json", }, parser: require.resolve("@typescript-eslint/parser"), }); @@ -16,28 +11,30 @@ const ruleTester = new RuleTester({ ruleTester.run("boolean-trivia", rule, { valid: [ { - filename: FILENAME, code: ` const fn = (prop: boolean) => {}; fn(/* boolean prop */ true); `, }, { - filename: FILENAME, code: ` const fn = (prop: null) => {}; fn(/* null prop */ null); `, }, { - filename: FILENAME, + code: ` +const fn = (prop: undefined) => {}; +fn(/* undefined prop */ undefined); + `, + }, + { code: ` const fn = (prop: null) => {}; fn(/*null prop*/ null); `, }, { - filename: FILENAME, code: ` const fn = (prop: boolean) => {}; fn(/* comment */ @@ -46,7 +43,6 @@ fn(/* comment */ `, }, { - filename: FILENAME, code: ` const fn = (prop: boolean) => {}; fn.apply(null, true); @@ -56,7 +52,6 @@ fn.apply(null, true); invalid: [ { - filename: FILENAME, code: ` const fn = (prop: null) => {}; fn(null); @@ -64,7 +59,6 @@ fn(null); errors: [{ messageId: "booleanTriviaArgumentError" }], }, { - filename: FILENAME, code: ` const fn = (prop: boolean) => {}; fn(false); @@ -72,7 +66,6 @@ fn(false); errors: [{ messageId: "booleanTriviaArgumentError" }], }, { - filename: FILENAME, code: ` const fn = (prop: boolean) => {}; fn(/* boolean arg */false); @@ -80,7 +73,6 @@ fn(/* boolean arg */false); errors: [{ messageId: "booleanTriviaArgumentSpaceError" }], }, { - filename: FILENAME, code: ` const fn = (prop: boolean) => {}; fn(/* first comment */ /* second comment */ false); diff --git a/scripts/eslint/tests/fixtures/file.ts b/scripts/eslint/tests/fixtures/file.ts deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/scripts/eslint/tests/fixtures/tsconfig.json b/scripts/eslint/tests/fixtures/tsconfig.json deleted file mode 100644 index 83c06141f7a..00000000000 --- a/scripts/eslint/tests/fixtures/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "esModuleInterop": true, - "target": "es5", - "module": "commonjs", - "strict": true, - "lib": ["es2015", "es2017", "esnext"], - } -} diff --git a/scripts/eslint/tests/no-double-space.test.ts b/scripts/eslint/tests/no-double-space.test.ts index 7d4b0e24f16..b28154675b0 100644 --- a/scripts/eslint/tests/no-double-space.test.ts +++ b/scripts/eslint/tests/no-double-space.test.ts @@ -1,85 +1,64 @@ -import { RuleTester, ROOT_DIR, FILENAME } from "./support/RuleTester"; +import { RuleTester } from "./support/RuleTester"; import rule = require("../rules/no-double-space"); const ruleTester = new RuleTester({ parser: require.resolve("@typescript-eslint/parser"), parserOptions: { warnOnUnsupportedTypeScriptVersion: false, - tsconfigRootDir: ROOT_DIR, - ecmaFeatures: {}, - ecmaVersion: 6, - sourceType: "module", - project: "./tsconfig.json", }, }); ruleTester.run("no-double-space", rule, { valid: [ { - filename: FILENAME, code: `const a = {};`, }, { - filename: FILENAME, code: `function fn() {}`, }, { - filename: FILENAME, code: `const a = " ";`, }, { - filename: FILENAME, code: `// ^ ^`, }, { - filename: FILENAME, code: `class Cl {}`, }, { - filename: FILENAME, code: `// comment `, }, { - filename: FILENAME, code: `/* comment */`, }, { - filename: FILENAME, code: `" string ";`, }, { - filename: FILENAME, code: `/ regexp /g;`, }, { - filename: FILENAME, code: `const rgx = / regexp /g;`, }, { - filename: FILENAME, code: "const str = ` string template`;", }, { - filename: FILENAME, code: ` // comment`, }, { - filename: FILENAME, code: ` /* comment */`, }, { - filename: FILENAME, code: `// `, }, { - filename: FILENAME, code: ` const a = 1; `, }, { - filename: FILENAME, code: ` /** * comment @@ -87,7 +66,6 @@ const a = `, }, { - filename: FILENAME, code: ` // comment // - comment @@ -95,7 +73,6 @@ const a = `, }, { - filename: FILENAME, code: ` interface Props { prop: string[]; // comment prop @@ -104,7 +81,6 @@ interface Props { `, }, { - filename: FILENAME, code: ` /** * Returns a JSON-encoded value of the type: string[] @@ -115,7 +91,6 @@ interface Props { `, }, { - filename: FILENAME, code: ` const obj = { content: "function f() { 1; }", @@ -126,54 +101,46 @@ const obj = { invalid: [ { - filename: FILENAME, code: `const a = {};`, errors: [ { messageId: "noDoubleSpaceError", line: 1, column: 6 }, ], }, { - filename: FILENAME, code: `function fn() {}`, errors: [ { messageId: "noDoubleSpaceError", line: 1, column: 9 }, ], }, { - filename: FILENAME, code: `class Cl {}`, errors: [{ messageId: "noDoubleSpaceError", line: 1, column: 6 }], }, { - filename: FILENAME, code: "const str = ` string template`;", errors: [ { messageId: "noDoubleSpaceError", line: 1, column: 12 }, ], }, { - filename: FILENAME, code: `/** comment */`, errors: [ { messageId: "noDoubleSpaceError", line: 1, column: 12 }, ], }, { - filename: FILENAME, code: `/** comment with many spaces */`, errors: [ { messageId: "noDoubleSpaceError", line: 1, column: 12 }, ], }, { - filename: FILENAME, code: `// comment with many spaces`, errors: [ { messageId: "noDoubleSpaceError", line: 1, column: 11 }, ], }, { - filename: FILENAME, code: ` const a = 1; const b = 2; diff --git a/scripts/eslint/tsconfig.json b/scripts/eslint/tsconfig.json index 5d015028f71..254e074b11b 100644 --- a/scripts/eslint/tsconfig.json +++ b/scripts/eslint/tsconfig.json @@ -23,9 +23,5 @@ "include": [ "rules", "tests" - ], - - "exclude": [ - "fixtures" ] }