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
106
|
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(parserlist)
table.sort(parserlist, function(a, b) return #a > #b end)
local max_str_len = #parserlist[1]
local header = string.rep(' ', max_str_len + 1)
local mods = configs.available_modules()
table.sort(mods)
for _, mod in pairs(mods) do
header = string.format('%s %s ', header, mod)
end
api.nvim_out_write(header .. '\n')
table.sort(parserlist)
for _, lang in pairs(parserlist) do
local padding = string.rep(' ', max_str_len - #lang + 1)
api.nvim_out_write(lang .. ":" .. padding)
for _, mod in pairs(mods) do
if configs.is_enabled(mod, lang) then
api.nvim_out_write('✓')
else
api.nvim_out_write('✗')
end
api.nvim_out_write(string.rep(' ', #mod + 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()
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=custom,nvim_treesitter#available_modules",
},
},
}
return M
|