70 lines
2.2 KiB
TypeScript
70 lines
2.2 KiB
TypeScript
// 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
|
|
])
|
|
])()
|