mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-11 02:08:52 -06:00
87 lines
2.3 KiB
TypeScript
87 lines
2.3 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
// Test file to verify the code-no-reader-after-await ESLint rule works correctly
|
|
|
|
import { observableValue, derived, autorun } from '../../src/vs/base/common/observable.js';
|
|
|
|
export function testValidUsage() {
|
|
const obs = observableValue('test', 0);
|
|
|
|
const validDerived = derived(reader => {
|
|
const value = obs.read(reader);
|
|
return value * 2;
|
|
});
|
|
|
|
autorun(reader => {
|
|
const value = validDerived.read(reader);
|
|
console.log('Value:', value);
|
|
});
|
|
}
|
|
|
|
export function testInvalidUsage() {
|
|
const obs = observableValue('test', 0);
|
|
|
|
const invalidDerived = derived(async reader => {
|
|
await Promise.resolve();
|
|
// eslint-disable-next-line local/code-no-reader-after-await
|
|
const value = obs.read(reader);
|
|
return value * 2;
|
|
});
|
|
|
|
autorun(async reader => {
|
|
await Promise.resolve();
|
|
// eslint-disable-next-line local/code-no-reader-after-await
|
|
const value = invalidDerived.read(reader);
|
|
console.log('Value:', value);
|
|
});
|
|
|
|
autorun(async reader => {
|
|
await Promise.resolve();
|
|
// eslint-disable-next-line local/code-no-reader-after-await
|
|
const value = reader.readObservable(obs);
|
|
console.log('Value:', value);
|
|
});
|
|
}
|
|
|
|
export function testComplexCases() {
|
|
const obs = observableValue('test', 0);
|
|
|
|
derived(async reader => {
|
|
const initial = obs.read(reader);
|
|
|
|
if (initial > 0) {
|
|
await Promise.resolve();
|
|
}
|
|
|
|
// eslint-disable-next-line local/code-no-reader-after-await
|
|
const final = obs.read(reader);
|
|
return final;
|
|
});
|
|
|
|
autorun(async reader => {
|
|
try {
|
|
await Promise.resolve();
|
|
} catch (e) {
|
|
} finally {
|
|
// eslint-disable-next-line local/code-no-reader-after-await
|
|
const value = obs.read(reader);
|
|
console.log(value);
|
|
}
|
|
});
|
|
}
|
|
|
|
export function testValidComplexCases() {
|
|
const obs = observableValue('test', 0);
|
|
|
|
derived(async reader => {
|
|
const value1 = obs.read(reader);
|
|
const value2 = reader.readObservable(obs);
|
|
const result = value1 + value2;
|
|
await Promise.resolve(result);
|
|
return result;
|
|
});
|
|
}
|