Skip to content

Commit b524a3e

Browse files
committed
Wip; add signature help to python
1 parent 43a1e6b commit b524a3e

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

ycmd/completers/language_server/language_server_completer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1587,7 +1587,7 @@ def GetTriggerCharacters( self, server_trigger_characters ):
15871587
return server_trigger_characters
15881588

15891589

1590-
def _GetSignatureTriggerCharacters( self, server_trigger_characters ):
1590+
def GetSignatureTriggerCharacters( self, server_trigger_characters ):
15911591
"""Same as _GetTriggerCharacters but for signature help."""
15921592
return server_trigger_characters
15931593

@@ -1649,7 +1649,7 @@ def _HandleInitializeInPollThread( self, response ):
16491649
self.Language(),
16501650
server_trigger_characters )
16511651

1652-
trigger_characters = self._GetSignatureTriggerCharacters(
1652+
trigger_characters = self.GetSignatureTriggerCharacters(
16531653
server_trigger_characters )
16541654

16551655
if trigger_characters:

ycmd/completers/python/python_completer.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ def __init__( self, user_options ):
4545
self._environment_for_file = {}
4646
self._environment_for_interpreter_path = {}
4747
self._sys_path_for_file = {}
48+
self.signature_triggers.SetServerSemanticTriggers( [ '(', ',' ] )
4849

4950

5051
def SupportedFiletypes( self ):
@@ -187,12 +188,40 @@ def _GetExtraData( self, completion ):
187188

188189
def ComputeCandidatesInner( self, request_data ):
189190
with self._jedi_lock:
191+
completions = self._GetJediScript( request_data ).completions()
190192
return [ responses.BuildCompletionData(
191193
insertion_text = completion.name,
192194
# We store the Completion object returned by Jedi in the extra_data
193195
# field to detail the candidates once the filtering is done.
194196
extra_data = completion
195-
) for completion in self._GetJediScript( request_data ).completions() ]
197+
) for completion in completions ]
198+
199+
200+
def ComputeSignaturesInner( self, request_data ):
201+
with self._jedi_lock:
202+
signatures = self._GetJediScript( request_data ).call_signatures()
203+
204+
active_signature = 0
205+
active_parameter = 0
206+
for index, signature in enumerate( signatures ):
207+
if signature.index is not None:
208+
active_signature = index
209+
active_parameter = signature.index
210+
break
211+
212+
return {
213+
'activeSignature': active_signature,
214+
'activeParameter': active_parameter,
215+
'signatures': [
216+
{
217+
'label': s.description + '( ' + ', '.join(
218+
[ p.description[ 6: ] for p in s.params ] ) + ' )',
219+
'parameters': [
220+
{ 'label': p.description[ 6: ] } for p in s.params
221+
],
222+
} for s in signatures
223+
]
224+
}
196225

197226

198227
def DetailCandidates( self, request_data, candidates ):

0 commit comments

Comments
 (0)