#lsp #editor #language-server #plugin #diagnostics #linter #run

app checkmate-lsp

一个用于运行外部检查/嗅探工具的 LSP 框架

2 个版本

0.1.1 2024年6月1日
0.1.0 2023年8月16日

#553开发工具

Download history 166/week @ 2024-05-29 14/week @ 2024-06-05 5/week @ 2024-06-12

每月 82 次下载

MIT 许可证

38KB
853

Checkmate-LSP

一个用于注入 LSP 诊断的 LSP 框架。最常见的用例是运行代码检查器(ESLint、Stylelint ...)并将错误/警告注入到您的编辑器中。

Checkmate 的核心是其插件架构概念。每个启用的插件执行指定的命令,解析其输出,并随后以错误、警告或其他相关反馈的形式生成 LSP 诊断。这个动态系统使用户能够根据他们定制的编辑器配置单独激活或禁用特定插件。

目前我们支持

未来将添加更多插件,欢迎贡献。

动机

运行代码检查应该是一个简单直接的任务,然而,当前的环境为在您首选的代码编辑器中执行特定的代码检查提供了许多选择。这通常意味着在您的编辑器中安装不同的扩展或插件。当处理多种编程语言时,这种方法需要为每种语言安装一个单独的代码检查器,这是次优的。语言服务器协议(LSP)出现作为一个强大的解决方案,使其成为这项任务的理想选择。

Checkmate 从 null-ls 中汲取了大量的灵感,遗憾的是,null-ls 现已归档。两者之间的区别在于,Checkmate 作为 LSP 服务器运行。这使得它与任何支持 LSP 协议的编辑器以及所有相关插件无缝集成。

安装

使用 cargo

cargoinstall checkmate-lsp

启用插件

用户可以在其编辑器 LSP 设置中启用 Checkmate 插件。以下是在 Neovim 中启用 ESLint 的示例(下面是完整示例)

lspconfig.checkmate.setup{
     settings = {
        checkmate = {
          plugins = {
            eslint = {}
          }
        };
     }
}

每个插件都附带了一个默认的 cmd、参数和文件类型,该插件旨在针对这些文件类型,这可以通过传递 cmdargsfiletypes 参数来覆盖。

lspconfig.checkmate.setup{
     settings = {
        checkmate = {
          plugins = {
            eslint = {
              cmd = "/my/custom/path/eslint",
              args = "--custom=true",
              filetypes = "js,svelte"
            }
          }
        };
     }
}

上述示例将在任何.js或.svelte文件更改时运行以下命令: /my/custom/path/eslint --custom=true并通过LSP返回结果。

开发新插件

我们欢迎任何支持新插件/linters的贡献。您可以检查插件文件夹中的示例。新的插件还需要在lsp.rs中进行注册。

编辑器设置

Neovim

所需插件

安装软件包后,将其添加到您的lua配置中

local configs = require 'lspconfig.configs'
local lspconfig = require 'lspconfig'

if not configs.checkmate then
 configs.checkmate = {
   default_config = {
     cmd = {'checkmate-lsp'},
     root_dir = function(pattern)
      local cwd = vim.loop.cwd()
      local root = lspconfig.util.root_pattern('.git')(pattern)

      -- prefer cwd if root is a descendant
      return lspconfig.util.path.is_descendant(cwd, root) and cwd or root
     end,
     settings = {
        checkmate = {
          plugins = {
            phpcs = {
                args = "--standard=PSR12 --extensions=php,module,inc,install,test,profile,theme,css,info,txt,md,yml";
            },
            eslint = {},
            phpstan = {}
          }
        };
     },
   },
 }
end
lspconfig.checkmate.setup{}

替代方案

依赖项

~9–23MB
~285K SLoC