##// END OF EJS Templates
Remove Jedi integration before 5.0...
Matthias Bussonnier -
Show More
@@ -77,10 +77,6 b' from IPython.utils.process import arg_split'
77 from IPython.utils.py3compat import builtin_mod, string_types, PY3, cast_unicode_py2
77 from IPython.utils.py3compat import builtin_mod, string_types, PY3, cast_unicode_py2
78 from traitlets import Bool, Enum, observe
78 from traitlets import Bool, Enum, observe
79
79
80 import jedi
81 import jedi.api.helpers
82 import jedi.parser.user_context
83
84 #-----------------------------------------------------------------------------
80 #-----------------------------------------------------------------------------
85 # Globals
81 # Globals
86 #-----------------------------------------------------------------------------
82 #-----------------------------------------------------------------------------
@@ -649,6 +645,7 b' class IPCompleter(Completer):'
649
645
650 # All active matcher routines for completion
646 # All active matcher routines for completion
651 self.matchers = [
647 self.matchers = [
648 self.python_matches,
652 self.file_matches,
649 self.file_matches,
653 self.magic_matches,
650 self.magic_matches,
654 self.python_func_kw_matches,
651 self.python_func_kw_matches,
@@ -768,60 +765,6 b' class IPCompleter(Completer):'
768 comp += [ pre+m for m in line_magics if m.startswith(bare_text)]
765 comp += [ pre+m for m in line_magics if m.startswith(bare_text)]
769 return [cast_unicode_py2(c) for c in comp]
766 return [cast_unicode_py2(c) for c in comp]
770
767
771 def python_jedi_matches(self, text, line_buffer, cursor_pos):
772 """Match attributes or global Python names using Jedi."""
773 if line_buffer.startswith('aimport ') or line_buffer.startswith('%aimport '):
774 return ()
775 namespaces = []
776 if self.namespace is None:
777 import __main__
778 namespaces.append(__main__.__dict__)
779 else:
780 namespaces.append(self.namespace)
781 if self.global_namespace is not None:
782 namespaces.append(self.global_namespace)
783
784 # cursor_pos is an it, jedi wants line and column
785
786 interpreter = jedi.Interpreter(line_buffer, namespaces, column=cursor_pos)
787 path = jedi.parser.user_context.UserContext(line_buffer, \
788 (1, len(line_buffer))).get_path_until_cursor()
789 path, dot, like = jedi.api.helpers.completion_parts(path)
790 if text.startswith('.'):
791 # text will be `.` on completions like `a[0].<tab>`
792 before = dot
793 else:
794 before = line_buffer[:len(line_buffer) - len(like)]
795
796
797 def trim_start(completion):
798 """completions need to start with `text`, trim the beginning until it does"""
799 ltext = text.lower()
800 lcomp = completion.lower()
801 if ltext in lcomp and not (lcomp.startswith(ltext)):
802 start_index = lcomp.index(ltext)
803 if cursor_pos:
804 if start_index >= cursor_pos:
805 start_index = min(start_index, cursor_pos)
806 return completion[start_index:]
807 return completion
808
809 completions = interpreter.completions()
810
811 completion_text = [c.name_with_symbols for c in completions]
812
813 if self.omit__names:
814 if self.omit__names == 1:
815 # true if txt is _not_ a __ name, false otherwise:
816 no__name = lambda txt: not txt.startswith('__')
817 else:
818 # true if txt is _not_ a _ name, false otherwise:
819 no__name = lambda txt: not txt.startswith('_')
820 completion_text = filter(no__name, completion_text)
821
822
823 return [trim_start(before + c_text) for c_text in completion_text]
824
825
768
826 def python_matches(self, text):
769 def python_matches(self, text):
827 """Match attributes or global python names"""
770 """Match attributes or global python names"""
@@ -1255,8 +1198,6 b' class IPCompleter(Completer):'
1255 # different types of objects. The rlcomplete() method could then
1198 # different types of objects. The rlcomplete() method could then
1256 # simply collapse the dict into a list for readline, but we'd have
1199 # simply collapse the dict into a list for readline, but we'd have
1257 # richer completion semantics in other evironments.
1200 # richer completion semantics in other evironments.
1258 self.matches.extend(self.python_jedi_matches(text, line_buffer, cursor_pos))
1259
1260 self.matches = sorted(set(self.matches), key=completions_sorting_key)
1201 self.matches = sorted(set(self.matches), key=completions_sorting_key)
1261
1202
1262 return text, self.matches
1203 return text, self.matches
@@ -279,20 +279,11 b' def test_greedy_completions():'
279 _,c = ip.complete('.', line=line, cursor_pos=cursor_pos)
279 _,c = ip.complete('.', line=line, cursor_pos=cursor_pos)
280 nt.assert_in(expect, c, message%c)
280 nt.assert_in(expect, c, message%c)
281
281
282 yield _, 'a[0].', 5, '.real', "Should have completed on a[0].: %s"
282 yield _, 'a[0].', 5, 'a[0].real', "Should have completed on a[0].: %s"
283 yield _, 'a[0].r', 6, '.real', "Should have completed on a[0].r: %s"
283 yield _, 'a[0].r', 6, 'a[0].real', "Should have completed on a[0].r: %s"
284
284
285 if sys.version_info > (3,4):
285 if sys.version_info > (3,4):
286 yield _, 'a[0].from_', 10, '.from_bytes', "Should have completed on a[0].from_: %s"
286 yield _, 'a[0].from_', 10, 'a[0].from_bytes', "Should have completed on a[0].from_: %s"
287
288
289 def _2():
290 # jedi bug, this will be empty, makeitfail for now,
291 # once jedi is fixed, switch to assert_in
292 # https://github.com/davidhalter/jedi/issues/718
293 _,c = ip.complete('.',line='a[0].from', cursor_pos=9)
294 nt.assert_not_in('.from_bytes', c, "Should not have completed on a[0].from (jedi bug), if fails, update test to assert_in: %s"%c)
295 yield _2
296
287
297
288
298
289
@@ -191,7 +191,6 b' extras_require = dict('
191 )
191 )
192 install_requires = [
192 install_requires = [
193 'setuptools>=18.5',
193 'setuptools>=18.5',
194 'jedi',
195 'decorator',
194 'decorator',
196 'pickleshare',
195 'pickleshare',
197 'simplegeneric>0.8',
196 'simplegeneric>0.8',
General Comments 0
You need to be logged in to leave comments. Login now