From 2b75155590eb42d25e474b776ee9fdcc4b3dc840 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sat, 23 Mar 2019 03:50:15 -0400 Subject: [PATCH] bpo-36405: Use dict unpacking in idlelib (#12507) Remove now unneeded imports. --- Lib/idlelib/NEWS.txt | 2 ++ Lib/idlelib/autocomplete.py | 10 +++------- Lib/idlelib/calltip.py | 8 +++----- .../next/IDLE/2019-03-23-01-45-56.bpo-36405.m7Wv1F.rst | 1 + 4 files changed, 9 insertions(+), 12 deletions(-) create mode 100644 Misc/NEWS.d/next/IDLE/2019-03-23-01-45-56.bpo-36405.m7Wv1F.rst diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index d79d9ce648f..d31ca83b0aa 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -3,6 +3,8 @@ Released on 2019-10-20? ====================================== +bpo-36405: Use dict unpacking in idlelib and remove unneeded __main__ imports. + bpo-36396: Remove fgBg param of idlelib.config.GetHighlight(). This param was only used twice and changed the return type. diff --git a/Lib/idlelib/autocomplete.py b/Lib/idlelib/autocomplete.py index 9caf50d5d0c..6751928f045 100644 --- a/Lib/idlelib/autocomplete.py +++ b/Lib/idlelib/autocomplete.py @@ -14,7 +14,6 @@ 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. @@ -182,8 +181,7 @@ class AutoComplete: else: if mode == COMPLETE_ATTRIBUTES: if what == "": - namespace = __main__.__dict__.copy() - namespace.update(__main__.__builtins__.__dict__) + namespace = {**__builtins__.__dict__, **globals()} bigl = eval("dir()", namespace) bigl.sort() if "__all__" in bigl: @@ -218,10 +216,8 @@ class AutoComplete: return smalll, bigl def get_entity(self, name): - """Lookup name in a namespace spanning sys.modules and __main.dict__""" - namespace = sys.modules.copy() - namespace.update(__main__.__dict__) - return eval(name, namespace) + "Lookup name in a namespace spanning sys.modules and globals()." + return eval(name, {**sys.modules, **globals()}) AutoComplete.reload() diff --git a/Lib/idlelib/calltip.py b/Lib/idlelib/calltip.py index 2a9a131ed96..4b78917d7d9 100644 --- a/Lib/idlelib/calltip.py +++ b/Lib/idlelib/calltip.py @@ -12,7 +12,6 @@ import types from idlelib import calltip_w from idlelib.hyperparser import HyperParser -import __main__ class Calltip: @@ -100,13 +99,12 @@ class Calltip: def get_entity(expression): """Return the object corresponding to expression evaluated - in a namespace spanning sys.modules and __main.dict__. + in a namespace spanning sys.modules and globals(). """ if expression: - namespace = sys.modules.copy() - namespace.update(__main__.__dict__) + namespace = {**sys.modules, **globals()} try: - return eval(expression, namespace) + return eval(expression, namespace) # Only protect user code. except BaseException: # An uncaught exception closes idle, and eval can raise any # exception, especially if user classes are involved. diff --git a/Misc/NEWS.d/next/IDLE/2019-03-23-01-45-56.bpo-36405.m7Wv1F.rst b/Misc/NEWS.d/next/IDLE/2019-03-23-01-45-56.bpo-36405.m7Wv1F.rst new file mode 100644 index 00000000000..619ab6af80c --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2019-03-23-01-45-56.bpo-36405.m7Wv1F.rst @@ -0,0 +1 @@ +Use dict unpacking in idlelib and remove unneeded __main__ imports.