|
1 | | -local pattern = "^%s+(%d+)%s+[^a-z]+m([a-z]+)[^a-z]+m%s+(.*)%s+(%w+)" |
2 | | -local groups = { "lnum", "severity", "message", "code" } |
3 | 1 | local severity_map = { |
4 | | - ["info"] = vim.diagnostic.severity.INFO, |
5 | | - ["warning"] = vim.diagnostic.severity.WARN, |
6 | | - ["error"] = vim.diagnostic.severity.ERROR, |
| 2 | + info = vim.diagnostic.severity.INFO, |
| 3 | + warning = vim.diagnostic.severity.WARN, |
| 4 | + error = vim.diagnostic.severity.ERROR, |
7 | 5 | } |
| 6 | +local bin = "npm-groovy-lint" |
8 | 7 |
|
9 | 8 | return { |
10 | | - cmd = "npm-groovy-lint", |
11 | | - stdin = false, |
12 | | - parser = require("lint.parser").from_pattern(pattern, groups, severity_map, { ["source"] = "npm-groovy-lint" }), |
| 9 | + cmd = bin, |
| 10 | + args = { "-o", "json", "-" }, |
| 11 | + stdin = true, |
| 12 | + ignore_exitcode = true, |
| 13 | + parser = function(output, _) |
| 14 | + local diagnostics = {} |
| 15 | + if output == "" then |
| 16 | + return diagnostics |
| 17 | + end |
| 18 | + |
| 19 | + local ok, decoded = pcall(vim.json.decode, output) |
| 20 | + if not ok or not decoded or not decoded.files then |
| 21 | + return diagnostics |
| 22 | + end |
| 23 | + |
| 24 | + for _, file_data in pairs(decoded.files) do |
| 25 | + for _, err in ipairs(file_data.errors or {}) do |
| 26 | + local lnum = (err.line or 1) - 1 |
| 27 | + local col = 0 |
| 28 | + local end_lnum = nil |
| 29 | + local end_col = nil |
| 30 | + |
| 31 | + if err.range then |
| 32 | + col = err.range.start.character or 0 |
| 33 | + end_lnum = (err.range["end"].line or err.line) - 1 |
| 34 | + end_col = err.range["end"].character |
| 35 | + end |
| 36 | + |
| 37 | + table.insert(diagnostics, { |
| 38 | + source = bin, |
| 39 | + lnum = lnum, |
| 40 | + col = col, |
| 41 | + end_lnum = end_lnum, |
| 42 | + end_col = end_col, |
| 43 | + severity = severity_map[err.severity] or vim.diagnostic.severity.WARN, |
| 44 | + message = err.msg, |
| 45 | + code = err.rule, |
| 46 | + }) |
| 47 | + end |
| 48 | + end |
| 49 | + |
| 50 | + return diagnostics |
| 51 | + end, |
13 | 52 | } |
0 commit comments