V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yuuko
V2EX  ›  Vim

Language server 与 linter 集成

  •  1
     
  •   yuuko · 2019-03-17 18:34:17 +08:00 · 3363 次点击
    这是一个创建于 2079 天前的主题,其中的信息可能已经有所发展或是发生改变。

    screenshot

    diagnostic-languageserver 是一个可以与大多数的 linter 集成的 LSP 服务。

    安装:

    yarn global add diagnostic-languageserver
    

    language server 对大多数的语言支持已经很完善了,但是还是有些语言没有或者是支持的比较差,比如 viml,shell 等,还是少不了使用 linter 来检查代码。所以基本都会安装一个插件,比如:ale

    不过既然 LSP 已经自带了代码检查,为什么不用 LSP 和 linter 集成?受 efm-langserver 启发,然后就有了这个项目。

    下面是 shellcheck linter 配置示例,LSP 客户端使用的是 coc.nvim(你也可以选其他客户端)

    coc-settings.json:

    {
      "languageserver": {
        "dls": {
          "command": "diagnostic-languageserver",
          "args": ["--stdio"],
          "filetypes": [ "sh" ],
          "initializationOptions": {
            "linters": {
              "shellcheck": {
                "command": "shellcheck",
                "debounce": 100,
                "args": [ "--format=gcc", "-"],
                "offsetLine": 0,
                "offsetColumn": 0,
                "sourceName": "shellcheck",
                "formatLines": 1,
                "formatPattern": [
                  "^[^:]+:(\\d+):(\\d+):\\s+([^:]+):\\s+(.*)$",
                  {
                    "line": 1,
                    "column": 2,
                    "message": 4,
                    "security": 3
                  }
                ],
                "securities": {
                  "error": "error",
                  "warning": "warning",
                  "note": "info"
                }
              },
            },
            "filetypes": {
              "sh": "shellcheck"
            }
          }
        }
      }
    }
    

    更多配置可以看 github

    第 1 条附言  ·  2019-04-17 23:52:12 +08:00

    增加 Format 支持。

    比如使用 dartfmt:

           "formatters": {
              "dartfmt": {
                "command": "dartfmt",
                "args": [ "--fix" ],
              }
            },
            "formatFiletypes": {
              "dart": "dartfmt"
            }
    
    第 2 条附言  ·  2019-04-20 22:34:28 +08:00
    5 条回复    2019-03-19 11:41:43 +08:00
    Sparetire
        1
    Sparetire  
       2019-03-17 20:51:26 +08:00 via Android   ❤️ 1
    支持一下
    fannheyward
        2
    fannheyward  
       2019-03-18 10:26:03 +08:00
    和 efm-langserver 主要的异同或者优势是什么?
    yuuko
        3
    yuuko  
    OP
       2019-03-18 11:30:32 +08:00   ❤️ 2
    @fannheyward

    优势:

    1. 使用正则更灵活可以适配更多的 linter,比如 languagetool 这种输出每个 issue 是多行的,而且 提示信息可以自由分割组合。

    2. 支持 security 分级( error, warning, info, hint),当然这个也得 linter 支持。

    3. 特别适配了下本地 linter,比如 eslint, 配置命令是 `./node_modules/.bin/eslint` 这种相对路径开头的,会先找本地安装的 eslint,找不到再用 全局的。

    efm 的优势:他还提供 format command 配置支持

    本来是打算向 efm 提 pr 的,无奈我 go 太菜
    yech1990
        4
    yech1990  
       2019-03-18 22:32:03 +08:00 via Android
    pylint 呢?
    yuuko
        5
    yuuko  
    OP
       2019-03-19 11:41:43 +08:00
    @yech1990 pylint 2.4 版本之前不支持 stdin 或者是参数形式传入,所以还不支持,支持之后发布的 2.4 版本
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1267 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 17:34 · PVG 01:34 · LAX 09:34 · JFK 12:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.