Some checks failed
		
		
	
	Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
				
			Detach Plugins / check (GitHub.vim) (push) Has been cancelled
				
			Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
				
			Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
				
			Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
				
			Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
				
			Detach Plugins / check (git.vim) (push) Has been cancelled
				
			Detach Plugins / check (iedit.vim) (push) Has been cancelled
				
			Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
				
			Detach Plugins / check (vim-chat) (push) Has been cancelled
				
			Detach Plugins / check (vim-cheat) (push) Has been cancelled
				
			Detach Plugins / check (vim-todo) (push) Has been cancelled
				
			Detach Plugins / check (xmake.vim) (push) Has been cancelled
				
			test / Linux (nvim, nightly) (push) Has been cancelled
				
			test / Linux (nvim, v0.3.8) (push) Has been cancelled
				
			test / Linux (nvim, v0.4.0) (push) Has been cancelled
				
			test / Linux (nvim, v0.4.2) (push) Has been cancelled
				
			test / Linux (nvim, v0.4.3) (push) Has been cancelled
				
			test / Linux (nvim, v0.4.4) (push) Has been cancelled
				
			test / Linux (nvim, v0.5.0) (push) Has been cancelled
				
			test / Linux (nvim, v0.5.1) (push) Has been cancelled
				
			test / Linux (nvim, v0.6.0) (push) Has been cancelled
				
			test / Linux (nvim, v0.6.1) (push) Has been cancelled
				
			test / Linux (nvim, v0.7.0) (push) Has been cancelled
				
			test / Linux (nvim, v0.7.2) (push) Has been cancelled
				
			test / Linux (nvim, v0.8.0) (push) Has been cancelled
				
			test / Linux (nvim, v0.8.1) (push) Has been cancelled
				
			test / Linux (nvim, v0.8.2) (push) Has been cancelled
				
			test / Linux (nvim, v0.8.3) (push) Has been cancelled
				
			test / Linux (nvim, v0.9.0) (push) Has been cancelled
				
			test / Linux (nvim, v0.9.1) (push) Has been cancelled
				
			test / Linux (true, vim, v7.4.052) (push) Has been cancelled
				
			test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
				
			test / Linux (true, vim, v7.4.629) (push) Has been cancelled
				
			test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
				
			test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
				
			test / Linux (vim, nightly) (push) Has been cancelled
				
			test / Linux (vim, v8.0.0184) (push) Has been cancelled
				
			test / Linux (vim, v8.0.1453) (push) Has been cancelled
				
			test / Linux (vim, v8.1.2269) (push) Has been cancelled
				
			test / Linux (vim, v8.2.2434) (push) Has been cancelled
				
			test / Linux (vim, v8.2.3995) (push) Has been cancelled
				
			test / Windows (nvim, nightly) (push) Has been cancelled
				
			test / Windows (nvim, v0.3.8) (push) Has been cancelled
				
			test / Windows (nvim, v0.4.2) (push) Has been cancelled
				
			test / Windows (nvim, v0.4.3) (push) Has been cancelled
				
			test / Windows (nvim, v0.4.4) (push) Has been cancelled
				
			test / Windows (nvim, v0.5.0) (push) Has been cancelled
				
			test / Windows (nvim, v0.5.1) (push) Has been cancelled
				
			test / Windows (nvim, v0.6.0) (push) Has been cancelled
				
			test / Windows (nvim, v0.6.1) (push) Has been cancelled
				
			test / Windows (nvim, v0.7.0) (push) Has been cancelled
				
			test / Windows (nvim, v0.7.2) (push) Has been cancelled
				
			test / Windows (nvim, v0.8.0) (push) Has been cancelled
				
			test / Windows (nvim, v0.8.1) (push) Has been cancelled
				
			test / Windows (nvim, v0.8.2) (push) Has been cancelled
				
			test / Windows (nvim, v0.8.3) (push) Has been cancelled
				
			test / Windows (nvim, v0.9.0) (push) Has been cancelled
				
			test / Windows (nvim, v0.9.1) (push) Has been cancelled
				
			test / Windows (vim, nightly) (push) Has been cancelled
				
			test / Windows (vim, v7.4.1185) (push) Has been cancelled
				
			test / Windows (vim, v7.4.1689) (push) Has been cancelled
				
			test / Windows (vim, v8.0.0027) (push) Has been cancelled
				
			test / Windows (vim, v8.0.1453) (push) Has been cancelled
				
			test / Windows (vim, v8.1.2269) (push) Has been cancelled
				
			test / Windows (vim, v8.2.2434) (push) Has been cancelled
				
			test / Windows (vim, v8.2.3995) (push) Has been cancelled
				
			docker / docker (push) Has been cancelled
				
			mirror / check (coding) (push) Has been cancelled
				
			mirror / check (gitee) (push) Has been cancelled
				
			mirror / check (gitlab) (push) Has been cancelled
				
			
		
			
				
	
	
		
			118 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
"=============================================================================
 | 
						|
" json.vim --- SpaceVim json API
 | 
						|
" Copyright (c) 2016-2023 Wang Shidong & Contributors
 | 
						|
" Author: Wang Shidong < wsdjeg@outlook.com >
 | 
						|
" URL: https://spacevim.org
 | 
						|
" License: GPLv3
 | 
						|
"=============================================================================
 | 
						|
 | 
						|
let s:self = {}
 | 
						|
