Skip to content

Commit b6b8144

Browse files
authored
replace no-never-initialized-let with upstreamed no-unassigned-vars (#59)
### Changelog Removed `@foxglove/no-never-initialized-let` rule from #55. This rule has been upstreamed to eslint core and is now available in eslint v9.27+ as [no-unassigned-vars](https://eslint.org/docs/latest/rules/no-unassigned-vars).
1 parent 02ada15 commit b6b8144

File tree

8 files changed

+323
-458
lines changed

8 files changed

+323
-458
lines changed

configs/base.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ module.exports = [
7575

7676
// require double equal for null and undefined, triple equal everywhere else
7777
"@foxglove/strict-equality": "error",
78-
"@foxglove/no-never-initialized-let": "error",
7978
"@foxglove/no-return-promise-resolve": "error",
8079
"@foxglove/prefer-hash-private": "error",
8180

@@ -87,6 +86,7 @@ module.exports = [
8786
"no-implied-eval": "error",
8887
"no-new-func": "error",
8988

89+
"no-unassigned-vars": "error",
9090
// unused vars must have `_` prefix
9191
"no-unused-vars": [
9292
"error",

configs/typescript.example.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ void (async () => {
3030

3131
void undefined; // eslint-disable-line @typescript-eslint/no-meaningless-void-operator
3232

33+
let x: string | undefined; // eslint-disable-line no-unassigned-vars
34+
console.log(x);
35+
3336
/* eslint-enable @typescript-eslint/no-unused-expressions */
3437
42; // eslint-disable-line @typescript-eslint/no-unused-expressions
3538
<></>; // eslint-disable-line @typescript-eslint/no-unused-expressions

package-lock.json

Lines changed: 315 additions & 308 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@
2929
"eslint-plugin-filenames": "^1",
3030
"eslint-plugin-import": "^2",
3131
"eslint-plugin-jest": "^28",
32+
"eslint-plugin-prettier": "^5",
3233
"eslint-plugin-react": "^7",
3334
"eslint-plugin-react-hooks": "^5",
34-
"eslint-plugin-prettier": "^5",
3535
"tsutils": "^3",
3636
"typescript-eslint": "^8"
3737
},
3838
"peerDependencies": {
39-
"eslint": "^9"
39+
"eslint": "^9.27.0"
4040
},
4141
"devDependencies": {
4242
"@foxglove/eslint-plugin": "file:.",
@@ -45,8 +45,8 @@
4545
"@swc/jest": "0.2.36",
4646
"@types/eslint__js": "8.42.3",
4747
"@types/jest": "29.5.14",
48-
"@typescript-eslint/rule-tester": "8.10.0",
49-
"eslint": "9.13.0",
48+
"@typescript-eslint/rule-tester": "8.32.1",
49+
"eslint": "9.27.0",
5050
"globals": "15.11.0",
5151
"jest": "29.7.0",
5252
"prettier": "3.3.3",

plugin.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
module.exports = {
33
rules: {
44
"no-boolean-parameters": require("./rules/no-boolean-parameters"),
5-
"no-never-initialized-let": require("./rules/no-never-initialized-let"),
65
"no-restricted-imports": require("./rules/no-restricted-imports"),
76
"no-return-promise-resolve": require("./rules/no-return-promise-resolve"),
87
"prefer-hash-private": require("./rules/prefer-hash-private"),

rules/README.md

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -40,38 +40,6 @@ This rule accepts a single object option with the following default configuratio
4040

4141
- `allowLoneParameter: true` will not report an error if a boolean parameter is the **only** parameter to a function.
4242

43-
### [`@foxglove/no-never-initialized-let`](./no-never-initialized-let.js)
44-
45-
Disallow variable declarations that use `let` but have no intitial value and are never assigned. These variables will always be `undefined` and are likely a programmer error.
46-
47-
The builtin [prefer-const](https://eslint.org/docs/latest/rules/prefer-const) rule doesn't flag these because they lack an initializer. Otherwise, they could be flagged by [init-declarations](https://eslint.org/docs/latest/rules/init-declarations), but this rule is mostly stylistic and has some implications for TypeScript type inference & refinement. (See [eslint/eslint#19581](https://github.com/eslint/eslint/issues/19581) & [microsoft/TypeScript#61496](https://github.com/microsoft/TypeScript/issues/61496) for more discussion.)
48-
49-
Examples of **incorrect** code for this rule:
50-
51-
```ts
52-
let prevX;
53-
let prevY;
54-
if (x !== prevX) {
55-
prevX = x;
56-
}
57-
if (y !== prevY) {
58-
prevX = x; // typo, should have been Y
59-
}
60-
```
61-
62-
Examples of **correct** code for this rule:
63-
64-
```ts
65-
let prevX;
66-
let prevY;
67-
if (x !== prevX) {
68-
prevX = x;
69-
}
70-
if (y !== prevY) {
71-
prevY = y;
72-
}
73-
```
74-
7543
### [`@foxglove/no-return-promise-resolve`](./no-return-promise-resolve.js) 🔧
7644

7745
Disallow returning `Promise.resolve(...)` or `Promise.reject(...)` inside an async function. This is redundant since an async function will always return a Promise — use `return` or `throw` directly instead.

rules/no-never-initialized-let.js

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

rules/no-never-initialized-let.test.ts

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

0 commit comments

Comments
 (0)