summaryrefslogtreecommitdiffstats
path: root/autoload/crystal_lang.vim
diff options
context:
space:
mode:
Diffstat (limited to 'autoload/crystal_lang.vim')
-rw-r--r--autoload/crystal_lang.vim19
1 files changed, 14 insertions, 5 deletions
diff --git a/autoload/crystal_lang.vim b/autoload/crystal_lang.vim
index 01244746..94cc9db3 100644
--- a/autoload/crystal_lang.vim
+++ b/autoload/crystal_lang.vim
@@ -3,11 +3,21 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1
let s:save_cpo = &cpo
set cpo&vim
-let s:V = vital#of('crystal')
+let s:V = vital#crystal#new()
let s:P = s:V.import('Process')
-let s:J = s:V.import('Web.JSON')
let s:C = s:V.import('ColorEcho')
+if exists('*json_decode')
+ function! s:decode_json(text) abort
+ return json_decode(a:text)
+ endfunction
+else
+ let s:J = s:V.import('Web.JSON')
+ function! s:decode_json(text) abort
+ return s:J.decode(a:text)
+ endfunction
+endif
+
function! s:echo_error(msg, ...) abort
echohl ErrorMsg
if a:0 == 0
@@ -102,7 +112,7 @@ function! crystal_lang#jump_to_definition(file, pos) abort
return s:echo_error(cmd_result.output)
endif
- let impl = s:J.decode(cmd_result.output)
+ let impl = s:decode_json(cmd_result.output)
if impl.status !=# 'ok'
return s:echo_error(impl.message)
endif
@@ -149,7 +159,6 @@ endfunction
function! crystal_lang#complete(findstart, base) abort
if a:findstart
- echom 'find start'
return s:find_completion_start()
endif
@@ -158,7 +167,7 @@ function! crystal_lang#complete(findstart, base) abort
return
endif
- let contexts = s:J.decode(cmd_result.output)
+ let contexts = s:decode_json(cmd_result.output)
if contexts.status !=# 'ok'
return
endif