Skip to content

Commit 2f9ac7f

Browse files
amosonnnickspoons
authored andcommitted
Separate metadata fetching and navigation
1 parent 06602e2 commit 2f9ac7f

File tree

1 file changed

+31
-43
lines changed

1 file changed

+31
-43
lines changed

autoload/OmniSharp/actions/definition.vim

Lines changed: 31 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,21 @@ function! OmniSharp#actions#definition#Find(...) abort
2828
else
2929
let loc = OmniSharp#py#Eval('gotoDefinition()')
3030
if OmniSharp#py#CheckForError() | return 0 | endif
31-
" Mock metadata info for old server based setups
32-
return s:CBGotoDefinition(opts, loc, { 'MetadataSource': {}})
31+
" We never come from metadata here
32+
return s:CBGotoDefinition(opts, loc, 0)
3333
endif
3434
endfunction
3535

3636
function! OmniSharp#actions#definition#Preview(...) abort
3737
let opts = a:0 && a:1 isnot 0 ? { 'Callback': a:1 } : {}
3838
if g:OmniSharp_server_stdio
39-
let Callback = function('s:CBPreviewDefinition', [opts])
39+
let Callback = function('s:CBPreviewDefinition')
4040
call s:StdioFind(Callback)
4141
else
4242
let loc = OmniSharp#py#Eval('gotoDefinition()')
4343
if OmniSharp#py#CheckForError() | return 0 | endif
44-
call s:CBPreviewDefinition({}, loc, {})
44+
" We never come from metadata here
45+
call s:CBPreviewDefinition(loc, 0)
4546
endif
4647
endfunction
4748

@@ -59,51 +60,50 @@ function! s:StdioFindRH(Callback, response) abort
5960
if !a:response.Success | return | endif
6061
let body = a:response.Body
6162
if type(body) == type({}) && get(body, 'FileName', v:null) != v:null
62-
call a:Callback(OmniSharp#locations#Parse([body])[0], body)
63+
call a:Callback(OmniSharp#locations#Parse([body])[0], 0)
6364
else
64-
call a:Callback(0, body)
65+
if g:OmniSharp_lookup_metadata
66+
\ && type(body) == type({})
67+
\ && type(body.MetadataSource) == type({})
68+
call s:MetadataFind(a:Callback, body)
69+
else
70+
call a:Callback(0, 1)
71+
endif
6572
endif
6673
endfunction
6774

68-
function! s:CBGotoDefinition(opts, location, metadata) abort
69-
let went_to_metadata = 0
75+
function! s:CBGotoDefinition(opts, location, fromMetadata) abort
7076
if type(a:location) != type({}) " Check whether a dict was returned
71-
if g:OmniSharp_lookup_metadata
72-
\ && type(a:metadata) == type({})
73-
\ && type(a:metadata.MetadataSource) == type({})
74-
let found = s:MetadataFind(0, a:metadata, a:opts)
75-
let went_to_metadata = 1
76-
else
77-
echo 'Not found'
78-
let found = 0
79-
endif
77+
echo 'Not found'
78+
let found = 0
8079
else
81-
let found = OmniSharp#locations#Navigate(a:location, a:opts.editcommand)
80+
let found = OmniSharp#locations#Navigate(a:location, get(a:opts, 'editcommand', 'edit'))
81+
if found && a:fromMetadata
82+
setlocal nomodifiable readonly
83+
endif
8284
endif
83-
if has_key(a:opts, 'Callback') && !went_to_metadata
85+
if has_key(a:opts, 'Callback')
8486
call a:opts.Callback(found)
8587
endif
8688
return found
8789
endfunction
8890

89-
function! s:CBPreviewDefinition(opts, location, metadata) abort
91+
function! s:CBPreviewDefinition(location, fromMetadata) abort
9092
if type(a:location) != type({}) " Check whether a dict was returned
91-
if g:OmniSharp_lookup_metadata
92-
\ && type(a:metadata) == type({})
93-
\ && type(a:metadata.MetadataSource) == type({})
94-
let found = s:MetadataFind(1, a:metadata, a:opts)
95-
else
96-
echo 'Not found'
97-
endif
93+
echo 'Not found'
9894
else
95+
let jumped_from_preview = &previewwindow
9996
call OmniSharp#locations#Preview(a:location)
10097
echo OmniSharp#locations#Modify(a:location).filename
98+
if a:fromMetadata && !jumped_from_preview && &previewwindow
99+
silent wincmd p
100+
endif
101101
endif
102102
endfunction
103103

104-
function! s:MetadataFind(open_in_preview, metadata, opts) abort
104+
function! s:MetadataFind(callback, metadata) abort
105105
if g:OmniSharp_server_stdio
106-
let Callback = function('s:CBGotoMetadata', [a:open_in_preview, a:opts])
106+
let Callback = function('s:CBMetadataFind', [a:callback])
107107
call s:StdioMetadataFind(Callback, a:metadata)
108108
return 1
109109
else
@@ -126,7 +126,7 @@ function! s:StdioMetadataFindRH(Callback, metadata, response) abort
126126
call a:Callback(a:response.Body, a:metadata)
127127
endfunction
128128

129-
function! s:CBGotoMetadata(open_in_preview, opts, response, metadata) abort
129+
function! s:CBMetadataFind(callback, response, metadata) abort
130130
let host = OmniSharp#GetHost()
131131
let metadata_filename = fnamemodify(
132132
\ OmniSharp#util#TranslatePathForClient(a:response.SourceName), ':t')
@@ -137,24 +137,12 @@ function! s:CBGotoMetadata(open_in_preview, opts, response, metadata) abort
137137
let bufnr = bufadd(temp_file)
138138
call setbufvar(bufnr, 'OmniSharp_host', host)
139139
call setbufvar(bufnr, 'OmniSharp_metadata_filename', a:response.SourceName)
140-
let jumped_from_preview = &previewwindow
141140
let location = {
142141
\ 'filename': temp_file,
143142
\ 'lnum': a:metadata.Line,
144143
\ 'col': a:metadata.Column
145144
\}
146-
if a:open_in_preview
147-
call OmniSharp#locations#Preview(location)
148-
else
149-
call OmniSharp#locations#Navigate(location, get(a:opts, 'editcommand', 'edit'))
150-
setlocal nomodifiable readonly
151-
endif
152-
if a:open_in_preview && !jumped_from_preview && &previewwindow
153-
silent wincmd p
154-
endif
155-
if has_key(a:opts, 'Callback')
156-
call a:opts.Callback(1) " found
157-
endif
145+
call a:callback(location, 1)
158146
endfunction
159147

160148
let &cpoptions = s:save_cpo

0 commit comments

Comments
 (0)