File: jedi_vim_debug.py

package info (click to toggle)
python-jedi 0.19.1%2Bds1-1
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 11,680 kB
  • sloc: python: 28,783; makefile: 172; ansic: 13
file content (96 lines) | stat: -rw-r--r-- 3,049 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
"""Used in jedi-vim's jedi#debug_info()"""
import sys

import vim
from jedi_vim import PythonToVimStr, jedi


def echo(msg):
    vim.command('echo %r' % PythonToVimStr(msg))


def echo_error(msg):
    vim.command('echohl ErrorMsg')
    echo(msg)
    vim.command('echohl None')


def format_exc_info(exc_info=None, tb_indent=2):
    import traceback

    if exc_info is None:
        exc_info = sys.exc_info()

    exc_msg = traceback.format_exception_only(exc_info[0], exc_info[1])
    lines = ''.join(exc_msg).rstrip('\n').split('\n')

    lines.append('Traceback (most recent call last):')
    tb = traceback.format_tb(exc_info[2])
    lines.extend(''.join(tb).rstrip('\n').split('\n'))

    indent = ' ' * tb_indent
    return '{0}'.format(('\n' + indent).join(lines))


def get_known_environments():
    """Get known Jedi environments."""
    envs = list(jedi.find_virtualenvs())
    envs.extend(jedi.find_system_environments())
    return envs


def display_debug_info():
    echo(' - global sys.executable: `{0}`'.format(sys.executable))
    echo(' - global sys.version: `{0}`'.format(
        ', '.join([x.strip()
                   for x in sys.version.split('\n')])))
    echo(' - global site module: `{0}`'.format(__import__('site').__file__))

    try:
        import jedi_vim
    except Exception:
        echo_error('ERROR: could not import jedi_vim: {0}'.format(
            format_exc_info()))
        return

    if jedi_vim.jedi is None:
        if hasattr(jedi_vim, 'jedi_import_error'):
            error_msg = format_exc_info(jedi_vim.jedi_import_error)
        else:
            error_msg = 'unknown error'
        echo_error('ERROR: could not import the "jedi" Python module: {0}'.format(
            error_msg))
    else:
        echo('\n##### Jedi\n\n - path: `{0}`'.format(jedi_vim.jedi.__file__))
        echo(' - version: {0}'.format(jedi_vim.jedi.__version__))

        try:
            project = jedi_vim.get_project()
            environment = project.get_environment()
        except AttributeError:
            script_evaluator = jedi_vim.jedi.Script('')._evaluator
            try:
                sys_path = script_evaluator.project.sys_path
            except AttributeError:
                sys_path = script_evaluator.sys_path
        else:
            echo('\n##### Jedi environment: {0}\n\n'.format(environment))
            echo(' - executable: {0}'.format(environment.executable))
            try:
                sys_path = environment.get_sys_path()
            except Exception:
                echo_error('ERROR: failed to get sys path from environment: {0}'.format(
                    format_exc_info()))
                return

        echo(' - sys_path:')
        for p in sys_path:
            echo('    - `{0}`'.format(p))

        if environment:
            echo('\n##### Known environments\n\n')
            for environment in get_known_environments():
                echo(' - {0} ({1})\n'.format(
                    environment,
                    environment.executable,
                ))