Editor 模式

一、介绍

为方便只需编辑器场景的业务接入,针对 editor 提供了单独的组件

核心能力

  • 只提供 editor 单视图
  • 加载体积更小、启动速度更快
  • 通过 react 组件来控制文档打开,接入方便
  • 针对代码托管平台提供离线索引支持

二、快速体验

示例工程见仓库,参照 README.md 说明运行 PRIVATE_TOKEN= npm run editor

三、组件接入说明

1)引入 JS 和 CSS

import { IAppInstance, EditorRenderer, registerLanguage, registerGrammar } from '@codeblitzjs/ide-core/bundle/codeblitz.editor';
import '@codeblitzjs/ide-core/bundle/codeblitz.editor.css';

editor 提供单独的 js 和 css 文件,通过从 bundle 中引入打包好的 js 和 css,省去了集成项目配置 less 等源文件的处理

2) 引入语言

和完整模式一致,参考链接

3) 组件使用

<EditorRenderer
  Langing={}
  appConfig={{...}}
  runtimeConfig={{...}}
  editorConfig={{...}}
  documentModel={{...}}
/>

props 说明

Landing

自定义工作空间加载样式,如不需要可省略

appConfig

对 IDE 应用进行配置

workspaceDir

和标准工作空间概念一样,建议不同项目使用不同的 workspace 路径

defaultPreferences

  • general.theme {string} 主题,内置了一套 ide 的主题色,亮色 'ide-light',暗色 'ide-dark'
  • editor.scrollBeyondLastLine {boolean} 最后一行禁止继续滚动
  • editor.forceReadOnly {boolean} 设置全局只读
  • lsif.enable {boolean} 是否开启 lsif
  • lsif.documentScheme {string} lsif 文档的 scheme,配置成 'file' 即可
  • lsif.env {'test' | 'prod'} 接口环境配置,对于测试环境的仓库, 应该配置 lsif.env = 'test' 来请求测试的 lsif 接口。因环境内部无法准确判断,因此切勿仅依赖内部来判断环境,接入方最好自行判断环境

runtimeConfig

运行相关的特殊配置

  • scenario

场景标识,在 editor 模式下推荐传 null,此时不会持久化缓存工作空间数据

  • startupEditor

启动时显示的编辑器,editor 下传 'none' 即可

  • hideEditorTab

隐藏 editor tab

  • unregisterKeybindings {string[]}

需要注销快捷键列表,可看 ide 上支持哪些快捷键

editorConfig

编辑器配置

  • stretchHeight {boolean}

编辑器是否自适应内容区高度,此时会完全展开 editor,内部不再有滚动条,代码行数过多时可能会有性能问题

  • disableEditorSearch {boolean}

禁用编辑器内搜索,此时会注销内部 ctrl/cmd + f 快捷键

documentModel

文档模型相关配置,用于定于文档打开的行为

  • type

支持 'code' | 'fs',代表不同的文档类型,对于代码平台传入 'code'

  • ref

分支、标签或 commit

  • owner

仓库群组或用户

  • name

仓库名

  • filepath

仓库文件路径,如传入的话,此时组件为受控模式

  • onFilepathChange

文件路径变更事件,对于定义跳转和光标前进或后退,当前文件会变更,通过此事件判断是否有文件路径变更,注意:对于跨库索引,此时的 filepath 回调为空字符串,上层判空来决定文件变更行为

  • readFile

读取文件接口,需返回 Uint8Array 格式的数据

  • encoding

文件编码,和标准工作空间支持编码类型一致,简单场景只传 utf8 或 gbk 即可

  • lineNumber {number | [number, number]}

单行或多行高亮

  • onLineNumberChange {number | [number, number]}

行号变更事件,在用户点击了行号以及文件跳转时会触发此事件,按住 shift 可多行连续选中

四、使用扩展

editor 下默认不引入扩展,这样可减少体积,如果有扩展的需求,则可以如下方式自行引入扩展

更改引入方式

  • 如果引用的是 bundle 文件,那么将 @codeblitzjs/ide-core/bundle/codeblitz.editor 的引用改为 @codeblitzjs/ide-core/bundle/codeblitz.editor.all 即可
  • 如果引用的是 lib 下资源,那么除了引用 @codeblitzjs/ide-core/lib/editor,还需引入 extension 相关文件
import { IAppInstance, EditorRenderer } from '@codeblitzjs/ide-core/lib/editor';
// 引入 extension
import '@codeblitzjs/ide-core/lib/editor.extension';