fix: lint and type errors

This commit is contained in:
mingholy.lmh
2025-09-17 19:14:37 +08:00
parent b4ba23fd80
commit caedd8338f
13 changed files with 107 additions and 102 deletions

View File

@@ -56,12 +56,12 @@ import { RadioButtonSelect } from './components/shared/RadioButtonSelect.js';
import { ModelSelectionDialog } from './components/ModelSelectionDialog.js'; import { ModelSelectionDialog } from './components/ModelSelectionDialog.js';
import { import {
ModelSwitchDialog, ModelSwitchDialog,
VisionSwitchOutcome, type VisionSwitchOutcome,
} from './components/ModelSwitchDialog.js'; } from './components/ModelSwitchDialog.js';
import { import {
AVAILABLE_MODELS_QWEN, AVAILABLE_MODELS_QWEN,
getOpenAIAvailableModelFromEnv, getOpenAIAvailableModelFromEnv,
AvailableModel, type AvailableModel,
} from './models/availableModels.js'; } from './models/availableModels.js';
import { processVisionSwitchOutcome } from './hooks/useVisionAutoSwitch.js'; import { processVisionSwitchOutcome } from './hooks/useVisionAutoSwitch.js';
import { import {

View File

@@ -5,17 +5,17 @@
*/ */
import { AuthType } from '@qwen-code/qwen-code-core'; import { AuthType } from '@qwen-code/qwen-code-core';
import { import type {
SlashCommand, SlashCommand,
CommandContext, CommandContext,
CommandKind,
OpenDialogActionReturn, OpenDialogActionReturn,
MessageActionReturn, MessageActionReturn,
} from './types.js'; } from './types.js';
import { CommandKind } from './types.js';
import { import {
AVAILABLE_MODELS_QWEN, AVAILABLE_MODELS_QWEN,
getOpenAIAvailableModelFromEnv, getOpenAIAvailableModelFromEnv,
AvailableModel, type AvailableModel,
} from '../models/availableModels.js'; } from '../models/availableModels.js';
function getAvailableModelsForAuthType(authType: AuthType): AvailableModel[] { function getAvailableModelsForAuthType(authType: AuthType): AvailableModel[] {

View File

@@ -8,8 +8,8 @@ import React from 'react';
import { render } from 'ink-testing-library'; import { render } from 'ink-testing-library';
import { describe, it, expect, vi, beforeEach } from 'vitest'; import { describe, it, expect, vi, beforeEach } from 'vitest';
import { ModelSelectionDialog } from './ModelSelectionDialog.js'; import { ModelSelectionDialog } from './ModelSelectionDialog.js';
import { AvailableModel } from '../models/availableModels.js'; import type { AvailableModel } from '../models/availableModels.js';
import { RadioSelectItem } from './shared/RadioButtonSelect.js'; import type { RadioSelectItem } from './shared/RadioButtonSelect.js';
// Mock the useKeypress hook // Mock the useKeypress hook
const mockUseKeypress = vi.hoisted(() => vi.fn()); const mockUseKeypress = vi.hoisted(() => vi.fn());

View File

@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
import React from 'react'; import type React from 'react';
import { Box, Text } from 'ink'; import { Box, Text } from 'ink';
import { Colors } from '../colors.js'; import { Colors } from '../colors.js';
import { import {
@@ -12,7 +12,7 @@ import {
type RadioSelectItem, type RadioSelectItem,
} from './shared/RadioButtonSelect.js'; } from './shared/RadioButtonSelect.js';
import { useKeypress } from '../hooks/useKeypress.js'; import { useKeypress } from '../hooks/useKeypress.js';
import { AvailableModel } from '../models/availableModels.js'; import type { AvailableModel } from '../models/availableModels.js';
export interface ModelSelectionDialogProps { export interface ModelSelectionDialogProps {
availableModels: AvailableModel[]; availableModels: AvailableModel[];

View File

@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
import React from 'react'; import type React from 'react';
import { Box, Text } from 'ink'; import { Box, Text } from 'ink';
import { Colors } from '../colors.js'; import { Colors } from '../colors.js';
import { import {

View File

@@ -39,7 +39,7 @@ import type { LoadedSettings } from '../../config/settings.js';
// --- MOCKS --- // --- MOCKS ---
const mockSendMessageStream = vi const mockSendMessageStream = vi
.fn() .fn()
.mockReturnValue((async function* () { })()); .mockReturnValue((async function* () {})());
const mockStartChat = vi.fn(); const mockStartChat = vi.fn();
const MockedGeminiClientClass = vi.hoisted(() => const MockedGeminiClientClass = vi.hoisted(() =>
@@ -52,7 +52,7 @@ const MockedGeminiClientClass = vi.hoisted(() =>
); );
const MockedUserPromptEvent = vi.hoisted(() => const MockedUserPromptEvent = vi.hoisted(() =>
vi.fn().mockImplementation(() => { }), vi.fn().mockImplementation(() => {}),
); );
const mockParseAndFormatApiError = vi.hoisted(() => vi.fn()); const mockParseAndFormatApiError = vi.hoisted(() => vi.fn());
@@ -237,7 +237,7 @@ describe('useGeminiStream', () => {
} as unknown as any); // GeminiChat -> any } as unknown as any); // GeminiChat -> any
mockSendMessageStream mockSendMessageStream
.mockClear() .mockClear()
.mockReturnValue((async function* () { })()); .mockReturnValue((async function* () {})());
handleAtCommandSpy = vi.spyOn(atCommandProcessor, 'handleAtCommand'); handleAtCommandSpy = vi.spyOn(atCommandProcessor, 'handleAtCommand');
}); });
@@ -295,12 +295,12 @@ describe('useGeminiStream', () => {
props.handleSlashCommand, props.handleSlashCommand,
props.shellModeActive, props.shellModeActive,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
); );
}, },
{ {
@@ -456,12 +456,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -535,12 +535,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -643,12 +643,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -752,12 +752,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -813,7 +813,7 @@ describe('useGeminiStream', () => {
if (options.isActive) { if (options.isActive) {
keypressCallback = callback; keypressCallback = callback;
} else { } else {
keypressCallback = () => { }; keypressCallback = () => {};
} }
}); });
}); });
@@ -828,7 +828,7 @@ describe('useGeminiStream', () => {
const mockStream = (async function* () { const mockStream = (async function* () {
yield { type: 'content', value: 'Part 1' }; yield { type: 'content', value: 'Part 1' };
// Keep the stream open // Keep the stream open
await new Promise(() => { }); await new Promise(() => {});
})(); })();
mockSendMessageStream.mockReturnValue(mockStream); mockSendMessageStream.mockReturnValue(mockStream);
@@ -867,7 +867,7 @@ describe('useGeminiStream', () => {
const mockStream = (async function* () { const mockStream = (async function* () {
yield { type: 'content', value: 'Part 1' }; yield { type: 'content', value: 'Part 1' };
// Keep the stream open // Keep the stream open
await new Promise(() => { }); await new Promise(() => {});
})(); })();
mockSendMessageStream.mockReturnValue(mockStream); mockSendMessageStream.mockReturnValue(mockStream);
@@ -881,11 +881,11 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
cancelSubmitSpy, cancelSubmitSpy,
), ),
); );
@@ -1192,12 +1192,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
mockPerformMemoryRefresh, mockPerformMemoryRefresh,
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -1245,12 +1245,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -1295,12 +1295,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -1343,12 +1343,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -1392,12 +1392,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -1481,12 +1481,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -1596,12 +1596,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -1674,12 +1674,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -1728,12 +1728,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -1937,12 +1937,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -1969,12 +1969,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -2022,12 +2022,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );
@@ -2059,12 +2059,12 @@ describe('useGeminiStream', () => {
mockHandleSlashCommand, mockHandleSlashCommand,
false, false,
() => 'vscode' as EditorType, () => 'vscode' as EditorType,
() => { }, () => {},
() => Promise.resolve(), () => Promise.resolve(),
false, false,
() => { }, () => {},
() => { }, () => {},
() => { }, () => {},
), ),
); );

