From f31bf9d71ede7ac2a105354303076635ec6ba26c Mon Sep 17 00:00:00 2001 From: Eli <88557639+lishaduck@users.noreply.github.com> Date: Thu, 29 Jan 2026 17:42:51 -0600 Subject: [PATCH] refactor: create host in runCli, use cwd from there --- packages/cli/src/runCli.ts | 18 +++++++++++++++--- packages/cli/src/runCliOnce.ts | 10 +++------- packages/cli/src/runCliWatch.ts | 6 ++++-- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/packages/cli/src/runCli.ts b/packages/cli/src/runCli.ts index 2628e6b90..6e5e6393c 100644 --- a/packages/cli/src/runCli.ts +++ b/packages/cli/src/runCli.ts @@ -1,3 +1,7 @@ +import { + createDiskBackedLinterHost, + createEphemeralLinterHost, +} from "@flint.fyi/core"; import { parseArgs } from "node:util"; import packageData from "../package.json" with { type: "json" }; @@ -67,7 +71,8 @@ export async function runCli(args: string[]) { return 0; } - const configFileName = await findConfigFileName(process.cwd()); + const cwd = process.cwd(); + const configFileName = await findConfigFileName(cwd); if (!configFileName) { console.error("No flint.config.* file found."); console.error( @@ -81,14 +86,21 @@ export async function runCli(args: string[]) { const getRenderer = createRendererFactory(configFileName, values); + const host = createDiskBackedLinterHost(cwd); + if (values.watch) { - await runCliWatch(configFileName, getRenderer, values); + await runCliWatch(host, configFileName, getRenderer, values); console.log("👋 Thanks for using Flint!"); return 0; } const renderer = getRenderer(); - const { exitCode } = await runCliOnce(configFileName, renderer, values); + const { exitCode } = await runCliOnce( + createEphemeralLinterHost(host), + configFileName, + renderer, + values, + ); renderer.dispose?.(); diff --git a/packages/cli/src/runCliOnce.ts b/packages/cli/src/runCliOnce.ts index 7a7b4dd50..de8367eb6 100644 --- a/packages/cli/src/runCliOnce.ts +++ b/packages/cli/src/runCliOnce.ts @@ -1,7 +1,6 @@ import { - createDiskBackedLinterHost, - createEphemeralLinterHost, isConfig, + type LinterHost, runConfig, runConfigFixing, validateConfigDefinition, @@ -17,12 +16,13 @@ import type { Renderer } from "./renderers/types.ts"; const log = debugForFile(import.meta.filename); export async function runCliOnce( + host: LinterHost, configFileName: string, renderer: Renderer, values: OptionsValues, ) { const { default: config } = (await import( - pathToFileURL(path.join(process.cwd(), configFileName)).href + pathToFileURL(path.join(host.getCurrentDirectory(), configFileName)).href )) as { default: unknown; }; @@ -55,10 +55,6 @@ export async function runCliOnce( const skipDiagnostics = !!values["skip-diagnostics"]; - const host = createEphemeralLinterHost( - createDiskBackedLinterHost(process.cwd()), - ); - const lintResults = await (values.fix ? runConfigFixing(configDefinition, host, { ignoreCache, diff --git a/packages/cli/src/runCliWatch.ts b/packages/cli/src/runCliWatch.ts index 77ed53593..13a8e4733 100644 --- a/packages/cli/src/runCliWatch.ts +++ b/packages/cli/src/runCliWatch.ts @@ -1,4 +1,4 @@ -import type { LintResults } from "@flint.fyi/core"; +import type { LinterHost, LintResults } from "@flint.fyi/core"; import { normalizePath } from "@flint.fyi/core"; import debounce from "debounce"; import { debugForFile } from "debug-for-file"; @@ -11,12 +11,13 @@ import { runCliOnce } from "./runCliOnce.ts"; const log = debugForFile(import.meta.filename); export async function runCliWatch( + host: LinterHost, configFileName: string, getRenderer: () => Renderer, values: OptionsValues, ) { const abortController = new AbortController(); - const cwd = process.cwd(); + const cwd = host.getCurrentDirectory(); log("Running single-run CLI once before watching"); @@ -29,6 +30,7 @@ export async function runCliWatch( currentRenderer = renderer; runCliOnce( + host, configFileName, renderer, initial ? values : { ...values, "cache-ignore": false },