From f8324b760c9e68a946846defcabbacc1d11af95e Mon Sep 17 00:00:00 2001 From: Nicolas Varrot Date: Fri, 13 Feb 2026 11:30:18 +0000 Subject: [PATCH] feat: add C, C++, and Java syntax highlighting support Add c, cpp, and java to the highlight.js language bundle for code block rendering. These are among the most commonly used languages in AI coding conversations and were previously unsupported, falling back to plain text. Also adds aliases: h (C headers), cc/cxx/c++/hpp/hxx (C++ variants). --- src/lib/__tests__/highlight.test.ts | 6 +++--- src/lib/highlight.ts | 12 +++++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/lib/__tests__/highlight.test.ts b/src/lib/__tests__/highlight.test.ts index 31398d3..7479b40 100644 --- a/src/lib/__tests__/highlight.test.ts +++ b/src/lib/__tests__/highlight.test.ts @@ -3,8 +3,8 @@ import hljs, { rehypeHighlightLanguages, rehypeHighlightOptions } from '../highl describe('highlight', () => { const expectedLanguages = [ - 'bash', 'css', 'diff', 'dockerfile', 'go', 'ini', - 'javascript', 'json', 'markdown', 'python', 'rust', + 'bash', 'c', 'cpp', 'css', 'diff', 'dockerfile', 'go', 'ini', + 'java', 'javascript', 'json', 'markdown', 'python', 'rust', 'shell', 'sql', 'typescript', 'xml', 'yaml', ]; @@ -17,7 +17,7 @@ describe('highlight', () => { }); it('resolves common aliases', () => { - const aliases = ['sh', 'zsh', 'js', 'jsx', 'ts', 'tsx', 'py', 'html', 'yml', 'rs']; + const aliases = ['sh', 'zsh', 'h', 'cc', 'cxx', 'js', 'jsx', 'ts', 'tsx', 'py', 'html', 'yml', 'rs']; for (const alias of aliases) { const lang = hljs.getLanguage(alias); expect(lang, `alias "${alias}" should resolve`).toBeDefined(); diff --git a/src/lib/highlight.ts b/src/lib/highlight.ts index 5392202..991ac38 100644 --- a/src/lib/highlight.ts +++ b/src/lib/highlight.ts @@ -8,11 +8,14 @@ import type { LanguageFn } from 'highlight.js'; // Languages commonly seen in AI assistant conversations import bash from 'highlight.js/lib/languages/bash'; +import c from 'highlight.js/lib/languages/c'; +import cpp from 'highlight.js/lib/languages/cpp'; import css from 'highlight.js/lib/languages/css'; import diff from 'highlight.js/lib/languages/diff'; import dockerfile from 'highlight.js/lib/languages/dockerfile'; import go from 'highlight.js/lib/languages/go'; import ini from 'highlight.js/lib/languages/ini'; +import java from 'highlight.js/lib/languages/java'; import javascript from 'highlight.js/lib/languages/javascript'; import json from 'highlight.js/lib/languages/json'; import markdown from 'highlight.js/lib/languages/markdown'; @@ -25,11 +28,14 @@ import xml from 'highlight.js/lib/languages/xml'; import yaml from 'highlight.js/lib/languages/yaml'; hljs.registerLanguage('bash', bash); +hljs.registerLanguage('c', c); +hljs.registerLanguage('cpp', cpp); hljs.registerLanguage('css', css); hljs.registerLanguage('diff', diff); hljs.registerLanguage('dockerfile', dockerfile); hljs.registerLanguage('go', go); hljs.registerLanguage('ini', ini); +hljs.registerLanguage('java', java); hljs.registerLanguage('javascript', javascript); hljs.registerLanguage('json', json); hljs.registerLanguage('markdown', markdown); @@ -43,6 +49,8 @@ hljs.registerLanguage('yaml', yaml); // Aliases for hljs direct usage (ToolCall.tsx) hljs.registerAliases(['sh', 'zsh'], { languageName: 'bash' }); +hljs.registerAliases(['h'], { languageName: 'c' }); +hljs.registerAliases(['cc', 'cxx', 'c++', 'hpp', 'hxx'], { languageName: 'cpp' }); hljs.registerAliases(['js', 'jsx'], { languageName: 'javascript' }); hljs.registerAliases(['ts', 'tsx'], { languageName: 'typescript' }); hljs.registerAliases(['py'], { languageName: 'python' }); @@ -56,7 +64,7 @@ hljs.registerAliases(['rs'], { languageName: 'rust' }); * rehype-highlight uses lowlight internally and accepts a `languages` record. */ export const rehypeHighlightLanguages: Record = { - bash, css, diff, dockerfile, go, ini, javascript, json, + bash, c, cpp, css, diff, dockerfile, go, ini, java, javascript, json, markdown, python, rust, shell, sql, typescript, xml, yaml, }; @@ -67,6 +75,8 @@ export const rehypeHighlightOptions = { languages: rehypeHighlightLanguages, aliases: { bash: ['sh', 'zsh'], + c: ['h'], + cpp: ['cc', 'cxx', 'c++', 'hpp', 'hxx'], javascript: ['js', 'jsx'], typescript: ['ts', 'tsx'], python: ['py'],