aboutsummaryrefslogtreecommitdiff
path: root/dot_config/nvim/lua/plugins/linter.lua
blob: 653e268996a345589cfe4184c6081f8163eb48c7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
return {
  'mfussenegger/nvim-lint',
  config = function()
    local lint = require("lint")
    -- lint.linters_by_ft = {
    --   python = { 'mypy' }
    -- }

    local function read_pyproject()
      local results = vim.fs.find("pyproject.toml", { upward = true, stop = vim.loop.os_homedir() })

      local path = results[1]
      if not path then
        return nil
      end

      local ok, lines = pcall(vim.fn.readfile, path)
      if not ok then
        return nil
      end

      return table.concat(lines, "\n")
    end

    local function python_linters()
      local linters = {}
      local pyproject = read_pyproject()

      if pyproject then
        if pyproject:match("%[tool%.ruff%]") then
          table.insert(linters, "ruff")
        end
        if pyproject:match("%[tool%.mypy%]") then
          table.insert(linters, "mypy")
        end
      end

      return linters
    end

    lint.linters_by_ft.python = python_linters()

    local lint_augroup = vim.api.nvim_create_augroup("lint", { clear = true })
    vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost", "InsertLeave" }, {
      group = lint_augroup,
      callback = function()
        lint.try_lint(nil, { ignore_errors = true })
      end,
    })
  end
}