Skip to content

Commit ef80e3a

Browse files
committed
PEER-234: Add functional syntax highlighting
Signed-off-by: SeeuSim <[email protected]>
1 parent 91412c9 commit ef80e3a

File tree

5 files changed

+18
-89
lines changed

5 files changed

+18
-89
lines changed

frontend/package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,8 @@
4848
"remark-math": "^6.0.0",
4949
"tailwind-merge": "^2.5.2",
5050
"tailwindcss-animate": "^1.0.7",
51-
"y-codemirror": "^3.0.1",
5251
"y-codemirror.next": "^0.3.5",
5352
"y-socket.io": "^1.1.3",
54-
"y-websocket": "^2.0.4",
5553
"yjs": "^13.6.20",
5654
"zod": "^3.23.8"
5755
},

frontend/src/components/blocks/interview/editor.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ type EditorProps = {
2424
export const Editor = ({ room }: EditorProps) => {
2525
const { height } = useWindowSize();
2626
const [code, setCode] = useState('');
27-
const [language, setLanguage] = useState<LanguageName>('python');
2827
const [theme, setTheme] = useState<IEditorTheme>('darcula');
29-
const { editorRef, extensions } = useCollab(room);
28+
const { editorRef, extensions, language, setLanguage } = useCollab(room);
3029
return (
3130
<div className='flex flex-col gap-4 p-4'>
3231
<div className='flex gap-4'>
@@ -61,7 +60,7 @@ export const Editor = ({ room }: EditorProps) => {
6160
</Select>
6261
</div>
6362
</div>
64-
<div className='border-border w-full text-clip rounded-lg border shadow-sm'>
63+
<div className='border-border w-full !overflow-clip rounded-lg border shadow-sm'>
6564
<CodeMirror
6665
ref={editorRef}
6766
style={{

frontend/src/lib/editor/extensions.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ export const languages = [
2121

2222
languages.forEach(loadLanguage);
2323

24-
const langExtensions = languages.map((v) => langs[v]());
24+
const langExtensions = Object.fromEntries(languages.map((v) => [v, langs[v]()]));
25+
export const getLanguage = (language: (typeof languages)[number]) => {
26+
return langExtensions[language];
27+
};
2528

2629
export const themeOptions = [
2730
'abcdef',
@@ -68,4 +71,4 @@ export const getTheme = (theme: IEditorTheme) => {
6871
return themes[theme as keyof typeof themes] as Extension;
6972
};
7073

71-
export const extensions = [keymap.of(vscodeKeymap), ...langExtensions];
74+
export const extensions = [keymap.of(vscodeKeymap)];

frontend/src/lib/hooks/use-collab.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { EditorState, Extension, type ReactCodeMirrorRef } from '@uiw/react-codemirror';
2-
import { useEffect, useRef, useState } from 'react';
2+
import { useEffect, useMemo, useRef, useState } from 'react';
33
import { yCollab } from 'y-codemirror.next';
44
import * as Y from 'yjs';
55
import { SocketIOProvider } from 'y-socket.io';
66

77
import { COLLAB_SERVICE } from '@/services/api-clients';
8-
import { extensions as baseExtensions } from '@/lib/editor/extensions';
8+
import { extensions as baseExtensions, getLanguage } from '@/lib/editor/extensions';
9+
import { LanguageName } from '@uiw/codemirror-extensions-langs';
910

1011
// credit: https://github.com/yjs/y-websocket
1112
const usercolors = [
@@ -27,6 +28,11 @@ const getRandomColor = () => {
2728
export const useCollab = (roomId: string) => {
2829
const editorRef = useRef<ReactCodeMirrorRef>(null);
2930
const [extensions, setExtensions] = useState<Array<Extension>>([baseExtensions]);
31+
const [language, setLanguage] = useState<LanguageName>('python');
32+
const langExtension = useMemo(() => {
33+
return getLanguage(language);
34+
}, [language]);
35+
3036
useEffect(() => {
3137
if (editorRef.current) {
3238
const doc = new Y.Doc();
@@ -66,6 +72,8 @@ export const useCollab = (roomId: string) => {
6672
}, [editorRef]);
6773
return {
6874
editorRef,
69-
extensions,
75+
extensions: [...extensions, langExtension],
76+
language,
77+
setLanguage,
7078
};
7179
};

package-lock.json

Lines changed: 0 additions & 79 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)