From 7084eec35802c62b8b3a7dd300e49920eabc8a10 Mon Sep 17 00:00:00 2001 From: triagent Date: Sat, 31 Oct 2026 14:43:35 +0000 Subject: [PATCH] fix(coding-agent): highlight dart, nix, and groovy files in read/write views --- .../src/modes/interactive/theme/theme.ts | 4 ++++ .../coding-agent/test/syntax-highlight.test.ts | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/coding-agent/src/modes/interactive/theme/theme.ts b/packages/coding-agent/src/modes/interactive/theme/theme.ts index 876ba9e86..b9ba23760 100644 --- a/packages/coding-agent/src/modes/interactive/theme/theme.ts +++ b/packages/coding-agent/src/modes/interactive/theme/theme.ts @@ -969,6 +969,10 @@ export function getLanguageFromPath(filePath: string): string | undefined { java: "java", kt: "kotlin", swift: "swift", + dart: "dart", + groovy: "groovy", + gradle: "groovy", + nix: "nix", c: "c", h: "c", cpp: "cpp", diff --git a/packages/coding-agent/test/syntax-highlight.test.ts b/packages/coding-agent/test/syntax-highlight.test.ts index 17fe3b2e4..f4ff51c2b 100644 --- a/packages/coding-agent/test/syntax-highlight.test.ts +++ b/packages/coding-agent/test/syntax-highlight.test.ts @@ -1,6 +1,12 @@ import { resetCapabilitiesCache, setCapabilities } from "@earendil-works/pi-tui"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { getMarkdownTheme, highlightCode, initTheme, theme } from "../src/modes/interactive/theme/theme.ts"; +import { + getLanguageFromPath, + getMarkdownTheme, + highlightCode, + initTheme, + theme, +} from "../src/modes/interactive/theme/theme.ts"; import { highlight, loadAllHighlightLanguages, @@ -41,6 +47,14 @@ describe("syntax highlight renderer", () => { expect(supportsLanguage("ada")).toBe(true); }); + it("maps file extensions of eagerly loaded languages to their language", () => { + expect(getLanguageFromPath("lib/main.dart")).toBe("dart"); + expect(getLanguageFromPath("flake.nix")).toBe("nix"); + expect(getLanguageFromPath("script.groovy")).toBe("groovy"); + expect(getLanguageFromPath("build.gradle")).toBe("groovy"); + expect(getLanguageFromPath("src/Main.kt")).toBe("kotlin"); + }); + it("renders highlighted spans with the provided theme", () => { const rendered = renderHighlightedHtml('const value', { keyword: (text) => `[keyword:${text}]`,