Skip to content

Commit 04deee5

Browse files
committed
Web.JSON: Default to use vim-variables (e.g. v:true).
1 parent e28db14 commit 04deee5

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

autoload/vital/__vital__/Web/JSON.vim

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,25 @@ let s:float_constants = {
99
\ }
1010
let s:float_nan = 0.0 / 0
1111
let s:float_inf = 1.0 / 0
12+
let s:special_constants = {
13+
\ 'v:true': 'true',
14+
\ 'v:false': 'false',
15+
\ 'v:null': 'null',
16+
\ 'v:none': 'null',
17+
\ }
1218
lockvar s:float_constants s:float_nan s:float_inf
19+
lockvar s:special_constants
1320

1421
function! s:_true() abort
15-
return 1
22+
return v:true
1623
endfunction
1724

1825
function! s:_false() abort
19-
return 0
26+
return v:false
2027
endfunction
2128

2229
function! s:_null() abort
23-
return 0
30+
return v:null
2431
endfunction
2532

2633
function! s:_resolve(val, prefix) abort
@@ -131,6 +138,8 @@ function! s:encode(val, ...) abort
131138
throw 'vital: Web.JSON: Invalid float value: ' . val
132139
endif
133140
return val
141+
elseif t == 6 || t == 7
142+
return get(s:special_constants, a:val)
134143
else
135144
return string(a:val)
136145
endif

doc/vital/Web/JSON.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ decode({json}[, {settings}]) *Vital.Web.JSON.decode()*
8585
'use_token'
8686
Use special tokens (e.g. |Vital.Web.JSON.true|) to represent
8787
corresponding javascript tokens (e.g. 'true').
88-
Otherwise 1 or 0 are used to represent these.
88+
Otherwise |v:true|, |v:false| or |v:null| are used to represent these.
8989
The default value is 0.
9090
>
9191
echo s:JSON.decode('[true, false, null]')

test/Web/JSON.vimspec

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ Describe Web.JSON
6565
Assert Equals(JSON.decode('true'), 1)
6666
Assert Equals(JSON.decode('false'), 0)
6767
Assert Equals(JSON.decode('null'), 0)
68+
Assert Same(JSON.decode('true'), v:true)
69+
Assert Same(JSON.decode('false'), v:false)
70+
Assert Same(JSON.decode('null'), v:null)
6871

6972
let s = { 'use_token': 1 }
7073
Assert Equals(JSON.decode('true', s), JSON.true)
@@ -223,6 +226,11 @@ Describe Web.JSON
223226
Assert Equals(JSON.encode(JSON.true), 'true')
224227
Assert Equals(JSON.encode(JSON.false), 'false')
225228
Assert Equals(JSON.encode(JSON.null), 'null')
229+
230+
Assert Equals(JSON.encode(v:true), 'true')
231+
Assert Equals(JSON.encode(v:false), 'false')
232+
Assert Equals(JSON.encode(v:null), 'null')
233+
Assert Equals(JSON.encode(v:none), 'null')
226234
End
227235

228236
It encodes special floats (NaN/Infinity/-Infinity)

0 commit comments

Comments
 (0)