C0VM.ts Editor

We have implemented the C0 Code editor using CodeMirror 6. The C0 Editor is defined in src/components/c0-editor.tsx.

The CodeMirror provides an extensions interface for us to add features on the original code editor. The editors we have loaded is shown below:

<ReactCodeMirror
    theme="light"
    basicSetup={false}
    onUpdate={(v) => 
        {if (v.docChanged) this.props.updateContent(v.state.doc.toString())}
    }
    extensions={[
        breakpointGutter,
        LoadDocumentPlugin,
        basicSetup(),
        keymap.of([indentWithTab]),
        indentUnit.of("    "),
        language.of(BC0Language),
        execLineHighlighter,
]}/>

onUpdate

When the code editor has an update and the update contains docChange, the editor component will call the state-update function in C0VMApplciation component (root component) to set the EditorContent state to be consistent with the content of editor.

breakpointGutter

Defined in /src/components/editor_extensions/breakpoint_marker.ts, this extension will handle the toggle, display and disable of breakpoints in the bc0 code.

By clicking on the left of line number, one can activate/deactivate a breakpoint on a specific line.

When a breakpoint on a specific line is activated, a 🔴 sign will be displayed on the left of line number, as shown below:

execLineHighlighter

Defined in /src/components/editor_extensions/exec_position.ts, this extension will read the lineNumber from C0_RUNTIME global variable and render a yellow highlight on the line currently being executed.

The yellow highlight indicate that Line 19 is just executed in C0VM

LoadDocumentPlugin

Defined in /src/components/editor_extensions/blank_load.ts, this extension will show up a prompt to guide user to import files into the C0VM code editor through standard file-selection panel.

Last updated