Merge pull request #458 from wilywampa/goto_tagstack

Add g:jedi#use_tag_stack feature for jedi#goto()
This commit is contained in:
Dave Halter
2015-10-18 11:51:11 +02:00
3 changed files with 33 additions and 3 deletions

View File

@@ -34,7 +34,8 @@ let s:default_settings = {
\ 'quickfix_window_height': 10, \ 'quickfix_window_height': 10,
\ 'completions_enabled': 1, \ 'completions_enabled': 1,
\ 'force_py_version': "'auto'", \ 'force_py_version': "'auto'",
\ 'smart_auto_mappings': 1 \ 'smart_auto_mappings': 1,
\ 'use_tag_stack': 1
\ } \ }
for [s:key, s:val] in items(s:deprecations) for [s:key, s:val] in items(s:deprecations)

View File

@@ -43,6 +43,7 @@ Contents *jedi-vim-contents*
6.11. use_splits_not_buffers |g:jedi#use_splits_not_buffers| 6.11. use_splits_not_buffers |g:jedi#use_splits_not_buffers|
6.12. force_py_version |g:jedi#force_py_version| 6.12. force_py_version |g:jedi#force_py_version|
6.13. smart_auto_mappings |g:jedi#smart_auto_mappings| 6.13. smart_auto_mappings |g:jedi#smart_auto_mappings|
6.14. use_tag_stack |g:jedi#use_tag_stack|
7. Testing |jedi-vim-testing| 7. Testing |jedi-vim-testing|
8. Contributing |jedi-vim-contributing| 8. Contributing |jedi-vim-contributing|
9. License |jedi-vim-license| 9. License |jedi-vim-license|
@@ -506,6 +507,17 @@ This option can be disabled in the .vimrc:
Options: 0 or 1 Options: 0 or 1
Default: 1 (enabled by default) Default: 1 (enabled by default)
------------------------------------------------------------------------------
6.14. `g:jedi#use_tag_stack` *g:jedi#use_tag_stack*
Write results of |jedi#goto| to a temporary file and use the *:tjump* command
to enable full |tagstack| functionality. Use of the tag stack allows
returning to the usage of a function with CTRL-T after exploring the
definition with arbitrary changes to the |jumplist|.
Options: 0 or 1
Default: 1 (enabled by default)
============================================================================== ==============================================================================
7. Testing *jedi-vim-testing* 7. Testing *jedi-vim-testing*

View File

@@ -7,6 +7,8 @@ import traceback # for exception output
import re import re
import os import os
import sys import sys
import string
import random
from shlex import split as shsplit from shlex import split as shsplit
try: try:
from itertools import zip_longest from itertools import zip_longest
@@ -244,9 +246,22 @@ def goto(mode="goto", no_output=False):
% d.desc_with_module) % d.desc_with_module)
else: else:
if d.module_path != vim.current.buffer.name: if d.module_path != vim.current.buffer.name:
result = new_buffer(d.module_path) result = new_buffer(d.module_path, using_tagstack=True)
if not result: if not result:
return [] return []
if d.module_path and vim_eval('g:jedi#use_tag_stack') == '1':
with open(vim_eval('tempname()'), 'w') as f:
tagname = d.name
while vim_eval('taglist("^%s$")' % tagname) != []:
tagname = d.name + ' ' + ''.join(
[random.choice(string.lowercase)
for _ in range(4)])
f.write('{0}\t{1}\t{2}'.format(tagname, d.module_path,
'call cursor({0}, {1})'.format(d.line, d.column + 1)))
f.seek(0)
vim.command('set tags+=%s' % f.name)
vim.command('tjump %s' % tagname)
vim.command('set tags-=%s' % f.name)
vim.current.window.cursor = d.line, d.column vim.current.window.cursor = d.line, d.column
else: else:
# multiple solutions # multiple solutions
@@ -567,7 +582,7 @@ def py_import_completions():
@catch_and_print_exceptions @catch_and_print_exceptions
def new_buffer(path, options=''): def new_buffer(path, options='', using_tagstack=False):
# options are what you can to edit the edit options # options are what you can to edit the edit options
if vim_eval('g:jedi#use_tabs_not_buffers') == '1': if vim_eval('g:jedi#use_tabs_not_buffers') == '1':
_tabnew(path, options) _tabnew(path, options)
@@ -593,6 +608,8 @@ def new_buffer(path, options=''):
return False return False
else: else:
vim_command('w') vim_command('w')
if using_tagstack:
return True
vim_command('edit %s %s' % (options, escape_file_path(path))) vim_command('edit %s %s' % (options, escape_file_path(path)))
# sometimes syntax is being disabled and the filetype not set. # sometimes syntax is being disabled and the filetype not set.
if vim_eval('!exists("g:syntax_on")') == '1': if vim_eval('!exists("g:syntax_on")') == '1':