forked from mrcjkb/rustaceanvim
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjson_spec.lua
88 lines (88 loc) · 2.38 KB
/
json_spec.lua
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
local json = require('rustaceanvim.config.json')
describe('Decode rust-analyzer settings from json', function()
it('can extract rust-analyzer key from index', function()
local json_content = [[
{
"rust-analyzer.check.overrideCommand": [
"cargo",
"check",
"-p",
"service_b",
"--message-format=json"
],
"rust-analyzer.foo.enable": true,
"rust-analyzer.foo.bar.enable": true,
"rust-analyzer.foo.bar.baz.bat": "something deeply nested",
"some-other-key.foo.bar.baz.bat": "should not be included"
}
]]
local tbl = {}
local json_tbl = json.silent_decode(json_content)
json.override_with_rust_analyzer_json_keys(tbl, json_tbl)
assert.same({
['rust-analyzer'] = {
check = {
overrideCommand = {
'cargo',
'check',
'-p',
'service_b',
'--message-format=json',
},
},
foo = {
enable = true,
bar = {
enable = true,
baz = {
bat = 'something deeply nested',
},
},
},
},
}, tbl)
end)
it('persists warnings on invalid config', function()
local invalid_json_content = [[
{
"rust-analyzer.checkOnSave.overrideCommand": [
"cargo",
"check",
"-p",
"service_b",
"--message-format=json"
],
"rust-analyzer.foo.enable": true,
"rust-analyzer.foo.bar.enable": true,
"rust-analyzer.foo.bar.baz.bat": "something deeply nested",
"some-other-key.foo.bar.baz.bat": "should not be included"
}
]]
local tbl = {
['rust-analyzer'] = {
checkOnSave = true,
},
}
local json_tbl = json.silent_decode(invalid_json_content)
json.override_with_rust_analyzer_json_keys(tbl, json_tbl)
assert.same({
[[
Ignored field 'rust-analyzer.checkOnSave' of invalid type 'table': { "cargo", "check", "-p", "service_b", "--message-format=json" }
Please refer to the rust-analyzer documentation at
https://rust-analyzer.github.io/manual.html#rust-analyzer.checkOnSave
]],
}, json.get_warnings())
end)
it('persists warnings about config parse errors', function()
local unsupported_json_content = [[
{
// This is a json5 comment
"rust-analyzer.foo.enable": true,
}
]]
json.silent_decode(unsupported_json_content)
assert.same({
'Failed to decode json: Expected object key string but found invalid token at character 5',
}, json.get_errors())
end)
end)