remove typescript dependency from boolean-trivia, no-double-space rules

This commit is contained in:
Alexander T 2019-08-16 11:54:12 +03:00
parent 8442ec01bf
commit 2b11a18d6a
8 changed files with 30 additions and 109 deletions

View file

@ -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 => {

View file

@ -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;
}

View file

@ -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;
};

View file

@ -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);

View file

@ -1,9 +0,0 @@
{
"compilerOptions": {
"esModuleInterop": true,
"target": "es5",
"module": "commonjs",
"strict": true,
"lib": ["es2015", "es2017", "esnext"],
}
}

View file

@ -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;

View file

@ -23,9 +23,5 @@
"include": [
"rules",
"tests"
],
"exclude": [
"fixtures"
]
}