Monaco Editor教程(十七):代码信息指示器CodeLens配置详解
创始人
2024-02-04 14:35:49
0

背景

有时候我们在使用VS Code编辑一个文件时 会看到这样的效果
在这里插入图片描述
在上述的图片中,1720行和1721行之间,有一行不属于该文件本身内容的注释。这一效果能够方便开发者快速地理解代码,看到代码的提交人,时间,可能还会有备注。在复制内容时,这部分是不会被复制的。 这一交互的实现,是借助了monaco的代码信息指示器 CodeLens ,而其中的Git信息则是借助了VS code 插件 GitLens
本篇文章就来解析一下monaco中CodeLens的使用,帮助大家实现一个更加优秀的WEB IDE。

代码信息指示器CodeLens

CodeLens的含义是代码信息指示器,是一种能够帮助开发者理解代码,并不存在于文章内容的辅助信息。不同于直接写到文件的代码注释(和之前讲解的Marker来帮助开发者理解代码含义),CodeLens它是不存在于文件内容中的,但它直接显示在编辑器的特定行内。并且在复制文件内容是,它不会被复制。这就是它区别于其他辅助信息,备注信息的特性。它的内容是和Maker一样都是来自于文件外,人为设置或利用插件获取。

CodeLens通常是以一行信息来表现。但它并不是真正的一行。同样它是作用于语言模型的,而不是直接在editor对象上直接添加。
下面就来从它是使用方面和API来对其详细地解析。

如何使用CodeLens

要使用codeLens,首先要使用 monaco.languages.registerCodeLensProvider(languageSelector: LanguageSelector, provider: CodeLensProvider): IDisposable 方法。

该方法是在monaco.languages对象下, 需要输如两个参数,一个是语言选择器, 可以是语言字符串如javascript,也可以是语言字符串 数组如['javascript', 'java','python']
第二参数是配置的CodeLens,叫做他的类型是 CodeLensProvider
CodeLensProvider下有一个属性和二个方法。分别是
onDidChange 属性 codelens 事件改变
provideCodeLenses 函数 传入语言模型与token, 返回 CodeLensList 用于定义 codelens
resolveCodeLens 函数 codeLens 暂时不清楚啊,文档上也没写。

CodeLensList 对象中,又有一个下级对象lenseslenses 下定义是这样

这里给出一个结构图

registerColorProvider方法中 需要定义 provideCodeLenses 方法,provideCodeLenses 方法 需要用户返回 CodeLensList对象,
CodeLensList对象的内部是 lenseslenses 内部包含rangecommand。 看起来很复杂,那让我们直接看一个例子吧。

var editor = monaco.editor.create(document.getElementById('container'), {value: '{\n\t"dependencies": {\n\t\t\n\t}\n}\n',language: 'json',
})// 声明一个用于codeLens的 comand,点击codelens 弹窗提示。
var commandId = editor.addCommand(0,function() {// services available in `ctx`alert('It is Fizz Code')},'',
)monaco.languages.registerCodeLensProvider('json', {provideCodeLenses: function(model, token) {return {lenses: [{range: {startLineNumber: 3,startColumn: 111,endLineNumber: 8,endColumn: 10,},id: 'Fizz CodeLens',command: {id: commandId,title: `在第3行添加拿我格子衫来12121`,},},],dispose: () => {},}},resolveCodeLens: function(model, codeLens, token) {return codeLens},
})

从上面可以看到,在使用时,注意在registerCodeLensProvider方法内定义provideCodeLenses 方法,返回一个lenses 数组。

在每一个lenses中, 需要定义range(必填),可以定义id, command(非必填)。
看一下具体效果

具体效果

在这里插入图片描述

经过调试发现,在定义range时,能够影响到codelens的 只有startLineNumber 属性。 其他的属性都影响不到codelens的位置。
出现codelens 的哪一行,无法聚焦,只可以点击codelens中的文字内容。codelens的内容无法多行。

完整代码

完整html代码


Hello World Monaco Editor

Hello World Monaco Editor

总结

今天我们又学到了一种在编辑器中 添加辅助备注信息的方式。不用于之前介绍的Mark,codelens是占用编辑器虚拟行,却不是文件内容。

相关内容

热门资讯

他真了不起作文 他真了不起作文500字(通用8篇)  在日常学习、工作抑或是生活中,大家总免不了要接触或使用作文吧,...
倒写西游记作文 倒写西游记作文倒写西游记如来佛祖有五位弟子,旃檀功德佛是唐僧,斗战胜佛是孙悟空,净坛使者是猪悟能,金...
生活因亲情而精彩作文 生活因亲情而精彩作文8篇  在我们平凡的日常里,大家一定都接触过作文吧,作文是经过人的思想考虑和语言...
启迪作文600字 【精选】启迪作文600字(通用47篇)  无论是身处学校还是步入社会,大家总免不了要接触或使用作文吧...
过年的作文400字 关于过年的作文400字(通用65篇)  在现实生活或工作学习中,大家都有写作文的经历,对作文很是熟悉...
提笔忘字作文600字 提笔忘字作文600字(精选59篇)  导语:很多时候,我们如今越来越少写字,基本拿起笔都会忘记某个字...
感恩母爱作文800字 关于感恩母爱作文800字合集七篇  在平凡的学习、工作、生活中,大家都尝试过写作文吧,作文是一种言语...
智能电脑 智能电脑智能电脑正文: 今天老师检查作业时,又有几个小朋友没完成作业。问其原因,原来只顾着完电脑游戏...
老师的眼睛作文 老师的眼睛作文老师的眼睛真美,走路时我摔倒了,老师用眼睛对我一笑,我就不疼了。老师的眼睛真亮,提问题...
井底之蛙续写作文200字 井底之蛙续写作文200字(精选14篇)  在平时的学习、工作或生活中,大家对作文都再熟悉不过了吧,作...
代价的作文 代价的作文  在日常生活或是工作学习中,说到作文,大家肯定都不陌生吧,作文是从内部言语向外部言语的过...
春天的小作文 关于春天的小作文  在学习、工作或生活中,大家都尝试过写作文吧,作文是人们把记忆中所存储的有关知识、...
写事的作文300字 关于写事的作文300字(通用27篇)  在平平淡淡的学习、工作、生活中,大家总少不了接触作文吧,作文...
我不只属于我优秀作文600字 我不只属于我优秀作文600字(通用31篇)  在平平淡淡的日常中,大家总少不了接触作文吧,作文根据写...
谢谢你作文700字 谢谢你作文700字(通用20篇)  在日常生活或是工作学习中,大家都接触过作文吧,写作文可以锻炼我们...
一盏灯作文500字 一盏灯作文500字(精选28篇)  在日常学习、工作或生活中,大家都经常看到作文的身影吧,作文根据写...
新年的作文600字 【必备】新年的作文600字(通用27篇)  在现实生活或工作学习中,许多人都有过写作文的经历,对作文...
窗外850字作文 窗外850字作文  窗外是满目的金黄,盛放在清早透明的晨光中。  每个秋冬之际,那几棵秀拔的银杏便会...
触摸勇气作文 触摸勇气作文  无论在学习、工作或是生活中,大家都不可避免地要接触到作文吧,作文是一种言语活动,具有...
照妖镜作文 照妖镜作文  在日常学习、工作抑或是生活中,大家一定都接触过作文吧,借助作文人们可以实现文化交流的目...