Show More
@@ -0,0 +1,1 b'' | |||
|
1 | Variables now shadow magics in autocompletion. See :ghissue:`4877` and :ghpull:`10542`. |
@@ -1158,10 +1158,17 b' class IPCompleter(Completer):' | |||
|
1158 | 1158 | # - user gives %: do both line and cell magics |
|
1159 | 1159 | # - no prefix: do both |
|
1160 | 1160 | # In other words, line magics are skipped if the user gives %% explicitly |
|
1161 | # | |
|
1162 | # We also exclude magics that match any currently visible names: | |
|
1163 | # https://github.com/ipython/ipython/issues/4877 | |
|
1161 | 1164 | bare_text = text.lstrip(pre) |
|
1162 | comp = [ pre2+m for m in cell_magics if m.startswith(bare_text)] | |
|
1165 | global_matches = self.global_matches(bare_text) | |
|
1166 | matches = lambda magic: magic.startswith(bare_text) \ | |
|
1167 | and magic not in global_matches | |
|
1168 | comp = [ pre2+m for m in cell_magics if matches(m)] | |
|
1163 | 1169 | if not text.startswith(pre2): |
|
1164 |
comp += [ pre+m for m in line_magics if m |
|
|
1170 | comp += [ pre+m for m in line_magics if matches(m)] | |
|
1171 | ||
|
1165 | 1172 | return [cast_unicode_py2(c) for c in comp] |
|
1166 | 1173 | |
|
1167 | 1174 | def _jedi_matches(self, cursor_column:int, cursor_line:int, text:str): |
@@ -519,31 +519,33 b' def test_line_cell_magics():' | |||
|
519 | 519 | |
|
520 | 520 | |
|
521 | 521 | def test_magic_completion_order(): |
|
522 | ||
|
523 | 522 | ip = get_ipython() |
|
524 | 523 | c = ip.Completer |
|
525 | 524 | |
|
526 | # Test ordering of magics and non-magics with the same name | |
|
527 | # We want the non-magic first | |
|
528 | ||
|
529 | # Before importing matplotlib, there should only be one option: | |
|
530 | ||
|
531 | text, matches = c.complete('mat') | |
|
532 | nt.assert_equal(matches, ["%matplotlib"]) | |
|
525 | # Test ordering of line and cell magics. | |
|
526 | text, matches = c.complete("timeit") | |
|
527 | nt.assert_equal(matches, ["%timeit", "%%timeit"]) | |
|
533 | 528 | |
|
534 | 529 | |
|
535 | ip.run_cell("matplotlib = 1") # introduce name into namespace | |
|
530 | def test_magic_completion_shadowing(): | |
|
531 | ip = get_ipython() | |
|
532 | c = ip.Completer | |
|
536 | 533 | |
|
537 | # After the import, there should be two options, ordered like this: | |
|
538 |
text, matches = c.complete( |
|
|
539 |
nt.assert_equal(matches, [" |
|
|
534 | # Before importing matplotlib, %matplotlib magic should be the only option. | |
|
535 | text, matches = c.complete("mat") | |
|
536 | nt.assert_equal(matches, ["%matplotlib"]) | |
|
540 | 537 | |
|
538 | # The newly introduced name should shadow the magic. | |
|
539 | ip.run_cell("matplotlib = 1") | |
|
540 | text, matches = c.complete("mat") | |
|
541 | nt.assert_equal(matches, ["matplotlib"]) | |
|
541 | 542 | |
|
542 | ip.run_cell("timeit = 1") # define a user variable called 'timeit' | |
|
543 | # After removing matplotlib from namespace, the magic should again be | |
|
544 | # the only option. | |
|
545 | del ip.user_ns["matplotlib"] | |
|
546 | text, matches = c.complete("mat") | |
|
547 | nt.assert_equal(matches, ["%matplotlib"]) | |
|
543 | 548 | |
|
544 | # Order of user variable and line and cell magics with same name: | |
|
545 | text, matches = c.complete('timeit') | |
|
546 | nt.assert_equal(matches, ["timeit", "%timeit", "%%timeit"]) | |
|
547 | 549 | |
|
548 | 550 | def test_match_dict_keys(): |
|
549 | 551 | """ |
General Comments 0
You need to be logged in to leave comments.
Login now