Esempio n. 1
0
def pyls_hover(document, position):
    definitions = document.jedi_script(position).goto_definitions()
    word = document.word_at_position(position)

    if LooseVersion(_utils.JEDI_VERSION) >= LooseVersion('0.15.0'):
        # Find first exact matching definition
        definition = next((x for x in definitions if x.name == word), None)

        if not definition:
            return {'contents': ''}

        # raw docstring returns only doc, without signature
        doc = _utils.format_docstring(definition.docstring(raw=True))

        # Find first exact matching signature
        signature = next((x.to_string() for x in definition.get_signatures() if x.name == word), '')

        contents = []
        if signature:
            contents.append({
                'language': 'python',
                'value': signature,
            })
        if doc:
            contents.append(doc)
        if not contents:
            return {'contents': ''}
        return {'contents': contents}
    else:
        # Find an exact match for a completion
        for d in definitions:
            if d.name == word:
                return {'contents': _utils.format_docstring(d.docstring()) or ''}

        return {'contents': ''}
def _format_completion(d, include_params=True):
    completion = {
        'label': _label(d),
        'kind': _TYPE_MAP.get(d.type),
        'detail': _detail(d),
        'documentation': _utils.format_docstring(d.docstring()),
        'sortText': _sort_text(d),
        'insertText': d.name
    }

    if include_params and hasattr(d, 'params') and d.params:
        positional_args = [
            param for param in d.params if '=' not in param.description
        ]

        # For completions with params, we can generate a snippet instead
        completion['insertTextFormat'] = lsp.InsertTextFormat.Snippet
        snippet = d.name + '('
        for i, param in enumerate(positional_args):
            snippet += '${%s:%s}' % (i + 1, param.name)
            if i < len(positional_args) - 1:
                snippet += ', '
        snippet += ')$0'
        completion['insertText'] = snippet

    return completion
Esempio n. 3
0
def pyls_signature_help(document, position):
    signatures = document.jedi_script(position).call_signatures()

    if not signatures:
        return {'signatures': []}

    s = signatures[0]

    # Docstring contains one or more lines of signature, followed by empty line, followed by docstring
    function_sig_lines = (s.docstring().split('\n\n') or [''])[0].splitlines()
    function_sig = ' '.join([line.strip() for line in function_sig_lines])
    sig = {
        'label': function_sig,
        'documentation': _utils.format_docstring(s.docstring(raw=True))
    }

    # If there are params, add those
    if s.params:
        sig['parameters'] = [{
            'label':
            p.name,
            'documentation':
            _param_docs(s.docstring(), p.name)
        } for p in s.params]

    # We only return a single signature because Python doesn't allow overloading
    sig_info = {'signatures': [sig], 'activeSignature': 0}

    if s.index is not None and s.params:
        # Then we know which parameter we're looking at
        sig_info['activeParameter'] = s.index

    return sig_info
def pyls_signature_help(document, position):
    signatures = document.jedi_script(position).call_signatures()

    if not signatures:
        return {'signatures': []}

    s = signatures[0]
    sig = {
        'label': s.docstring().splitlines()[0],
        'documentation': _utils.format_docstring(s.docstring(raw=True))
    }

    # If there are params, add those
    if s.params:
        sig['parameters'] = [{
            'label': p.name,
            'documentation': _param_docs(s.docstring(), p.name)
        } for p in s.params]

    # We only return a single signature because Python doesn't allow overloading
    sig_info = {'signatures': [sig], 'activeSignature': 0}

    if s.index is not None and s.params:
        # Then we know which parameter we're looking at
        sig_info['activeParameter'] = s.index

    return sig_info
Esempio n. 5
0
def pyls_hover(document, position):
    definitions = document.jedi_script(position).goto_definitions()
    word = document.word_at_position(position)

    # Find first exact matching definition
    definition = next((x for x in definitions if x.name == word), None)

    if not definition:
        return {'contents': ''}

    # raw docstring returns only doc, without signature
    doc = _utils.format_docstring(definition.docstring(raw=True))

    # Find first exact matching signature
    signature = next((x.to_string() for x in definition.get_signatures() if x.name == word), '')

    contents = []
    if signature:
        contents.append({
            'language': 'python',
            'value': signature,
        })
    if doc:
        contents.append(doc)
    if not contents:
        return {'contents': ''}
    return {'contents': contents}
def pyls_completions(config, document, position):
    definitions = document.jedi_script(position).completions()
    if not definitions:
        return None

    settings = config.plugin_settings('jedi_completion', document_path=document.path)
    include_params = settings.get('include_params', True)

    completions = []
    for d in definitions:
        completion = {
            'label': _label(d),
            'kind': _kind(d),
            'detail': _detail(d),
            'documentation': _utils.format_docstring(d.docstring()),
            'sortText': _sort_text(d),
            'insertText': d.name
        }

        if include_params and hasattr(d, 'params') and d.params:
            # For completions with params, we can generate a snippet instead
            completion['insertTextFormat'] = lsp.InsertTextFormat.Snippet
            snippet = d.name + '('
            for i, param in enumerate(d.params):
                snippet += '${%s:%s}' % (i + 1, param.name)
                if i < len(d.params) - 1:
                    snippet += ', '
            snippet += ')$0'
            completion['insertText'] = snippet

        completions.append(completion)

    return completions or None
