Skip to content

Commit 2b11a18

Browse files
committed
remove typescript dependency from boolean-trivia, no-double-space rules
1 parent 8442ec0 commit 2b11a18

8 files changed

Lines changed: 29 additions & 108 deletions

File tree

scripts/eslint/rules/boolean-trivia.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { SyntaxKind } from "typescript";
21
import { AST_NODE_TYPES, TSESTree } from "@typescript-eslint/experimental-utils";
3-
import { getEsTreeNodeToTSNodeMap, createRule } from "./utils";
2+
import { createRule } from "./utils";
43

54
export = createRule({
65
name: "boolean-trivia",
@@ -20,19 +19,21 @@ export = createRule({
2019
defaultOptions: [],
2120

2221
create(context) {
23-
const esTreeNodeToTSNodeMap = getEsTreeNodeToTSNodeMap(context.parserServices);
2422
const sourceCode = context.getSourceCode();
2523
const sourceCodeText = sourceCode.getText();
2624

2725
const isSetOrAssert = (name: string): boolean => name.startsWith("set") || name.startsWith("assert");
2826
const isTrivia = (node: TSESTree.Expression): boolean => {
29-
const tsNode = esTreeNodeToTSNodeMap.get(node);
27+
if (node.type === AST_NODE_TYPES.Identifier) {
28+
return node.name === "undefined";
29+
}
3030

31-
if (tsNode.kind === SyntaxKind.Identifier) {
32-
return tsNode.originalKeywordKind === SyntaxKind.UndefinedKeyword;
31+
if (node.type === AST_NODE_TYPES.Literal) {
32+
// eslint-disable-next-line no-null/no-null
33+
return node.value === null || node.value === true || node.value === false;
3334
}
3435

35-
return [SyntaxKind.TrueKeyword, SyntaxKind.FalseKeyword, SyntaxKind.NullKeyword].indexOf(tsNode.kind) >= 0;
36+
return false;
3637
};
3738

3839
const shouldIgnoreCalledExpression = (node: TSESTree.CallExpression): boolean => {

scripts/eslint/rules/no-double-space.ts

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { TSESTree } from "@typescript-eslint/experimental-utils";
2-
import { SyntaxKind } from "typescript";
3-
import { getEsTreeNodeToTSNodeMap, createRule } from "./utils";
1+
import { TSESTree, AST_NODE_TYPES } from "@typescript-eslint/experimental-utils";
2+
import { createRule } from "./utils";
43

54
export = createRule({
65
name: "no-double-space",
@@ -19,28 +18,19 @@ export = createRule({
1918
defaultOptions: [],
2019

2120
create(context) {
22-
const esTreeNodeToTSNodeMap = getEsTreeNodeToTSNodeMap(context.parserServices);
2321
const sourceCode = context.getSourceCode();
2422
const lines = sourceCode.getLines();
2523

26-
const isLiteral = (node: TSESTree.Node | null) => {
27-
if (!node) {
28-
return false;
29-
}
30-
31-
const tsNode = esTreeNodeToTSNodeMap.get(node);
32-
if (!tsNode) {
33-
return false;
34-
}
24+
const isStringLiteral = (node: TSESTree.Node | null): boolean => {
25+
return !!(node && (
26+
(node.type === AST_NODE_TYPES.TemplateElement) ||
27+
(node.type === AST_NODE_TYPES.TemplateLiteral && node.quasis) ||
28+
(node.type === AST_NODE_TYPES.Literal && typeof node.value === "string")
29+
));
30+
};
3531

36-
return [
37-
SyntaxKind.NoSubstitutionTemplateLiteral,
38-
SyntaxKind.RegularExpressionLiteral,
39-
SyntaxKind.TemplateMiddle,
40-
SyntaxKind.StringLiteral,
41-
SyntaxKind.TemplateHead,
42-
SyntaxKind.TemplateTail,
43-
].indexOf(tsNode.kind) >= 0;
32+
const isRegexLiteral = (node: TSESTree.Node | null): boolean => {
33+
return !!(node && node.type === AST_NODE_TYPES.Literal && node.regex);
4434
};
4535

4636
const checkDoubleSpace = (node: TSESTree.Node) => {
@@ -66,7 +56,7 @@ export = createRule({
6656

6757
const locIndex = sourceCode.getIndexFromLoc({ column: doubleSpace.index, line: index + 1 });
6858
const sourceNode = sourceCode.getNodeByRangeIndex(locIndex);
69-
if (isLiteral(sourceNode)) {
59+
if (isStringLiteral(sourceNode) || isRegexLiteral(sourceNode)) {
7060
return;
7161
}
7262

scripts/eslint/rules/utils.ts

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,2 @@
1-
import { ParserServices, ESLintUtils } from "@typescript-eslint/experimental-utils";
1+
import { ESLintUtils } from "@typescript-eslint/experimental-utils";
22
export const createRule = ESLintUtils.RuleCreator(() => "");
3-
4-
export const getTypeChecker = (parserServices: ParserServices | undefined) => {
5-
if (!parserServices || !parserServices.program || !parserServices.program.getTypeChecker) {
6-
throw new Error("'typeChecker' was not found");
7-
}
8-
9-
return parserServices.program.getTypeChecker();
10-
};
11-
12-
export const getEsTreeNodeToTSNodeMap = (parserServices: ParserServices | undefined) => {
13-
if (!parserServices || !parserServices.esTreeNodeToTSNodeMap) {
14-
throw new Error("'esTreeNodeToTSNodeMap' was not found");
15-
}
16-
17-
return parserServices.esTreeNodeToTSNodeMap;
18-
};

scripts/eslint/tests/boolean-trivia.test.ts

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,40 @@
1-
import { RuleTester, ROOT_DIR, FILENAME } from "./support/RuleTester";
1+
import { RuleTester } from "./support/RuleTester";
22
import rule = require("../rules/boolean-trivia");
33

44
const ruleTester = new RuleTester({
55
parserOptions: {
66
warnOnUnsupportedTypeScriptVersion: false,
7-
tsconfigRootDir: ROOT_DIR,
8-
ecmaFeatures: {},
9-
ecmaVersion: 6,
10-
sourceType: "module",
11-
project: "./tsconfig.json",
127
},
138
parser: require.resolve("@typescript-eslint/parser"),
149
});
1510

1611
ruleTester.run("boolean-trivia", rule, {
1712
valid: [
1813
{
19-
filename: FILENAME,
2014
code: `
2115
const fn = (prop: boolean) => {};
2216
fn(/* boolean prop */ true);
2317
`,
2418
},
2519
{
26-
filename: FILENAME,
2720
code: `
2821
const fn = (prop: null) => {};
2922
fn(/* null prop */ null);
3023
`,
3124
},
3225
{
33-
filename: FILENAME,
26+
code: `
27+
const fn = (prop: undefined) => {};
28+
fn(/* undefined prop */ undefined);
29+
`,
30+
},
31+
{
3432
code: `
3533
const fn = (prop: null) => {};
3634
fn(/*null prop*/ null);
3735
`,
3836
},
3937
{
40-
filename: FILENAME,
4138
code: `
4239
const fn = (prop: boolean) => {};
4340
fn(/* comment */
@@ -46,7 +43,6 @@ fn(/* comment */
4643
`,
4744
},
4845
{
49-
filename: FILENAME,
5046
code: `
5147
const fn = (prop: boolean) => {};
5248
fn.apply(null, true);
@@ -56,31 +52,27 @@ fn.apply(null, true);
5652

5753
invalid: [
5854
{
59-
filename: FILENAME,
6055
code: `
6156
const fn = (prop: null) => {};
6257
fn(null);
6358
`,
6459
errors: [{ messageId: "booleanTriviaArgumentError" }],
6560
},
6661
{
67-
filename: FILENAME,
6862
code: `
6963
const fn = (prop: boolean) => {};
7064
fn(false);
7165
`,
7266
errors: [{ messageId: "booleanTriviaArgumentError" }],
7367
},
7468
{
75-
filename: FILENAME,
7669
code: `
7770
const fn = (prop: boolean) => {};
7871
fn(/* boolean arg */false);
7972
`,
8073
errors: [{ messageId: "booleanTriviaArgumentSpaceError" }],
8174
},
8275
{
83-
filename: FILENAME,
8476
code: `
8577
const fn = (prop: boolean) => {};
8678
fn(/* first comment */ /* second comment */ false);

scripts/eslint/tests/fixtures/file.ts

Whitespace-only changes.

scripts/eslint/tests/fixtures/tsconfig.json

Lines changed: 0 additions & 9 deletions
This file was deleted.

scripts/eslint/tests/no-double-space.test.ts

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,78 @@
1-
import { RuleTester, ROOT_DIR, FILENAME } from "./support/RuleTester";
1+
import { RuleTester } from "./support/RuleTester";
22
import rule = require("../rules/no-double-space");
33

44
const ruleTester = new RuleTester({
55
parser: require.resolve("@typescript-eslint/parser"),
66
parserOptions: {
77
warnOnUnsupportedTypeScriptVersion: false,
8-
tsconfigRootDir: ROOT_DIR,
9-
ecmaFeatures: {},
10-
ecmaVersion: 6,
11-
sourceType: "module",
12-
project: "./tsconfig.json",
138
},
149
});
1510

1611
ruleTester.run("no-double-space", rule, {
1712
valid: [
1813
{
19-
filename: FILENAME,
2014
code: `const a = {};`,
2115
},
2216
{
23-
filename: FILENAME,
2417
code: `function fn() {}`,
2518
},
2619
{
27-
filename: FILENAME,
2820
code: `const a = " ";`,
2921
},
3022
{
31-
filename: FILENAME,
3223
code: `// ^ ^`,
3324
},
3425
{
35-
filename: FILENAME,
3626
code: `class Cl {}`,
3727
},
3828
{
39-
filename: FILENAME,
4029
code: `// comment `,
4130
},
4231
{
43-
filename: FILENAME,
4432
code: `/* comment */`,
4533
},
4634
{
47-
filename: FILENAME,
4835
code: `" string ";`,
4936
},
5037
{
51-
filename: FILENAME,
5238
code: `/ regexp /g;`,
5339
},
5440
{
55-
filename: FILENAME,
5641
code: `const rgx = / regexp /g;`,
5742
},
5843
{
59-
filename: FILENAME,
6044
code: "const str = ` string template`;",
6145
},
6246
{
63-
filename: FILENAME,
6447
code: ` // comment`,
6548
},
6649
{
67-
filename: FILENAME,
6850
code: ` /* comment */`,
6951
},
7052
{
71-
filename: FILENAME,
7253
code: `// `,
7354
},
7455
{
75-
filename: FILENAME,
7656
code: `
7757
const a =
7858
1;
7959
`,
8060
},
8161
{
82-
filename: FILENAME,
8362
code: `
8463
/**
8564
* comment
8665
*/
8766
`,
8867
},
8968
{
90-
filename: FILENAME,
9169
code: `
9270
// comment
9371
// - comment
9472
// - comment
9573
`,
9674
},
9775
{
98-
filename: FILENAME,
9976
code: `
10077
interface Props {
10178
prop: string[]; // comment prop
@@ -104,7 +81,6 @@ interface Props {
10481
`,
10582
},
10683
{
107-
filename: FILENAME,
10884
code: `
10985
/**
11086
* Returns a JSON-encoded value of the type: string[]
@@ -115,7 +91,6 @@ interface Props {
11591
`,
11692
},
11793
{
118-
filename: FILENAME,
11994
code: `
12095
const obj = {
12196
content: "function f() { 1; }",
@@ -126,54 +101,46 @@ const obj = {
126101

127102
invalid: [
128103
{
129-
filename: FILENAME,
130104
code: `const a = {};`,
131105
errors: [
132106
{ messageId: "noDoubleSpaceError", line: 1, column: 6 },
133107
],
134108
},
135109
{
136-
filename: FILENAME,
137110
code: `function fn() {}`,
138111
errors: [
139112
{ messageId: "noDoubleSpaceError", line: 1, column: 9 },
140113
],
141114
},
142115
{
143-
filename: FILENAME,
144116
code: `class Cl {}`,
145117
errors: [{ messageId: "noDoubleSpaceError", line: 1, column: 6 }],
146118
},
147119
{
148-
filename: FILENAME,
149120
code: "const str = ` string template`;",
150121
errors: [
151122
{ messageId: "noDoubleSpaceError", line: 1, column: 12 },
152123
],
153124
},
154125
{
155-
filename: FILENAME,
156126
code: `/** comment */`,
157127
errors: [
158128
{ messageId: "noDoubleSpaceError", line: 1, column: 12 },
159129
],
160130
},
161131
{
162-
filename: FILENAME,
163132
code: `/** comment with many spaces */`,
164133
errors: [
165134
{ messageId: "noDoubleSpaceError", line: 1, column: 12 },
166135
],
167136
},
168137
{
169-
filename: FILENAME,
170138
code: `// comment with many spaces`,
171139
errors: [
172140
{ messageId: "noDoubleSpaceError", line: 1, column: 11 },
173141
],
174142
},
175143
{
176-
filename: FILENAME,
177144
code: `
178145
const a = 1;
179146
const b = 2;

scripts/eslint/tsconfig.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,5 @@
2323
"include": [
2424
"rules",
2525
"tests"
26-
],
27-
28-
"exclude": [
29-
"fixtures"
3026
]
3127
}

0 commit comments

Comments
 (0)