Monaco 中支持代码折叠功能,FolderRangeProvider 是一个通知功能,编辑文档会根据大括号的范围进行折叠,也就是可折叠区域都是以左大括号开始,右大括号结束,当折叠区域发生变更时,内部方法会被调用。
通过 registerFoldingRangeProvider 进行注册,实现 Provider 方法。
registerFoldingRangeProvider 可以返回折叠区域,返回的区域会编辑器左侧进行展示。
代码实现如下
export function foldingRangeProvider(editor: monacoEditor.editor.IStandaloneCodeEditor, monaco: typeof monacoEditor){return monaco.languages.registerFoldingRangeProvider('javascript', {provideFoldingRanges: function(model, context, token) {const ranges: monacoEditor.languages.FoldingRange[] = [];const lines = model.getLinesContent();let startLine = -1;for (let i = 0; i < lines.length; i++) {const line = lines[i];if (line.trim().startsWith('function')) {if (startLine !== -1) {ranges.push({ start: startLine, end: i - 1 });}startLine = i;}}if (startLine !== -1) {ranges.push({ start: startLine, end: lines.length - 1 });}return ranges;}
});
}
最终效果如下