def pyls_completions(document, position):
    definitions = document.jedi_script(position).completions()
    return [{
        'label': _label(d),
        'kind': _kind(d),
        'detail': _detail(d),
        'documentation': _utils.format_docstring(d.docstring()),
        'sortText': _sort_text(d),
        'insertText': d.name
    } for d in definitions] or None
def pyls_hover(document, position):
    definitions = document.jedi_script(position).goto_definitions()
    word = document.word_at_position(position)

    # Find an exact match for a completion
    for d in definitions:
        if d.name == word:
            return {'contents': _utils.format_docstring(d.docstring()) or ''}

    return {'contents': ''}
Esempio n. 9
0
def pyls_hover(document, position):
    definitions = document.jedi_script(position).goto_definitions()
    word = document.word_at_position(position)

    if LooseVersion(_utils.JEDI_VERSION) >= LooseVersion('0.15.0'):
        # Find first exact matching definition
        definition = next((x for x in definitions if x.name == word), None)

        # Ensure a definition is used if only one is available
        # even if the word doesn't match. An example of this case is 'np'
        # where 'numpy' doesn't match with 'np'. Same for NumPy ufuncs
        if len(definitions) == 1:
            definition = definitions[0]

        if not definition:
            return {'contents': ''}

        # raw docstring returns only doc, without signature
        doc = _utils.format_docstring(definition.docstring(raw=True))

        # Find first exact matching signature
        signature = next((x.to_string() for x in definition.get_signatures() if x.name == word), '')

        contents = []
        if signature:
            contents.append({
                'language': 'python',
                'value': signature,
            })
        if doc:
            contents.append(doc)
        if not contents:
            return {'contents': ''}
        return {'contents': contents}
    else:
        # Find an exact match for a completion
        for d in definitions:
            if d.name == word:
                return {'contents': _utils.format_docstring(d.docstring()) or ''}

        return {'contents': ''}
def pyls_completions(document, position):
    log.debug('Launching Jedi')
    definitions = document.jedi_script(position).completions()
    definitions = [{
        'label': _label(d),
        'kind': _kind(d),
        'detail': _detail(d),
        'documentation': _utils.format_docstring(d.docstring()),
        'sortText': _sort_text(d),
        'insertText': d.name
    } for d in definitions]
    log.debug('Jedi finished')
    return definitions
Esempio n. 11
0
def _format_completion(d, include_params=True):
    completion = {
        'label': _label(d),
        'kind': _TYPE_MAP.get(d.type),
        'detail': _detail(d),
        'documentation': _utils.format_docstring(d.docstring()),
        'sortText': _sort_text(d),
        'insertText': d.name
    }

    if d.type == 'path':
        path = osp.normpath(d.name)
        path = path.replace('\\', '\\\\')
        path = path.replace('/', '\\/')
        completion['insertText'] = path

    sig = d.get_signatures()
    if (include_params and sig and not is_exception_class(d.name)):
        positional_args = [
            param for param in sig[0].params
            if '=' not in param.description and param.name not in {'/', '*'}
        ]

        if len(positional_args) > 1:
            # For completions with params, we can generate a snippet instead
            completion['insertTextFormat'] = lsp.InsertTextFormat.Snippet
            snippet = d.name + '('
            for i, param in enumerate(positional_args):
                snippet += '${%s:%s}' % (i + 1, param.name)
                if i < len(positional_args) - 1:
                    snippet += ', '
            snippet += ')$0'
            completion['insertText'] = snippet
        elif len(positional_args) == 1:
            completion['insertTextFormat'] = lsp.InsertTextFormat.Snippet
            completion['insertText'] = d.name + '($0)'
        else:
            completion['insertText'] = d.name + '()'

    return completion
Esempio n. 12
0
def pyls_hover(document, position):
    code_position = _utils.position_to_jedi_linecolumn(document, position)
    definitions = document.jedi_script().infer(**code_position)
    word = document.word_at_position(position)

    # Find first exact matching definition
    definition = next((x for x in definitions if x.name == word), None)

    # Ensure a definition is used if only one is available
    # even if the word doesn't match. An example of this case is 'np'
    # where 'numpy' doesn't match with 'np'. Same for NumPy ufuncs
    if len(definitions) == 1:
        definition = definitions[0]

    if not definition:
        return {'contents': ''}

    # raw docstring returns only doc, without signature
    doc = _utils.format_docstring(definition.docstring(raw=True))

    # Find first exact matching signature
    signature = next(
        (x.to_string() for x in definition.get_signatures() if x.name == word),
        '')

    contents = []
    if signature:
        contents.append({
            'language': 'python',
            'value': signature,
        })

    if doc:
        contents.append(doc)

    if not contents:
        return {'contents': ''}

    return {'contents': contents}