View File

@@ -7,8 +7,8 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import { describe, it, expect, vi, beforeEach } from 'vitest'; import { describe, it, expect, vi, beforeEach } from 'vitest';
import { renderHook, act } from '@testing-library/react'; import { renderHook, act } from '@testing-library/react';
import { Part, PartListUnion } from '@google/genai'; import type { Part, PartListUnion } from '@google/genai';
import { AuthType, Config } from '@qwen-code/qwen-code-core'; import { AuthType, type Config } from '@qwen-code/qwen-code-core';
import { import {
shouldOfferVisionSwitch, shouldOfferVisionSwitch,
processVisionSwitchOutcome, processVisionSwitchOutcome,

View File

@@ -5,7 +5,7 @@
*/ */
import { type PartListUnion, type Part } from '@google/genai'; import { type PartListUnion, type Part } from '@google/genai';
import { AuthType, Config } from '@qwen-code/qwen-code-core'; import { AuthType, type Config } from '@qwen-code/qwen-code-core';
import { useCallback, useRef } from 'react'; import { useCallback, useRef } from 'react';
import { VisionSwitchOutcome } from '../components/ModelSwitchDialog.js'; import { VisionSwitchOutcome } from '../components/ModelSwitchDialog.js';
import { import {
@@ -13,7 +13,7 @@ import {
isVisionModel, isVisionModel,
} from '../models/availableModels.js'; } from '../models/availableModels.js';
import { MessageType } from '../types.js'; import { MessageType } from '../types.js';
import { UseHistoryManagerReturn } from './useHistoryManager.js'; import type { UseHistoryManagerReturn } from './useHistoryManager.js';
/** /**
* Checks if a PartListUnion contains image parts * Checks if a PartListUnion contains image parts

View File

@@ -9,10 +9,10 @@ import {
type GenerateContentParameters, type GenerateContentParameters,
GenerateContentResponse, GenerateContentResponse,
} from '@google/genai'; } from '@google/genai';
import { Config } from '../../config/config.js'; import type { Config } from '../../config/config.js';
import type { ContentGeneratorConfig } from '../contentGenerator.js'; import type { ContentGeneratorConfig } from '../contentGenerator.js';
import type { OpenAICompatibleProvider } from './provider/index.js'; import type { OpenAICompatibleProvider } from './provider/index.js';
import { OpenAIContentConverter } from './converter.js'; import type { OpenAIContentConverter } from './converter.js';
import type { TelemetryService, RequestContext } from './telemetryService.js'; import type { TelemetryService, RequestContext } from './telemetryService.js';
import type { ErrorHandler } from './errorHandler.js'; import type { ErrorHandler } from './errorHandler.js';

View File

@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
import { ImageMetadata } from './types.js'; import type { ImageMetadata } from './types.js';
/** /**
* Image tokenizer for calculating image tokens based on dimensions * Image tokenizer for calculating image tokens based on dimensions

View File

@@ -6,7 +6,7 @@
import { describe, it, expect, beforeEach, afterEach } from 'vitest'; import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { DefaultRequestTokenizer } from './requestTokenizer.js'; import { DefaultRequestTokenizer } from './requestTokenizer.js';
import { CountTokensParameters } from '@google/genai'; import type { CountTokensParameters } from '@google/genai';
describe('DefaultRequestTokenizer', () => { describe('DefaultRequestTokenizer', () => {
let tokenizer: DefaultRequestTokenizer; let tokenizer: DefaultRequestTokenizer;

View File

@@ -4,8 +4,13 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
import { CountTokensParameters, Content, Part, PartUnion } from '@google/genai'; import type {
import { CountTokensParameters,
Content,
Part,
PartUnion,
} from '@google/genai';
import type {
RequestTokenizer, RequestTokenizer,
TokenizerConfig, TokenizerConfig,
TokenCalculationResult, TokenCalculationResult,

View File

@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
import { CountTokensParameters } from '@google/genai'; import type { CountTokensParameters } from '@google/genai';
/** /**
* Token calculation result for different content types * Token calculation result for different content types