Skip to content

Commit b881fcd

Browse files
committed
Adds & enforces module boundary types
- For improved type performance
1 parent cbd6de9 commit b881fcd

File tree

410 files changed

+1794
-1553
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

410 files changed

+1794
-1553
lines changed

eslint.config.mjs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,10 @@ export default ts.config(
156156
},
157157
],
158158
'@typescript-eslint/consistent-type-imports': ['error', { disallowTypeAnnotations: false }],
159+
'@typescript-eslint/explicit-module-boundary-types': [
160+
'error',
161+
{ allowArgumentsExplicitlyTypedAsAny: true },
162+
],
159163
'@typescript-eslint/naming-convention': [
160164
'error',
161165
{
@@ -414,6 +418,7 @@ export default ts.config(
414418
},
415419
},
416420
rules: {
421+
'@typescript-eslint/explicit-module-boundary-types': 'off',
417422
'@typescript-eslint/no-restricted-imports': [
418423
'error',
419424
{

src/ai/aiProviderService.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,11 @@ export class AIProviderService implements Disposable {
9898

9999
constructor(private readonly container: Container) {}
100100

101-
dispose() {
101+
dispose(): void {
102102
this._provider?.dispose();
103103
}
104104

105-
get currentProviderId() {
105+
get currentProviderId(): AIProviders | undefined {
106106
return this._provider?.id;
107107
}
108108

@@ -486,7 +486,7 @@ export class AIProviderService implements Disposable {
486486
}
487487
}
488488

489-
async reset(all?: boolean) {
489+
async reset(all?: boolean): Promise<void> {
490490
let { _provider: provider } = this;
491491
if (provider == null) {
492492
// If we have no provider, try to get the current model (which will load the provider)
@@ -540,11 +540,11 @@ export class AIProviderService implements Disposable {
540540
}
541541
}
542542

543-
supports(provider: AIProviders | string) {
543+
supports(provider: AIProviders | string): boolean {
544544
return _supportedProviderTypes.has(provider as AIProviders);
545545
}
546546

547-
async switchModel() {
547+
async switchModel(): Promise<void> {
548548
void (await this.getModel({ force: true }));
549549
}
550550
}
@@ -702,7 +702,7 @@ function splitMessageIntoSummaryAndBody(message: string): AIResult {
702702
};
703703
}
704704

705-
export function showDiffTruncationWarning(maxCodeCharacters: number, model: AIModel) {
705+
export function showDiffTruncationWarning(maxCodeCharacters: number, model: AIModel): void {
706706
void window.showWarningMessage(
707707
`The diff of the changes had to be truncated to ${maxCodeCharacters} characters to fit within the ${getPossessiveForm(
708708
model.provider.name,

src/ai/geminiProvider.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { CancellationToken } from 'vscode';
2+
import type { Response } from '@env/fetch';
23
import type { AIModel } from './aiProviderService';
34
import { OpenAICompatibleProvider } from './openAICompatibleProvider';
45

@@ -71,7 +72,7 @@ export class GeminiProvider extends OpenAICompatibleProvider<typeof provider.id>
7172
apiKey: string,
7273
request: object,
7374
cancellation: CancellationToken | undefined,
74-
) {
75+
): Promise<Response> {
7576
if ('max_completion_tokens' in request) {
7677
const { max_completion_tokens: _, ...rest } = request;
7778
request = rest;

src/ai/openAICompatibleProvider.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { CancellationToken } from 'vscode';
2+
import type { Response } from '@env/fetch';
23
import { fetch } from '@env/fetch';
34
import type { AIProviders } from '../constants.ai';
45
import type { TelemetryEvents } from '../constants.telemetry';
@@ -30,7 +31,7 @@ export interface AIProviderConfig {
3031
export abstract class OpenAICompatibleProvider<T extends AIProviders> implements AIProvider<T> {
3132
constructor(protected readonly container: Container) {}
3233

33-
dispose() {}
34+
dispose(): void {}
3435

3536
abstract readonly id: T;
3637
abstract readonly name: string;
@@ -261,7 +262,7 @@ export abstract class OpenAICompatibleProvider<T extends AIProviders> implements
261262
apiKey: string,
262263
request: object,
263264
cancellation: CancellationToken | undefined,
264-
) {
265+
): Promise<Response> {
265266
let aborter: AbortController | undefined;
266267
if (cancellation != null) {
267268
aborter = new AbortController();

src/ai/vscodeProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ export class VSCodeAIProvider implements AIProvider<typeof provider.id> {
2828
readonly id = provider.id;
2929

3030
private _name: string | undefined;
31-
get name() {
31+
get name(): string {
3232
return this._name ?? provider.name;
3333
}
3434

3535
constructor(private readonly container: Container) {}
3636

37-
dispose() {}
37+
dispose(): void {}
3838

3939
async getModels(): Promise<readonly AIModel<typeof provider.id>[]> {
4040
const models = await lm.selectChatModels();

src/annotations/annotationProvider.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export abstract class AnnotationProviderBase<TContext extends AnnotationContext
5252
);
5353
}
5454

55-
dispose() {
55+
dispose(): void {
5656
void this.clear();
5757

5858
this.disposable.dispose();
@@ -102,7 +102,7 @@ export abstract class AnnotationProviderBase<TContext extends AnnotationContext
102102
return true;
103103
}
104104

105-
async clear() {
105+
async clear(): Promise<void> {
106106
if (this._computing?.pending) {
107107
await this._computing.promise;
108108
}
@@ -156,7 +156,7 @@ export abstract class AnnotationProviderBase<TContext extends AnnotationContext
156156

157157
protected abstract onProvideAnnotation(context?: TContext, state?: AnnotationState): Promise<boolean>;
158158

159-
refresh(replaceDecorationTypes: Map<TextEditorDecorationType, TextEditorDecorationType | null>) {
159+
refresh(replaceDecorationTypes: Map<TextEditorDecorationType, TextEditorDecorationType | null>): void {
160160
if (this.editor == null || !this.decorations?.length) return;
161161

162162
const decorations = [];
@@ -175,7 +175,7 @@ export abstract class AnnotationProviderBase<TContext extends AnnotationContext
175175
this.setDecorations(this.decorations);
176176
}
177177

178-
restore(editor: TextEditor, recompute?: boolean) {
178+
restore(editor: TextEditor, recompute?: boolean): void {
179179
// If the editor isn't disposed then we don't need to do anything
180180
// Explicitly check for `false`
181181
if ((this.editor as any)._disposed === false) return;
@@ -201,7 +201,7 @@ export abstract class AnnotationProviderBase<TContext extends AnnotationContext
201201
selection?(selection?: TContext['selection']): Promise<void>;
202202
validate?(): boolean | Promise<boolean>;
203203

204-
protected setDecorations(decorations: Decoration[]) {
204+
protected setDecorations(decorations: Decoration[]): void {
205205
if (this.decorations?.length) {
206206
// If we have no new decorations, just completely clear the old ones
207207
if (!decorations?.length) {

src/annotations/annotations.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,12 @@ const defaultHeatmapColors = [
6464
'#0a60f6',
6565
];
6666

67-
let heatmapColors: { hot: string[]; cold: string[] } | undefined;
68-
export function getHeatmapColors() {
67+
interface HeatmapColors {
68+
hot: string[];
69+
cold: string[];
70+
}
71+
let heatmapColors: HeatmapColors | undefined;
72+
export function getHeatmapColors(): HeatmapColors {
6973
if (heatmapColors == null) {
7074
const { coldColor, hotColor } = configuration.get('heatmap');
7175

@@ -91,7 +95,7 @@ export function getHeatmapColors() {
9195
return heatmapColors;
9296
}
9397

94-
export function applyHeatmap(decoration: Partial<DecorationOptions>, date: Date, heatmap: ComputedHeatmap) {
98+
export function applyHeatmap(decoration: Partial<DecorationOptions>, date: Date, heatmap: ComputedHeatmap): void {
9599
const [r, g, b, a] = getHeatmapColor(date, heatmap);
96100
decoration.renderOptions!.before!.borderColor = `rgba(${r},${g},${b},${a})`;
97101
}
@@ -101,7 +105,7 @@ export function addOrUpdateGutterHeatmapDecoration(
101105
heatmap: ComputedHeatmap,
102106
range: Range,
103107
map: Map<string, Decoration<Range[]>>,
104-
) {
108+
): TextEditorDecorationType {
105109
const [r, g, b, a] = getHeatmapColor(date, heatmap);
106110

107111
const { fadeLines, locations } = configuration.get('heatmap');

src/annotations/blameAnnotationProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export abstract class BlameAnnotationProviderBase extends AnnotationProviderBase
3636
}
3737
}
3838

39-
override clear() {
39+
override clear(): Promise<void> {
4040
if (this.hoverProviderDisposable != null) {
4141
this.hoverProviderDisposable.dispose();
4242
this.hoverProviderDisposable = undefined;
@@ -140,7 +140,7 @@ export abstract class BlameAnnotationProviderBase extends AnnotationProviderBase
140140
};
141141
}
142142

143-
registerHoverProviders(providers: { details: boolean; changes: boolean }) {
143+
registerHoverProviders(providers: { details: boolean; changes: boolean }): void {
144144
const cfg = configuration.get('hovers');
145145
if (!cfg.enabled || !cfg.annotations.enabled || (!providers.details && !providers.changes)) {
146146
return;

src/annotations/fileAnnotationController.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export class FileAnnotationController implements Disposable {
8181
this._toggleModes = new Map<FileAnnotationType, AnnotationsToggleMode>();
8282
}
8383

84-
dispose() {
84+
dispose(): void {
8585
void this.clearAll();
8686

8787
Decorations.gutterBlameAnnotation?.dispose();
@@ -280,15 +280,15 @@ export class FileAnnotationController implements Disposable {
280280
}
281281

282282
@log<FileAnnotationController['clear']>({ args: { 0: e => e?.document.uri.toString(true) } })
283-
clear(editor: TextEditor | undefined) {
283+
clear(editor: TextEditor | undefined): Promise<void> | undefined {
284284
if (this.isInWindowToggle()) return this.clearAll();
285285
if (editor == null) return;
286286

287287
return this.clearCore(getEditorCorrelationKey(editor), true);
288288
}
289289

290290
@log()
291-
async clearAll() {
291+
async clearAll(): Promise<void> {
292292
this._windowAnnotationType = undefined;
293293

294294
for (const [key] of this._annotationProviders) {
@@ -335,7 +335,10 @@ export class FileAnnotationController implements Disposable {
335335
private readonly _annotatedUris = new UriSet();
336336
private readonly _computingUris = new UriSet();
337337

338-
async onProviderEditorStatusChanged(editor: TextEditor | undefined, status: AnnotationStatus | undefined) {
338+
async onProviderEditorStatusChanged(
339+
editor: TextEditor | undefined,
340+
status: AnnotationStatus | undefined,
341+
): Promise<void> {
339342
if (editor == null) return;
340343

341344
let changed = false;
@@ -530,13 +533,13 @@ export class FileAnnotationController implements Disposable {
530533
}
531534

532535
@log()
533-
nextChange() {
536+
nextChange(): void {
534537
const provider = this.getProvider(window.activeTextEditor);
535538
provider?.nextChange?.();
536539
}
537540

538541
@log()
539-
previousChange() {
542+
previousChange(): void {
540543
const provider = this.getProvider(window.activeTextEditor);
541544
provider?.previousChange?.();
542545
}

src/annotations/gutterBlameAnnotationProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export class GutterBlameAnnotationProvider extends BlameAnnotationProviderBase {
3939
super(container, onDidChangeStatus, 'blame', editor, trackedDocument);
4040
}
4141

42-
override async clear() {
42+
override async clear(): Promise<void> {
4343
await super.clear();
4444

4545
if (Decorations.gutterBlameHighlight != null) {

0 commit comments

Comments
 (0)