diff --git a/eslint.config.js b/eslint.config.js index 046a7a97cfb..0c100a1206a 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -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: { diff --git a/src/vs/editor/common/codecs/utils/stream.ts b/src/vs/editor/common/codecs/utils/stream.ts index 2398bbc18b0..e5fad7a1fa8 100644 --- a/src/vs/editor/common/codecs/utils/stream.ts +++ b/src/vs/editor/common/codecs/utils/stream.ts @@ -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 extends ObservableDisposable implements ReadableStream { /** - * TODO: @legomushroom + * Flag that indicates whether the stream has ended. */ private ended: boolean = false; @@ -40,24 +40,26 @@ export class Stream 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 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 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 extends ObservableDisposable implements Re } /** - * TODO: @legomushroom + * Create new instance of the stream from a provided array. */ public static fromArray( array: T[], @@ -213,7 +212,7 @@ export class Stream 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 extends ObservableDisposable implements Re } /** - * TODO: @legomushroom + * Create a generator out of a provided array. */ export const arrayToGenerator = >(array: T[]): Generator => { return (function* (): Generator { @@ -235,7 +234,7 @@ export const arrayToGenerator = >(array: T[]): Ge }; /** - * TODO: @legomushroom + * Create a generator out of a provided text model. */ export const modelToGenerator = (model: ITextModel): Generator => { return (function* (): Generator { diff --git a/src/vs/editor/test/common/codecs/utils/stream.test.ts b/src/vs/editor/test/common/codecs/utils/stream.test.ts index 758335f9637..cb6821b6684 100644 --- a/src/vs/editor/test/common/codecs/utils/stream.test.ts +++ b/src/vs/editor/test/common/codecs/utils/stream.test.ts @@ -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 = (stream: Stream): Promise => { return new Promise((resolve, reject) => { diff --git a/src/tsconfig.strict.json b/src/vs/platform/prompts/tsconfig.strict.json similarity index 92% rename from src/tsconfig.strict.json rename to src/vs/platform/prompts/tsconfig.strict.json index c4b8970aca0..27429134795 100644 --- a/src/tsconfig.strict.json +++ b/src/vs/platform/prompts/tsconfig.strict.json @@ -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, } } diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/textModelContentsProvider.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/textModelContentsProvider.ts index d2db780df08..7a6cb0d54d6 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/textModelContentsProvider.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/textModelContentsProvider.ts @@ -39,8 +39,6 @@ export class TextModelContentsProvider extends PromptContentsProviderBase, @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> { - // TODO: @legomushroom - do we need `IModelContentChangedEvent` here? return Stream.fromTextModel(this.model, cancellationToken); } diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts index 42db59f8f44..0be808c1337 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts @@ -982,8 +982,8 @@ class FirstParseResult extends DeferredPromise { 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;