move strict tsconfig closer to the prompt files source code and add missing documentation comments

This commit is contained in:
Oleg Solomko
2025-05-06 10:45:57 -07:00
parent 7212555ae4
commit 2f392d619e
6 changed files with 34 additions and 41 deletions

View File

@@ -1445,10 +1445,7 @@ export default tseslint.config(
languageOptions: {
parser: tseslint.parser,
parserOptions: {
project: [
// TODO: @lego - check if needed
'src/tsconfig.strict.json',
],
project: 'src/vs/platform/prompts/tsconfig.strict.json',
}
},
plugins: {

View File

@@ -5,8 +5,8 @@
import { ITextModel } from '../../model.js';
import { VSBuffer } from '../../../../base/common/buffer.js';
import { assert, assertNever } from '../../../../base/common/assert.js';
import { CancellationToken } from '../../../../base/common/cancellation.js';
import { assertNever } from '../../../../base/common/assert.js';
import { ObservableDisposable } from '../../../../base/common/observableDisposable.js';
import { newWriteableStream, WriteableStream, ReadableStream } from '../../../../base/common/stream.js';
@@ -15,7 +15,7 @@ import { newWriteableStream, WriteableStream, ReadableStream } from '../../../..
*/
export class Stream<T extends object> extends ObservableDisposable implements ReadableStream<T> {
/**
* TODO: @legomushroom
* Flag that indicates whether the stream has ended.
*/
private ended: boolean = false;
@@ -40,24 +40,26 @@ export class Stream<T extends object> extends ObservableDisposable implements Re
if (cancellationToken?.isCancellationRequested) {
this.end();
return;
}
// send couple of tokens immediately
this.send(false);
// send a first batch of tokens immediately
this.send(true);
}
/**
* TODO: @legomushroom
* Starts process of sending tokens to the stream.
*
* @param stopAfterFirstSend whether to continue sending data to the stream or
* stop sending after the first batch of data is sent
*/
public send(
play: boolean = true,
stopAfterFirstSend: boolean = false,
): void {
// TODO: @legomushroom - throw instead?
if (this.ended) {
return;
}
assert(
this.ended === false,
'Cannot send on already ended stream.',
);
this.sendTokens()
.then(() => {
@@ -73,17 +75,16 @@ export class Stream<T extends object> extends ObservableDisposable implements Re
return;
}
if (play === false) {
if (stopAfterFirstSend === true) {
this.stopStream();
return;
}
this.interval = setImmediate(this.send.bind(this));
})
.catch(() => {
this.stream.destroy();
this.stream.end();
this.stopStream();
.catch((error) => {
this.stream.error(error);
this.dispose();
});
}
@@ -119,18 +120,16 @@ export class Stream<T extends object> extends ObservableDisposable implements Re
await this.stream.write(token.value);
tokensCount--;
} catch {
this.stopStream();
this.stream.destroy();
// TODO: @legomushroom - needed?
this.stream.end();
} catch (error) {
this.stream.error(error);
this.dispose();
return;
}
}
}
/**
* TODO: @legomushroom
* Ends the stream and stops sending tokens.
*/
private end(): this {
this.ended = true;
@@ -203,7 +202,7 @@ export class Stream<T extends object> extends ObservableDisposable implements Re
}
/**
* TODO: @legomushroom
* Create new instance of the stream from a provided array.
*/
public static fromArray<T extends object>(
array: T[],
@@ -213,7 +212,7 @@ export class Stream<T extends object> extends ObservableDisposable implements Re
}
/**
* TODO: @legomushroom
* Create new instance of the stream from a provided text model.
*/
public static fromTextModel(
model: ITextModel,
@@ -224,7 +223,7 @@ export class Stream<T extends object> extends ObservableDisposable implements Re
}
/**
* TODO: @legomushroom
* Create a generator out of a provided array.
*/
export const arrayToGenerator = <T extends NonNullable<unknown>>(array: T[]): Generator<T, undefined> => {
return (function* (): Generator<T, undefined> {
@@ -235,7 +234,7 @@ export const arrayToGenerator = <T extends NonNullable<unknown>>(array: T[]): Ge
};
/**
* TODO: @legomushroom
* Create a generator out of a provided text model.
*/
export const modelToGenerator = (model: ITextModel): Generator<VSBuffer, undefined> => {
return (function* (): Generator<VSBuffer, undefined> {

View File

@@ -7,13 +7,13 @@ import * as assert from 'assert';
import { URI } from '../../../../../base/common/uri.js';
import { createTextModel } from '../../testTextModel.js';
import { randomTokens } from '../testUtils/randomTokens.js';
import { randomInt } from '../../../../../base/common/numbers.js';
import { Stream } from '../../../../common/codecs/utils/stream.js';
import { BaseToken } from '../../../../common/codecs/baseToken.js';
import { assertDefined } from '../../../../../base/common/types.js';
import { randomBoolean } from '../../../../../base/test/common/testUtils.js';
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';
import { CancellationTokenSource } from '../../../../../base/common/cancellation.js';
import { randomInt } from '../../../../../base/common/numbers.js';
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';
suite('Stream', () => {
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
@@ -122,7 +122,7 @@ suite('Stream', () => {
});
/**
* TODO: @legomushroom
* Asserts that two tokens lists are equal.
*/
const assertTokensEqual = (
receivedTokens: BaseToken[],
@@ -144,7 +144,7 @@ const assertTokensEqual = (
};
/**
* TODO: @legomushroom
* Consume a provided stream and return a list of received data objects.
*/
const consume = <T extends object>(stream: Stream<T>): Promise<T[]> => {
return new Promise((resolve, reject) => {

View File

@@ -1,6 +1,7 @@
{
"extends": "./tsconfig.json",
"extends": "../../../tsconfig.json",
"compilerOptions": {
"strict": true,
"allowUnusedLabels": false,
"allowUnreachableCode": false,
"alwaysStrict": true,
@@ -14,6 +15,5 @@
"noUncheckedIndexedAccess": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"strict": true,
}
}

View File

@@ -39,8 +39,6 @@ export class TextModelContentsProvider extends PromptContentsProviderBase<IModel
private readonly model: ITextModel,
options: Partial<IPromptContentsProviderOptions>,
@IInstantiationService private readonly initService: IInstantiationService,
// TODO: @legomushroom - use the log service?
// @ILogService private readonly logService: ILogService,
) {
super(options);
@@ -63,7 +61,6 @@ export class TextModelContentsProvider extends PromptContentsProviderBase<IModel
_event: IModelContentChangedEvent | 'full',
cancellationToken?: CancellationToken,
): Promise<ReadableStream<VSBuffer>> {
// TODO: @legomushroom - do we need `IModelContentChangedEvent` here?
return Stream.fromTextModel(this.model, cancellationToken);
}

View File

@@ -982,8 +982,8 @@ class FirstParseResult extends DeferredPromise<void> {
this._gotResult = true;
super.complete(void 0)
.catch(() => {
// noop
// TODO: @legomushroom
// the complete method is never fails
// so we can ignore the error here
});
return;