Skip to content

Commit aea26f5

Browse files
committed
Wip; add signature help to python
1 parent 0de22b2 commit aea26f5

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
@@ -1568,7 +1568,7 @@ def GetTriggerCharacters( self, server_trigger_characters ):
15681568
return server_trigger_characters
15691569

15701570

1571-
def _GetSignatureTriggerCharacters( self, server_trigger_characters ):
1571+
def GetSignatureTriggerCharacters( self, server_trigger_characters ):
15721572
"""Same as _GetTriggerCharacters but for signature help."""
15731573
return server_trigger_characters
15741574

@@ -1630,7 +1630,7 @@ def _HandleInitializeInPollThread( self, response ):
16301630
self.Language(),
16311631
server_trigger_characters )
16321632

1633-
trigger_characters = self._GetSignatureTriggerCharacters(
1633+
trigger_characters = self.GetSignatureTriggerCharacters(
16341634
server_trigger_characters )
16351635

16361636
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)