| // Copyright 2022 The Pigweed Authors |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| // use this file except in compliance with the License. You may obtain a copy of |
| // the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| // License for the specific language governing permissions and limitations under |
| // the License. |
| |
| import { |
| keymap, highlightSpecialChars, drawSelection, highlightActiveLine, dropCursor, |
| rectangularSelection, crosshairCursor, |
| highlightActiveLineGutter |
| } from "@codemirror/view" |
| import {Extension, EditorState} from "@codemirror/state" |
| import { |
| defaultHighlightStyle, syntaxHighlighting, indentOnInput, bracketMatching, |
| foldGutter, foldKeymap |
| } from "@codemirror/language" |
| import {defaultKeymap, history, historyKeymap} from "@codemirror/commands" |
| import {searchKeymap, highlightSelectionMatches} from "@codemirror/search" |
| import {autocompletion, completionKeymap, closeBrackets, closeBracketsKeymap} from "@codemirror/autocomplete" |
| import {lintKeymap} from "@codemirror/lint" |
| |
| const defaultKeymapMinusEnterAndArrowUpDown = defaultKeymap.map((keymap) => { |
| if (keymap.key === "Enter") { |
| return {...keymap, key: "Shift-Enter"}; |
| } |
| if (keymap.key === "ArrowUp") { |
| return {...keymap, key: "Shift-ArrowUp"} |
| } |
| if (keymap.key === "ArrowDown") { |
| return {...keymap, key: "Shift-ArrowDown"} |
| } |
| return keymap; |
| }); |
| |
| export const basicSetup: Extension = (() => [ |
| highlightActiveLineGutter(), |
| highlightSpecialChars(), |
| history(), |
| foldGutter(), |
| drawSelection(), |
| dropCursor(), |
| EditorState.allowMultipleSelections.of(true), |
| indentOnInput(), |
| syntaxHighlighting(defaultHighlightStyle, {fallback: true}), |
| bracketMatching(), |
| closeBrackets(), |
| autocompletion(), |
| rectangularSelection(), |
| crosshairCursor(), |
| highlightActiveLine(), |
| highlightSelectionMatches(), |
| keymap.of([ |
| ...closeBracketsKeymap, |
| ...defaultKeymapMinusEnterAndArrowUpDown, |
| ...searchKeymap, |
| ...historyKeymap, |
| ...foldKeymap, |
| ...completionKeymap, |
| ...lintKeymap |
| ]) |
| ])() |