Skip to content

Commit 638d4ce

Browse files
committed
Allow switching between js and python file extension in code mirror
1 parent c3819aa commit 638d4ce

File tree

3 files changed

+45
-11
lines changed

3 files changed

+45
-11
lines changed

components/views/code-editor-view.tsx

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ import {
1313
useRef,
1414
useState,
1515
} from "react";
16-
import { javascript } from "@codemirror/lang-javascript";
17-
import { python } from "@codemirror/lang-python";
1816
import ViewLayout from "./layout";
1917
import { vscodeDark, vscodeLight } from "@uiw/codemirror-theme-vscode";
2018
import { useTheme } from "next-themes";
@@ -38,6 +36,7 @@ import { EditorContext } from "../providers/editor-context-provider";
3836
import Loading from "../loading";
3937
import { ViewTypeEnum } from "@/lib/views/available-views";
4038
import { View } from "@/lib/views/view";
39+
import { getLanguageExtension } from "@/lib/codemirror-extensions/get-language-extension";
4140

4241
interface CodeEditorViewProps {
4342
width?: string;
@@ -427,6 +426,10 @@ const CodeEditorView = forwardRef(
427426
return container;
428427
}
429428

429+
const cmFileExtension = viewDocument
430+
? getLanguageExtension(viewDocument.filePath)
431+
: undefined;
432+
430433
return (
431434
<ViewLayout width={width} height={height}>
432435
<div
@@ -443,14 +446,22 @@ const CodeEditorView = forwardRef(
443446
ref={cmRef}
444447
value={viewDocument?.fileContent}
445448
onChange={onContentChange}
446-
extensions={[
447-
javascript({ jsx: true }),
448-
python(),
449-
codeInlineSuggestionExtension({
450-
delay: 1000,
451-
agent: inlineSuggestionAgentRef.current,
452-
}),
453-
]}
449+
extensions={
450+
cmFileExtension
451+
? [
452+
cmFileExtension,
453+
codeInlineSuggestionExtension({
454+
delay: 1000,
455+
agent: inlineSuggestionAgentRef.current,
456+
}),
457+
]
458+
: [
459+
codeInlineSuggestionExtension({
460+
delay: 1000,
461+
agent: inlineSuggestionAgentRef.current,
462+
}),
463+
]
464+
}
454465
theme={theme}
455466
height="100%"
456467
style={{
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { javascript } from "@codemirror/lang-javascript";
2+
import { python } from "@codemirror/lang-python";
3+
import { Extension } from "@uiw/react-codemirror";
4+
5+
export function getLanguageExtension(filename: string): Extension | undefined {
6+
if (filename.endsWith(".js")) {
7+
return javascript();
8+
}
9+
else if (filename.endsWith(".ts")) {
10+
return javascript({typescript: true});
11+
}
12+
else if (filename.endsWith(".jsx")) {
13+
return javascript({jsx: true});
14+
}
15+
else if (filename.endsWith(".tsx")) {
16+
return javascript({jsx: true, typescript: true});
17+
}
18+
else if (filename.endsWith(".py")) {
19+
return python();
20+
}
21+
22+
return undefined;
23+
}

vscode-extension/.vscode/launch.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"args": [
1313
"--extensionDevelopmentPath=${workspaceFolder}",
1414
"--disable-extensions",
15-
"${workspaceFolder}/examples"
15+
"${workspaceFolder}"
1616
],
1717
"outFiles": [
1818
"${workspaceFolder}/dist/**/*.js"

0 commit comments

Comments
 (0)