Skip to content

Commit 9b99fe7

Browse files
puremourningBen Jackson
authored and
Ben Jackson
committed
Split signature help into its own request
1 parent 26bc3ea commit 9b99fe7

File tree

2 files changed

+36
-9
lines changed

2 files changed

+36
-9
lines changed

ycmd/handlers.py

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@
3232

3333
import ycm_core
3434
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,
3638
UnknownExtraConf )
3739
from ycmd.request_wrap import RequestWrap
3840
from ycmd.bottle_utils import SetResponseHeader
@@ -92,14 +94,12 @@ def GetCompletions():
9294

9395
errors = None
9496
completions = None
95-
signature_info = None
9697

9798
if do_filetype_completion:
9899
try:
99100
filetype_completer = _server_state.GetFiletypeCompleter(
100101
request_data[ 'filetypes' ] )
101102
completions = filetype_completer.ComputeCandidates( request_data )
102-
signature_info = filetype_completer.ComputeSignatures( request_data )
103103
except Exception as exception:
104104
if request_data[ 'force_semantic' ]:
105105
# user explicitly asked for semantic completion, so just pass the error
@@ -116,16 +116,38 @@ def GetCompletions():
116116
completions = _server_state.GetGeneralCompleter().ComputeCandidates(
117117
request_data )
118118

119-
# No fallback for signature help. The general completer is unlikely to be able
120-
# to offer anything of for that here.
121-
122119
return _JsonResponse(
123120
BuildCompletionResponse( completions if completions else [],
124-
signature_info if signature_info else {},
125121
request_data[ 'start_column' ],
126122
errors = errors ) )
127123

128124

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+
129151
@app.post( '/filter_and_sort_candidates' )
130152
def FilterAndSortCandidates():
131153
LOGGER.info( 'Received filter & sort request' )

ycmd/responses.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,17 +124,22 @@ def BuildCompletionData( insertion_text,
124124

125125
# start_column is a byte offset
126126
def BuildCompletionResponse( completions,
127-
signature_info,
128127
start_column,
129128
errors=None ):
130129
return {
131130
'completions': completions,
132-
'signature_info': signature_info,
133131
'completion_start_column': start_column,
134132
'errors': errors if errors else [],
135133
}
136134

137135

136+
def BuildSignatureHelpResponse( signature_info, errors = None ):
137+
return {
138+
'signature_help': signature_info,
139+
'errors': errors if errors else [],
140+
}
141+
142+
138143
# location.column_number_ is a byte offset
139144
def BuildLocationData( location ):
140145
return {

0 commit comments

Comments
 (0)