diff --git a/examples/with-typescript-esm/src/fibonacci.bench.ts b/examples/with-typescript-esm/src/fibonacci.bench.ts index 4c00d98c..c1ad321d 100644 --- a/examples/with-typescript-esm/src/fibonacci.bench.ts +++ b/examples/with-typescript-esm/src/fibonacci.bench.ts @@ -1,9 +1,5 @@ import { describe, test } from "vitest"; -import { recursiveFibonacci as recursiveFibonacciExport } from "./fibonacci"; - -// Imports are getters under Vite's module runner; read them once, outside the -// measured loop. -const recursiveFibonacci = recursiveFibonacciExport; +import { recursiveFibonacci } from "./fibonacci"; describe("recursiveFibonacci", () => { test("fibo 30", async ({ bench }) => { diff --git a/examples/with-vitest-v5/src/fibonacci.bench.ts b/examples/with-vitest-v5/src/fibonacci.bench.ts index 5108c589..b8b596c5 100644 --- a/examples/with-vitest-v5/src/fibonacci.bench.ts +++ b/examples/with-vitest-v5/src/fibonacci.bench.ts @@ -1,13 +1,5 @@ import { describe, test } from "vitest"; -import { - iterativeFibonacci as iterativeFibonacciExport, - recursiveFibonacci as recursiveFibonacciExport, -} from "./fibonacci"; - -// Imports are getters under Vite's module runner; read them once, outside the -// measured loop. -const recursiveFibonacci = recursiveFibonacciExport; -const iterativeFibonacci = iterativeFibonacciExport; +import { iterativeFibonacci, recursiveFibonacci } from "./fibonacci"; describe("fibonacci", () => { test("fibo 15", async ({ bench }) => { diff --git a/packages/core/tests/optimization.integ.test.ts b/packages/core/tests/optimization.integ.test.ts index e6437210..9be36aca 100644 --- a/packages/core/tests/optimization.integ.test.ts +++ b/packages/core/tests/optimization.integ.test.ts @@ -21,7 +21,7 @@ describe("optimization helpers", () => { `const target = () => 1; const before = %GetOptimizationStatus(target); require(${corePath}).optimizeFunctionSync(target); - console.log("done", before, %GetOptimizationStatus(target));`, + console.log(\`done \${before} \${%GetOptimizationStatus(target)}\`);`, ); const [, before, after] = stdout.match(/done (\d+) (\d+)/) ?? []; expect(stdout).toContain("done"); @@ -34,7 +34,7 @@ describe("optimization helpers", () => { const before = %GetOptimizationStatus(target); require(${corePath}) .optimizeFunction(target) - .then(() => console.log("done", before, %GetOptimizationStatus(target)));`, + .then(() => console.log(\`done \${before} \${%GetOptimizationStatus(target)}\`));`, ); const [, before, after] = stdout.match(/done (\d+) (\d+)/) ?? []; expect(stdout).toContain("done"); diff --git a/packages/vitest-plugin/benches/flat.bench.ts b/packages/vitest-plugin/benches/flat.bench.ts index dd409924..0251df28 100644 --- a/packages/vitest-plugin/benches/flat.bench.ts +++ b/packages/vitest-plugin/benches/flat.bench.ts @@ -1,9 +1,5 @@ import { describe, test } from "vitest"; -import parsePrExport from "./parsePr"; - -// Imports are getters under Vite's module runner; read it once, outside the -// measured loop. -const parsePr = parsePrExport; +import parsePr from "./parsePr"; const LONG_BODY = new Array(1_000) diff --git a/packages/vitest-plugin/benches/parsePr.bench.ts b/packages/vitest-plugin/benches/parsePr.bench.ts index 4f078785..e9da3915 100644 --- a/packages/vitest-plugin/benches/parsePr.bench.ts +++ b/packages/vitest-plugin/benches/parsePr.bench.ts @@ -1,9 +1,5 @@ import { describe, test } from "vitest"; -import parsePrExport from "./parsePr"; - -// Imports are getters under Vite's module runner; read it once, outside the -// measured loop. -const parsePr = parsePrExport; +import parsePr from "./parsePr"; const LONG_BODY = new Array(1_000) diff --git a/packages/vitest-plugin/src/__tests__/index.test.ts b/packages/vitest-plugin/src/__tests__/index.test.ts index 5c691280..d7459fea 100644 --- a/packages/vitest-plugin/src/__tests__/index.test.ts +++ b/packages/vitest-plugin/src/__tests__/index.test.ts @@ -1,6 +1,7 @@ import { getV8Flags } from "@codspeed/core"; import { fromPartial } from "@total-typescript/shoehorn"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { type ViteUserConfig } from "vitest/config"; import codspeedPlugin from "../index"; const coreMocks = vi.hoisted(() => { @@ -34,10 +35,10 @@ function apply(mode: string) { return plugin.apply({}, fromPartial({ mode })); } -function config() { +function config(userConfig: ViteUserConfig = {}) { if (typeof plugin.config !== "function") throw new Error("config is not a function"); - return plugin.config.call({} as never, {}, fromPartial({})); + return plugin.config.call({} as never, userConfig, fromPartial({})); } describe("codSpeedPlugin", () => { @@ -148,9 +149,18 @@ describe("codSpeedPlugin", () => { provider: expect.stringContaining( "packages/vitest-plugin/src/v5/provider.ts", ), + suppressExportGetterWarnings: true, }, }, }); }); + + it("should keep an explicit suppressExportGetterWarnings from the user", () => { + const result = config({ + test: { benchmark: { suppressExportGetterWarnings: false } }, + }) as ViteUserConfig; + + expect(result.test?.benchmark?.suppressExportGetterWarnings).toBe(false); + }); }); }); diff --git a/packages/vitest-plugin/src/index.ts b/packages/vitest-plugin/src/index.ts index 171d9e86..cb3af1ae 100644 --- a/packages/vitest-plugin/src/index.ts +++ b/packages/vitest-plugin/src/index.ts @@ -37,7 +37,7 @@ export default function codspeedPlugin(): Plugin { return true; }, enforce: "post", - config(): ViteUserConfig { + config(userConfig): ViteUserConfig { return { test: { pool: "forks", @@ -45,6 +45,7 @@ export default function codspeedPlugin(): Plugin { ...resolveVitestBackend().getBenchmarkTestConfig( getV8Flags(), resolveFile, + (userConfig as ViteUserConfig).test, ), }, }; diff --git a/packages/vitest-plugin/src/vitestBackend.ts b/packages/vitest-plugin/src/vitestBackend.ts index b702e4d1..46c171d7 100644 --- a/packages/vitest-plugin/src/vitestBackend.ts +++ b/packages/vitest-plugin/src/vitestBackend.ts @@ -10,6 +10,7 @@ export interface VitestBackend { getBenchmarkTestConfig( v8Flags: string[], resolveFile: (name: string) => string, + userTestConfig: ViteUserConfig["test"], ): ViteUserConfig["test"]; } @@ -36,10 +37,18 @@ class V5Backend implements VitestBackend { getBenchmarkTestConfig( v8Flags: string[], resolveFile: (name: string) => string, + userTestConfig: ViteUserConfig["test"], ): ViteUserConfig["test"] { + // Vitest's export getter tracker runs inside the measured code; keep it off + // unless the user explicitly configured it. + const suppressExportGetterWarnings = + userTestConfig?.benchmark?.suppressExportGetterWarnings ?? true; return { execArgv: v8Flags, - benchmark: { provider: resolveFile("v5/provider") }, + benchmark: { + provider: resolveFile("v5/provider"), + suppressExportGetterWarnings, + }, }; } }