1
1
import { createRule } from "../utils"
2
2
import { extractContextReferences } from "./reference-helpers/svelte-context"
3
+ import { extractSvelteLifeCycleReferences } from "./reference-helpers/svelte-lifecycle"
3
4
import type { TSESTree } from "@typescript-eslint/types"
4
5
5
6
export default createRule ( "valid-context-access" , {
@@ -23,8 +24,12 @@ export default createRule("valid-context-access", {
23
24
return { }
24
25
}
25
26
26
- // Extract <script> blocks that is not module=context.
27
27
const sourceCode = context . getSourceCode ( )
28
+ const lifeCycleReferences = Array . from (
29
+ extractSvelteLifeCycleReferences ( context ) ,
30
+ ) . map ( ( r ) => r . node )
31
+
32
+ // Extract <script> blocks that is not module=context.
28
33
const scriptNotModuleElements = sourceCode . ast . body . filter ( ( b ) => {
29
34
if ( b . type !== "SvelteScriptElement" ) return false
30
35
const isModule = b . startTag . attributes . some ( ( a ) => {
@@ -86,6 +91,8 @@ export default createRule("valid-context-access", {
86
91
return false
87
92
}
88
93
94
+ const awaitExpressions : TSESTree . AwaitExpression [ ] = [ ]
95
+
89
96
/** Let's lint! */
90
97
function doLint (
91
98
visitedCallExpressions : TSESTree . CallExpression [ ] ,
@@ -129,20 +136,23 @@ export default createRule("valid-context-access", {
129
136
} else if ( parent ?. type === "ExpressionStatement" ) {
130
137
if ( parent . expression . type !== "CallExpression" ) {
131
138
report ( contextCallExpression )
132
- } else if ( parent . expression . callee . type === "Identifier" ) {
139
+ } else if ( lifeCycleReferences . includes ( parent . expression ) ) {
133
140
report ( contextCallExpression )
134
141
}
135
142
}
136
143
}
137
144
}
138
145
139
146
return {
140
- Program ( ) {
147
+ " Program:exit" ( ) {
141
148
for ( const { node } of extractContextReferences ( context ) ) {
142
149
const visitedCallExpressions : TSESTree . CallExpression [ ] = [ ]
143
150
doLint ( visitedCallExpressions , node , node )
144
151
}
145
152
} ,
153
+ AwaitExpression ( node ) {
154
+ awaitExpressions . push ( node )
155
+ } ,
146
156
}
147
157
} ,
148
158
} )
0 commit comments