// 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 ]) ])()