summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCheryl Sabella <cheryl.sabella@gmail.com>2019-06-01 21:03:22 (GMT)
committerTerry Jan Reedy <tjreedy@udel.edu>2019-06-01 21:03:22 (GMT)
commit1a4d9ffa1aecd7e750195f2be06d3d16c7a3a88f (patch)
tree3bece5e0602e9ccc5d1c66a9d0e364f572cea1b6
parente5f6207ba6cb510d9370519ba869296be01787be (diff)
downloadcpython-1a4d9ffa1aecd7e750195f2be06d3d16c7a3a88f.zip
cpython-1a4d9ffa1aecd7e750195f2be06d3d16c7a3a88f.tar.gz
cpython-1a4d9ffa1aecd7e750195f2be06d3d16c7a3a88f.tar.bz2
bpo-32411: IDLE: Remove line number sort in browser.py (#5011)
Insertion in line order makes sorting keys by line order unneeded.
-rw-r--r--Lib/idlelib/NEWS.txt2
-rw-r--r--Lib/idlelib/browser.py7
-rw-r--r--Lib/idlelib/idle_test/test_browser.py28
-rw-r--r--Misc/NEWS.d/next/IDLE/2017-12-25-18-48-50.bpo-32411.vNwDhe.rst2
4 files changed, 22 insertions, 17 deletions
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index e1bc009..b260d4e 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,8 @@ Released on 2019-10-20?
======================================
+bpo-32411: Stop sorting dict created with desired line order.
+
bpo-37038: Make idlelib.run runnable; add test clause.
bpo-36958: Print any argument other than None or int passed to
diff --git a/Lib/idlelib/browser.py b/Lib/idlelib/browser.py
index 234883f..e5b0bc5 100644
--- a/Lib/idlelib/browser.py
+++ b/Lib/idlelib/browser.py
@@ -29,9 +29,10 @@ def transform_children(child_dict, modname=None):
The dictionary maps names to pyclbr information objects.
Filter out imported objects.
Augment class names with bases.
- Sort objects by line number.
+ The insertion order of the dictonary is assumed to have been in line
+ number order, so sorting is not necessary.
- The current tree only calls this once per child_dic as it saves
+ The current tree only calls this once per child_dict as it saves
TreeItems once created. A future tree and tests might violate this,
so a check prevents multiple in-place augmentations.
"""
@@ -51,7 +52,7 @@ def transform_children(child_dict, modname=None):
supers.append(sname)
obj.name += '({})'.format(', '.join(supers))
obs.append(obj)
- return sorted(obs, key=lambda o: o.lineno)
+ return obs
class ModuleBrowser:
diff --git a/Lib/idlelib/idle_test/test_browser.py b/Lib/idlelib/idle_test/test_browser.py
index dfbab6d..25d6dc6 100644
--- a/Lib/idlelib/idle_test/test_browser.py
+++ b/Lib/idlelib/idle_test/test_browser.py
@@ -61,16 +61,16 @@ class ModuleBrowserTest(unittest.TestCase):
# Nested tree same as in test_pyclbr.py except for supers on C0. C1.
mb = pyclbr
module, fname = 'test', 'test.py'
-f0 = mb.Function(module, 'f0', fname, 1)
-f1 = mb._nest_function(f0, 'f1', 2)
-f2 = mb._nest_function(f1, 'f2', 3)
-c1 = mb._nest_class(f0, 'c1', 5)
-C0 = mb.Class(module, 'C0', ['base'], fname, 6)
-F1 = mb._nest_function(C0, 'F1', 8)
-C1 = mb._nest_class(C0, 'C1', 11, [''])
-C2 = mb._nest_class(C1, 'C2', 12)
-F3 = mb._nest_function(C2, 'F3', 14)
-mock_pyclbr_tree = {'f0': f0, 'C0': C0}
+C0 = mb.Class(module, 'C0', ['base'], fname, 1)
+F1 = mb._nest_function(C0, 'F1', 3)
+C1 = mb._nest_class(C0, 'C1', 6, [''])
+C2 = mb._nest_class(C1, 'C2', 7)
+F3 = mb._nest_function(C2, 'F3', 9)
+f0 = mb.Function(module, 'f0', fname, 11)
+f1 = mb._nest_function(f0, 'f1', 12)
+f2 = mb._nest_function(f1, 'f2', 13)
+c1 = mb._nest_class(f0, 'c1', 15)
+mock_pyclbr_tree = {'C0': C0, 'f0': f0}
# Adjust C0.name, C1.name so tests do not depend on order.
browser.transform_children(mock_pyclbr_tree, 'test') # C0(base)
@@ -87,12 +87,12 @@ class TransformChildrenTest(unittest.TestCase):
transform = browser.transform_children
# Parameter matches tree module.
tcl = list(transform(mock_pyclbr_tree, 'test'))
- eq(tcl, [f0, C0])
- eq(tcl[0].name, 'f0')
- eq(tcl[1].name, 'C0(base)')
+ eq(tcl, [C0, f0])
+ eq(tcl[0].name, 'C0(base)')
+ eq(tcl[1].name, 'f0')
# Check that second call does not change suffix.
tcl = list(transform(mock_pyclbr_tree, 'test'))
- eq(tcl[1].name, 'C0(base)')
+ eq(tcl[0].name, 'C0(base)')
# Nothing to traverse if parameter name isn't same as tree module.
tcl = list(transform(mock_pyclbr_tree, 'different name'))
eq(tcl, [])
diff --git a/Misc/NEWS.d/next/IDLE/2017-12-25-18-48-50.bpo-32411.vNwDhe.rst b/Misc/NEWS.d/next/IDLE/2017-12-25-18-48-50.bpo-32411.vNwDhe.rst
new file mode 100644
index 0000000..a552201
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2017-12-25-18-48-50.bpo-32411.vNwDhe.rst
@@ -0,0 +1,2 @@
+In browser.py, remove extraneous sorting by line number since dictionary was
+created in line number order.