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
|
require "vis"
ec = require "editorconfig_core"
-- Simple wrapper
function vis_set(option, value)
if type(value) == "boolean" then
if value then
value = "yes"
else
value = "no"
end
end
vis:command("set " .. option .. " " .. value)
end
OPTIONS = {
indent_style = function (value)
vis_set("expandtab", (value == "space"))
end,
indent_size = function (value)
if value ~= "tab" then -- tab_width is a synonym anyway
vis_set("tabwidth", value)
end
end,
tab_width = function (value)
vis_set("tabwidth", value)
end,
-- Not supported by vis
-- end_of_line
-- charset
-- trim_trailing_whitespace
-- insert_final_newline
-- max_line_length
}
-- Uses editorconfig-core-lua's as yet unreleased iterator API
--function ec_iter(p) do
-- return ec.open(p)
--end
-- Compatible with editorconfig-core-lua v0.1.1
function ec_iter(p)
i = 0
props, keys = ec.parse(p)
n = #keys
return function ()
i = i + 1
if i <= n then
return keys[i], props[keys[i]]
end
end
end
function ec_set_values(path)
if path then
for name, value in ec_iter(path) do
if OPTIONS[name] then
OPTIONS[name](value)
end
end
end
end
function ec_parse_cmd() ec_set_values(vis.win.file.path) end
vis:command_register("econfig_parse", ec_parse_cmd, "(Re)parse an editorconfig file")
vis.events.subscribe(vis.events.FILE_OPEN, function (file)
ec_set_values(file.path)
end)
vis.events.subscribe(vis.events.FILE_SAVE_POST, function (file, path)
ec_set_values(path)
end)
|