monaco-editor实现C#自定义语法的智能提示

Monaco  Editor 实现自定义C#方法的智能提示

  1. 下载安装:  npm install monaco-editor
  2. index.html内主体文件引入
  • MonacoEditor加载器文件:<script src="./node_modules/monaco-editor/dev/vs/loader.js"></script>
  • 配置编辑器文件:<script src="index.js"></script>
  • C#自定义方法文件:<script src="csharpFn.js"></script>
  • 编辑器容器:<div id="container" style="height: 1000px; width:100%;"></div>
  1. index.js配置
//初始化配置路径
var monacoEditor;
require.config({//设置插件引用路径
     paths: {'vs': 'node_modules/monaco-editor/dev/vs'},
	     'vs/nls': { availableLanguages: {'*': 'zh-cn'}
     }
});

//实例化绑定对象并赋值
require(['vs/editor/editor.main'], function() {
	monacoEditor = monaco.editor.create(document.getElementById('container'), {
		value: "public void",//初始化赋值
		language: 'csharp',//编写的语言类型
		wordWrap: "on", //自动换行,注意大小写
		wrappingIndent: "indent",
		theme: "vs-dark" //皮肤设置  vs vs-dark hc-black
	});
					
	//自定义监听输入编写语法/
	monaco.languages.registerCompletionItemProvider('csharp', {
		provideCompletionItems: function(model, position) {
			//自定义匹配逻辑....
                        var textUntilPosition = model.getValueInRange({
                                startLineNumber: 1,
                                startColumn: 1,
                                endLineNumber: position.lineNumber,
                                endColumn: position.column
                        });
                        var match = textUntilPosition.match(/\s*$/);
                        var suggestions = match ? createDependencyProposals() : [];
                        
                       //点方法调用
                       if(textUntilPosition.charAt(textUntilPosition.length-1)=='.'){
                            //当是点时匹配自定义的方法 ...
                        }else{
                           return {suggestions: suggestions};
                        }

		}
		triggerCharacters: ['.'] // 写触发提示的字符,可以有多个
	})
})
  1. csharpFn.js C#自定义方法文件配置
  2. function createDependencyProposals() {
    	return [
    		{
    			label: 'context', //显示的提示名称
    			insertText: 'context' //选择后粘贴到编辑器中的文字
    		},
    		{
    			label: 'BuyGoods()', //显示的提示名称
    			kind: 1,//图标显示类型
    			insertText: 'BuyGoods(CSTradeScriptContext context, StockPrice price)',
    			childs: [//该方法的子类方法,可通过点语法调用
    					{
    						label: 'Goods1()',
    						insertText: 'Goods1()' 
    					},{
    						label: 'Goods2()',
    						insertText: 'Goods2()'
    					}
                                    ]
    		}
    }

     

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: monaco-editor是一个基于web代码编辑器,它支持自定义提示功能。用户可以通过编写插件或者配置文件来实现自定义提示。 具体来说,用户可以通过以下步骤来实现自定义提示: 1. 编写一个插件或者配置文件,定义需要提示的关键字、变量、函数等信息。 2. 将插件或者配置文件加载到monaco-editor中。 3. 在编辑器中输入代码时,当输入到定义的关键字、变量、函数等时,会自动弹出提示框,显示相关信息。 需要注意的是,自定义提示功能需要一定的编程经验和monaco-editor的使用经验。如果您不熟悉这些知识,建议先学习相关的教程和文档。 ### 回答2: Monaco Editor 是一个轻量级的代码编辑器,由微软开发,可用于 Web 应用程序开发中。它可以很好地支持多种编程语言,如 JavaScript、TypeScript、HTML、CSS、Java、Python、PHP、C# 等。在使用中,Monaco Editor 提供了一些自动提示功能,可以帮助开发人员更快地编写代码。在这个过程中,我们也可以为 Monaco Editor 添加自定义提示。 为 Monaco Editor 自定义提示,我们需要实现两个步骤。首先,我们需要定义一个词汇表对象,它将包含我们想要显示的提示列表。这个对象将存储我们在输入时要显示的类别和相应的提示条目。其次,我们需要创建词法分析器来解析并检查用户输入的代码。 下面是一组步骤,可以帮助我们在 Monaco Editor 中添加自定义提示: 第一步:定义提示 我们可以定义一个数组来存储提示数据,在数组中,我们可以定义需要显示的类别和类别下的提示列表。例如: ```javascript var myAutoCompletionProvider = { getId: function() { return 'myAutocomplete'; // 唯一标识 }, provideCompletionItems: function(model, position) { var result = []; result.push({ label: 'foo', insertText: 'foo', kind: monaco.languages.CompletionItemKind.Function,// 类型是 Function documentation: 'This is a function.'// 注释 }); result.push({ label: 'bar', insertText: 'bar', kind: monaco.languages.CompletionItemKind.Variable,// 类型是 Variable documentation: 'This is a variable.'// 注释 }); return { suggestions: result }; } }; ``` 在这个例子中,我们定义了一个名为 "myAutoCompletionProvider" 的对象,其中包含一个定义某些类别和类别下的提示条目的 "provideCompletionItems" 函数。通过 "provideCompletionItems" 函数,Monaco Editor 可以根据当前的文本提示用户可以输入的单词,例如,当用户输入“f”,使用该函数时,Monaco Editor 将显示 "foo"。 第二步:添加到 Monaco Editor 中 为了使用自定义提示,我们需要将 "myAutoCompletionProvider" 对象添加到 Monaco Editor 的 LanguageConfiguration 中。要将其添加到 Monaco Editor 中,我们应该: ```javascript monaco.languages.registerCompletionItemProvider('javascript', myAutoCompletionProvider); ``` 在这个例子中,我们将 "myAutoCompletionProvider" 添加到了 "javascript" 语言中。这意味着,在 JavaScript 文件中使用 Monaco Editor 时,将显示 "myAutoCompletionProvider" 中定义的提示。如果我们想在其他语言中使用这些提示,我们可以更改 'javascript' 为其他语言的名称。 第三步:运行并测试我们的自定义提示 现在,当我们在 Monaco Editor 中编写 JavaScript 代码时,Monaco Editor 将显示 "myAutoCompletionProvider" 对象中定义的提示。这些提示将有助于我们更快地编写代码。例如,当我们在输入代码时输入 "f",Monaco Editor 将会自动显示 "foo" 和 "bar"。 总结 Monaco Editor 提供了自定义提示的能力,通过提供我们自己的词汇表对象和创建词法分析器,我们可以添加我们自己的提示。这将大大提高代码编写和修改的效率。 ### 回答3: Monaco Editor是一款优秀的代码编辑器,它的智能提示功能非常强大,可以提供代码自动补全、参数提示、错误提示等多种功能。但是有时候我们需要自定义自己的提示信息,例如添加一些特定的代码片段或者自定义函数等,这时候就需要使用Monaco Editor自定义提示功能了。 Monaco Editor自定义提示功能使用的是语言服务器协议(Language Server Protocol,LSP),通过编写LSP服务器来提供自定义提示信息。LSP服务器是一种基于标准协议的进程,它可以与任何支持LSP的编辑器进行通信,提供代码分析、自动补全、错误检测等功能。 为了实现自定义提示功能,我们需要编写一个LSP服务器,并将其与Monaco Editor进行集成。具体步骤如下: 1. 编写LSP服务器:我们可以使用任何一种程序语言编写LSP服务器,例如Java、Python、C++等。编写LSP服务器的关键是要遵守LSP协议,实现协议中定义的方法和接口,并提供自定义提示信息。有许多现成的LSP库可以使用,例如Microsoft提供的LSP SDK,也可以使用一些第三方库,例如Eclipse JDT提供的Java LSP。 2. 配置Monaco Editor:在配置Monaco Editor之前,我们需要先将LSP服务器部署在一个可访问的地址上。然后,在Monaco Editor中添加一个LSP客户端,用于与LSP服务器进行通信。可以使用Monaco Editor提供的monaco-languages扩展库来添加LSP客户端,具体方法可以参考官方文档。 3. 提供自定义提示信息:一旦LSP服务器和Monaco Editor集成完成,我们就可以开始提供自定义提示信息了。在LSP服务器中编写代码分析算法,为代码添加自定义提示信息,例如添加特定的代码片段、自定义函数等。然后在Monaco Editor中使用这些提示信息,提供更好的代码智能提示功能。 总的来说,Monaco Editor自定义提示功能非常强大,可以为代码编辑提供更多的便利和智能化。但是开发一个LSP服务器并不是一件简单的事情,需要掌握很多技术和知识。如果没有必要,建议使用Monaco Editor提供的默认提示功能,或者使用一些现成的LSP服务器,例如Java LSP或Python LSP。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值