@@ -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
3434endfunction
3535
3636function ! 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
4647endfunction
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
6673endfunction
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
8789endfunction
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
102102endfunction
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 )
127127endfunction
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 )
158146endfunction
159147
160148let &cpoptions = s: save_cpo
0 commit comments