From bc60b426b5ff3135911a13ab8a8f3a6c520134cd Mon Sep 17 00:00:00 2001 From: NamesMT Date: Wed, 30 Apr 2025 16:54:27 +0000 Subject: [PATCH] fix: resolve lint problems --- src/core/webview/marketplaceMessageHandler.ts | 9 +-- src/services/marketplace/GitFetcher.ts | 3 +- .../marketplace/MarketplaceManager.ts | 76 ++++++++++--------- .../marketplace/__tests__/GitFetcher.test.ts | 37 ++++----- .../__tests__/MarketplaceManager.test.ts | 12 +-- .../MarketplaceSourceValidation.test.ts | 1 - .../MetadataScanner.external.test.ts | 1 - .../__tests__/MetadataScanner.test.ts | 1 - src/services/marketplace/schemas.ts | 1 - src/shared/MarketplaceValidation.ts | 2 - .../marketplace/MarketplaceView.tsx | 2 +- 11 files changed, 66 insertions(+), 79 deletions(-) diff --git a/src/core/webview/marketplaceMessageHandler.ts b/src/core/webview/marketplaceMessageHandler.ts index 17ec326058..724c29ced3 100644 --- a/src/core/webview/marketplaceMessageHandler.ts +++ b/src/core/webview/marketplaceMessageHandler.ts @@ -1,11 +1,9 @@ import * as vscode from "vscode" import { ClineProvider } from "./ClineProvider" import { WebviewMessage } from "../../shared/WebviewMessage" -import { ExtensionMessage } from "../../shared/ExtensionMessage" import { MarketplaceManager, ComponentType, - MarketplaceItem, MarketplaceSource, validateSources, ValidationError, @@ -42,7 +40,7 @@ export async function handleMarketplaceMessages( } // Check if we need to force refresh using type assertion - const forceRefresh = (message as any).forceRefresh === true + // const forceRefresh = (message as any).forceRefresh === true try { marketplaceManager.isFetching = true @@ -59,9 +57,6 @@ export async function handleMarketplaceMessages( await provider.contextProxy.setValue("marketplaceSources", sources) } - // Add timing information - const startTime = Date.now() - // Fetch items from all enabled sources const enabledSources = sources.filter((s) => s.enabled) @@ -92,8 +87,6 @@ export async function handleMarketplaceMessages( marketplaceManager.isFetching = false } - const endTime = Date.now() - // The items are already stored in PackageManagerManager's currentItems // No need to store in global state diff --git a/src/services/marketplace/GitFetcher.ts b/src/services/marketplace/GitFetcher.ts index 22ba85977f..023bc2443f 100644 --- a/src/services/marketplace/GitFetcher.ts +++ b/src/services/marketplace/GitFetcher.ts @@ -234,7 +234,8 @@ export class GitFetcher { } // Get current branch using existing git instance - const branch = (await this.git?.revparse(["--abbrev-ref", "HEAD"])) || "main" + // const branch = + ;(await this.git?.revparse(["--abbrev-ref", "HEAD"])) || "main" } catch (error) { throw new Error( `Failed to clone/pull repository: ${error instanceof Error ? error.message : String(error)}`, diff --git a/src/services/marketplace/MarketplaceManager.ts b/src/services/marketplace/MarketplaceManager.ts index 858a4cc2d9..fca67ee516 100644 --- a/src/services/marketplace/MarketplaceManager.ts +++ b/src/services/marketplace/MarketplaceManager.ts @@ -11,13 +11,12 @@ import { LocalizationOptions, InstallMarketplaceItemOptions, } from "./types" -import { validateSource, validateSources } from "../../shared/MarketplaceValidation" import { getUserLocale } from "./utils" import { GlobalFileNames } from "src/shared/globalFileNames" import { TerminalRegistry } from "src/integrations/terminal/TerminalRegistry" import { assertsMpContext, createHookable, MarketplaceContext, registerMarketplaceHooks } from "roo-rocket" import { unpackFromUint8 } from "config-rocket/cli" -import { uint8IsConfigPackWithParameters } from 'config-rocket/cli' +import { uint8IsConfigPackWithParameters } from "config-rocket/cli" /** * Service for managing marketplace data @@ -572,32 +571,32 @@ export class MarketplaceManager { } async installMarketplaceItem(item: MarketplaceItem, options?: InstallMarketplaceItemOptions) { - const { - target = 'project' - } = options || {} + const { target = "project" } = options || {} vscode.window.showInformationMessage(`Installing item: "${item.name}"`) - if (target === 'project' && !vscode.workspace.workspaceFolders?.length) + if (target === "project" && !vscode.workspace.workspaceFolders?.length) return vscode.window.showErrorMessage("Cannot load current workspace folder") - const cwd = target === 'project' - ? vscode.workspace.workspaceFolders![0].uri.fsPath - : await this.ensureSettingsDirectoryExists() + const cwd = + target === "project" + ? vscode.workspace.workspaceFolders![0].uri.fsPath + : await this.ensureSettingsDirectoryExists() if (!item.binaryUrl || !item.binaryHash) return vscode.window.showErrorMessage("Item does not have a binary URL or hash") // Creates `mpContext` to delegate context to `roo-rocket` - const mpContext = (target === 'project' - ? { target } - : { - target, - globalFileNames: { - mcp: GlobalFileNames.mcpSettings, - mode: GlobalFileNames.customModes, - } - } + const mpContext = ( + target === "project" + ? { target } + : { + target, + globalFileNames: { + mcp: GlobalFileNames.mcpSettings, + mode: GlobalFileNames.customModes, + }, + } ) satisfies MarketplaceContext assertsMpContext(mpContext) @@ -611,29 +610,34 @@ export class MarketplaceManager { let pResult: string[] = [] let pExitCode: number | undefined // We don't want to create a new terminal at the global dir, so I'm not using cwd here - const terminalClass = await TerminalRegistry.getOrCreateTerminal(vscode.workspace.workspaceFolders?.[0]?.uri?.fsPath ?? '', false, `IMI-${item.name}`) + const terminalClass = await TerminalRegistry.getOrCreateTerminal( + vscode.workspace.workspaceFolders?.[0]?.uri?.fsPath ?? "", + false, + `IMI-${item.name}`, + ) terminalClass.terminal.show() - await terminalClass.runCommand(`npx --yes roo-rocket@latest --mp="${JSON.stringify(mpContext).replaceAll(/"/g, '\\"')}" --cwd="${cwd}" --sha256="${item.binaryHash}" --url="${item.binaryUrl}"`, { - onLine: (line) => { - pResult.push(line) + await terminalClass.runCommand( + `npx --yes roo-rocket@latest --mp="${JSON.stringify(mpContext).replaceAll(/"/g, '\\"')}" --cwd="${cwd}" --sha256="${item.binaryHash}" --url="${item.binaryUrl}"`, + { + onLine: (line) => { + pResult.push(line) + }, + onShellExecutionComplete: (details) => { + pExitCode = details.exitCode + }, }, - onShellExecutionComplete: (details) => { - pExitCode = details.exitCode - }, - }) + ) - if (pExitCode === 0) - vscode.window.showInformationMessage(`"${item.name}" CLI reported success!`) + if (pExitCode === 0) vscode.window.showInformationMessage(`"${item.name}" CLI reported success!`) else { console.error(pResult) // Revert so error search is potentially faster pResult.reverse() // Search for error line in the result - const errorLine = ( - pResult.find(line => /^((\r)?\n)+ ERROR /.test(line)) ?? // Prefer formatting error - pResult.find(line => /error/i.test(line)) ?? // General error - 'N/A' - ) + const errorLine = + pResult.find((line) => /^((\r)?\n)+ ERROR /.test(line)) ?? // Prefer formatting error + pResult.find((line) => /error/i.test(line)) ?? // General error + "N/A" return vscode.window.showErrorMessage(`"${item.name}" CLI reported error: (${pExitCode}): ${errorLine}`) } } @@ -648,12 +652,11 @@ export class MarketplaceManager { hookable: customHookable, nonAssemblyBehavior: true, sha256: item.binaryHash, - cwd + cwd, }) vscode.window.showInformationMessage(`"${item.name}" installed successfully`) } - return true } @@ -669,8 +672,7 @@ export class MarketplaceManager { async function fetchBinary(url: string) { const res = await fetch(url) - if (!res.ok) - throw new Error(`Failed to download binary from ${url}`) + if (!res.ok) throw new Error(`Failed to download binary from ${url}`) return new Uint8Array(await res.arrayBuffer()) } diff --git a/src/services/marketplace/__tests__/GitFetcher.test.ts b/src/services/marketplace/__tests__/GitFetcher.test.ts index cbe3e5462b..8797ba8aad 100644 --- a/src/services/marketplace/__tests__/GitFetcher.test.ts +++ b/src/services/marketplace/__tests__/GitFetcher.test.ts @@ -2,12 +2,7 @@ import * as vscode from "vscode" import { GitFetcher } from "../GitFetcher" import * as fs from "fs/promises" import * as path from "path" -import { Dirent, Stats } from "fs" import simpleGit, { SimpleGit } from "simple-git" -import { MetadataScanner } from "../MetadataScanner" -import { exec, ChildProcess } from "child_process" -import { promisify } from "util" -import { EventEmitter } from "events" // Mock simpleGit jest.mock("simple-git", () => { @@ -54,21 +49,21 @@ const mockContext = { } as vscode.ExtensionContext // Create mock Dirent objects -const createMockDirent = (name: string, isDir: boolean): Dirent => { - return { - name, - isDirectory: () => isDir, - isFile: () => !isDir, - isBlockDevice: () => false, - isCharacterDevice: () => false, - isFIFO: () => false, - isSocket: () => false, - isSymbolicLink: () => false, - // These are readonly in the real Dirent - path: "", - parentPath: "", - } as Dirent -} +// const createMockDirent = (name: string, isDir: boolean): Dirent => { +// return { +// name, +// isDirectory: () => isDir, +// isFile: () => !isDir, +// isBlockDevice: () => false, +// isCharacterDevice: () => false, +// isFIFO: () => false, +// isSocket: () => false, +// isSymbolicLink: () => false, +// // These are readonly in the real Dirent +// path: "", +// parentPath: "", +// } as Dirent +// } describe("GitFetcher", () => { let gitFetcher: GitFetcher @@ -341,7 +336,7 @@ describe("GitFetcher", () => { it("should pass when metadata.en.yml exists", async () => { // Mock fs.stat to simulate existing file - ;(fs.stat as jest.Mock).mockImplementation((path: string) => { + ;(fs.stat as jest.Mock).mockImplementation(() => { return Promise.resolve({} as any) }) diff --git a/src/services/marketplace/__tests__/MarketplaceManager.test.ts b/src/services/marketplace/__tests__/MarketplaceManager.test.ts index 0828496e85..a6fcd33b2f 100644 --- a/src/services/marketplace/__tests__/MarketplaceManager.test.ts +++ b/src/services/marketplace/__tests__/MarketplaceManager.test.ts @@ -112,13 +112,12 @@ describe("PackageManagerManager", () => { let manager: MarketplaceManager let metadataScanner: MetadataScanner - let realItems: MarketplaceItem[] beforeAll(async () => { // Load real data from the template const templatePath = path.resolve(__dirname, "../../../../marketplace-template") metadataScanner = new MetadataScanner() - realItems = await metadataScanner.scanDirectory(templatePath, "https://example.com") + await metadataScanner.scanDirectory(templatePath, "https://example.com") }) beforeEach(() => { @@ -674,7 +673,8 @@ describe("Concurrency Control", () => { const operation2 = manager.getMarketplaceItems([source]) // Wait for both to complete - const [result1, result2] = await Promise.all([operation1, operation2]) + // const [result1, result2] = + await Promise.all([operation1, operation2]) // Verify getRepositoryData was only called once expect(getRepoSpy).toHaveBeenCalledTimes(1) @@ -698,7 +698,8 @@ describe("Concurrency Control", () => { let metadataScanDuringGit = false // Mock git operation to resolve immediately - const fetchRepoSpy = jest.spyOn(GitFetcher.prototype, "fetchRepository").mockImplementation(async () => { + // const fetchRepoSpy = + jest.spyOn(GitFetcher.prototype, "fetchRepository").mockImplementation(async () => { isGitOperationActive = true isGitOperationActive = false return { @@ -709,7 +710,8 @@ describe("Concurrency Control", () => { }) // Mock metadata scanner to check if git operation is active - const scanDirSpy = jest.spyOn(MetadataScanner.prototype, "scanDirectory").mockImplementation(async () => { + // const scanDirSpy = + jest.spyOn(MetadataScanner.prototype, "scanDirectory").mockImplementation(async () => { if (isGitOperationActive) { metadataScanDuringGit = true } diff --git a/src/services/marketplace/__tests__/MarketplaceSourceValidation.test.ts b/src/services/marketplace/__tests__/MarketplaceSourceValidation.test.ts index 619f0fedde..6edd6e85f9 100644 --- a/src/services/marketplace/__tests__/MarketplaceSourceValidation.test.ts +++ b/src/services/marketplace/__tests__/MarketplaceSourceValidation.test.ts @@ -5,7 +5,6 @@ import { validateSourceDuplicates, validateSource, validateSources, - ValidationError, } from "../../../shared/MarketplaceValidation" import { MarketplaceSource } from "../types" diff --git a/src/services/marketplace/__tests__/MetadataScanner.external.test.ts b/src/services/marketplace/__tests__/MetadataScanner.external.test.ts index bb79b226c4..20ea13aa3e 100644 --- a/src/services/marketplace/__tests__/MetadataScanner.external.test.ts +++ b/src/services/marketplace/__tests__/MetadataScanner.external.test.ts @@ -1,5 +1,4 @@ import * as path from "path" -import { MetadataScanner } from "../MetadataScanner" import { GitFetcher } from "../GitFetcher" import * as vscode from "vscode" diff --git a/src/services/marketplace/__tests__/MetadataScanner.test.ts b/src/services/marketplace/__tests__/MetadataScanner.test.ts index b5c7d34d73..bf5c788352 100644 --- a/src/services/marketplace/__tests__/MetadataScanner.test.ts +++ b/src/services/marketplace/__tests__/MetadataScanner.test.ts @@ -14,7 +14,6 @@ import { jest } from "@jest/globals" import { Dirent, Stats } from "fs" import { MetadataScanner } from "../MetadataScanner" import { SimpleGit } from "simple-git" -import { ComponentMetadata, LocalizationOptions, LocalizedMetadata, PackageMetadata } from "../types" import * as fs from "fs/promises" // Helper function to normalize paths for test assertions diff --git a/src/services/marketplace/schemas.ts b/src/services/marketplace/schemas.ts index df70da0bc6..2ec0ee6181 100644 --- a/src/services/marketplace/schemas.ts +++ b/src/services/marketplace/schemas.ts @@ -1,5 +1,4 @@ import { z } from "zod" -import { ComponentType } from "./types" /** * Base metadata schema with common fields diff --git a/src/shared/MarketplaceValidation.ts b/src/shared/MarketplaceValidation.ts index 1648e3bc02..6c3fa86796 100644 --- a/src/shared/MarketplaceValidation.ts +++ b/src/shared/MarketplaceValidation.ts @@ -120,8 +120,6 @@ export function validateSourceDuplicates( newSource?: MarketplaceSource, ): ValidationError[] { const errors: ValidationError[] = [] - const urlMap = new Map() - const nameMap = new Map() // Process existing sources const seen = new Set() diff --git a/webview-ui/src/components/marketplace/MarketplaceView.tsx b/webview-ui/src/components/marketplace/MarketplaceView.tsx index 3775750f63..c21ff5a953 100644 --- a/webview-ui/src/components/marketplace/MarketplaceView.tsx +++ b/webview-ui/src/components/marketplace/MarketplaceView.tsx @@ -14,7 +14,7 @@ interface MarketplaceViewProps { onDone?: () => void stateManager: MarketplaceViewStateManager } -const MarketplaceView: React.FC = ({ onDone, stateManager }) => { +const MarketplaceView: React.FC = ({ stateManager }) => { const { t } = useAppTranslation() const [state, manager] = useStateManager(stateManager)