New submission from Terry J. Reedy:

Idlelib needs a roadmap with a bit of history to help orient new contributors 
to IDLE as to where I see it going.  I am not sure whether to add this to 
README.txt or make is a separate roadmap.txt file.  A rough draft (which 
started as just an outline ;-):

Summary of planned improvements:
  Fix bugs and selectively add enhancements.
  Continue improving tests.
  Modernize code and refactor as needed for other improvements.
  Convert tk widgets with ttk equivalents to ttk.
  Convert IDLE from multiple windows to a window with tabbed panes.


Recent history relevant to current improvements:

* Summer 2010: Pydev discussed whether to remove IDLE (too old) or modernize 
it.  'Modernize' mostly meant 'use the better-looking ttk widgets' and 'convert 
IDLE a modern single window app'.  The decision was to modernize, but this was 
mostly blocked from starting at that time.  Using ttk dependably requires 
tcl/tk 8.5.  Reorganizing IDLE externally requires internal reorganization that 
will break 3rd party extensions that use more than the documented extension API.

* Winter 2013: PEP 434 formalized the practice of allowing IDLE improvements to 
be backported even if more of an enhancement than a bug fix.  Except for 
idlelib.idle.*, it also declared idlelib to be a 'private implementation 
modules'.  The intention was to eventually allow refactoring, even if not 
immediately.  'Big' changes like using ttk and tabbed pane conversion were 
specifically kept blocked until decided otherwise in further discussion.

* Spring 2016: After the required further discussion, which began the previous 
summer, modernization and refactoring were unblocked for IDLE 3.6+.  IDLE 3.6 
was allowed to (and now does) require tcl/tk 8.5.  Any 3rd-party code that 
requires 3.5 idlelib can adjust, require Python 3.5, or incorporate 3.5 idlelib.


Specific goals for 3.7:

* Bug fixes: Some priorities are fix hangs and crashes; continue after 
exceptions, if possible, instead of exiting; display fatal exceptions in a tk 
messagebox before exiting.  Backport all changes to 3.6.  

* Unittests: Continue expanding the test/test_idle.py and  idlelib/idle_test/ 
suite begun in Summer 2013.  Change code as needed to enable testing.  (The May 
2016 decision allows this to be done freely.)  Ideally, test every patch to 
prevent regressions.

* Dialog appearance and operation: Htests ensure that widget creation code runs 
and that the 'look and feel' is minimally acceptable.  Convert any remaining 
'sanity check' code not converted in summer 2014, such as in config.py.  Fix 
some remaining consistency issues.  Rework About IDLE and the option dialogs.

* Modernizing code: After the May 2016 decisions, modules were renamed to short 
lowercase PEP8 names.  Changes within modules are best done when adding tests 
(if a module is not already fully tested).  Some specifics:
  - Convert function names to lowercase.
  - Replace '*' in 'from tkinter import *' with objects.
  - Convert tkinter submodule imports from the backwards-looking 2to3 
conversion.  Change 'import tkinter.font as TkFont' to 'from tkinter import 
font' and replace 'TkFont' with 'font' in the rest of a module.  Do the same 
with messagebox, colorchooser, and simpledialog.
  - Eliminate unneeded intermediate collections objects (some from 2to3 
conversion).  Example: 'for k in list(d.keys):' should be 'for k in d:'.

[Notes: import * and VALUE versus 'value' are discussed in #30290. Searching 
idlelib for 'import tkinter.' gets 16 hits.]

* Refactoring: Make Editor, PyShell, and Output subclasses of a base text-based 
window that only has common features.  Separate startup code from pyshell.

* Ttk widgets: Some windows and dialogs have been converted.  Finish.  
Optional: allow selection of available themes.  [Futuristic: create an IDLE 
theme, possibly based on the Python snake colors, green, blue, and yellow.]

* Tabbed panes: Convert any listed toplevel windows with multiple widgets to 
windows with a frame with multiple widgets.  (The help window was specifically 
designed this way.)  Frames can later be moved from the window to a tab.  (To 
do this, text-based frames in menu windows must also be disentangled from the 
menu.)

I would like to have a single window app by 2017, but that is too speculative 
to list now.

----------
assignee: terry.reedy
messages: 294089
nosy: csabella, louielu, terry.reedy
priority: normal
severity: normal
stage: needs patch
status: open
title: Add roadmap.txt section to idlelib
type: enhancement
versions: Python 3.6, Python 3.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue30422>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to