Monaco 中添加 CodeLens

CodeLens 会在指定代码行上添加一行可点击的文字,点击时可以触发定义的命令,效果如下:

在这里插入图片描述

通过调用 API 注册 LensProvider,点击时触发 Command,首先要注册命令,通过 editor.addCommand () 方法进行注册。三个参数分别为快捷键、处理实现方法 和 上下文。
在这里插入图片描述

registerCodeLensProvider 提供两个函数

  • provideCodeLenses: 创建 Lens
  • resolveCodeLens:返回 Lens

export function codeLensProvider(editor, monaco){var commandId = editor.addCommand(monaco.KeyCode.F9,function () {// services available in `ctx`alert("my command is executing!");});// Add CodeLens providerlet removeCodeLens =  monaco.languages.registerCodeLensProvider('javascript', {provideCodeLenses: function(model, token) {return {lenses: [{range: {startLineNumber: editor.getPosition().lineNumber,startColumn: 1,endLineNumber: editor.getPosition().lineNumber,endColumn: 1},id: 'helloWorldLens'}],dispose: function() {}};},resolveCodeLens: function(model, codeLens, token) {codeLens.command = {id: commandId,title: 'Run Hello World',tooltip: 'Click to run the helloWorld function'};return codeLens;}});console.log(removeCodeLens)return removeCodeLens
}

点击时添加 Provider,同时删除上一个 Provider, 否则会出现重复提示。

import logo from './logo.svg';
import './App.css';
import MonacoEditor from 'react-monaco-editor';
import {codeLensProvider} from './editor'
import { useRef, useState,useEffect }  from 'react';function App() {const editorRef = useRef(null);const monacoRef = useRef(null);const decorationsRef = useRef([]);const [removeCodeLens, setRemoveCodeLens] = useState(null);const handleEditorDidMount = (editor, monaco) => {editorRef.current = editor;monacoRef.current = monaco;editor.onDidChangeCursorPosition(() => {setRemoveCodeLens(codeLensProvider(editor, monaco))});  };useEffect(() => {return ()=>{ if (removeCodeLens && typeof removeCodeLens.dispose === 'function') {removeCodeLens.dispose();}}}, [removeCodeLens]);useEffect(() => {// Define custom styles for the decorationsconst style = document.createElement('style');style.innerHTML = `.myAfterContentDecoration::after {content: ' // 备注';color: green;font-weight: bold;}`;document.head.appendChild(style);}, []);return (<div style={{'margin':'100px auto', 'width': '800px'}}><MonacoEditorwidth="800"height="600"language="javascript"theme="vs-dark"value={`// Write your JavaScript code here
function helloWorld() {console.log('Hello, world!');
}
helloWorld();`}options={{selectOnLineNumbers: true}}editorDidMount={handleEditorDidMount}/></div>);
}export default App;

最终效果,点击事件发生时,在当前代码行上加一行文字并可以点击。
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/43712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7月9日学习打卡-回文链表,交叉链表

大家好呀&#xff0c;本博客目的在于记录暑假学习打卡&#xff0c;后续会整理成一个专栏&#xff0c;主要打算在暑假学习完数据结构&#xff0c;因此会发一些相关的数据结构实现的博客和一些刷的题&#xff0c;个人学习使用&#xff0c;也希望大家多多支持&#xff0c;有不足之…

python使用tkinter添加下载进度UI

添加进度组件 def download(): # 创建下载进度框progress_window tk.Toplevel()progress_window.title("下载进度")progress_label tk.Label(progress_window, text"正在下载视频文件...")progress_label.pack(pady10)progress_bar ttk.Progre…

【微信小程序开发实战项目】——个人中心页面的制作

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

canvas高清绘制与retina屏

一、retina屏 视网膜显示屏&#xff08;英语&#xff1a;Retina Display&#xff09;是一种由苹果公司设计和委托制造的现实屏幕&#xff0c;具备足够高像素密度而使得人体肉眼无法分辨其中单独像素点的液晶屏幕。 比如&#xff0c;初期Retina屏幕的分辨率为640960&#xff0…

在 PostgreSQL 里如何处理数据的版本跟踪和回滚?

文章目录 一、事务二、保存点三、使用版本控制扩展四、审计表和触发器五、使用时间戳列六、比较和还原数据七、考虑数据备份和恢复八、结论 在数据库管理中&#xff0c;数据的版本跟踪和回滚是非常重要的功能&#xff0c;有助于在数据操作出现错误或需要回滚到特定状态时进行有…

HINet: Half Instance Normalization Network for Image Restoration

论文&#xff1a;HINet: Half Instance Normalization Network for Image Restoration Abstract&#xff1a; 在本文中&#xff0c;我们探讨了实例归一化在低级视觉任务中的作用。 具体来说&#xff0c;我们提出了一个新颖的块&#xff1a;半实例归一化块&#xff08;HIN 块&…

洛谷 数学进制 7.9

P1100 高低位交换 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码一 #include<bits/stdc.h> using namespace std; typedef long long ll; #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)const ll N1e510; char a[N];int main() {IOS;ll a;int b[32]…

十分钟且一次性带你学懂泛型编程思想(模板化思想)

引言 在编程的世界里&#xff0c;泛型编程思想&#xff08;模板化思想&#xff09;是一种极具魅力的编程范式。它允许我们编写出具有高度通用性和可重用性的代码&#xff0c;极大地提高了开发效率和代码质量。无论你是初学者还是有一定经验的开发者&#xff0c;掌握泛型编程思想…

GNU/Linux - 什么是loopback设备

在计算机科学中&#xff0c;特别是在类Unix操作系统中&#xff0c;环回设备&#xff08;loopback device&#xff09;是一种虚拟设备&#xff0c;它将一个文件映射为块设备。这使得可以像访问物理磁盘或分区一样访问一个文件。环回设备通常用于挂载磁盘镜像、操作文件系统镜像以…

【单链表】05 有一个带头结点的单链表L,设计一个算法使其元素递增有序。

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux算法题上机准备 &#x1f618;欢迎 ❤️关注 &#x1f44d;点赞 &#x1f64c;收藏 ✍️留言 题目 有一个带头结点的单链表L,设计一个算法使其元素递增有序。 算法思路 解决办法有很多&…

代码随想录训练营第三十三天 509斐波那契数列 70爬楼梯 746使用最小花费爬楼梯

第一题&#xff1a; 原题链接&#xff1a;509. 斐波那契数 - 力扣&#xff08;LeetCode&#xff09; 本题很简单&#xff0c; 递推公式&#xff1a;dp[i] dp[i - 1] dp[i - 2]; 初始化dp[0] 0; dp[1] 1; 顺序遍历即可 代码如下&#xff1a; class Solution { public…

商品分页,商品模糊查询

一、商品分页 引入分页 定义分页主件的参数 在请求url上拼接参数 定义改变当前页码后触发的事件&#xff0c;把当前页码的值给到分页表单&#xff0c;重新查询 二、商品查询&#xff08;以商品的名称查询name为例&#xff09; 引入elementplus的from表单组件 定义一个FormData…

实现在列表框内及列表框间实现数据拖动:在工作表界面窗体的加载

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

three-platformize 微信小程序 uniapp 使用截图功能

最近需要将3d场景进行截图&#xff0c;但是网上的各种各样&#xff0c;看的我一团乱麻&#xff0c;因此在解决完后就将这些简单的分享一下&#xff1b; 原理&#xff1a;将3维场景的那个canvas中的像素提取出来&#xff0c;找一个空的canvas二维画布放上去&#xff0c;然后用二…

jitsi 使用JWT验证用户身份

前言 Jitsi Meet是一个很棒的会议系统,但是默认他运行所有人创建会议,这样在某种程度上,我们会觉得他不安全,下面我们就来介绍下使用JWT来验证用户身份 方案 卸载旧的lua依赖性sudo apt-get purge lua5.1 liblua5.1-0 liblua5.1-dev luarocks添加ubuntu的依赖源,有则不需…

运维锅总详解设计模式

本首先简介23种设计模式&#xff0c;然后用Go语言实现这23种设计模式进行举例分析。希望对您理解这些设计模式有所帮助&#xff01; 一、设计模式简介 设计模式是软件设计中用于解决常见设计问题的一套最佳实践。它们不是代码片段&#xff0c;而是解决特定问题的通用方案。设…

Xilinx 的aarch32 aarch64 armr5 编译器区别

对于 Xilinx 设备&#xff0c;特别是使用 Vivado 或 Vitis IDEs 开发的那些&#xff0c;针对不同 ARM 架构如 aarch32、aarch64 和 ARM R5&#xff0c;使用的编译器也会有所不同。以下是这些架构在 Xilinx 开发环境中常用的编译器&#xff1a; 1. AArch32 (ARM 32位) 对于 Xi…

给元素的margin-top/top设置百分比,是基于什么进行计算?

1、普通元素 margin-top&#xff1a;基于父元素的宽度计算 2、relative元素 margin-top&#xff1a;基于自身的宽度计算top&#xff1a;基于自身的宽度计算 3、absolute元素 margin-top&#xff1a;基于最近一级的非static元素的宽度计算top&#xff1a;基于最近一级的非s…

Apache AGE 安装部署

AGE概述 概述 我们可以通过源码安装、拉取docker镜像运行、直接使用公有云三种方式中的任意一种来使用Apache AGE 获取 AGE 发布版本 可以在 https://github.com/apache/age/releases 找到发布版本和发布说明。 源代码 源代码可以在 https://github.com/apache/age 找到…

PowerShell install 一键部署mysql 9.0.0

mysql 前言 MySQL 是一个基于 SQL(Structured Query Language)的数据库系统,SQL 是一种用于访问和管理数据库的标准语言。MySQL 以其高性能、稳定性和易用性而闻名,它被广泛应用于各种场景,包括: Web 应用程序:许多动态网站和内容管理系统(如 WordPress)使用 MySQL 存…