Show More
@@ -37,6 +37,7 b' example, you could use a startup file like this::' | |||||
37 |
|
37 | |||
38 | import os |
|
38 | import os | |
39 | import subprocess |
|
39 | import subprocess | |
|
40 | import warnings | |||
40 | import sys |
|
41 | import sys | |
41 |
|
42 | |||
42 | from IPython.core.error import TryNext |
|
43 | from IPython.core.error import TryNext | |
@@ -83,13 +84,24 b' def editor(self, filename, linenum=None, wait=True):' | |||||
83 |
|
84 | |||
84 | import tempfile |
|
85 | import tempfile | |
85 | def fix_error_editor(self,filename,linenum,column,msg): |
|
86 | def fix_error_editor(self,filename,linenum,column,msg): | |
86 | """Open the editor at the given filename, linenumber, column and |
|
87 | """DEPRECATED | |
|
88 | ||||
|
89 | Open the editor at the given filename, linenumber, column and | |||
87 | show an error message. This is used for correcting syntax errors. |
|
90 | show an error message. This is used for correcting syntax errors. | |
88 | The current implementation only has special support for the VIM editor, |
|
91 | The current implementation only has special support for the VIM editor, | |
89 | and falls back on the 'editor' hook if VIM is not used. |
|
92 | and falls back on the 'editor' hook if VIM is not used. | |
90 |
|
93 | |||
91 | Call ip.set_hook('fix_error_editor',youfunc) to use your own function, |
|
94 | Call ip.set_hook('fix_error_editor',yourfunc) to use your own function, | |
92 | """ |
|
95 | """ | |
|
96 | ||||
|
97 | warnings.warn(""" | |||
|
98 | `fix_error_editor` is pending deprecation as of IPython 5.0 and will be removed | |||
|
99 | in future versions. It appears to be used only for automatically fixing syntax | |||
|
100 | error that has been broken for a few years and has thus been removed. If you | |||
|
101 | happend to use this function and still need it please make your voice heard on | |||
|
102 | the mailing list ipython-dev@scipy.org , or on the GitHub Issue tracker: | |||
|
103 | https://github.com/ipython/ipython/issues/9649 """, UserWarning) | |||
|
104 | ||||
93 | def vim_quickfix_file(): |
|
105 | def vim_quickfix_file(): | |
94 | t = tempfile.NamedTemporaryFile() |
|
106 | t = tempfile.NamedTemporaryFile() | |
95 | t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg)) |
|
107 | t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg)) |
@@ -93,11 +93,6 b' class TerminalInteractiveShell(InteractiveShell):' | |||||
93 | def debugger_cls(self): |
|
93 | def debugger_cls(self): | |
94 | return Pdb if self.simple_prompt else TerminalPdb |
|
94 | return Pdb if self.simple_prompt else TerminalPdb | |
95 |
|
95 | |||
96 | autoedit_syntax = Bool(False, |
|
|||
97 | help="auto editing of files with syntax errors.", |
|
|||
98 | ).tag(config=True) |
|
|||
99 |
|
||||
100 |
|
||||
101 | confirm_exit = Bool(True, |
|
96 | confirm_exit = Bool(True, | |
102 | help=""" |
|
97 | help=""" | |
103 | Set to confirm when you try to exit IPython with an EOF (Control-D |
|
98 | Set to confirm when you try to exit IPython with an EOF (Control-D | |
@@ -476,8 +471,6 b' class TerminalInteractiveShell(InteractiveShell):' | |||||
476 | else: |
|
471 | else: | |
477 | if code: |
|
472 | if code: | |
478 | self.run_cell(code, store_history=True) |
|
473 | self.run_cell(code, store_history=True) | |
479 | if self.autoedit_syntax and self.SyntaxTB.last_syntax_error: |
|
|||
480 | self.edit_syntax_error() |
|
|||
481 |
|
474 | |||
482 | def mainloop(self, display_banner=DISPLAY_BANNER_DEPRECATED): |
|
475 | def mainloop(self, display_banner=DISPLAY_BANNER_DEPRECATED): | |
483 | # An extra layer of protection in case someone mashing Ctrl-C breaks |
|
476 | # An extra layer of protection in case someone mashing Ctrl-C breaks | |
@@ -505,65 +498,6 b' class TerminalInteractiveShell(InteractiveShell):' | |||||
505 | else: |
|
498 | else: | |
506 | self._inputhook = None |
|
499 | self._inputhook = None | |
507 |
|
500 | |||
508 | # Methods to support auto-editing of SyntaxErrors: |
|
|||
509 |
|
||||
510 | def edit_syntax_error(self): |
|
|||
511 | """The bottom half of the syntax error handler called in the main loop. |
|
|||
512 |
|
||||
513 | Loop until syntax error is fixed or user cancels. |
|
|||
514 | """ |
|
|||
515 |
|
||||
516 | while self.SyntaxTB.last_syntax_error: |
|
|||
517 | # copy and clear last_syntax_error |
|
|||
518 | err = self.SyntaxTB.clear_err_state() |
|
|||
519 | if not self._should_recompile(err): |
|
|||
520 | return |
|
|||
521 | try: |
|
|||
522 | # may set last_syntax_error again if a SyntaxError is raised |
|
|||
523 | self.safe_execfile(err.filename, self.user_ns) |
|
|||
524 | except: |
|
|||
525 | self.showtraceback() |
|
|||
526 | else: |
|
|||
527 | try: |
|
|||
528 | with open(err.filename) as f: |
|
|||
529 | # This should be inside a display_trap block and I |
|
|||
530 | # think it is. |
|
|||
531 | sys.displayhook(f.read()) |
|
|||
532 | except: |
|
|||
533 | self.showtraceback() |
|
|||
534 |
|
||||
535 | def _should_recompile(self, e): |
|
|||
536 | """Utility routine for edit_syntax_error""" |
|
|||
537 |
|
||||
538 | if e.filename in ('<ipython console>', '<input>', '<string>', |
|
|||
539 | '<console>', '<BackgroundJob compilation>', |
|
|||
540 | None): |
|
|||
541 | return False |
|
|||
542 | try: |
|
|||
543 | if (self.autoedit_syntax and |
|
|||
544 | not self.ask_yes_no( |
|
|||
545 | 'Return to editor to correct syntax error? ' |
|
|||
546 | '[Y/n] ', 'y')): |
|
|||
547 | return False |
|
|||
548 | except EOFError: |
|
|||
549 | return False |
|
|||
550 |
|
||||
551 | def int0(x): |
|
|||
552 | try: |
|
|||
553 | return int(x) |
|
|||
554 | except TypeError: |
|
|||
555 | return 0 |
|
|||
556 |
|
||||
557 | # always pass integer line and offset values to editor hook |
|
|||
558 | try: |
|
|||
559 | self.hooks.fix_error_editor(e.filename, |
|
|||
560 | int0(e.lineno), int0(e.offset), |
|
|||
561 | e.msg) |
|
|||
562 | except TryNext: |
|
|||
563 | warn('Could not open editor') |
|
|||
564 | return False |
|
|||
565 | return True |
|
|||
566 |
|
||||
567 | # Run !system commands directly, not through pipes, so terminal programs |
|
501 | # Run !system commands directly, not through pipes, so terminal programs | |
568 | # work correctly. |
|
502 | # work correctly. | |
569 | system = InteractiveShell.system_raw |
|
503 | system = InteractiveShell.system_raw |
@@ -64,8 +64,6 b' Most of the above remarks also affect `IPython.core.debugger.Pdb`, the `%debug`' | |||||
64 | and `%pdb` magic which do not use readline anymore either. |
|
64 | and `%pdb` magic which do not use readline anymore either. | |
65 |
|
65 | |||
66 |
|
66 | |||
67 |
|
||||
68 |
|
||||
69 | Provisional Changes |
|
67 | Provisional Changes | |
70 | ------------------- |
|
68 | ------------------- | |
71 |
|
69 | |||
@@ -109,6 +107,34 b' widgets... As stated above this is nightly experimental feature with a lot of' | |||||
109 | it. |
|
107 | it. | |
110 |
|
108 | |||
111 |
|
109 | |||
|
110 | Removed Feature | |||
|
111 | --------------- | |||
|
112 | ||||
|
113 | - ``TerminalInteractiveShell.autoedit_syntax`` Has been broken for many years now | |||
|
114 | apparently. It has been removed. | |||
|
115 | ||||
|
116 | ||||
|
117 | Deprecated Features | |||
|
118 | ------------------- | |||
|
119 | ||||
|
120 | Some deprecated feature, don't forget to enable `DeprecationWarning` as error | |||
|
121 | of you are using IPython in Continuous Integration setup or in your testing in general: | |||
|
122 | ||||
|
123 | .. code:: | |||
|
124 | :python: | |||
|
125 | ||||
|
126 | import warnings | |||
|
127 | warnings.filterwarnings('error', '.*', DeprecationWarning, module='yourmodule.*') | |||
|
128 | ||||
|
129 | ||||
|
130 | - `hooks.fix_error_editor` seem to be unused and is pending deprecation. | |||
|
131 | - `IPython/core/excolors.py:ExceptionColors` is deprecated. | |||
|
132 | - `IPython.core.InteractiveShell:write()` is deprecated, use `sys.stdout` instead. | |||
|
133 | - `IPython.core.InteractiveShell:write_err()` is deprecated, use `sys.stderr` instead. | |||
|
134 | - The `formatter` keyword argument to `Inspector.info` in `IPython.core.oinspec` has now no effects. | |||
|
135 | - The `global_ns` keyword argument of IPython Embed was deprecated, and will now have no effect. Use `module` keyword argument instead. | |||
|
136 | ||||
|
137 | ||||
112 | Known Issues: |
|
138 | Known Issues: | |
113 | ------------- |
|
139 | ------------- | |
114 |
|
140 |
General Comments 0
You need to be logged in to leave comments.
Login now