diff options
| author | Guido van Rossum <guido@python.org> | 2007-08-05 15:29:28 +0000 | 
|---|---|---|
| committer | Guido van Rossum <guido@python.org> | 2007-08-05 15:29:28 +0000 | 
| commit | 33d2689fc900a814f0a7d2f846abe0c34024ae17 (patch) | |
| tree | 1ecddf8b9e18933d1fd90d5eda510908ec71695b /Lib/idlelib/ScriptBinding.py | |
| parent | 77553ab531c6a98c3d06b7ba4158b06ed0af8c69 (diff) | |
| download | cpython-git-33d2689fc900a814f0a7d2f846abe0c34024ae17.tar.gz | |
Merged revisions 56492-56752 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk
........
  r56497 | kurt.kaiser | 2007-07-22 14:55:16 -0700 (Sun, 22 Jul 2007) | 4 lines
  In the case of syntax errors, in py3k format_exception_only()
  was including line number and position in the final line of the
  exception notification, duplicating info in previous lines.
........
  r56501 | kurt.kaiser | 2007-07-22 19:35:50 -0700 (Sun, 22 Jul 2007) | 2 lines
  Hum, needed a newline in the last change.
........
  r56536 | kurt.kaiser | 2007-07-24 19:06:48 -0700 (Tue, 24 Jul 2007) | 5 lines
  Not all instantiations of SyntaxError set the args attribute.
  e.g. symtable.c
  Modify format_exception_only() to get SyntaxError attributes directly
  instead of unpacking 'args'.
........
  r56537 | kurt.kaiser | 2007-07-24 19:13:03 -0700 (Tue, 24 Jul 2007) | 3 lines
  Update doctest strings: traceback.py no longer prints redundant location
  information in the last line of the exception display.
........
  r56627 | kurt.kaiser | 2007-07-29 21:06:57 -0700 (Sun, 29 Jul 2007) | 2 lines
  Interactive interpreter emulator (code.py) failing to print exceptions.
........
  r56628 | kurt.kaiser | 2007-07-29 21:41:02 -0700 (Sun, 29 Jul 2007) | 2 lines
  Eliminate extra lines before and after tracebacks.
........
  r56638 | kurt.kaiser | 2007-07-31 19:36:45 -0700 (Tue, 31 Jul 2007) | 3 lines
  Refactor syntax error display in shell and edit windows; move
  colorize_syntax_error() to EditorWindow; update to py3k.
........
  r56685 | neal.norwitz | 2007-08-02 22:20:23 -0700 (Thu, 02 Aug 2007) | 10 lines
  Remove several h/w and o/s specific modules that are undocumented, obsolete,
  and/or not widely used:
   linuxaudiodev.c, sunaudiodev.c Lib/plat-sunos5/SUNAUDIODEV.py
   Lib/audiodev.py Tools/audiopy/audiopy
  Move Lib/toaiff.py to Demo.
  See PEP 3108 for most of the details.
........
  r56686 | neal.norwitz | 2007-08-02 22:21:48 -0700 (Thu, 02 Aug 2007) | 4 lines
  Missed one module that should have been removed since it relied
  on audiodev which was removed.
........
  r56748 | neal.norwitz | 2007-08-04 19:19:04 -0700 (Sat, 04 Aug 2007) | 1 line
  Make from X import * outside module scope an error.
........
  r56750 | neal.norwitz | 2007-08-04 19:35:01 -0700 (Sat, 04 Aug 2007) | 1 line
  Use READONLY consistently instead of RO
........
Diffstat (limited to 'Lib/idlelib/ScriptBinding.py')
| -rw-r--r-- | Lib/idlelib/ScriptBinding.py | 52 | 
1 files changed, 18 insertions, 34 deletions
diff --git a/Lib/idlelib/ScriptBinding.py b/Lib/idlelib/ScriptBinding.py index 485de34933..47eadb24d5 100644 --- a/Lib/idlelib/ScriptBinding.py +++ b/Lib/idlelib/ScriptBinding.py @@ -23,12 +23,11 @@ import string  import tabnanny  import tokenize  import tkMessageBox +from .EditorWindow import EditorWindow  from . import PyShell  from .configHandler import idleConf -IDENTCHARS = string.ascii_letters + string.digits + "_" -  indent_message = """Error: Inconsistent indentation detected!  1) Your indentation is outright incorrect (easy to fix), OR @@ -83,7 +82,7 @@ class ScriptBinding:          self.shell = shell = self.flist.open_shell()          saved_stream = shell.get_warning_stream()          shell.set_warning_stream(shell.stderr) -        f = open(filename, 'r') +        f = file(filename, 'r')          source = f.read()          f.close()          if '\r' in source: @@ -91,40 +90,25 @@ class ScriptBinding:              source = re.sub(r"\r", "\n", source)          if source and source[-1] != '\n':              source = source + '\n' -        text = self.editwin.text +        editwin = self.editwin +        text = editwin.text          text.tag_remove("ERROR", "1.0", "end")          try: -            try: -                # If successful, return the compiled code -                return compile(source, filename, "exec") -            except (SyntaxError, OverflowError) as err: -                try: -                    msg, (errorfilename, lineno, offset, line) = err.args -                    if not errorfilename: -                        err.args = msg, (filename, lineno, offset, line) -                        err.filename = filename -                    self.colorize_syntax_error(msg, lineno, offset) -                except: -                    msg = str(err) -                self.errorbox("Syntax error", -                              "There's an error in your program:\n" + msg) -                return False +            # If successful, return the compiled code +            return compile(source, filename, "exec") +        except (SyntaxError, OverflowError) as value: +            msg = value.msg or "<no detail available>" +            lineno = value.lineno or 1 +            offset = value.offset or 0 +            if offset == 0: +                lineno += 1  #mark end of offending line +            pos = "0.0 + %d lines + %d chars" % (lineno-1, offset-1) +            editwin.colorize_syntax_error(text, pos) +            self.errorbox("SyntaxError", "%-20s" % msg) +            return False          finally:              shell.set_warning_stream(saved_stream) -    def colorize_syntax_error(self, msg, lineno, offset): -        text = self.editwin.text -        pos = "0.0 + %d lines + %d chars" % (lineno-1, offset-1) -        text.tag_add("ERROR", pos) -        char = text.get(pos) -        if char and char in IDENTCHARS: -            text.tag_add("ERROR", pos + " wordstart", pos) -        if '\n' == text.get(pos):   # error at line end -            text.mark_set("insert", pos) -        else: -            text.mark_set("insert", pos + "+1c") -        text.see(pos) -      def run_module_event(self, event):          """Run the module after setting up the environment. @@ -199,10 +183,10 @@ class ScriptBinding:                                    icon=tkMessageBox.QUESTION,                                    type=tkMessageBox.OKCANCEL,                                    default=tkMessageBox.OK, -                                  master=self.editwin.text) +                                  parent=self.editwin.text)          return mb.show()      def errorbox(self, title, message):          # XXX This should really be a function of EditorWindow... -        tkMessageBox.showerror(title, message, master=self.editwin.text) +        tkMessageBox.showerror(title, message, parent=self.editwin.text)          self.editwin.text.focus_set()  | 
