2 个版本

0.0.1 2024 年 7 月 12 日
0.0.0 2024 年 7 月 11 日

#44 in #natural

MIT 许可证

60KB
1K SLoC

自然语言语法高亮

自然-语法-LS 是一个语言服务器,它在纯文本中突出显示不同的词性(POS)。

安装

  1. 根据 Rust-BERT 文档下载 v2.1 版本的 libtorch

    提示。

    您可以在 tch-rs 的构建脚本中找到下载 libtorch 的 URL (请参阅 tch-rs 的构建脚本)。变量 LIBTORCH 应该是 torch/ 目录。

    为什么自动安装不起作用。

    Rust-BERT 有一个“自动安装”选项,它使用 tch-rs 的构建脚本来下载 libtorch。然而,这样产生的二进制文件无法运行,因为该 libtorch 不在 LD_LIBRARY_PATH 上。或者,您也可以静态链接 libtorch,但这将需要您自己下载 libtorch(请参阅 静态链接)。

  2. 使用 Cargo 或类似工具安装 natural_syntax_ls 包以获取 natural-syntax-ls 二进制文件

    cargo install natural_syntax_ls --default-features=false
    

    default-features 设置为 false 禁止下载 libtorch(自动安装)。

    为什么自动安装是默认的。

    否则运行持续集成将会很痛苦。

编辑器设置

✅ 使用 LSPConfig 的 NeoVim 设置

请将下面的 natural_syntax_ls_setup 函数粘贴到您的 Nvim 配置文件中,并使用您的客户端的 capabilities 调用它。 请参阅我的配置示例

natural_syntax_ls_setup 函数。
local function natural_syntax_ls_setup(capabilities)
    local lspconfig = require('lspconfig')
    require('lspconfig.configs')['natural_syntax_ls'] = {
        default_config = {
            cmd = { 'natural-syntax-ls' },
            filetypes = { 'text' },
            single_file_support = true,
        },
        docs = {
            description = [[The Natural Syntax Language Server for highlighting parts of speech.]],
        },
    }
    lspconfig['natural_syntax_ls'].setup {
        capabilities,
        init_options = {
            token_map_update = {
                -- Customize your POS-token mapping here. E.g.:
                --[[
                -- Disable coordinating conjunctions highlighting.
                CC = vim.NIL, -- `nil` does not work because it gets ignored.
                -- Highlight wh-determiners as enum members without any modifiers.
                WDT = { type = "enumMember" },
                -- Highlight determiners as read-only classes.
                DT = { type = "class", modifiers = { "readonly" } },
                ]]
            },
        },
    }
end

自定义

  • 我只设置了filetypes字段为text,但您也可以为任何其他文件类型启用自然语法-ls。请注意,尽管如此,语言服务器的语义标记默认会覆盖Tree-sitter高亮。
  • 通过在init_options中指定token_map_update字段,您可以自定义词性和语义标记之间的映射。
    • 默认映射在pos2token_bits函数中,见semantic_tokens.rs
    • 词性标签是lib.rsPartOfSpeech枚举的变体。
    • 标记类型和修饰符是semantic_tokens.rsTokenTypeTokenModifier的变体,全部使用驼峰命名法。

❓ Visual Studio Code和其他编辑器设置

没有官方支持,但欢迎社区插件。

我目前不使用VSCode和这些其他编辑器,因此我不想为它们维护插件。

然而,由于Natural-Syntax-LS实现了语言服务器协议(LSP),因此为它们实现插件应该很简单。所以,请自由制作插件并为我在这里创建一个链接。

选定的规范

预测调度

对于单个文档,一次只调度一个预测。当预测正在进行时,新更新将被排队,最新更新将替换任何先前排队的更新。

调试

我们使用带有env-filter功能的tracing-subscriber来发出日志^tracing-env-filter。请通过设置环境变量RUST_LOG来配置日志级别。

在macOS上,您可能需要设置DYLD_LIBRARY_PATH以运行测试。

未来工作

  • 自定义词性和语义标记之间的映射。
  • 支持除英语之外的语言。这只需要一个新的模型。
  • 增量更新和语义标记范围。
  • 不要覆盖Markdown/LaTeX语法高亮。

依赖项

~43MB
~737K SLoC