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