Skip to content

Commit 8c5f51e

Browse files
authored
fix(no-top-level-browser-globals): false positive when browser globals appear inside TypeScript generic type parameters (#1477)
1 parent c463262 commit 8c5f51e

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"eslint-plugin-svelte": patch
3+
---
4+
5+
fix(no-top-level-browser-globals): false positive when browser globals appear inside TypeScript generic type parameters (e.g. `$state<HTMLElement>(...)`).

packages/eslint-plugin-svelte/src/rules/no-top-level-browser-globals.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,19 @@ export default createRule('no-top-level-browser-globals', {
3838
const maybeGuards: MaybeGuard[] = [];
3939

4040
const functions: (TSESTree.FunctionLike | AST.SvelteSnippetBlock)[] = [];
41-
const typeAnnotations: (TSESTree.TypeNode | TSESTree.TSTypeAnnotation)[] = [];
41+
const typeAnnotations: (
42+
| TSESTree.TypeNode
43+
| TSESTree.TSTypeAnnotation
44+
| TSESTree.TSTypeParameterInstantiation
45+
)[] = [];
4246

4347
function enterFunction(node: TSESTree.FunctionLike | AST.SvelteSnippetBlock) {
4448
if (isTopLevelLocation(node)) {
4549
functions.push(node);
4650
}
4751
}
4852

49-
function enterTypeAnnotation(node: TSESTree.TypeNode | TSESTree.TSTypeAnnotation) {
53+
function enterTypeAnnotation(node: TSESTree.TypeNode | TSESTree.TSTypeParameterInstantiation) {
5054
if (!isInTypeAnnotation(node)) {
5155
typeAnnotations.push(node);
5256
}
@@ -123,6 +127,7 @@ export default createRule('no-top-level-browser-globals', {
123127
':function': enterFunction,
124128
SvelteSnippetBlock: enterFunction,
125129
'*.typeAnnotation': enterTypeAnnotation,
130+
'*.typeArguments': enterTypeAnnotation,
126131
MetaProperty: enterMetaProperty,
127132
'Program:exit': verifyGlobalReferences
128133
};
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<script lang="ts">
2+
const element: HTMLElement | null = null; // fine.
3+
const stateElement = $state<HTMLElement | null>(null);
4+
</script>

0 commit comments

Comments
 (0)