|
| 1 | +from .core import get_cached_api |
| 2 | + |
| 3 | + |
| 4 | +def julia_completer(julia, self, event): |
| 5 | + pos = event.line.find("Main.eval") |
| 6 | + if pos < 0: |
| 7 | + return [] |
| 8 | + pos += len("Main.eval('") # pos: beginning of Julia code |
| 9 | + julia_code = event.line[pos:] |
| 10 | + julia_pos = len(event.text_until_cursor) - pos |
| 11 | + completions = julia.completions(julia_code, julia_pos) |
| 12 | + if "." in event.symbol: |
| 13 | + # When completing "Base.Enums.s" we need to add prefix "Base.Enums" |
| 14 | + prefix = event.symbol.rsplit(".", 1)[0] |
| 15 | + completions = [".".join((prefix, c)) for c in completions] |
| 16 | + global last_completions, last_event |
| 17 | + last_completions = completions |
| 18 | + last_event = event |
| 19 | + return completions |
| 20 | +# See: |
| 21 | +# IPython.core.completer.dispatch_custom_completer |
| 22 | + |
| 23 | + |
| 24 | +def _julia_completer(self, event): |
| 25 | + return julia_completer(get_cached_api(), self, event) |
| 26 | + |
| 27 | + |
| 28 | +def load_ipython_extension(ip): |
| 29 | + ip.set_hook("complete_command", _julia_completer, |
| 30 | + re_key=r""".*\bMain\.eval\(["']""") |
| 31 | +# See: |
| 32 | +# https://ipython.readthedocs.io/en/stable/api/generated/IPython.core.hooks.html |
| 33 | +# IPython.core.interactiveshell.init_completer |
| 34 | +# IPython.core.completerlib (quick_completer etc.) |
0 commit comments