summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib
diff options
context:
space:
mode:
authorTerry Jan Reedy <tjreedy@udel.edu>2016-08-31 04:50:55 (GMT)
committerTerry Jan Reedy <tjreedy@udel.edu>2016-08-31 04:50:55 (GMT)
commitbfbaa6b206abdb8b1c3861926f4334b879ec91cc (patch)
treea06ead659eacb714127ad34289a543942d14e4e6 /Lib/idlelib
parent89b1162511dd62e285c1911013f07b45af07f70a (diff)
downloadcpython-bfbaa6b206abdb8b1c3861926f4334b879ec91cc.zip
cpython-bfbaa6b206abdb8b1c3861926f4334b879ec91cc.tar.gz
cpython-bfbaa6b206abdb8b1c3861926f4334b879ec91cc.tar.bz2
Issue #27891: Consistently group and sort imports within idlelib modules.
Diffstat (limited to 'Lib/idlelib')
-rw-r--r--Lib/idlelib/README.txt21
-rw-r--r--Lib/idlelib/autocomplete.py17
-rw-r--r--Lib/idlelib/autocomplete_w.py3
-rw-r--r--Lib/idlelib/autoexpand.py3
-rw-r--r--Lib/idlelib/browser.py6
-rw-r--r--Lib/idlelib/calltips.py2
-rw-r--r--Lib/idlelib/codecontext.py6
-rw-r--r--Lib/idlelib/colorizer.py9
-rw-r--r--Lib/idlelib/config.py2
-rw-r--r--Lib/idlelib/configdialog.py6
-rw-r--r--Lib/idlelib/debugger.py8
-rw-r--r--Lib/idlelib/debugobj.py3
-rw-r--r--Lib/idlelib/dynoption.py1
-rw-r--r--Lib/idlelib/editor.py41
-rw-r--r--Lib/idlelib/filelist.py1
-rw-r--r--Lib/idlelib/grep.py11
-rw-r--r--Lib/idlelib/help.py2
-rw-r--r--Lib/idlelib/help_about.py5
-rw-r--r--Lib/idlelib/history.py4
-rw-r--r--Lib/idlelib/hyperparser.py5
-rw-r--r--Lib/idlelib/idle_test/test_iomenu.py5
-rw-r--r--Lib/idlelib/macosx.py3
-rw-r--r--Lib/idlelib/multicall.py4
-rw-r--r--Lib/idlelib/outwin.py7
-rw-r--r--Lib/idlelib/paragraph.py4
-rw-r--r--Lib/idlelib/parenmatch.py1
-rw-r--r--Lib/idlelib/pathbrowser.py7
-rw-r--r--Lib/idlelib/percolator.py2
-rw-r--r--Lib/idlelib/pyparse.py2
-rwxr-xr-xLib/idlelib/pyshell.py24
-rw-r--r--Lib/idlelib/query.py3
-rw-r--r--Lib/idlelib/replace.py6
-rw-r--r--Lib/idlelib/rpc.py26
-rw-r--r--Lib/idlelib/run.py24
-rw-r--r--Lib/idlelib/runscript.py3
-rw-r--r--Lib/idlelib/scrolledlist.py4
-rw-r--r--Lib/idlelib/search.py1
-rw-r--r--Lib/idlelib/searchbase.py1
-rw-r--r--Lib/idlelib/searchengine.py3
-rw-r--r--Lib/idlelib/stackviewer.py11
-rw-r--r--Lib/idlelib/statusbar.py2
-rw-r--r--Lib/idlelib/tabbedpages.py3
-rw-r--r--Lib/idlelib/textview.py2
-rw-r--r--Lib/idlelib/tree.py4
-rw-r--r--Lib/idlelib/undo.py7
-rw-r--r--Lib/idlelib/windows.py2
-rw-r--r--Lib/idlelib/zoomheight.py2
47 files changed, 197 insertions, 122 deletions
diff --git a/Lib/idlelib/README.txt b/Lib/idlelib/README.txt
index f7aad68..e52b5cd 100644
--- a/Lib/idlelib/README.txt
+++ b/Lib/idlelib/README.txt
@@ -228,4 +228,23 @@ Help
<No menu>
Center Insert # eEW.center_insert_event
-
+
+
+CODE STYLE -- Generally PEP 8.
+
+import
+------
+Put import at the top, unless there is a good reason otherwise.
+PEP 8 says to group stdlib, 3rd-party dependencies, and package imports.
+For idlelib, the groups are general stdlib, tkinter, and idlelib.
+Sort modules within each group, except that tkinter.ttk follows tkinter.
+Sort 'from idlelib import mod1' and 'from idlelib.mod2 import object'
+together by module, ignoring within module objects.
+Put 'import __main__' after other idlelib imports.
+
+Imports only needed for testing are not at the top but are put in the
+htest function def or the "if __name__ == '__main__'" clause.
+
+Within module imports like "from idlelib.mod import class" may cause
+circular imports to deadlock. Even without this, circular imports may
+require at least one of the imports to be delayed until a function call.
diff --git a/Lib/idlelib/autocomplete.py b/Lib/idlelib/autocomplete.py
index 1200008..1e44fa5 100644
--- a/Lib/idlelib/autocomplete.py
+++ b/Lib/idlelib/autocomplete.py
@@ -4,26 +4,27 @@ This extension can complete either attribute names or file names. It can pop
a window with all available names, for the user to select from.
"""
import os
-import sys
import string
+import sys
-from idlelib.config import idleConf
-
-# This string includes all chars that may be in an identifier
-ID_CHARS = string.ascii_letters + string.digits + "_"
-
-# These constants represent the two different types of completions
+# These constants represent the two different types of completions.
+# They must be defined here so autocomple_w can import them.
COMPLETE_ATTRIBUTES, COMPLETE_FILES = range(1, 2+1)
from idlelib import autocomplete_w
+from idlelib.config import idleConf
from idlelib.hyperparser import HyperParser
-
import __main__
+# This string includes all chars that may be in an identifier.
+# TODO Update this here and elsewhere.
+ID_CHARS = string.ascii_letters + string.digits + "_"
+
SEPS = os.sep
if os.altsep: # e.g. '/' on Windows...
SEPS += os.altsep
+
class AutoComplete:
menudefs = [
diff --git a/Lib/idlelib/autocomplete_w.py b/Lib/idlelib/autocomplete_w.py
index 31837e0..3374c6e 100644
--- a/Lib/idlelib/autocomplete_w.py
+++ b/Lib/idlelib/autocomplete_w.py
@@ -3,8 +3,9 @@ An auto-completion window for IDLE, used by the autocomplete extension
"""
from tkinter import *
from tkinter.ttk import Scrollbar
-from idlelib.multicall import MC_SHIFT
+
from idlelib.autocomplete import COMPLETE_FILES, COMPLETE_ATTRIBUTES
+from idlelib.multicall import MC_SHIFT
HIDE_VIRTUAL_EVENT_NAME = "<<autocompletewindow-hide>>"
HIDE_SEQUENCES = ("<FocusOut>", "<ButtonPress>")
diff --git a/Lib/idlelib/autoexpand.py b/Lib/idlelib/autoexpand.py
index 7190607..6b46bee 100644
--- a/Lib/idlelib/autoexpand.py
+++ b/Lib/idlelib/autoexpand.py
@@ -12,8 +12,8 @@ its state.
This is an extension file and there is only one instance of AutoExpand.
'''
-import string
import re
+import string
###$ event <<expand-word>>
###$ win <Alt-slash>
@@ -100,7 +100,6 @@ class AutoExpand:
i = i-1
return line[i:]
-
if __name__ == '__main__':
import unittest
unittest.main('idlelib.idle_test.test_autoexpand', verbosity=2)
diff --git a/Lib/idlelib/browser.py b/Lib/idlelib/browser.py
index 9968333..ea05638 100644
--- a/Lib/idlelib/browser.py
+++ b/Lib/idlelib/browser.py
@@ -11,13 +11,13 @@ XXX TO DO:
"""
import os
-import sys
import pyclbr
+import sys
+from idlelib.config import idleConf
from idlelib import pyshell
-from idlelib.windows import ListedToplevel
from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas
-from idlelib.config import idleConf
+from idlelib.windows import ListedToplevel
file_open = None # Method...Item and Class...Item use this.
# Normally pyshell.flist.open, but there is no pyshell.flist for htest.
diff --git a/Lib/idlelib/calltips.py b/Lib/idlelib/calltips.py
index 3a9b1c6..abcc142 100644
--- a/Lib/idlelib/calltips.py
+++ b/Lib/idlelib/calltips.py
@@ -5,7 +5,6 @@ parameter and docstring information when you type an opening parenthesis, and
which disappear when you type a closing parenthesis.
"""
-import __main__
import inspect
import re
import sys
@@ -14,6 +13,7 @@ import types
from idlelib import calltip_w
from idlelib.hyperparser import HyperParser
+import __main__
class CallTips:
diff --git a/Lib/idlelib/codecontext.py b/Lib/idlelib/codecontext.py
index 2a21a1f..f25e1b3 100644
--- a/Lib/idlelib/codecontext.py
+++ b/Lib/idlelib/codecontext.py
@@ -9,10 +9,12 @@ variable in the codecontext section of config-extensions.def. Lines which do
not open blocks are not shown in the context hints pane.
"""
-import tkinter
-from tkinter.constants import TOP, LEFT, X, W, SUNKEN
import re
from sys import maxsize as INFINITY
+
+import tkinter
+from tkinter.constants import TOP, LEFT, X, W, SUNKEN
+
from idlelib.config import idleConf
BLOCKOPENERS = {"class", "def", "elif", "else", "except", "finally", "for",
diff --git a/Lib/idlelib/colorizer.py b/Lib/idlelib/colorizer.py
index f5dd03d..7310bb2 100644
--- a/Lib/idlelib/colorizer.py
+++ b/Lib/idlelib/colorizer.py
@@ -1,9 +1,10 @@
-import time
-import re
-import keyword
import builtins
-from idlelib.delegator import Delegator
+import keyword
+import re
+import time
+
from idlelib.config import idleConf
+from idlelib.delegator import Delegator
DEBUG = False
diff --git a/Lib/idlelib/config.py b/Lib/idlelib/config.py
index d2f0b13..10fe3ba 100644
--- a/Lib/idlelib/config.py
+++ b/Lib/idlelib/config.py
@@ -18,10 +18,10 @@ configuration problem notification and resolution.
"""
# TODOs added Oct 2014, tjr
+from configparser import ConfigParser
import os
import sys
-from configparser import ConfigParser
from tkinter.font import Font, nametofont
class InvalidConfigType(Exception): pass
diff --git a/Lib/idlelib/configdialog.py b/Lib/idlelib/configdialog.py
index 2f361bd..fa47aaa 100644
--- a/Lib/idlelib/configdialog.py
+++ b/Lib/idlelib/configdialog.py
@@ -11,17 +11,17 @@ Refer to comments in EditorWindow autoindent code for details.
"""
from tkinter import *
from tkinter.ttk import Scrollbar
-import tkinter.messagebox as tkMessageBox
import tkinter.colorchooser as tkColorChooser
import tkinter.font as tkFont
+import tkinter.messagebox as tkMessageBox
from idlelib.config import idleConf
-from idlelib.dynoption import DynOptionMenu
from idlelib.config_key import GetKeysDialog
+from idlelib.dynoption import DynOptionMenu
+from idlelib import macosx
from idlelib.query import SectionName, HelpSource
from idlelib.tabbedpages import TabbedPageSet
from idlelib.textview import view_text
-from idlelib import macosx
class ConfigDialog(Toplevel):
diff --git a/Lib/idlelib/debugger.py b/Lib/idlelib/debugger.py
index ea393b1..114d0d1 100644
--- a/Lib/idlelib/debugger.py
+++ b/Lib/idlelib/debugger.py
@@ -1,10 +1,12 @@
-import os
import bdb
+import os
+
from tkinter import *
from tkinter.ttk import Scrollbar
-from idlelib.windows import ListedToplevel
-from idlelib.scrolledlist import ScrolledList
+
from idlelib import macosx
+from idlelib.scrolledlist import ScrolledList
+from idlelib.windows import ListedToplevel
class Idb(bdb.Bdb):
diff --git a/Lib/idlelib/debugobj.py b/Lib/idlelib/debugobj.py
index c116fcd..b70b13c 100644
--- a/Lib/idlelib/debugobj.py
+++ b/Lib/idlelib/debugobj.py
@@ -8,11 +8,10 @@
# XXX TO DO:
# - for classes/modules, add "open source" to object browser
+from reprlib import Repr
from idlelib.tree import TreeItem, TreeNode, ScrolledCanvas
-from reprlib import Repr
-
myrepr = Repr()
myrepr.maxstring = 100
myrepr.maxother = 100
diff --git a/Lib/idlelib/dynoption.py b/Lib/idlelib/dynoption.py
index 962f2c3..9c6ffa4 100644
--- a/Lib/idlelib/dynoption.py
+++ b/Lib/idlelib/dynoption.py
@@ -3,6 +3,7 @@ OptionMenu widget modified to allow dynamic menu reconfiguration
and setting of highlightthickness
"""
import copy
+
from tkinter import OptionMenu, _setit, StringVar, Button
class DynOptionMenu(OptionMenu):
diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py
index 7372ecf..ae475cb 100644
--- a/Lib/idlelib/editor.py
+++ b/Lib/idlelib/editor.py
@@ -6,24 +6,28 @@ import platform
import re
import string
import sys
+import tokenize
+import traceback
+import webbrowser
+
from tkinter import *
from tkinter.ttk import Scrollbar
import tkinter.simpledialog as tkSimpleDialog
import tkinter.messagebox as tkMessageBox
-import traceback
-import webbrowser
+from idlelib.config import idleConf
+from idlelib import configdialog
+from idlelib import grep
+from idlelib import help
+from idlelib import help_about
+from idlelib import macosx
from idlelib.multicall import MultiCallCreator
+from idlelib import pyparse
from idlelib import query
-from idlelib import windows
-from idlelib import search
-from idlelib import grep
from idlelib import replace
-from idlelib import pyparse
-from idlelib.config import idleConf
-from idlelib import help_about, textview, configdialog
-from idlelib import macosx
-from idlelib import help
+from idlelib import search
+from idlelib import textview
+from idlelib import windows
# The default tab setting for a Text widget, in average-width characters.
TK_TABWIDTH_DEFAULT = 8
@@ -1515,9 +1519,6 @@ def classifyws(s, tabwidth):
break
return raw, effective
-import tokenize
-_tokenize = tokenize
-del tokenize
class IndentSearcher(object):
@@ -1542,8 +1543,8 @@ class IndentSearcher(object):
return self.text.get(mark, mark + " lineend+1c")
def tokeneater(self, type, token, start, end, line,
- INDENT=_tokenize.INDENT,
- NAME=_tokenize.NAME,
+ INDENT=tokenize.INDENT,
+ NAME=tokenize.NAME,
OPENERS=('class', 'def', 'for', 'if', 'try', 'while')):
if self.finished:
pass
@@ -1554,19 +1555,19 @@ class IndentSearcher(object):
self.finished = 1
def run(self):
- save_tabsize = _tokenize.tabsize
- _tokenize.tabsize = self.tabwidth
+ save_tabsize = tokenize.tabsize
+ tokenize.tabsize = self.tabwidth
try:
try:
- tokens = _tokenize.generate_tokens(self.readline)
+ tokens = tokenize.generate_tokens(self.readline)
for token in tokens:
self.tokeneater(*token)
- except (_tokenize.TokenError, SyntaxError):
+ except (tokenize.TokenError, SyntaxError):
# since we cut off the tokenizer early, we can trigger
# spurious errors
pass
finally:
- _tokenize.tabsize = save_tabsize
+ tokenize.tabsize = save_tabsize
return self.blkopenline, self.indentedline
### end autoindent code ###
diff --git a/Lib/idlelib/filelist.py b/Lib/idlelib/filelist.py
index b5af90cc..f46ad7c 100644
--- a/Lib/idlelib/filelist.py
+++ b/Lib/idlelib/filelist.py
@@ -1,4 +1,5 @@
import os
+
from tkinter import *
import tkinter.messagebox as tkMessageBox
diff --git a/Lib/idlelib/grep.py b/Lib/idlelib/grep.py
index cfb0ea0..64ba28d 100644
--- a/Lib/idlelib/grep.py
+++ b/Lib/idlelib/grep.py
@@ -1,11 +1,14 @@
-import os
import fnmatch
+import os
import sys
+
from tkinter import StringVar, BooleanVar
from tkinter.ttk import Checkbutton
-from idlelib import searchengine
+
from idlelib.searchbase import SearchDialogBase
-# Importing OutputWindow fails due to import loop
+from idlelib import searchengine
+
+# Importing OutputWindow here fails due to import loop
# EditorWindow -> GrepDialop -> OutputWindow -> EditorWindow
def grep(text, io=None, flist=None):
@@ -127,9 +130,9 @@ class GrepDialog(SearchDialogBase):
def _grep_dialog(parent): # htest #
- from idlelib.pyshell import PyShellFileList
from tkinter import Toplevel, Text, SEL, END
from tkinter.ttk import Button
+ from idlelib.pyshell import PyShellFileList
top = Toplevel(parent)
top.title("Test GrepDialog")
x, y = map(int, parent.geometry().split('+')[1:])
diff --git a/Lib/idlelib/help.py b/Lib/idlelib/help.py
index 03d6ea2..77e01a3 100644
--- a/Lib/idlelib/help.py
+++ b/Lib/idlelib/help.py
@@ -27,9 +27,11 @@ show_idlehelp - Create HelpWindow. Called in EditorWindow.help_dialog.
from html.parser import HTMLParser
from os.path import abspath, dirname, isfile, join
from platform import python_version
+
from tkinter import Toplevel, Frame, Text, Menu
from tkinter.ttk import Menubutton, Scrollbar
from tkinter import font as tkfont
+
from idlelib.config import idleConf
## About IDLE ##
diff --git a/Lib/idlelib/help_about.py b/Lib/idlelib/help_about.py
index 54f3599..071bd3e 100644
--- a/Lib/idlelib/help_about.py
+++ b/Lib/idlelib/help_about.py
@@ -1,12 +1,14 @@
"""About Dialog for IDLE
"""
-
import os
from sys import version
+
from tkinter import *
+
from idlelib import textview
+
class AboutDialog(Toplevel):
"""Modal about dialog for idle
@@ -144,6 +146,7 @@ class AboutDialog(Toplevel):
def Ok(self, event=None):
self.destroy()
+
if __name__ == '__main__':
import unittest
unittest.main('idlelib.idle_test.test_help_about', verbosity=2, exit=False)
diff --git a/Lib/idlelib/history.py b/Lib/idlelib/history.py
index 6068d4f..56f53a0 100644
--- a/Lib/idlelib/history.py
+++ b/Lib/idlelib/history.py
@@ -2,6 +2,7 @@
from idlelib.config import idleConf
+
class History:
''' Implement Idle Shell history mechanism.
@@ -99,6 +100,7 @@ class History:
self.pointer = None
self.prefix = None
+
if __name__ == "__main__":
from unittest import main
- main('idlelib.idle_test.test_idlehistory', verbosity=2, exit=False)
+ main('idlelib.idle_test.test_history', verbosity=2, exit=False)
diff --git a/Lib/idlelib/hyperparser.py b/Lib/idlelib/hyperparser.py
index f904a39..450a709 100644
--- a/Lib/idlelib/hyperparser.py
+++ b/Lib/idlelib/hyperparser.py
@@ -4,11 +4,10 @@ HyperParser uses PyParser. PyParser mostly gives information on the
proper indentation of code. HyperParser gives additional information on
the structure of code.
"""
-
-import string
from keyword import iskeyword
-from idlelib import pyparse
+import string
+from idlelib import pyparse
# all ASCII chars that may be in an identifier
_ASCII_ID_CHARS = frozenset(string.ascii_letters + string.digits + "_")
diff --git a/Lib/idlelib/idle_test/test_iomenu.py b/Lib/idlelib/idle_test/test_iomenu.py
index f8ff112..65bf593 100644
--- a/Lib/idlelib/idle_test/test_iomenu.py
+++ b/Lib/idlelib/idle_test/test_iomenu.py
@@ -1,6 +1,7 @@
import unittest
import io
-from idlelib.pyshell import PseudoInputFile, PseudoOutputFile
+
+from idlelib.run import PseudoInputFile, PseudoOutputFile
class S(str):
@@ -230,4 +231,4 @@ class PseudeInputFilesTest(unittest.TestCase):
if __name__ == '__main__':
- unittest.main()
+ unittest.main(verbosity=2)
diff --git a/Lib/idlelib/macosx.py b/Lib/idlelib/macosx.py
index f9f558d..c225dd9 100644
--- a/Lib/idlelib/macosx.py
+++ b/Lib/idlelib/macosx.py
@@ -2,9 +2,10 @@
A number of functions that enhance IDLE on Mac OSX.
"""
from sys import platform # Used in _init_tk_type, changed by test.
-import tkinter
import warnings
+import tkinter
+
## Define functions that query the Mac graphics type.
## _tk_type and its initializer are private to this section.
diff --git a/Lib/idlelib/multicall.py b/Lib/idlelib/multicall.py
index 8a66cd9..b74fed4 100644
--- a/Lib/idlelib/multicall.py
+++ b/Lib/idlelib/multicall.py
@@ -28,9 +28,9 @@ The order by which events are called is defined by these rules:
unless this conflicts with the first rule.
Each function will be called at most once for each event.
"""
-
-import sys
import re
+import sys
+
import tkinter
# the event type constants, which define the meaning of mc_type
diff --git a/Lib/idlelib/outwin.py b/Lib/idlelib/outwin.py
index b3bc786..f6d2915 100644
--- a/Lib/idlelib/outwin.py
+++ b/Lib/idlelib/outwin.py
@@ -1,9 +1,12 @@
-from tkinter import *
-from idlelib.editor import EditorWindow
import re
+
+from tkinter import *
import tkinter.messagebox as tkMessageBox
+
+from idlelib.editor import EditorWindow
from idlelib import iomenu
+
class OutputWindow(EditorWindow):
"""An editor window that can serve as an output file.
diff --git a/Lib/idlelib/paragraph.py b/Lib/idlelib/paragraph.py
index 0323b53..5d358ee 100644
--- a/Lib/idlelib/paragraph.py
+++ b/Lib/idlelib/paragraph.py
@@ -14,10 +14,11 @@ Known problems with comment reformatting:
spaces, they will not be considered part of the same block.
* Fancy comments, like this bulleted list, aren't handled :-)
"""
-
import re
+
from idlelib.config import idleConf
+
class FormatParagraph:
menudefs = [
@@ -189,6 +190,7 @@ def get_comment_header(line):
if m is None: return ""
return m.group(1)
+
if __name__ == "__main__":
import unittest
unittest.main('idlelib.idle_test.test_paragraph',
diff --git a/Lib/idlelib/parenmatch.py b/Lib/idlelib/parenmatch.py
index 9586a3b..ccec708 100644
--- a/Lib/idlelib/parenmatch.py
+++ b/Lib/idlelib/parenmatch.py
@@ -4,7 +4,6 @@ When you hit a right paren, the cursor should move briefly to the left
paren. Paren here is used generically; the matching applies to
parentheses, square brackets, and curly braces.
"""
-
from idlelib.hyperparser import HyperParser
from idlelib.config import idleConf
diff --git a/Lib/idlelib/pathbrowser.py b/Lib/idlelib/pathbrowser.py
index 966af4b..6c19508 100644
--- a/Lib/idlelib/pathbrowser.py
+++ b/Lib/idlelib/pathbrowser.py
@@ -1,10 +1,10 @@
+import importlib.machinery
import os
import sys
-import importlib.machinery
-from idlelib.tree import TreeItem
from idlelib.browser import ClassBrowser, ModuleBrowserTreeItem
from idlelib.pyshell import PyShellFileList
+from idlelib.tree import TreeItem
class PathBrowser(ClassBrowser):
@@ -24,6 +24,7 @@ class PathBrowser(ClassBrowser):
def rootnode(self):
return PathBrowserTreeItem()
+
class PathBrowserTreeItem(TreeItem):
def GetText(self):
@@ -36,6 +37,7 @@ class PathBrowserTreeItem(TreeItem):
sublist.append(item)
return sublist
+
class DirBrowserTreeItem(TreeItem):
def __init__(self, dir, packages=[]):
@@ -95,6 +97,7 @@ class DirBrowserTreeItem(TreeItem):
sorted.sort()
return sorted
+
def _path_browser(parent): # htest #
flist = PyShellFileList(parent)
PathBrowser(flist, _htest=True)
diff --git a/Lib/idlelib/percolator.py b/Lib/idlelib/percolator.py
index 4474f9a..d18daf0 100644
--- a/Lib/idlelib/percolator.py
+++ b/Lib/idlelib/percolator.py
@@ -1,5 +1,5 @@
-from idlelib.redirector import WidgetRedirector
from idlelib.delegator import Delegator
+from idlelib.redirector import WidgetRedirector
class Percolator:
diff --git a/Lib/idlelib/pyparse.py b/Lib/idlelib/pyparse.py
index 9ccbb25..6739dfd 100644
--- a/Lib/idlelib/pyparse.py
+++ b/Lib/idlelib/pyparse.py
@@ -1,6 +1,6 @@
+from collections import Mapping
import re
import sys
-from collections import Mapping
# Reason last stmt is continued (or C_NONE if it's not).
(C_NONE, C_BACKSLASH, C_STRING_FIRST_LINE,
diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py
index 740c72e..e1eade1 100755
--- a/Lib/idlelib/pyshell.py
+++ b/Lib/idlelib/pyshell.py
@@ -15,9 +15,13 @@ if TkVersion < 8.5:
parent=root)
sys.exit(1)
+from code import InteractiveInterpreter
import getopt
+import io
+import linecache
import os
import os.path
+from platform import python_version, system
import re
import socket
import subprocess
@@ -25,23 +29,20 @@ import sys
import threading
import time
import tokenize
+import warnings
-import linecache
-from code import InteractiveInterpreter
-from platform import python_version, system
-
-from idlelib import testing
-from idlelib.editor import EditorWindow, fixwordbreaks
-from idlelib.filelist import FileList
+from idlelib import testing # bool value
from idlelib.colorizer import ColorDelegator
-from idlelib.undo import UndoDelegator
-from idlelib.outwin import OutputWindow
from idlelib.config import idleConf
-from idlelib.run import idle_formatwarning, PseudoInputFile, PseudoOutputFile
-from idlelib import rpc
from idlelib import debugger
from idlelib import debugger_r
+from idlelib.editor import EditorWindow, fixwordbreaks
+from idlelib.filelist import FileList
from idlelib import macosx
+from idlelib.outwin import OutputWindow
+from idlelib import rpc
+from idlelib.run import idle_formatwarning, PseudoInputFile, PseudoOutputFile
+from idlelib.undo import UndoDelegator
HOST = '127.0.0.1' # python execution server on localhost loopback
PORT = 0 # someday pass in host, port for remote debug capability
@@ -51,7 +52,6 @@ PORT = 0 # someday pass in host, port for remote debug capability
# temporarily redirect the stream to the shell window to display warnings when
# checking user's code.
warning_stream = sys.__stderr__ # None, at least on Windows, if no console.
-import warnings
def idle_showwarning(
message, category, filename, lineno, file=None, line=None):
diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py
index a4584df..3b1f1e2 100644
--- a/Lib/idlelib/query.py
+++ b/Lib/idlelib/query.py
@@ -23,9 +23,10 @@ Subclass HelpSource gets menu item and path for additions to Help menu.
import importlib
import os
from sys import executable, platform # Platform is set for one test.
+
from tkinter import Toplevel, StringVar, W, E, N, S
-from tkinter import filedialog
from tkinter.ttk import Frame, Button, Entry, Label
+from tkinter import filedialog
from tkinter.font import Font
class Query(Toplevel):
diff --git a/Lib/idlelib/replace.py b/Lib/idlelib/replace.py
index 367bfc9..abd9e59 100644
--- a/Lib/idlelib/replace.py
+++ b/Lib/idlelib/replace.py
@@ -3,12 +3,12 @@ Uses idlelib.SearchEngine for search capability.
Defines various replace related functions like replace, replace all,
replace+find.
"""
+import re
+
from tkinter import StringVar, TclError
-from idlelib import searchengine
from idlelib.searchbase import SearchDialogBase
-import re
-
+from idlelib import searchengine
def replace(text):
"""Returns a singleton ReplaceDialog instance.The single dialog
diff --git a/Lib/idlelib/rpc.py b/Lib/idlelib/rpc.py
index 48105f2..8f57edb8 100644
--- a/Lib/idlelib/rpc.py
+++ b/Lib/idlelib/rpc.py
@@ -26,23 +26,21 @@ See the Idle run.main() docstring for further information on how this was
accomplished in Idle.
"""
-
-import sys
-import os
+import builtins
+import copyreg
import io
-import socket
+import marshal
+import os
+import pickle
+import queue
import select
+import socket
import socketserver
import struct
-import pickle
+import sys
import threading
-import queue
import traceback
-import copyreg
import types
-import marshal
-import builtins
-
def unpickle_code(ms):
co = marshal.loads(ms)
@@ -60,10 +58,12 @@ def dumps(obj, protocol=None):
p.dump(obj)
return f.getvalue()
+
class CodePickler(pickle.Pickler):
dispatch_table = {types.CodeType: pickle_code}
dispatch_table.update(copyreg.dispatch_table)
+
BUFSIZE = 8*1024
LOCALHOST = '127.0.0.1'
@@ -487,16 +487,19 @@ class RemoteObject(object):
# Token mix-in class
pass
+
def remoteref(obj):
oid = id(obj)
objecttable[oid] = obj
return RemoteProxy(oid)
+
class RemoteProxy(object):
def __init__(self, oid):
self.oid = oid
+
class RPCHandler(socketserver.BaseRequestHandler, SocketIO):
debugging = False
@@ -514,6 +517,7 @@ class RPCHandler(socketserver.BaseRequestHandler, SocketIO):
def get_remote_proxy(self, oid):
return RPCProxy(self, oid)
+
class RPCClient(SocketIO):
debugging = False
@@ -539,6 +543,7 @@ class RPCClient(SocketIO):
def get_remote_proxy(self, oid):
return RPCProxy(self, oid)
+
class RPCProxy(object):
__methods = None
@@ -587,6 +592,7 @@ def _getattributes(obj, attributes):
if not callable(attr):
attributes[name] = 1
+
class MethodProxy(object):
def __init__(self, sockio, oid, name):
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index c7ee0b3..afa9744 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -2,21 +2,21 @@ import io
import linecache
import queue
import sys
-import _thread as thread
-import threading
import time
import traceback
-import tkinter
-
-from idlelib import calltips
-from idlelib import autocomplete
+import _thread as thread
+import threading
+import warnings
-from idlelib import debugger_r
-from idlelib import debugobj_r
-from idlelib import stackviewer
-from idlelib import rpc
-from idlelib import iomenu
+import tkinter # Tcl, deletions, messagebox if startup fails
+from idlelib import autocomplete # AutoComplete, fetch_encodings
+from idlelib import calltips # CallTips
+from idlelib import debugger_r # start_debugger
+from idlelib import debugobj_r # remote_object_tree_item
+from idlelib import iomenu # encoding
+from idlelib import rpc # multiple objects
+from idlelib import stackviewer # StackTreeItem
import __main__
for mod in ('simpledialog', 'messagebox', 'font',
@@ -27,7 +27,6 @@ for mod in ('simpledialog', 'messagebox', 'font',
LOCALHOST = '127.0.0.1'
-import warnings
def idle_formatwarning(message, category, filename, lineno, line=None):
"""Format warnings the IDLE way."""
@@ -280,6 +279,7 @@ def exit():
capture_warnings(False)
sys.exit(0)
+
class MyRPCServer(rpc.RPCServer):
def handle_error(self, request, client_address):
diff --git a/Lib/idlelib/runscript.py b/Lib/idlelib/runscript.py
index 7e7524a..79d86ad 100644
--- a/Lib/idlelib/runscript.py
+++ b/Lib/idlelib/runscript.py
@@ -20,11 +20,12 @@ XXX GvR Redesign this interface (yet again) as follows:
import os
import tabnanny
import tokenize
+
import tkinter.messagebox as tkMessageBox
-from idlelib import pyshell
from idlelib.config import idleConf
from idlelib import macosx
+from idlelib import pyshell
indent_message = """Error: Inconsistent indentation detected!
diff --git a/Lib/idlelib/scrolledlist.py b/Lib/idlelib/scrolledlist.py
index 4799995..cc08c26 100644
--- a/Lib/idlelib/scrolledlist.py
+++ b/Lib/idlelib/scrolledlist.py
@@ -1,7 +1,9 @@
from tkinter import *
-from idlelib import macosx
from tkinter.ttk import Scrollbar
+from idlelib import macosx
+
+
class ScrolledList:
default = "(None)"
diff --git a/Lib/idlelib/search.py b/Lib/idlelib/search.py
index 508a35c..4b90659 100644
--- a/Lib/idlelib/search.py
+++ b/Lib/idlelib/search.py
@@ -24,6 +24,7 @@ def find_selection(text):
"Handle the editor edit menu item and corresponding event."
return _setup(text).find_selection(text)
+
class SearchDialog(SearchDialogBase):
def create_widgets(self):
diff --git a/Lib/idlelib/searchbase.py b/Lib/idlelib/searchbase.py
index b326a1c..5f81785 100644
--- a/Lib/idlelib/searchbase.py
+++ b/Lib/idlelib/searchbase.py
@@ -3,6 +3,7 @@
from tkinter import Toplevel, Frame
from tkinter.ttk import Entry, Label, Button, Checkbutton, Radiobutton
+
class SearchDialogBase:
'''Create most of a 3 or 4 row, 3 column search dialog.
diff --git a/Lib/idlelib/searchengine.py b/Lib/idlelib/searchengine.py
index 2e3700e..253f1b0 100644
--- a/Lib/idlelib/searchengine.py
+++ b/Lib/idlelib/searchengine.py
@@ -1,5 +1,6 @@
'''Define SearchEngine for search dialogs.'''
import re
+
from tkinter import StringVar, BooleanVar, TclError
import tkinter.messagebox as tkMessageBox
@@ -14,6 +15,7 @@ def get(root):
# This creates a cycle that persists until root is deleted.
return root._searchengine
+
class SearchEngine:
"""Handles searching a text widget for Find, Replace, and Grep."""
@@ -186,6 +188,7 @@ class SearchEngine:
col = len(chars) - 1
return None
+
def search_reverse(prog, chars, col):
'''Search backwards and return an re match object or None.
diff --git a/Lib/idlelib/stackviewer.py b/Lib/idlelib/stackviewer.py
index c8c802c..0698def 100644
--- a/Lib/idlelib/stackviewer.py
+++ b/Lib/idlelib/stackviewer.py
@@ -1,11 +1,12 @@
-import os
-import sys
import linecache
+import os
import re
+import sys
+
import tkinter as tk
-from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas
from idlelib.debugobj import ObjectTreeItem, make_objecttreeitem
+from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas
def StackBrowser(root, flist=None, tb=None, top=None):
if top is None:
@@ -16,6 +17,7 @@ def StackBrowser(root, flist=None, tb=None, top=None):
node = TreeNode(sc.canvas, None, item)
node.expand()
+
class StackTreeItem(TreeItem):
def __init__(self, flist=None, tb=None):
@@ -54,6 +56,7 @@ class StackTreeItem(TreeItem):
sublist.append(item)
return sublist
+
class FrameTreeItem(TreeItem):
def __init__(self, info, flist):
@@ -95,6 +98,7 @@ class FrameTreeItem(TreeItem):
if os.path.isfile(filename):
self.flist.gotofileline(filename, lineno)
+
class VariablesTreeItem(ObjectTreeItem):
def GetText(self):
@@ -119,6 +123,7 @@ class VariablesTreeItem(ObjectTreeItem):
sublist.append(item)
return sublist
+
def _stack_viewer(parent): # htest #
from idlelib.pyshell import PyShellFileList
top = tk.Toplevel(parent)
diff --git a/Lib/idlelib/statusbar.py b/Lib/idlelib/statusbar.py
index a65bfb3..8618528 100644
--- a/Lib/idlelib/statusbar.py
+++ b/Lib/idlelib/statusbar.py
@@ -1,5 +1,6 @@
from tkinter import Frame, Label
+
class MultiStatusBar(Frame):
def __init__(self, master, **kw):
@@ -17,6 +18,7 @@ class MultiStatusBar(Frame):
label.config(width=width)
label.config(text=text)
+
def _multistatus_bar(parent): # htest #
from tkinter import Toplevel, Frame, Text, Button
top = Toplevel(parent)
diff --git a/Lib/idlelib/tabbedpages.py b/Lib/idlelib/tabbedpages.py
index ed07588..4186fa2 100644
--- a/Lib/idlelib/tabbedpages.py
+++ b/Lib/idlelib/tabbedpages.py
@@ -285,6 +285,7 @@ class TabSet(Frame):
# placed hide it
self.tab_set.lower()
+
class TabbedPageSet(Frame):
"""A Tkinter tabbed-pane widget.
@@ -302,6 +303,7 @@ class TabbedPageSet(Frame):
remove_page() methods.
"""
+
class Page(object):
"""Abstract base class for TabbedPageSet's pages.
@@ -467,6 +469,7 @@ class TabbedPageSet(Frame):
self._tab_set.set_selected_tab(page_name)
+
def _tabbed_pages(parent): # htest #
top=Toplevel(parent)
x, y = map(int, parent.geometry().split('+')[1:])
diff --git a/Lib/idlelib/textview.py b/Lib/idlelib/textview.py
index 7664524..b5c9f9b 100644
--- a/Lib/idlelib/textview.py
+++ b/Lib/idlelib/textview.py
@@ -1,11 +1,11 @@
"""Simple text browser for IDLE
"""
-
from tkinter import *
from tkinter.ttk import Scrollbar
from tkinter.messagebox import showerror
+
class TextViewer(Toplevel):
"""A simple text viewer dialog for IDLE
diff --git a/Lib/idlelib/tree.py b/Lib/idlelib/tree.py
index 04e0734..292ce36 100644
--- a/Lib/idlelib/tree.py
+++ b/Lib/idlelib/tree.py
@@ -15,10 +15,12 @@
# - optimize tree redraw after expand of subnode
import os
+
from tkinter import *
from tkinter.ttk import Scrollbar
-from idlelib import zoomheight
+
from idlelib.config import idleConf
+from idlelib import zoomheight
ICONDIR = "Icons"
diff --git a/Lib/idlelib/undo.py b/Lib/idlelib/undo.py
index 9f291e5..4332f10 100644
--- a/Lib/idlelib/undo.py
+++ b/Lib/idlelib/undo.py
@@ -1,5 +1,7 @@
import string
+
from idlelib.delegator import Delegator
+
# tkintter import not needed because module does not create widgets,
# although many methods operate on text widget arguments.
@@ -158,7 +160,6 @@ class UndoDelegator(Delegator):
class Command:
-
# Base class for Undoable commands
tags = None
@@ -204,7 +205,6 @@ class Command:
class InsertCommand(Command):
-
# Undoable insert command
def __init__(self, index1, chars, tags=None):
@@ -262,7 +262,6 @@ class InsertCommand(Command):
class DeleteCommand(Command):
-
# Undoable delete command
def __init__(self, index1, index2=None):
@@ -297,8 +296,8 @@ class DeleteCommand(Command):
text.see('insert')
##sys.__stderr__.write("undo: %s\n" % self)
-class CommandSequence(Command):
+class CommandSequence(Command):
# Wrapper for a sequence of undoable cmds to be undone/redone
# as a unit
diff --git a/Lib/idlelib/windows.py b/Lib/idlelib/windows.py
index bc74348..a3f858a 100644
--- a/Lib/idlelib/windows.py
+++ b/Lib/idlelib/windows.py
@@ -1,5 +1,6 @@
from tkinter import *
+
class WindowList:
def __init__(self):
@@ -48,6 +49,7 @@ class WindowList:
t, v, tb = sys.exc_info()
print("warning: callback failed in WindowList", t, ":", v)
+
registry = WindowList()
add_windows_to_menu = registry.add_windows_to_menu
diff --git a/Lib/idlelib/zoomheight.py b/Lib/idlelib/zoomheight.py
index 0016e9d..aa4a427 100644
--- a/Lib/idlelib/zoomheight.py
+++ b/Lib/idlelib/zoomheight.py
@@ -5,6 +5,7 @@ import sys
from idlelib import macosx
+
class ZoomHeight:
menudefs = [
@@ -20,6 +21,7 @@ class ZoomHeight:
top = self.editwin.top
zoom_height(top)
+
def zoom_height(top):
geom = top.wm_geometry()
m = re.match(r"(\d+)x(\d+)\+(-?\d+)\+(-?\d+)", geom)