From e484ad69963a147fedaac363eab0a27b9180fa39 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Sun, 20 Apr 2014 18:55:37 -0400 Subject: [PATCH] Use info op to drive jump to definition --- plugin/fireplace.vim | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/plugin/fireplace.vim b/plugin/fireplace.vim index bb52455..7656635 100644 --- a/plugin/fireplace.vim +++ b/plugin/fireplace.vim @@ -1144,19 +1144,38 @@ augroup END " }}}1 " Go to source {{{1 -function! fireplace#source(symbol) abort - let cmd = - \ '(when-let [v (resolve ' . s:qsym(a:symbol) .')]' . - \ ' (when-let [filepath (:file (meta v))]' . - \ ' [filepath' . - \ ' (:line (meta v))]))' - let result = fireplace#evalparse(cmd) - if type(result) == type([]) - let file = fireplace#findresource(result[0]) - if !empty(file) - return '+' . result[1] . ' ' . fnameescape(file) +function! fireplace#info(symbol) abort + if fireplace#op_available('info') + let response = fireplace#message({'op': 'info', 'symbol': a:symbol})[0] + if type(get(response, 'value')) == type({}) + return response.value endif endif + let cmd = + \ '(if-let [m (meta (resolve ' . s:qsym(a:symbol) .'))]' + \ . ' {:name (:name m)' + \ . ' :ns (:ns m)' + \ . ' :resource (:file m)' + \ . ' :line (:line m)' + \ . ' :doc (:doc m)' + \ . ' :arglists-str (str (:arglists m))}' + \ . ' {})' + return fireplace#evalparse(cmd) +endfunction + +function! fireplace#source(symbol) abort + let info = fireplace#info(a:symbol) + + let file = '' + if !empty(get(info, 'resource')) + let file = fireplace#findresource(info.resource) + elseif get(info, 'file') =~# '^/\|^\w:\\' && filereadable(info.file) + let file = info.file + endif + + if !empty(file) && !empty(get(info, 'line')) + return '+' . info.line . ' ' . fnameescape(file) + endif return '' endfunction