let s:self._vim = SpaceVim#api#import('vim')
 | 
						|
let s:self._iconv = SpaceVim#api#import('iconv') 
 | 
						|
 | 
						|
function! s:self._json_null() abort
 | 
						|
  return 0
 | 
						|
endfunction
 | 
						|
 | 
						|
function! s:self._json_true() abort
 | 
						|
  return 1
 | 
						|
endfunction
 | 
						|
 | 
						|
function! s:self._json_false() abort
 | 
						|
  return 0
 | 
						|
endfunction
 | 
						|
 | 
						|
if exists('*json_decode')
 | 
						|
  function! s:self.json_decode(json) abort
 | 
						|
    if a:json ==# ''
 | 
						|
      " instead of throw error, if json is empty string, just return an empty
 | 
						|
      " string
 | 
						|
      return ''
 | 
						|
    endif
 | 
						|
    return json_decode(a:json)
 | 
						|
  endfunction
 | 
						|
else
 | 
						|
 | 
						|
  function! s:self._fixvar(val) abort
 | 
						|
    if self._vim.is_number(a:val)
 | 
						|
          \ || self._vim.is_string(a:val)
 | 
						|
          \ || empty(a:val)
 | 
						|
      return a:val
 | 
						|
    elseif self._vim.is_list(a:val) && len(a:val) ==# 1
 | 
						|
      if string(a:val[0]) == string(self._json_true)
 | 
						|
        return get(v:, 'true', 1)
 | 
						|
      elseif string(a:val[0]) ==# string(self._json_false)
 | 
						|
        return get(v:, 'false', 0)
 | 
						|
      elseif string(a:val[0]) ==# string(self._json_null)
 | 
						|
        return get(v:, 'null', 0)
 | 
						|
      else
 | 
						|
        return a:val
 | 
						|
      endif
 | 
						|
    elseif self._vim.is_list(a:val) && len(a:val) > 1
 | 
						|
      return map(a:val, 'self._fixvar(v:val)')
 | 
						|
    elseif self._vim.is_dict(a:val)
 | 
						|
      return map(a:val, 'self._fixvar(v:val)')
 | 
						|
    endif
 | 
						|
  endfunction
 | 
						|
  " @vimlint(EVL102, 1, l:true)
 | 
						|
  " @vimlint(EVL102, 1, l:false)
 | 
						|
  " @vimlint(EVL102, 1, l:null)
 | 
						|
  function! s:self.json_decode(json) abort
 | 
						|
    let true = [self._json_true]
 | 
						|
    let false = [self._json_false]
 | 
						|
    let null = [self._json_null]
 | 
						|
    " we need to remove \n, because eval() do not work
 | 
						|
    let json = join(split(a:json, "\n"), '')
 | 
						|
    try
 | 
						|
      let object = eval(json)
 | 
						|
    catch
 | 
						|
      let object = ''
 | 
						|
    endtry
 | 
						|
    call self._fixvar(object)
 | 
						|
    return object
 | 
						|
  endfunction
 | 
						|
  " @vimlint(EVL102, 0, l:true)
 | 
						|
  " @vimlint(EVL102, 0, l:false)
 | 
						|
  " @vimlint(EVL102, 0, l:null)
 | 
						|
endif
 | 
						|
 | 
						|
if exists('*json_encode')
 | 
						|
  function! s:self.json_encode(val) abort
 | 
						|
    return json_encode(a:val)
 | 
						|
  endfunction
 | 
						|
else
 | 
						|
  function! s:self.json_encode(val) abort
 | 
						|
    if type(a:val) == type(0)
 | 
						|
      return a:val
 | 
						|
    elseif type(a:val) == type('')
 | 
						|
      let json = '"' . escape(a:val, '\"') . '"'
 | 
						|
      let json = substitute(json, "\r", '\\r', 'g')
 | 
						|
      let json = substitute(json, "\n", '\\n', 'g')
 | 
						|
      let json = substitute(json, "\t", '\\t', 'g')
 | 
						|
      let json = substitute(json, '\([[:cntrl:]]\)', '\=printf("\x%02d", char2nr(submatch(1)))', 'g')
 | 
						|
      return self._iconv.iconv(json, &encoding, 'utf-8')
 | 
						|
    elseif self._vim.is_func(a:val)
 | 
						|
      let s = string(a:val)
 | 
						|
      if s ==# string(self._json_null)
 | 
						|
        return 'null'
 | 
						|
      elseif s ==# string(self._json_true)
 | 
						|
        return 'true'
 | 
						|
      elseif s ==# string(self._json_false)
 | 
						|
        return 'false'
 | 
						|
      endif
 | 
						|
    elseif self._vim.is_list(a:val)
 | 
						|
      return '[' . join(map(copy(a:val), 'self.json_encode(v:val)'), ',') . ']'
 | 
						|
    elseif self._vim.is_dict(a:val)
 | 
						|
      return '{' . join(map(keys(a:val), "self.json_encode(v:val) . ':' . self.json_encode(a:val[v:val])"), ',') . '}'
 | 
						|
    else
 | 
						|
      return string(a:val)
 | 
						|
    endif
 | 
						|
  endfunction
 | 
						|
endif
 | 
						|
 | 
						|
function! SpaceVim#api#data#json#get() abort
 | 
						|
  return deepcopy(s:self)
 | 
						|
endfunction
 | 
						|
 | 
						|
" vim:set et sw=2:
 |