Monaco 多行提示的实现方式

AI 代码助手最近太火爆,国内有模型厂商都有代码助手,代码助手是个比较典型的 AI 应用,主要看前端,后端的模型都差不多,国内外都有专门的代码模型。现在都是集中在 VSCode 和 Idea的插件,本文通过 Monaco 实现一个多行代码提示,通过 monaco.languages.registerInlineCompletionsProvider 实现即可,Monaco 的 API 特别丰富,就是文档差点儿。代码中这个 range 没什么用,从 API 来看应该是代码插入代码的区域,但是 end-start 不要出现负值,否则会出问题。在调用的后端的时候,要用节流,请求就太多了,模型受不了。

import logo from './logo.svg';
import './App.css';
import MonacoEditor from 'react-monaco-editor';

import { useRef, useState,useEffect }  from 'react';

function App() {
  const editorRef = useRef(null);
  const monacoRef = useRef(null);
  const decorationsRef = useRef([]);

  const handleEditorDidMount = (editor, monaco) => {
    editorRef.current = editor;
    monacoRef.current = monaco;
    

    monaco.languages.registerInlineCompletionsProvider('javascript', {
      provideInlineCompletions: (model, position, context, token) => {

        const multiLineCompletion = {
          text: "example() {\n\tconsole.log('Hello, world!');\n}\nexample();",
          range: {
            startLineNumber: position.lineNumber,
            startColumn: 10,
            endLineNumber: position.lineNumber,
            endColumn: 10,
          },
        };

        return {
          items: [
            {
              insertText: multiLineCompletion.text,
              range: new monaco.Range(
                multiLineCompletion.range.startLineNumber,
                multiLineCompletion.range.startColumn,
                multiLineCompletion.range.endLineNumber,
                multiLineCompletion.range.endColumn
              ),
            },
          ],
        };
      },
      freeInlineCompletions(arg) {
      }
    });

  };

  useEffect(() => {
    // Define custom styles for the decorations
    const 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'}}>
   <MonacoEditor
        width="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;

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

O2OA平台所提供的开箱即用的内置应用

本篇介绍一下O2OA平台所提供的开箱即用的内置应用 作为协同办公领域的快速开发平台&#xff0c;为了让企业能够快速搭建企业级的协同应用&#xff0c;O2OA在设计之初就内置了一些通用的、实用的企业办公应用&#xff0c;如考勤管理&#xff0c;日程管理&#xff0c;会议管理等…

redis相关知识记录

redis基本数据类型 Redis⽀持五种主要数据结构&#xff1a;字符串&#xff08;Strings&#xff09;、列表&#xff08;Lists&#xff09;、哈希表&#xff08;Hashes&#xff09;、集合&#xff08;Sets&#xff09;和有序集合&#xff08;Sorted Sets&#xff09;。这些数据结…

UNI_App平台调试指南 debug(十五)

App平台调试指南 debug 常规开发里,在 HBuilderX 的运行菜单里运行 App,手机端的错误或 console.log 日志信息会直接打印到控制台。 如果需要更多功能,比如审查元素、打断点 debug,则需要启动调试模式。自 HBuilderX 2.0.3+ 版本起开始支持 App 端的调试。 #打开调试窗口…

浅谈三车平台车型对比功能实用奖-竞品分析

目录&#xff1a; 一、项目背景 二、竞品概述 三、竞品目标功能对比 3.1、车型对比入口位置 3.2、车型对比首页 3.3、添加/删除车型功能 3.4、选择车型后功能对比 3.5、配置对比的功能 四、总结 一、项目背景 在汽车购买过程中&#xff0c;消费者经常面临着选择困难&…

腰肌筋膜炎最好的治疗方法

腰部疼痛是腰肌筋膜炎的主要症状&#xff0c;这种疼痛可能是隐痛、酸痛或肿胀痛&#xff0c;且疼痛可能呈持续性或间歇性。在长时间站立、坐姿、弯腰或腰部受寒着凉后&#xff0c;疼痛通常会加重。疼痛可能会扩散到腰部的其他区域&#xff0c;甚至可能影响到臀部或大腿后侧。疼…

【CORS 报错】跨域请求问题:CORS 多种环境下的解决方案

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、CORS错误的常见原因二、解决方案1. Vue3 Vite项目下的解决方案创建Vue3 Vite项目配置Vite的代理发送请求 2. jQuery项目下的解决方案使用CORS请求头使用JSONP 3. 其他环境下的解决方案使用服务器端代理设置CORS头使用…

推荐一款功能强大的 GPT 学术优化开源项目GPT Academic:学术研究的智能助手

今天&#xff0c;我将向大家介绍一个强大的开源项目—GPT Academic&#xff0c;它或许正是你一直在寻找的理想工具。 已一跃成为 60.4k Star 的热门项目 GPT Academic 目前在 GitHub 上已经揽获了 60.4k 的 Star&#xff0c;这不仅反映了它的受欢迎程度&#xff0c;更证明了它…

汇川伺服 (5)直线驱动器功能

一、直线驱动器 流程 电机参数 设置编码器 设置过载保护线 相序辨识 角度辨识

Android使用AndServer在安卓设备上搭建服务端(Java)(Kotlin)两种写法

一直都是通过OkHttp远程服务端进行数据交互&#xff0c;突发奇想能不能也通过OkHttp在局域网的情况下对两个安卓设备或者手机进行数据交互呢&#xff1f; 这样一方安卓设备要当做服务端与另一个安卓设备通过OkHttp进行数据交互即可 当然还可以通过 socket 和 ServerSocket 通…

【简历】兰州某大学一本硕士:面试通过率基本是为0

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一个一本硕士的Java简历&#xff0c;那这个简历因为学校本身&#xff0c;它是一个一本的硕士&#xff0c;我们一般认为这一本硕士&a…

北极花APP携“项目协作”等新功能 亮相2024年生物多样性学术会议(7.14-15)

7月14-15日&#xff0c;由中国环境科学研究院等单位共同主办的2024年生物多样性学术会议在河北雄安召开。北极花创始人胡理乐教授受邀参加此次会议&#xff0c;并做专题报告&#xff0c;分享《北极花APP&#xff1a;数智赋能生物多样性监测与保护》。 胡教授将在会议上介绍北极…

设计云桌面用虚拟化行不行?

信息化日益深入发展&#xff0c;企业和组织对于灵活、高效且安全的办公环境需求愈发迫切。云桌面作为一种新兴的解决方案&#xff0c;凭借其虚拟化技术的优势&#xff0c;正在逐步改变传统的设计办公模式。 那么&#xff0c;设计云桌面采用虚拟化技术到底行不行&#xff1f;随…

SAP HCM 如何知道标准程序有自定义增强代码 Configure Debugger Layer

导读 INTRODUCTION Configure Debugger Layer &#xff1a;今天分享下我在处理HCM业务中&#xff0c;如何通过debug的Configure Debugger Layer找到标准程序中的客制化的代码&#xff1f;也许在网上查看到很多找badi的方法或者其他的办法&#xff0c;但是这些办法比较繁琐&…

【k8s部署elasticsearch】k8s环境下安装elasticsearch集群和kibana

文章目录 简介一.条件及环境说明二.需求说明三.实现原理及说明四.详细步骤4.1.规划节点标签4.2.创建三个statefulset和service headless配置4.3.创建service配置 五.安装kibana六.调整索引分区七.安装说明 简介 k8s集群中搭建有elasticsearch服务一般都会用到pvc&#xff0c;但…

Unity AssetsBundle 详解

文章目录 1.AssetBundle 概念2.AssetBundle 优势3.AssetBundle 特性4.AssetBundle 使用流程4.1 分组4.2 打包4.3 加载包4.4 加载资源4.5 卸载资源 5.AssetBundleManifest6.AssetBundle的内存占用7.AB包资源加密 1.AssetBundle 概念 AssetBundle又称AB包&#xff0c;是Unity提供…

Linux项目自动化构建工具make/Makefile

目录 前言1. Makefile 文件的基本构成2. makefile的依赖关系的自动化推导3. make执行过程中的一些现象及其原理3.1 证明该现象原理3.2 关于 stat 时间属性的拓展 前言 身处 linux 平台环境开发中的伙伴们都知道 gcc/g 编译器以及编译指令&#xff0c;但是不难想象在以后的生活…

解决方案 | IP地址申请专用HTTPS证书的常见问题

IP地址专用的HTTPS证书是一种专门为IP地址设计的SSL/TLS证书&#xff0c;它可以通过HTTPS协议安全地访问基于IP地址实现的网站或服务&#xff0c;以下是申请IP地址https证书时经常遇到的问题以及解决办法。 一 、如何选择合适的IP地址https证书的类型&#xff1f; 1、DV类型IP…

水文:CBA业务架构师

首先&#xff0c; 我们来了解一下什么是CBA业务架构师&#xff1f; CBA业务架构师认证是由业务架构师公会(Business Architecture Guild)授予的一种专业认证。标志着证书持有者已经掌握了业务架构的核心技能和知识&#xff0c;能够在实际工作中熟练运用业务架构技术和框架&…

安全极客团队荣获首届“矩阵杯”网络安全大赛人工智能挑战赛“三等奖”

近日&#xff0c;东半球规格高、规模大且奖金丰厚的网络安全顶级赛事——首届“矩阵杯”网络安全大赛在青岛国际会议中心圆满落幕。本次大赛设置了五大赛事&#xff0c;包括通用产品漏挖赛、国产软硬件安全检测赛、原创漏洞挖掘赛、人工智能&#xff08;大模型&#xff09;挑战…

CDH实操--集群卸载

作者&#xff1a;耀灵 1、停止正在运行的服务 a、控制台停止集群服务 b、控制台停止Cloudera Management Service c、命令行停止cm服务 systemctl stop cloudera-scm-agent #所有节点执行 systemctl stop cloudera-scm-server #cdh01节点执行2、主线并移除Parcles rm -r…