summaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2017-07-27 00:06:15 +0100
committerw0rp <devw0rp@gmail.com>2017-07-27 00:06:15 +0100
commitdb4d68eae75c071b2a6521fe8587102f5b781efe (patch)
treed17479577b3646320cd0cf3ffdba37e6e49b5b3c /autoload
parentded1bc14df6ddacd373cf9fe635f8489b9fb4f69 (diff)
downloadale-db4d68eae75c071b2a6521fe8587102f5b781efe.zip
Add a fuzzy JSON decoding function for ignoring json_decode errors for linters
Diffstat (limited to 'autoload')
-rw-r--r--autoload/ale/util.vim20
1 files changed, 20 insertions, 0 deletions
diff --git a/autoload/ale/util.vim b/autoload/ale/util.vim
index c86ac692..f3146151 100644
--- a/autoload/ale/util.vim
+++ b/autoload/ale/util.vim
@@ -167,3 +167,23 @@ endfunction
function! ale#util#EscapePCRE(unsafe_string) abort
return substitute(a:unsafe_string, '\([\-\[\]{}()*+?.^$|]\)', '\\\1', 'g')
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