Skip to content

Commit 40669b7

Browse files
committed
Wip; add signature help to python
1 parent 5dd48f1 commit 40669b7

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
@@ -1599,7 +1599,7 @@ def GetTriggerCharacters( self, server_trigger_characters ):
15991599
return server_trigger_characters
16001600

16011601

1602-
def _GetSignatureTriggerCharacters( self, server_trigger_characters ):
1602+
def GetSignatureTriggerCharacters( self, server_trigger_characters ):
16031603
"""Same as _GetTriggerCharacters but for signature help."""
16041604
return server_trigger_characters
16051605

@@ -1661,7 +1661,7 @@ def _HandleInitializeInPollThread( self, response ):
16611661
self.Language(),
16621662
server_trigger_characters )
16631663

1664-
trigger_characters = self._GetSignatureTriggerCharacters(
1664+
trigger_characters = self.GetSignatureTriggerCharacters(
16651665
server_trigger_characters )
16661666

16671667
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 ):
@@ -188,12 +189,40 @@ def _GetExtraData( self, completion ):
188189

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

198227

199228
def DetailCandidates( self, request_data, candidates ):

0 commit comments

Comments
 (0)