1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-23 00:43:28 +00:00

devel/ipython: actually unbreak autocompletion

Remove broader patch added earlier - it still doesn't completely
solve the problem.
Instead add tiny patch to fix runtime with jedi 0.18 and add missing
imports with second patch. Works just well with my tests.
Both patches should be removed after next ipython release.

PR:		252875
Reported by:	rsmith@xs4all.nl
Approved by:	python (with hat)
This commit is contained in:
Ruslan Makhmatkhanov 2021-01-26 10:33:13 +00:00
parent 4118043f22
commit 19937de6fc
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=562650
4 changed files with 53 additions and 75 deletions

View File

@ -3,7 +3,7 @@
PORTNAME= ipython
PORTVERSION= 7.19.0
PORTREVISION= 2
PORTREVISION= 3
CATEGORIES= devel python
MASTER_SITES= CHEESESHOP
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}

View File

@ -0,0 +1,41 @@
--- IPython/core/completer.py.orig 2020-10-30 18:09:09 UTC
+++ IPython/core/completer.py
@@ -988,8 +988,18 @@ def _make_signature(completion)-> str:
"""
- return '(%s)'% ', '.join([f for f in (_formatparamchildren(p) for p in completion.params) if f])
+ # it looks like this might work on jedi 0.17
+ if hasattr(completion, 'get_signatures'):
+ signatures = completion.get_signatures()
+ if not signatures:
+ return '(?)'
+ c0 = completion.get_signatures()[0]
+ return '('+c0.to_string().split('(', maxsplit=1)[1]
+
+ return '(%s)'% ', '.join([f for f in (_formatparamchildren(p) for signature in completion.get_signatures()
+ for p in signature.defined_names()) if f])
+
class IPCompleter(Completer):
"""Extension of the completer class with IPython-specific features"""
@@ -1370,8 +1380,7 @@ class IPCompleter(Completer):
else:
raise ValueError("Don't understand self.omit__names == {}".format(self.omit__names))
- interpreter = jedi.Interpreter(
- text[:offset], namespaces, column=cursor_column, line=cursor_line + 1)
+ interpreter = jedi.Interpreter(text[:offset], namespaces)
try_jedi = True
try:
@@ -1398,7 +1407,7 @@ class IPCompleter(Completer):
if not try_jedi:
return []
try:
- return filter(completion_filter, interpreter.completions())
+ return filter(completion_filter, interpreter.complete(column=cursor_column, line=cursor_line + 1))
except Exception as e:
if self.debug:
return [_FakeJediCompletion('Oops Jedi has crashed, please report a bug with the following:\n"""\n%s\ns"""' % (e))]

View File

@ -0,0 +1,11 @@
--- IPython/terminal/ptutils.py.orig 2020-10-30 18:09:09 UTC
+++ IPython/terminal/ptutils.py
@@ -20,6 +20,8 @@ from prompt_toolkit.patch_stdout import patch_stdout
import pygments.lexers as pygments_lexers
import os
+import sys
+import traceback
_completion_sentinel = object()

View File

@ -1,74 +0,0 @@
From dcd9dc90aee7e4c5c52ce44c18e7518934790612 Mon Sep 17 00:00:00 2001
From: gorogoroumaru <force.minpiku@gmail.com>
Date: Fri, 10 Apr 2020 10:24:52 +0900
Subject: [PATCH] Fix DeprecationWarning on autocompletion with jedi 0.17.0
---
IPython/core/completer.py | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/IPython/core/completer.py b/IPython/core/completer.py
index 16fbb81f55..01730fff2d 100644
--- IPython/core/completer.py
+++ IPython/core/completer.py
@@ -110,26 +110,23 @@
# Copyright (C) 2001 Python Software Foundation, www.python.org
-import __main__
import builtins as builtin_mod
import glob
-import time
import inspect
import itertools
import keyword
import os
import re
+import string
import sys
+import time
import unicodedata
-import string
import warnings
-
from contextlib import contextmanager
from importlib import import_module
-from typing import Iterator, List, Tuple, Iterable
from types import SimpleNamespace
+from typing import Iterable, Iterator, List, Tuple
-from traitlets.config.configurable import Configurable
from IPython.core.error import TryNext
from IPython.core.inputtransformer2 import ESC_MAGIC
from IPython.core.latex_symbols import latex_symbols, reverse_latex_symbol
@@ -137,7 +134,10 @@
from IPython.utils import generics
from IPython.utils.dir2 import dir2, get_real_method
from IPython.utils.process import arg_split
-from traitlets import Bool, Enum, observe, Int
+from traitlets import Bool, Enum, Int, observe
+from traitlets.config.configurable import Configurable
+
+import __main__
# skip module docstests
skip_doctest = True
@@ -1380,8 +1380,7 @@ def _jedi_matches(self, cursor_column:int, cursor_line:int, text:str):
else:
raise ValueError("Don't understand self.omit__names == {}".format(self.omit__names))
- interpreter = jedi.Interpreter(
- text[:offset], namespaces, column=cursor_column, line=cursor_line + 1)
+ interpreter = jedi.Interpreter(text[:offset], namespaces)
try_jedi = True
try:
@@ -1408,7 +1407,7 @@ def _jedi_matches(self, cursor_column:int, cursor_line:int, text:str):
if not try_jedi:
return []
try:
- return filter(completion_filter, interpreter.completions())
+ return filter(completion_filter, interpreter.complete(column=cursor_column, line=cursor_line + 1))
except Exception as e:
if self.debug:
return [_FakeJediCompletion('Oops Jedi has crashed, please report a bug with the following:\n"""\n%s\ns"""' % (e))]