Skip to content

Commit

Permalink
Wip; add signature help to python
Browse files Browse the repository at this point in the history
  • Loading branch information
puremourning committed Jun 12, 2019
1 parent 0de22b2 commit aea26f5
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
4 changes: 2 additions & 2 deletions ycmd/completers/language_server/language_server_completer.py
Original file line number Diff line number Diff line change
Expand Up @@ -1568,7 +1568,7 @@ def GetTriggerCharacters( self, server_trigger_characters ):
return server_trigger_characters


def _GetSignatureTriggerCharacters( self, server_trigger_characters ):
def GetSignatureTriggerCharacters( self, server_trigger_characters ):
"""Same as _GetTriggerCharacters but for signature help."""
return server_trigger_characters

Expand Down Expand Up @@ -1630,7 +1630,7 @@ def _HandleInitializeInPollThread( self, response ):
self.Language(),
server_trigger_characters )

trigger_characters = self._GetSignatureTriggerCharacters(
trigger_characters = self.GetSignatureTriggerCharacters(
server_trigger_characters )

if trigger_characters:
Expand Down
31 changes: 30 additions & 1 deletion ycmd/completers/python/python_completer.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ def __init__( self, user_options ):
self._environment_for_file = {}
self._environment_for_interpreter_path = {}
self._sys_path_for_file = {}
self.signature_triggers.SetServerSemanticTriggers( [ '(', ',' ] )


def SupportedFiletypes( self ):
Expand Down Expand Up @@ -188,12 +189,40 @@ def _GetExtraData( self, completion ):

def ComputeCandidatesInner( self, request_data ):
with self._jedi_lock:
completions = self._GetJediScript( request_data ).completions()
return [ responses.BuildCompletionData(
insertion_text = completion.name,
# We store the Completion object returned by Jedi in the extra_data
# field to detail the candidates once the filtering is done.
extra_data = completion
) for completion in self._GetJediScript( request_data ).completions() ]
) for completion in completions ]


def ComputeSignaturesInner( self, request_data ):
with self._jedi_lock:
signatures = self._GetJediScript( request_data ).call_signatures()

active_signature = 0
active_parameter = 0
for index, signature in enumerate( signatures ):
if signature.index is not None:
active_signature = index
active_parameter = signature.index
break

return {
'activeSignature': active_signature,
'activeParameter': active_parameter,
'signatures': [
{
'label': s.description + '( ' + ', '.join(
[ p.description[ 6: ] for p in s.params ] ) + ' )',
'parameters': [
{ 'label': p.description[ 6: ] } for p in s.params
],
} for s in signatures
]
}


def DetailCandidates( self, request_data, candidates ):
Expand Down

0 comments on commit aea26f5

Please sign in to comment.