Skip to content

Commit

Permalink
fix(eslint-plugin): support BigInt in restrict-plus-operands rule (#309
Browse files Browse the repository at this point in the history
…) (#310)
  • Loading branch information
webschik authored and JamesHenry committed Feb 23, 2019
1 parent 0635183 commit 9a88363
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 1 deletion.
2 changes: 2 additions & 0 deletions packages/eslint-plugin/docs/rules/restrict-plus-operands.md
Expand Up @@ -4,12 +4,14 @@ Examples of **correct** code:

```ts
var foo = parseInt('5.5', 10) + 10;
var foo = 1n + 1n;
```

Examples of **incorrect** code:

```ts
var foo = '5.5' + 5;
var foo = 1n + 1;
```

## Options
Expand Down
12 changes: 11 additions & 1 deletion packages/eslint-plugin/src/rules/restrict-plus-operands.ts
Expand Up @@ -18,6 +18,7 @@ export default util.createRule({
"Operands of '+' operation must either be both strings or both numbers.",
notStrings:
"Operands of '+' operation must either be both strings or both numbers. Consider using a template literal.",
notBigInts: "Operands of '+' operation must be both bigints.",
},
schema: [],
},
Expand All @@ -27,7 +28,7 @@ export default util.createRule({

const typeChecker = service.program.getTypeChecker();

type BaseLiteral = 'string' | 'number' | 'invalid';
type BaseLiteral = 'string' | 'number' | 'bigint' | 'invalid';

/**
* Helper function to get base type of node
Expand All @@ -41,6 +42,10 @@ export default util.createRule({
if (type.isStringLiteral()) {
return 'string';
}
// is BigIntLiteral
if (type.flags & ts.TypeFlags.BigIntLiteral) {
return 'bigint';
}
if (type.isUnion()) {
const types = type.types.map(getBaseTypeOfLiteralType);

Expand Down Expand Up @@ -81,6 +86,11 @@ export default util.createRule({
node,
messageId: 'notStrings',
});
} else if (leftType === 'bigint' || rightType === 'bigint') {
context.report({
node,
messageId: 'notBigInts',
});
} else {
context.report({
node,
Expand Down
21 changes: 21 additions & 0 deletions packages/eslint-plugin/tests/rules/restrict-plus-operands.test.ts
Expand Up @@ -22,6 +22,7 @@ ruleTester.run('restrict-plus-operands', rule, {
`var foo = "5.5" + "10";`,
`var foo = parseInt("5.5", 10) + 10;`,
`var foo = parseFloat("5.5", 10) + 10;`,
`var foo = 1n + 1n;`,
`
function test () : number { return 2; }
var foo = test("5.5", 10) + 10;
Expand Down Expand Up @@ -262,5 +263,25 @@ var foo = pair + pair;
},
],
},
{
code: `var foo = 1n + 1`,
errors: [
{
messageId: 'notBigInts',
line: 1,
column: 11,
},
],
},
{
code: `var foo = 1 + 1n`,
errors: [
{
messageId: 'notBigInts',
line: 1,
column: 11,
},
],
},
],
});

0 comments on commit 9a88363

Please sign in to comment.