summaryrefslogtreecommitdiff
path: root/lua/nvim-treesitter/info.lua
blob: 77fd945f3bd016790f9fbad81a72ddfbefd48e87 (plain)
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
local api = vim.api
local configs = require'nvim-treesitter.configs'
local parsers = require'nvim-treesitter.parsers'

local M = {}

local function install_info()
  local max_len = 0
  for _, ft in pairs(parsers.available_parsers()) do
    if #ft > max_len then max_len = #ft end
  end

  for _, ft in pairs(parsers.available_parsers()) do
    local is_installed = #api.nvim_get_runtime_file('parser/'..ft..'.so', false) > 0
    api.nvim_out_write(ft..string.rep(' ', max_len - #ft + 1))
    if is_installed then
      api.nvim_out_write("[✓] installed\n")
    else
      api.nvim_out_write("[✗] not installed\n")
    end
  end
end

local function print_info_module(sorted_languages, mod)
  local max_str_len = #sorted_languages[1]
  local header = string.format('%s%s', string.rep(' ', max_str_len + 2), mod)
  api.nvim_out_write(header..'\n')
  for _, lang in pairs(sorted_languages) do
    local padding = string.rep(' ', max_str_len - #lang + #mod / 2 + 1)
    api.nvim_out_write(lang..":"..padding)
    if configs.is_enabled(mod, lang) then
      api.nvim_out_write('✓')
    else
      api.nvim_out_write('✗')
    end
    api.nvim_out_write('\n')
  end
end

local function print_info_modules(sorted_languages)
  local max_str_len = #sorted_languages[1]
  local header = string.rep(' ', max_str_len + 2)
  for _, mod in pairs(configs.available_modules()) do
    header = string.format('%s%s ', header, mod)
  end
  api.nvim_out_write(header..'\n')

  for _, lang in pairs(sorted_languages) do
    local padding = string.rep(' ', max_str_len - #lang)
    api.nvim_out_write(lang..":"..padding)

    for _, mod in pairs(configs.available_modules()) do
      local pad_len = #mod / 2 + 1
      api.nvim_out_write(string.rep(' ', pad_len))

      if configs.is_enabled(mod, lang) then
        api.nvim_out_write('✓')
      else
        api.nvim_out_write('✗')
      end
      api.nvim_out_write(string.rep(' ', pad_len - 1))
    end
    api.nvim_out_write('\n')
  end
end

local function module_info(mod)
  if mod and not configs.get_module(mod) then return end

  local parserlist = parsers.available_parsers()
  table.sort(parserlist, function(a, b) return #a > #b end)
  if mod then
    print_info_module(parserlist, mod)
  else
    print_info_modules(parserlist)
  end
end

function M.installed_parsers()
  local installed = {}
  for _, p in pairs(parsers.available_parsers()) do
    if parsers.has_parser(p) then
      table.insert(installed, p)
    end
  end
  return installed
end

M.commands = {
  TSInstallInfo = {
    run = install_info,
    args = {
      "-nargs=0",
    },
  },
  TSModuleInfo = {
    run = module_info,
    args = {
      "-nargs=?",
      "-complete=customlist,nvim_treesitter#available_modules",
    },
  },
}

return M