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).
This commit is contained in:
Nicolas Varrot
2026-02-13 11:30:18 +00:00
parent 6fb2f83716
commit f8324b760c
2 changed files with 14 additions and 4 deletions

View File

@@ -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();

View File

@@ -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<string, LanguageFn> = {
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'],