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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
require 'nvim_lsp'
local skeleton = require 'nvim_lsp/skeleton'
local inspect = vim.inspect
local function filter(...)
local lines = {}
for i = 1, select("#", ...) do
local v = select(i, ...)
if v then
table.insert(lines, v)
end
end
return lines
end
local function nilifempty(s)
if #s == 0 then return end
return s
end
local function dedent(s)
local lines = vim.split(s, '\n', true)
if #lines == 0 then
return ""
end
local indent = #lines[1]:match("^%s*")
for i = 1, #lines do
lines[i] = lines[i]:sub(indent)
end
return table.concat(lines, '\n')
end
local function indent(n, s)
if n <= 0 then return s end
local lines = vim.split(s, '\n', true)
for i, line in ipairs(lines) do
lines[i] = string.rep(" ", n)..line
end
return table.concat(lines, '\n')
end
local writer = io.popen("cat README_preamble.md - > README.md", "w")
local skeleton_keys = vim.tbl_keys(skeleton)
table.sort(skeleton_keys)
for _, k in ipairs(skeleton_keys) do
local v = skeleton[k]
local tconf = v.template_config
local params = {}
params.template_name = k
if tconf.commands then
local lines = {"Commands:"}
local cnames = vim.tbl_keys(tconf.commands)
table.sort(cnames)
for _, cname in ipairs(cnames) do
local def = tconf.commands[cname]
if def.description then
table.insert(lines, string.format("- %s: %s", cname, def.description))
else
table.insert(lines, string.format("- %s", cname))
end
lines[#lines] = indent(0, lines[#lines])
end
params.commands = indent(0, table.concat(lines, '\n'))
end
if tconf.default_config then
local lines = {}
lines = {"Default Values:"}
local keys = vim.tbl_keys(tconf.default_config)
table.sort(keys)
for _, dk in ipairs(keys) do
local dv = tconf.default_config[dk]
local description = tconf.docs and tconf.docs.default_config and tconf.docs.default_config[dk]
if description and type(description) ~= 'string' then
description = inspect(description)
end
table.insert(lines, indent(2, string.format("%s = %s", dk, description or inspect(dv))))
end
params.default_config = indent(0, table.concat(lines, '\n'))
end
do
local body_lines = filter(
params.commands
, params.default_config
)
params.body = indent(2, table.concat(body_lines, '\n\n'))
end
params.preamble = ""
if tconf.docs then
local installation_instructions
if v.install then
installation_instructions = string.format("Can be installed in neovim with `:LspInstall %s`", k)
end
local preamble_parts = filter(
nilifempty(tconf.docs.description)
, installation_instructions
)
-- Insert a newline after the preamble if it exists.
if #preamble_parts > 0 then table.insert(preamble_parts, '') end
params.preamble = table.concat(preamble_parts, '\n')
end
local section = ([[
## {{template_name}}
{{preamble}}
```lua
nvim_lsp.{{template_name}}.setup({config})
nvim_lsp#setup("{{template_name}}", {config})
{{body}}
```
]]):gsub("{{(%S+)}}", params)
writer:write(section)
end
writer:close()
-- vim:et ts=2 sw=2
|