Skip to content

Commit f6167ad

Browse files
authored
Merge pull request #68 from azat-io/feat/ts-declarations
allow var in TypeScript ambient declarations
2 parents 87cfcde + b2b469c commit f6167ad

5 files changed

Lines changed: 2162 additions & 3342 deletions

File tree

.changeset/tidy-coats-peel.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"eslint-plugin-prefer-let": patch
3+
---
4+
5+
allow var in TypeScript ambient declarations

packages/eslint-plugin-prefer-let/lib/rules/prefer-let.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,27 @@ module.exports = {
5151
return isGlobalScope(node) || isModuleScope(node) || isProgramScope(node);
5252
}
5353

54+
function isInAmbientContext(node) {
55+
let current = node.parent;
56+
while (current) {
57+
if (current.type === 'TSModuleDeclaration' && current.declare === true) {
58+
return true;
59+
}
60+
current = current.parent;
61+
}
62+
return false;
63+
}
64+
5465
//----------------------------------------------------------------------
5566
// Public
5667
//----------------------------------------------------------------------
5768

5869
return {
5970
VariableDeclaration(node) {
6071
if (node.kind === 'var') {
72+
if (isInAmbientContext(node)) {
73+
return;
74+
}
6175
context.report({
6276
message: 'prefer `let` over `var` to declare value bindings',
6377
node

packages/eslint-plugin-prefer-let/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"requireindex": "~1.2.0"
2121
},
2222
"devDependencies": {
23+
"@typescript-eslint/parser": "^8.0.0",
2324
"eslint": "^9.3.0",
2425
"globals": "^15.3.0",
2526
"mocha": "^9.1.3"

packages/eslint-plugin-prefer-let/tests/lib/rules/prefer-let.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,24 @@ ruleTester.run("prefer-let", rule, {
4646
}
4747
},
4848
code: "const PI = 3.14;"
49+
},
50+
{
51+
code: "declare global { var foo: any; }",
52+
languageOptions: {
53+
parser: require("@typescript-eslint/parser")
54+
}
55+
},
56+
{
57+
code: "declare module 'foo' { var bar: any; }",
58+
languageOptions: {
59+
parser: require("@typescript-eslint/parser")
60+
}
61+
},
62+
{
63+
code: "declare namespace MyNamespace { var baz: any; }",
64+
languageOptions: {
65+
parser: require("@typescript-eslint/parser")
66+
}
4967
}
5068
],
5169

0 commit comments

Comments
 (0)