monaco-editor 代码补全(不带弹窗)

2,247 阅读1分钟

需求介绍:需要在已有的代码编辑器上增加AI辅助编码的功能,类似于VSCode中的Ai辅助编码 image.png

项目上原来也自己做了代码补全的功能,不过是带弹窗的类似于这种 image.png

代码如下

monaco.languages.registerCompletionItemProvider('javascript', {
  provideCompletionItems: function (model, position) {
    // find out if we are completing a property in the 'dependencies' object.
    console.log('执行自定义补全逻辑');
    return {
      suggestions: [
        {
          label: {
            label: '"my-third-party-library"',
            detail: 'description',
            description: 'ssssdddffff',
          },
          kind: monaco.languages.CompletionItemKind.Function,
          documentation: 'Describe your library here',
          insertText: 'my-third-party-library /n    abcde /n    123123123123',
          preselect: true,
        } as any,
      ],
    };
  },
  resolveCompletionItem(item, token) {
    item.documentation = 'documentation';
    return item;
  },
});

运行效果:

image.png

通过查看相关文档,发现monaco-editor还提供一个行内代码补全的provider,模仿上述代码做了一份:

monaco.languages.registerInlineCompletionsProvider('javascript', {
  provideInlineCompletions: function (model, position) {
    return {
      items: [
        {
          label: {
            label: '"my-third-party-library"',
            detail: 'description',
            description: 'ssssdddffff',
          },
          kind: monaco.languages.CompletionItemKind.Text,
          documentation: 'Describe your library here',
          insertText: 'my-third-party-library \n    123123123\n123333221',
          insertTextRules: 0,
        } as any,
      ],
    };
  },
  freeInlineCompletions(completion: any) {
  },
});

运行效果:

image.png