Monaco 使用 SymbolProvider

Monaco 中提供一个搜索符号的功能,可以快速跳转到指定符号的位置,可以通过实现 SymbolProvider 实现自定义的 Symbol,如下图,function1 是自定义的符号,当进入符号列表时可以看到 “a1"。
在这里插入图片描述
通过 registerDocumentSymbolProvider 注册自定义 Symbol 方法。

在这里插入图片描述
实现 provideDocumentSymbols 并返回 Symbols 列表
在这里插入图片描述
DocumentSymbol 包含的主要属性
在这里插入图片描述

实现代码如下

export function documentSymbolProvider(editor: monacoEditor.editor.IStandaloneCodeEditor, monaco: typeof monacoEditor){
  return monaco.languages.registerDocumentSymbolProvider('javascript', {
    provideDocumentSymbols: function(model, token) {
        const symbols: monacoEditor.languages.DocumentSymbol[] = [];
        const lines = model.getLinesContent();

        lines.forEach((line, lineNumber) => {
            const match = /function1\s+(\w+)/.exec(line);
            if (match) {
                const symbol: monacoEditor.languages.DocumentSymbol = {
                  name: match[1],
                  detail: '',
                  tags: [],
                  kind: monaco.languages.SymbolKind.Function,
                  range: {
                      startLineNumber: lineNumber + 1,
                      startColumn: line.indexOf('function1') + 1,
                      endLineNumber: lineNumber + 1,
                      endColumn: line.length + 1,
                  },
                  selectionRange: {
                      startLineNumber: lineNumber + 1,
                      startColumn: line.indexOf('function1') + 1,
                      endLineNumber: lineNumber + 1,
                      endColumn: line.length + 1,
                  },
                  children: []
              }
                symbols.push(symbol);
            }
        });

        return symbols;
    }
});
}

相关推荐

  1. 使用 Monaco Editor 开发 SQL 编辑器

    2024-07-19 17:36:04       28 阅读
  2. vue3.0-monaco组件封装

    2024-07-19 17:36:04       35 阅读
  3. monaco-editor设置语言、值等

    2024-07-19 17:36:04       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 17:36:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 17:36:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 17:36:04       58 阅读
  4. Python语言-面向对象

    2024-07-19 17:36:04       69 阅读

热门阅读

  1. 构建高可用应用的设计模式与实践

    2024-07-19 17:36:04       18 阅读
  2. MySQL简介

    2024-07-19 17:36:04       13 阅读
  3. Flutter 插件之 package_info_plus

    2024-07-19 17:36:04       19 阅读
  4. 《吴哥窟》歌词解析

    2024-07-19 17:36:04       18 阅读
  5. 5、PostgreSQL之数据定义

    2024-07-19 17:36:04       17 阅读
  6. yolov8pt转onnx(官方代码)

    2024-07-19 17:36:04       19 阅读
  7. PostgreSQL的Json数据类型如何使用

    2024-07-19 17:36:04       21 阅读
  8. ubuntu gcc g++版本切换

    2024-07-19 17:36:04       15 阅读