mirror of
https://github.com/neovim/neovim.git
synced 2025-09-18 17:28:23 +00:00
feat(json): convert Blobs to array of byte values
Similiar to how Vim does it, but to be consistent with how Nvim encodes lists, add a space after every comma.
This commit is contained in:
@@ -6002,6 +6002,7 @@ json_encode({expr}) *json_encode()*
|
|||||||
surrogate pairs (such strings are not valid UTF-8 strings).
|
surrogate pairs (such strings are not valid UTF-8 strings).
|
||||||
Non-printable characters are converted into "\u1234" escapes
|
Non-printable characters are converted into "\u1234" escapes
|
||||||
or special escapes like "\t", other are dumped as-is.
|
or special escapes like "\t", other are dumped as-is.
|
||||||
|
|Blob|s are converted to arrays of the individual bytes.
|
||||||
|
|
||||||
keys({dict}) *keys()*
|
keys({dict}) *keys()*
|
||||||
Return a |List| with all the keys of {dict}. The |List| is in
|
Return a |List| with all the keys of {dict}. The |List| is in
|
||||||
|
@@ -729,7 +729,25 @@ static inline int convert_to_json_string(garray_T *const gap,
|
|||||||
|
|
||||||
#undef TYPVAL_ENCODE_CONV_BLOB
|
#undef TYPVAL_ENCODE_CONV_BLOB
|
||||||
#define TYPVAL_ENCODE_CONV_BLOB(tv, blob, len) \
|
#define TYPVAL_ENCODE_CONV_BLOB(tv, blob, len) \
|
||||||
abort() /* TODO(seandewar) */ \
|
do { \
|
||||||
|
const blob_T *const blob_ = (blob); \
|
||||||
|
const int len_ = (len); \
|
||||||
|
if (len_ == 0) { \
|
||||||
|
ga_concat(gap, "[]"); \
|
||||||
|
} else { \
|
||||||
|
ga_append(gap, '['); \
|
||||||
|
char numbuf[NUMBUFLEN]; \
|
||||||
|
for (int i_ = 0; i_ < len_; i_++) { \
|
||||||
|
if (i_ > 0) { \
|
||||||
|
ga_concat(gap, ", "); \
|
||||||
|
} \
|
||||||
|
vim_snprintf((char *)numbuf, ARRAY_SIZE(numbuf), "%d", \
|
||||||
|
(int)tv_blob_get(blob_, i_)); \
|
||||||
|
ga_concat(gap, numbuf); \
|
||||||
|
} \
|
||||||
|
ga_append(gap, ']'); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#undef TYPVAL_ENCODE_CONV_FUNC_START
|
#undef TYPVAL_ENCODE_CONV_FUNC_START
|
||||||
#define TYPVAL_ENCODE_CONV_FUNC_START(tv, fun) \
|
#define TYPVAL_ENCODE_CONV_FUNC_START(tv, fun) \
|
||||||
|
@@ -538,6 +538,11 @@ describe('json_encode() function', function()
|
|||||||
eq('"þÿþ"', funcs.json_encode('þÿþ'))
|
eq('"þÿþ"', funcs.json_encode('þÿþ'))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('dumps blobs', function()
|
||||||
|
eq('[]', eval('json_encode(0z)'))
|
||||||
|
eq('[222, 173, 190, 239]', eval('json_encode(0zDEADBEEF)'))
|
||||||
|
end)
|
||||||
|
|
||||||
it('dumps numbers', function()
|
it('dumps numbers', function()
|
||||||
eq('0', funcs.json_encode(0))
|
eq('0', funcs.json_encode(0))
|
||||||
eq('10', funcs.json_encode(10))
|
eq('10', funcs.json_encode(10))
|
||||||
@@ -769,6 +774,10 @@ describe('json_encode() function', function()
|
|||||||
eq('""', eval('json_encode($XXX_UNEXISTENT_VAR_XXX)'))
|
eq('""', eval('json_encode($XXX_UNEXISTENT_VAR_XXX)'))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('can dump NULL blob', function()
|
||||||
|
eq('[]', eval('json_encode(v:_null_blob)'))
|
||||||
|
end)
|
||||||
|
|
||||||
it('can dump NULL list', function()
|
it('can dump NULL list', function()
|
||||||
eq('[]', eval('json_encode(v:_null_list)'))
|
eq('[]', eval('json_encode(v:_null_list)'))
|
||||||
end)
|
end)
|
||||||
|
Reference in New Issue
Block a user