Fix CodeMirror folding ranges
This commit is contained in:
parent
720c71157e
commit
33ea8b94f9
|
|
@ -25,19 +25,22 @@ const parserWithMetadata = parser.configure({
|
|||
LetExpression: context => context.column(context.node.from) + context.unit,
|
||||
}),
|
||||
foldNodeProp.add({
|
||||
Object: foldDelimited('lBrace', 'rBrace'),
|
||||
Array: foldDelimited('lBracket', 'rBracket'),
|
||||
MatchExpression: foldDelimited('lBrace', 'rBrace'),
|
||||
Object: foldDelimited('{', '}'),
|
||||
Array: foldDelimited('[', ']'),
|
||||
MatchExpression: foldDelimited('{', '}'),
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
function foldDelimited(openName, closeName) {
|
||||
return (node) => {
|
||||
const open = node.getChild(openName);
|
||||
const close = node.getChild(closeName);
|
||||
if (!open || !close || open.to >= close.from) return null;
|
||||
return { from: open.to, to: close.from };
|
||||
function foldDelimited(open, close) {
|
||||
return (node, state) => {
|
||||
const text = state.doc.sliceString(node.from, node.to);
|
||||
const openIndex = text.indexOf(open);
|
||||
const closeIndex = text.lastIndexOf(close);
|
||||
if (openIndex < 0 || closeIndex <= openIndex) return null;
|
||||
const from = node.from + openIndex + open.length;
|
||||
const to = node.from + closeIndex;
|
||||
return from < to ? { from, to } : null;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user