32
32
33
33
import ycm_core
34
34
from ycmd import extra_conf_store , hmac_plugin , server_state , user_options_store
35
- from ycmd .responses import ( BuildExceptionResponse , BuildCompletionResponse ,
35
+ from ycmd .responses import ( BuildExceptionResponse ,
36
+ BuildCompletionResponse ,
37
+ BuildSignatureHelpResponse ,
36
38
UnknownExtraConf )
37
39
from ycmd .request_wrap import RequestWrap
38
40
from ycmd .bottle_utils import SetResponseHeader
@@ -92,14 +94,12 @@ def GetCompletions():
92
94
93
95
errors = None
94
96
completions = None
95
- signature_info = None
96
97
97
98
if do_filetype_completion :
98
99
try :
99
100
filetype_completer = _server_state .GetFiletypeCompleter (
100
101
request_data [ 'filetypes' ] )
101
102
completions = filetype_completer .ComputeCandidates ( request_data )
102
- signature_info = filetype_completer .ComputeSignatures ( request_data )
103
103
except Exception as exception :
104
104
if request_data [ 'force_semantic' ]:
105
105
# user explicitly asked for semantic completion, so just pass the error
@@ -116,16 +116,38 @@ def GetCompletions():
116
116
completions = _server_state .GetGeneralCompleter ().ComputeCandidates (
117
117
request_data )
118
118
119
- # No fallback for signature help. The general completer is unlikely to be able
120
- # to offer anything of for that here.
121
-
122
119
return _JsonResponse (
123
120
BuildCompletionResponse ( completions if completions else [],
124
- signature_info if signature_info else {},
125
121
request_data [ 'start_column' ],
126
122
errors = errors ) )
127
123
128
124
125
+ @app .post ( '/signature_help' )
126
+ def GetSignatureHelp ():
127
+ LOGGER .info ( 'Received signature help request' )
128
+ request_data = RequestWrap ( request .json )
129
+
130
+ if not _server_state .ShouldUseFiletypeCompleter ( request_data ):
131
+ return _JsonResponse ( {} )
132
+
133
+ errors = None
134
+ signature_info = None
135
+
136
+ try :
137
+ filetype_completer = _server_state .GetFiletypeCompleter (
138
+ request_data [ 'filetypes' ] )
139
+ signature_info = filetype_completer .ComputeSignatures ( request_data )
140
+ except Exception as exception :
141
+ LOGGER .exception ( 'Exception from semantic completer during sig help' )
142
+ errors = [ BuildExceptionResponse ( exception , traceback .format_exc () ) ]
143
+
144
+ # No fallback for signature help. The general completer is unlikely to be able
145
+ # to offer anything of for that here.
146
+ return _JsonResponse (
147
+ BuildSignatureHelpResponse ( signature_info if signature_info else {},
148
+ errors = errors ) )
149
+
150
+
129
151
@app .post ( '/filter_and_sort_candidates' )
130
152
def FilterAndSortCandidates ():
131
153
LOGGER .info ( 'Received filter & sort request' )
0 commit comments