Add a fuzzy JSON decoding function for ignoring json_decode errors for linters
This commit is contained in:
parent
ded1bc14df
commit
db4d68eae7
@ -167,3 +167,23 @@ endfunction
|
|||||||
function! ale#util#EscapePCRE(unsafe_string) abort
|
function! ale#util#EscapePCRE(unsafe_string) abort
|
||||||
return substitute(a:unsafe_string, '\([\-\[\]{}()*+?.^$|]\)', '\\\1', 'g')
|
return substitute(a:unsafe_string, '\([\-\[\]{}()*+?.^$|]\)', '\\\1', 'g')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Given a String or a List of String values, try and decode the string(s)
|
||||||
|
" as a JSON value which can be decoded with json_decode. If the JSON string
|
||||||
|
" is invalid, the default argument value will be returned instead.
|
||||||
|
"
|
||||||
|
" This function is useful in code where the data can't be trusted to be valid
|
||||||
|
" JSON, and where throwing exceptions is mostly just irritating.
|
||||||
|
function! ale#util#FuzzyJSONDecode(data, default) abort
|
||||||
|
if empty(a:data)
|
||||||
|
return a:default
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:str = type(a:data) == type('') ? a:data : join(a:data, '')
|
||||||
|
|
||||||
|
try
|
||||||
|
return json_decode(l:str)
|
||||||
|
catch /E474/
|
||||||
|
return a:default
|
||||||
|
endtry
|
||||||
|
endfunction
|
||||||
|
21
test/test_fuzzy_json_decode.vader
Normal file
21
test/test_fuzzy_json_decode.vader
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Execute(FuzzyJSONDecode should return the default for empty Lists):
|
||||||
|
AssertEqual [], ale#util#FuzzyJSONDecode([], [])
|
||||||
|
AssertEqual {}, ale#util#FuzzyJSONDecode([], {})
|
||||||
|
|
||||||
|
Execute(FuzzyJSONDecode should return the default for empty Strings):
|
||||||
|
AssertEqual [], ale#util#FuzzyJSONDecode('', [])
|
||||||
|
AssertEqual {}, ale#util#FuzzyJSONDecode('', {})
|
||||||
|
|
||||||
|
Execute(FuzzyJSONDecode should return the default for Lists with invalid JSON):
|
||||||
|
AssertEqual [], ale#util#FuzzyJSONDecode(['x'], [])
|
||||||
|
AssertEqual {}, ale#util#FuzzyJSONDecode(['x'], {})
|
||||||
|
|
||||||
|
Execute(FuzzyJSONDecode should return the default for Strings with invalid JSON):
|
||||||
|
AssertEqual [], ale#util#FuzzyJSONDecode('x', [])
|
||||||
|
AssertEqual {}, ale#util#FuzzyJSONDecode('x', {})
|
||||||
|
|
||||||
|
Execute(FuzzyJSONDecode should return the JSON from the JSON string):
|
||||||
|
AssertEqual {'x': 3}, ale#util#FuzzyJSONDecode('{"x": 3}', [])
|
||||||
|
AssertEqual {'x': 3}, ale#util#FuzzyJSONDecode('{"x": 3}', {})
|
||||||
|
AssertEqual {'x': 3}, ale#util#FuzzyJSONDecode(['{"x"', ': 3}'], [])
|
||||||
|
AssertEqual {'x': 3}, ale#util#FuzzyJSONDecode(['{"x"', ': 3}'], {})
|
Loading…
Reference in New Issue
Block a user