##// END OF EJS Templates
Do not duplicate '=' when tab completing a kwarg with the cursor on '='
Steve Bartz -
Show More
@@ -43,6 +43,11 b' def _elide(string, *, min_elide=30):'
43 43 return '{}.{}\N{HORIZONTAL ELLIPSIS}{}.{}'.format(parts[0], parts[1][0], parts[-2][-1], parts[-1])
44 44
45 45
46 def _adjust_completion_text_based_on_context(text, body, offset):
47 if text.endswith('=') and len(body) > offset and body[offset] is '=':
48 return text[:-1]
49 else:
50 return text
46 51
47 52
48 53 class IPythonPTCompleter(Completer):
@@ -113,10 +118,11 b' class IPythonPTCompleter(Completer):'
113 118 # display_meta=meta_text)
114 119 display_text = c.text
115 120
121 adjusted_text = _adjust_completion_text_based_on_context(c.text, body, offset)
116 122 if c.type == 'function':
117 123 display_text = display_text + '()'
118 124
119 yield Completion(c.text, start_position=c.start - offset, display=_elide(display_text), display_meta=c.type)
125 yield Completion(adjusted_text, start_position=c.start - offset, display=_elide(display_text), display_meta=c.type)
120 126
121 127 class IPythonPTLexer(Lexer):
122 128 """
@@ -10,7 +10,7 b' from IPython.core.inputtransformer import InputTransformer'
10 10 from IPython.testing import tools as tt
11 11 from IPython.utils.capture import capture_output
12 12
13 from IPython.terminal.ptutils import _elide
13 from IPython.terminal.ptutils import _elide, _adjust_completion_text_based_on_context
14 14 import nose.tools as nt
15 15
16 16 class TestElide(unittest.TestCase):
@@ -20,6 +20,19 b' class TestElide(unittest.TestCase):'
20 20 _elide('concatenate((a1, a2, ..), . axis') # do not raise
21 21 nt.assert_equal(_elide('aaaa.bbbb.ccccc.dddddd.eeeee.fffff.gggggg.hhhhhh'), 'aaaa.b…g.hhhhhh')
22 22
23
24 class TestContextAwareCompletion(unittest.TestCase):
25
26 def test_adjust_completion_text_based_on_context(self):
27 # Adjusted case
28 nt.assert_equal(_adjust_completion_text_based_on_context('arg1=', 'func1(a=)', 7), 'arg1')
29
30 # Untouched cases
31 nt.assert_equal(_adjust_completion_text_based_on_context('arg1=', 'func1(a)', 7), 'arg1=')
32 nt.assert_equal(_adjust_completion_text_based_on_context('arg1=', 'func1(a', 7), 'arg1=')
33 nt.assert_equal(_adjust_completion_text_based_on_context('%magic', 'func1(a=)', 7), '%magic')
34 nt.assert_equal(_adjust_completion_text_based_on_context('func2', 'func1(a=)', 7), 'func2')
35
23 36 # Decorator for interaction loop tests -----------------------------------------
24 37
25 38 class mock_input_helper(object):
General Comments 0
You need to be logged in to leave comments. Login now