import { bracketMatching, MatchResult } from '@codemirror/language'; import { Decoration, EditorView } from '@codemirror/view'; import { bracketsDarkT, bracketsLightT } from '../../utils/color'; const matchingMark = Decoration.mark({class: 'cc-matchingBracket'}); const nonmatchingMark = Decoration.mark({class: 'cc-nonmatchingBracket'}); function bracketRender(match: MatchResult) { const decorations = []; const mark = match.matched ? matchingMark : nonmatchingMark; decorations.push(mark.range(match.start.from, match.start.to)); if (match.end) { decorations.push(mark.range(match.end.from, match.end.to)); } return decorations; } const darkTheme = EditorView.baseTheme(bracketsDarkT); const lightTheme = EditorView.baseTheme(bracketsLightT); export function ccBracketMatching(darkMode: boolean) { return [ bracketMatching({ renderMatch: bracketRender, brackets:'{}[]()' }), darkMode ? darkTheme : lightTheme ]; }