这是indexloc提供的服务,不要输入任何密码
Skip to content

Commit fde753e

Browse files
committed
fix(linter/plugins): block access to context.settings in createOnce (#15394)
Follow-on after #14724. Prevent accessing `context.settings` in `createOnce`. Settings are per-file, so they shouldn't be available in `createOnce`.
1 parent ed8598d commit fde753e

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

apps/oxlint/src-js/plugins/context.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ let cwd: string | null = null;
5656
export let setupContextForFile: (context: Context, ruleIndex: number, filePath: string) => void;
5757

5858
// Settings for current file. Set before linting a file by `setSettingsForFile`.
59-
let settings: Record<string, unknown> = {};
59+
let settings: Record<string, unknown> = null;
6060

6161
/**
6262
* Updates the settings record for the file.
@@ -164,6 +164,7 @@ export class Context {
164164
}
165165

166166
get settings() {
167+
getInternal(this, 'access `context.settings`');
167168
return settings;
168169
}
169170

apps/oxlint/test/fixtures/createOnce/output.snap.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@
7575
: ^
7676
`----
7777
78+
x create-once-plugin(always-run): createOnce: settings: Cannot access `context.settings` in `createOnce`
79+
,-[files/1.js:1:1]
80+
1 | let x;
81+
: ^
82+
`----
83+
7884
x create-once-plugin(always-run): createOnce: sourceCode: Cannot access `context.sourceCode` in `createOnce`
7985
,-[files/1.js:1:1]
8086
1 | let x;
@@ -207,6 +213,12 @@
207213
: ^
208214
`----
209215
216+
x create-once-plugin(always-run): createOnce: settings: Cannot access `context.settings` in `createOnce`
217+
,-[files/2.js:1:1]
218+
1 | let y;
219+
: ^
220+
`----
221+
210222
x create-once-plugin(always-run): createOnce: sourceCode: Cannot access `context.sourceCode` in `createOnce`
211223
,-[files/2.js:1:1]
212224
1 | let y;
@@ -267,7 +279,7 @@
267279
: ^
268280
`----
269281
270-
Found 0 warnings and 44 errors.
282+
Found 0 warnings and 46 errors.
271283
Finished in Xms on 2 files using X threads.
272284
```
273285

apps/oxlint/test/fixtures/createOnce/plugin.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const alwaysRunRule: Rule = {
3434
const physicalFilenameError = tryCatch(() => context.physicalFilename);
3535
const optionsError = tryCatch(() => context.options);
3636
const sourceCodeError = tryCatch(() => context.sourceCode);
37+
const settingsError = tryCatch(() => context.settings);
3738
const reportError = tryCatch(() => context.report({ message: 'oh no', node: SPAN }));
3839

3940
return {
@@ -45,6 +46,7 @@ const alwaysRunRule: Rule = {
4546
context.report({ message: `createOnce: physicalFilename: ${physicalFilenameError?.message}`, node: SPAN });
4647
context.report({ message: `createOnce: options: ${optionsError?.message}`, node: SPAN });
4748
context.report({ message: `createOnce: sourceCode: ${sourceCodeError?.message}`, node: SPAN });
49+
context.report({ message: `createOnce: settings: ${settingsError?.message}`, node: SPAN });
4850
context.report({ message: `createOnce: report: ${reportError?.message}`, node: SPAN });
4951

5052
context.report({ message: `before hook: id: ${context.id}`, node: SPAN });

0 commit comments

Comments
 (0)