Add syntax highlighting for git diffs

This commit is contained in:
Federico Jaramillo Martinez
2026-05-08 09:43:00 +02:00
parent 9772193342
commit 15077d7080
4 changed files with 15 additions and 2 deletions
+10
View File
@@ -16,6 +16,7 @@
"@codemirror/lang-markdown": "^6.5.0", "@codemirror/lang-markdown": "^6.5.0",
"@codemirror/lang-python": "^6.2.1", "@codemirror/lang-python": "^6.2.1",
"@codemirror/lang-rust": "^6.0.2", "@codemirror/lang-rust": "^6.0.2",
"@codemirror/legacy-modes": "^6.5.2",
"@earendil-works/pi-coding-agent": "^0.74.0", "@earendil-works/pi-coding-agent": "^0.74.0",
"@fastify/static": "^8.3.0", "@fastify/static": "^8.3.0",
"@fastify/websocket": "^11.2.0", "@fastify/websocket": "^11.2.0",
@@ -991,6 +992,15 @@
"style-mod": "^4.0.0" "style-mod": "^4.0.0"
} }
}, },
"node_modules/@codemirror/legacy-modes": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-6.5.2.tgz",
"integrity": "sha512-/jJbwSTazlQEDOQw2FJ8LEEKVS72pU0lx6oM54kGpL8t/NJ2Jda3CZ4pcltiKTdqYSRk3ug1B3pil1gsjA6+8Q==",
"license": "MIT",
"dependencies": {
"@codemirror/language": "^6.0.0"
}
},
"node_modules/@codemirror/lint": { "node_modules/@codemirror/lint": {
"version": "6.9.6", "version": "6.9.6",
"resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.6.tgz", "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.6.tgz",
+1
View File
@@ -26,6 +26,7 @@
"@codemirror/lang-markdown": "^6.5.0", "@codemirror/lang-markdown": "^6.5.0",
"@codemirror/lang-python": "^6.2.1", "@codemirror/lang-python": "^6.2.1",
"@codemirror/lang-rust": "^6.0.2", "@codemirror/lang-rust": "^6.0.2",
"@codemirror/legacy-modes": "^6.5.2",
"@earendil-works/pi-coding-agent": "^0.74.0", "@earendil-works/pi-coding-agent": "^0.74.0",
"@fastify/static": "^8.3.0", "@fastify/static": "^8.3.0",
"@fastify/websocket": "^11.2.0", "@fastify/websocket": "^11.2.0",
+3 -1
View File
@@ -1,7 +1,7 @@
import { EditorState, type Extension } from "@codemirror/state"; import { EditorState, type Extension } from "@codemirror/state";
import { EditorView, keymap, lineNumbers } from "@codemirror/view"; import { EditorView, keymap, lineNumbers } from "@codemirror/view";
import { defaultKeymap } from "@codemirror/commands"; import { defaultKeymap } from "@codemirror/commands";
import { syntaxHighlighting, defaultHighlightStyle } from "@codemirror/language"; import { syntaxHighlighting, defaultHighlightStyle, StreamLanguage } from "@codemirror/language";
import { javascript } from "@codemirror/lang-javascript"; import { javascript } from "@codemirror/lang-javascript";
import { json } from "@codemirror/lang-json"; import { json } from "@codemirror/lang-json";
import { markdown } from "@codemirror/lang-markdown"; import { markdown } from "@codemirror/lang-markdown";
@@ -10,6 +10,7 @@ import { html as htmlLang } from "@codemirror/lang-html";
import { python } from "@codemirror/lang-python"; import { python } from "@codemirror/lang-python";
import { rust } from "@codemirror/lang-rust"; import { rust } from "@codemirror/lang-rust";
import { go } from "@codemirror/lang-go"; import { go } from "@codemirror/lang-go";
import { diff } from "@codemirror/legacy-modes/mode/diff";
import { LitElement, css, html } from "lit"; import { LitElement, css, html } from "lit";
import { customElement, property, query } from "lit/decorators.js"; import { customElement, property, query } from "lit/decorators.js";
@@ -108,6 +109,7 @@ function languageExtensions(language: string | undefined): Extension[] {
case "python": return [python()]; case "python": return [python()];
case "rust": return [rust()]; case "rust": return [rust()];
case "go": return [go()]; case "go": return [go()];
case "diff": return [StreamLanguage.define(diff)];
default: return []; default: return [];
} }
} }
+1 -1
View File
@@ -117,7 +117,7 @@ export class WorkspacePanel extends LitElement {
if (diff === undefined) return html`<p class="muted">Loading diff…</p>`; if (diff === undefined) return html`<p class="muted">Loading diff…</p>`;
return html` return html`
<div class="viewer-header"><strong>${diff.path ?? "diff"}</strong><small>${diff.staged ? "staged" : "unstaged"}${diff.truncated ? " · truncated" : ""}</small></div> <div class="viewer-header"><strong>${diff.path ?? "diff"}</strong><small>${diff.staged ? "staged" : "unstaged"}${diff.truncated ? " · truncated" : ""}</small></div>
<code-viewer .content=${diff.diff !== "" ? diff.diff : "No unstaged diff."}></code-viewer> <code-viewer .content=${diff.diff !== "" ? diff.diff : "No unstaged diff."} .language=${"diff"}></code-viewer>
`; `;
} }