This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Title: IDLE: Include nested functions and classes in module browser
Type: enhancement Stage: resolved
Components: IDLE Versions: Python 3.7, Python 3.6
Status: closed Resolution: fixed
Dependencies: 6691 30881 Superseder:
Assigned To: terry.reedy Nosy List: ajaksu2, cheryl.sabella, gpolo, ncoghlan, roger.serwy, terry.reedy
Priority: high Keywords: patch

Created on 2006-12-09 17:38 by taleinat, last changed 2022-04-11 14:56 by admin. This issue is now closed.

File name Uploaded Description Edit
classbrowser_nesting_support.diff gpolo, 2009-08-12 22:51 review
Pull Requests
URL Status Linked Edit
PR 2573 merged cheryl.sabella, 2017-07-04 23:41
PR 3702 merged terry.reedy, 2017-09-22 20:49
Messages (16)
msg30777 - (view) Author: Tal Einat (taleinat) * (Python committer) Date: 2006-12-09 17:38
If I define a class within a class, like this:

class A:
    class B:
    def foo(self):

The class browser shows that A contains foo, but it doesn't show B at all.
msg84594 - (view) Author: Daniel Diniz (ajaksu2) * (Python triager) Date: 2009-03-30 17:39
Confirmed on trunk and py3k.
msg89549 - (view) Author: Roger Serwy (roger.serwy) * (Python committer) Date: 2009-06-20 20:48
The class browser relies on the pyclbr module to scan the code. This
module doesn't support classes within classes. Both pyclbr and IDLE's
class browser need to be modified.
msg91499 - (view) Author: Guilherme Polo (gpolo) * (Python committer) Date: 2009-08-12 16:43
The attached patch adds support for nested objects in pyclbr and also in

I have yet to find an optimal way to test this on test_pyclbr (I did
some things here, none very nice), so you will notice tests are missing
on this patch.
msg91509 - (view) Author: Guilherme Polo (gpolo) * (Python committer) Date: 2009-08-12 22:51
I've removed the previous patch from here and attached an updated one on

Now the patch attached here only contains changes related to
msg250596 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2015-09-14 02:29
Class Browser is now a module browser as it includes functions not in classes. I guess pyclbr does this. Enhancing this for current versions would require adding a private copy of enhanced pyclbr to idlelib.
msg297297 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2017-06-29 19:37
I believe the patch for #6691 will also add detection of nested functions.  If  so, the IDLE patch must also make use of that new information.

If the patch for #6691 is only applied to 3.7, I want to put a temporary copy of the revised pyclbr in 3.6 idlelib, perhaps as _pyclbr, and change the 3.6 import accordingly.
msg297974 - (view) Author: Cheryl Sabella (cheryl.sabella) * (Python committer) Date: 2017-07-09 00:02
I created issue 30881 to add docstrings to to make creating user tests easier.
msg299794 - (view) Author: Cheryl Sabella (cheryl.sabella) * (Python committer) Date: 2017-08-05 21:08
I added a more complete set of unit tests to the PR.
msg301929 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2017-09-12 00:41
Nick, this over-due improvement to IDLE depends on the over-due improvement to pyclbr in 3.7.  I would like to backport the IDLE improvement by putting a copy of 3.7 pyclbr in 3.6 idlelib.  Do you agree that PEP434 allows this?
msg301930 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2017-09-12 00:44
Would it make any difference if the module were renamed? and made to only work with IDLE?
msg301947 - (view) Author: Nick Coghlan (ncoghlan) * (Python committer) Date: 2017-09-12 10:18
I think a bundled copy as idlelib._pyclbr in the 3.6 branch would be within the intent of PEP 434.
msg302716 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2017-09-21 18:04
I am revising the codecontext patch to use comprehensions and the sort key option.  I will rename the new function 'collect_objects' (GPolo) / '_traverse_node' (CSabella) as 'list_children' and have it return the name-object list, ordered by line number, needed by the tree widget.

[The input is a dictionary of children of a node, rather than a node, because pyclbr returns the dictionary of the children of the root module node of the tree, rather than a root node itself.  Sorting is not actually needed for 3.6/7 because the dicts are already ordered, but pyclbr does not guarantee this by using OrderedDict.  Proposing these two changes is a separate potential issue.]
msg302767 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2017-09-22 20:08
New changeset 058de11360ea6816a6e978c7be0bcbea99a3f7da by Terry Jan Reedy (Cheryl Sabella) in branch 'master':
bpo-1612262: IDLE: Class Browser shows nested functions, classes (#2573)
msg302776 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2017-09-22 21:28
New changeset fa1cae5832cbcfafedc4b1879c2abc85452f4edd by Terry Jan Reedy in branch '3.6':
 [3.6] bpo-1612262: IDLE: Class Browser shows nested functions, classes (GH-2573)  (#3702)
msg302777 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2017-09-22 21:34
I settled on 'transform_children' for the new function. #31461 is the master issue for improving the browsers.
Date User Action Args
2022-04-11 14:56:21adminsetgithub: 44322
2017-09-23 20:45:10terry.reedysettitle: Class Browser doesn't show internal classes -> IDLE: Include nested functions and classes in module browser
2017-09-22 21:34:32terry.reedysetstatus: open -> closed
resolution: fixed
messages: + msg302777

stage: patch review -> resolved
2017-09-22 21:28:03terry.reedysetmessages: + msg302776
2017-09-22 20:49:45terry.reedysetpull_requests: + pull_request3686
2017-09-22 20:08:46terry.reedysetmessages: + msg302767
2017-09-21 18:04:01terry.reedysetmessages: + msg302716
2017-09-13 22:03:45terry.reedylinkissue31461 dependencies
2017-09-12 10:18:57ncoghlansetmessages: + msg301947
2017-09-12 00:44:57terry.reedysetmessages: + msg301930
2017-09-12 00:41:24terry.reedysetnosy: + ncoghlan
messages: + msg301929
2017-08-14 19:42:48terry.reedysetdependencies: + IDLE: add docstrings to
stage: test needed -> patch review
2017-08-05 21:08:43cheryl.sabellasetmessages: + msg299794
2017-07-09 00:02:55cheryl.sabellasetmessages: + msg297974
2017-07-04 23:41:11cheryl.sabellasetpull_requests: + pull_request2644
2017-06-29 19:37:13terry.reedysetpriority: normal -> high

nosy: + cheryl.sabella
versions: + Python 3.7, - Python 2.7, Python 3.5
messages: + msg297297

assignee: terry.reedy
2015-09-14 02:29:36terry.reedysetpriority: low -> normal
versions: + Python 2.7, Python 3.5, Python 3.6, - Python 3.2
nosy: + terry.reedy

messages: + msg250596
2014-02-04 12:05:48taleinatsetnosy: - taleinat
2010-08-25 14:37:43BreamoreBoysetversions: + Python 3.2, - Python 3.1, Python 2.7
2009-08-12 22:51:23gpolosetfiles: - show_nested_objects.diff
2009-08-12 22:51:14gpolosetfiles: + classbrowser_nesting_support.diff

dependencies: + Support for nested classes and function for pyclbr
messages: + msg91509
2009-08-12 16:43:57gpolosetfiles: + show_nested_objects.diff

nosy: + gpolo
messages: + msg91499

keywords: + patch
2009-06-20 20:48:19roger.serwysetnosy: + roger.serwy
messages: + msg89549
2009-03-30 17:39:48ajaksu2setpriority: normal -> low

type: enhancement
versions: + Python 3.1, Python 2.7, - Python 2.6
nosy: + ajaksu2

messages: + msg84594
stage: test needed
2006-12-09 17:38:55taleinatcreate