neovim

Personal neovim configuration files
git clone git://gtms.dev/neovim
Log | Files | Refs

analyze.lua (1510B)


      1 local loop = vim.loop
      2 
      3 local M = {}
      4 
      5 -- Dart analyze to quickfix list
      6 function M.qf(make_entry)
      7   local list = {}
      8 
      9   local onread = function(err, data)
     10     assert(not err, err)
     11     if data then
     12       local line = string.gsub(data, '\n', '')
     13       local parsed = make_entry(line)
     14       if parsed then table.insert(list, parsed) end
     15     end
     16   end
     17 
     18   local stdout = loop.new_pipe(false)
     19   local handle
     20   print('Analyzing...')
     21   handle = loop.spawn('dart', { args = { 'analyze' }, stdio = { nil, stdout, nil } }, vim.schedule_wrap(function()
     22     stdout:read_stop()
     23     stdout:close()
     24     handle:close()
     25 
     26     vim.fn.setqflist(list)
     27     if #list > 0 then
     28       vim.cmd.copen()
     29     else
     30       print('Analyzer finished.')
     31     end
     32   end))
     33 
     34   loop.read_start(stdout, onread)
     35 end
     36 
     37 function M.qf2103()
     38   local dart2103 = function(line)
     39     local level, msg, filename, lnum, lcol = string.match(line, '(%a+) %- (.*) at (%S+):(%d+):(%d+) .*')
     40     if level and filename and lnum and lcol and msg then
     41       return { type = string.sub(level, 1, 1):upper(), filename = filename, lnum = lnum, lcol = lcol, text = msg }
     42     end
     43   end
     44   M.qf(dart2103)
     45 end
     46 
     47 function M.qf2131()
     48   local dart2131 = function(line)
     49     local level, filename, lnum, lcol, msg = string.match(line, '(%a+) %- (%S+):(%d+):(%d+) %- (.*)')
     50     if level and filename and lnum and lcol and msg then
     51       return { type = string.sub(level, 1, 1):upper(), filename = filename, lnum = lnum, lcol = lcol, text = msg }
     52     end
     53   end
     54   M.qf(dart2131)
     55 end
     56 
     57 return M