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:
@@ -3,8 +3,8 @@ import hljs, { rehypeHighlightLanguages, rehypeHighlightOptions } from '../highl
|
|||||||
|
|
||||||
describe('highlight', () => {
|
describe('highlight', () => {
|
||||||
const expectedLanguages = [
|
const expectedLanguages = [
|
||||||
'bash', 'css', 'diff', 'dockerfile', 'go', 'ini',
|
'bash', 'c', 'cpp', 'css', 'diff', 'dockerfile', 'go', 'ini',
|
||||||
'javascript', 'json', 'markdown', 'python', 'rust',
|
'java', 'javascript', 'json', 'markdown', 'python', 'rust',
|
||||||
'shell', 'sql', 'typescript', 'xml', 'yaml',
|
'shell', 'sql', 'typescript', 'xml', 'yaml',
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ describe('highlight', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('resolves common aliases', () => {
|
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) {
|
for (const alias of aliases) {
|
||||||
const lang = hljs.getLanguage(alias);
|
const lang = hljs.getLanguage(alias);
|
||||||
expect(lang, `alias "${alias}" should resolve`).toBeDefined();
|
expect(lang, `alias "${alias}" should resolve`).toBeDefined();
|
||||||
|
|||||||
@@ -8,11 +8,14 @@ import type { LanguageFn } from 'highlight.js';
|
|||||||
|
|
||||||
// Languages commonly seen in AI assistant conversations
|
// Languages commonly seen in AI assistant conversations
|
||||||
import bash from 'highlight.js/lib/languages/bash';
|
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 css from 'highlight.js/lib/languages/css';
|
||||||
import diff from 'highlight.js/lib/languages/diff';
|
import diff from 'highlight.js/lib/languages/diff';
|
||||||
import dockerfile from 'highlight.js/lib/languages/dockerfile';
|
import dockerfile from 'highlight.js/lib/languages/dockerfile';
|
||||||
import go from 'highlight.js/lib/languages/go';
|
import go from 'highlight.js/lib/languages/go';
|
||||||
import ini from 'highlight.js/lib/languages/ini';
|
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 javascript from 'highlight.js/lib/languages/javascript';
|
||||||
import json from 'highlight.js/lib/languages/json';
|
import json from 'highlight.js/lib/languages/json';
|
||||||
import markdown from 'highlight.js/lib/languages/markdown';
|
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';
|
import yaml from 'highlight.js/lib/languages/yaml';
|
||||||
|
|
||||||
hljs.registerLanguage('bash', bash);
|
hljs.registerLanguage('bash', bash);
|
||||||
|
hljs.registerLanguage('c', c);
|
||||||
|
hljs.registerLanguage('cpp', cpp);
|
||||||
hljs.registerLanguage('css', css);
|
hljs.registerLanguage('css', css);
|
||||||
hljs.registerLanguage('diff', diff);
|
hljs.registerLanguage('diff', diff);
|
||||||
hljs.registerLanguage('dockerfile', dockerfile);
|
hljs.registerLanguage('dockerfile', dockerfile);
|
||||||
hljs.registerLanguage('go', go);
|
hljs.registerLanguage('go', go);
|
||||||
hljs.registerLanguage('ini', ini);
|
hljs.registerLanguage('ini', ini);
|
||||||
|
hljs.registerLanguage('java', java);
|
||||||
hljs.registerLanguage('javascript', javascript);
|
hljs.registerLanguage('javascript', javascript);
|
||||||
hljs.registerLanguage('json', json);
|
hljs.registerLanguage('json', json);
|
||||||
hljs.registerLanguage('markdown', markdown);
|
hljs.registerLanguage('markdown', markdown);
|
||||||
@@ -43,6 +49,8 @@ hljs.registerLanguage('yaml', yaml);
|
|||||||
|
|
||||||
// Aliases for hljs direct usage (ToolCall.tsx)
|
// Aliases for hljs direct usage (ToolCall.tsx)
|
||||||
hljs.registerAliases(['sh', 'zsh'], { languageName: 'bash' });
|
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(['js', 'jsx'], { languageName: 'javascript' });
|
||||||
hljs.registerAliases(['ts', 'tsx'], { languageName: 'typescript' });
|
hljs.registerAliases(['ts', 'tsx'], { languageName: 'typescript' });
|
||||||
hljs.registerAliases(['py'], { languageName: 'python' });
|
hljs.registerAliases(['py'], { languageName: 'python' });
|
||||||
@@ -56,7 +64,7 @@ hljs.registerAliases(['rs'], { languageName: 'rust' });
|
|||||||
* rehype-highlight uses lowlight internally and accepts a `languages` record.
|
* rehype-highlight uses lowlight internally and accepts a `languages` record.
|
||||||
*/
|
*/
|
||||||
export const rehypeHighlightLanguages: Record<string, LanguageFn> = {
|
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,
|
markdown, python, rust, shell, sql, typescript, xml, yaml,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -67,6 +75,8 @@ export const rehypeHighlightOptions = {
|
|||||||
languages: rehypeHighlightLanguages,
|
languages: rehypeHighlightLanguages,
|
||||||
aliases: {
|
aliases: {
|
||||||
bash: ['sh', 'zsh'],
|
bash: ['sh', 'zsh'],
|
||||||
|
c: ['h'],
|
||||||
|
cpp: ['cc', 'cxx', 'c++', 'hpp', 'hxx'],
|
||||||
javascript: ['js', 'jsx'],
|
javascript: ['js', 'jsx'],
|
||||||
typescript: ['ts', 'tsx'],
|
typescript: ['ts', 'tsx'],
|
||||||
python: ['py'],
|
python: ['py'],
|
||||||
|
|||||||
Reference in New Issue
Block a user