PPI Refactoring Editor
Tue, 07-Mar-2006 by
Curtis "Ovid" Poe
edit post
One of the grants the grant committee approved last year was to extend PPI towards a refactoring editor. At that time, we didn't have procedures in place to take the grant reports and post them to a common spot. Now that we have this blog, our intention is to post these reports regularly so you can see the bang you're getting for your buck.
What follows is Adam Kennedy's report on his PPI work.
One of the biggest talking points about PPI since its initial creation
has been the prospect of smarter tools, and in particular getting a
PPI-based "refactoring editor".
But the goal for PPI 1.0 was never for it to be useful in an interactive,
performance-critical environment. It was about getting B sort of parser
working, and in my personal case one that could be used to do various
non-interactive document transformations.
This Phase 2 grant is intended primary to allow me to spend some time working
on various bits and pieces needed to create these tools, and solve the various
problems currently preventing PPI being usable in an editor context.
The end goal for the grant is a proof-of-concept cross-platform refactoring
Perl editor, itself implemented in Perl and installable directly from
CPAN.
While I don't expect to complete a full featured and polished editor, by
providing some examples of the sorts of things that can be done in a Perl
refactoring editor, it will inspire others to improve it and take the concept
further.
So far, I've made or assisted others to take number of positive steps.
- PPI::Cache has been completed.
It should speed up loading of documents in project trees by a minimum of a
factor of 4, more as further optimisations are made.
- PPI is (ASCII) line-noise compatible.
What gets typed into an editor is almost never actually legal Perl, and each
keystroke takes the document through strange and evil border cases.
With the assistance of Audrey Tang, you can now throw random ASCII line noise
at PPI and it will do whatever it takes to produce B that is a
valid document.
- Taken over and rewritten File::HomeDir
A rewrite of this venerable module means it should now work properly on
multiple platforms, and for multiple resource types (documents, application
data, etc). It has been tested under the three main Perl-related desktop
environment (Win32, Unix, Mac OS X)
- Created File::ShareDir
Distribution installers such as Module::Install can now install shared data
files, and the application can find them later. This will make the
installation of heavier programs like editors and other applications that
require a large amount of shared data files much easier.
- Created File::UserConfig
File::UserConfig wraps around the above two modules. It finds the user's
config directory (on all platforms), copying in a defult config directory if
it doesn't exist.
- Helping to make Win32 Perl a first class citizen
After some issues with trying to complete PXPerl, I took the approach of
running a "vertical metre of beer" competition. With the CamelPack now
available (and Vanilla Perl almost here), for the first time we have the
chance to create a true cross-platform desktop application for Unix, Win32 and
Mac OS X that can be installed from CPAN directly.
- CPANifying the Proton CE Editor
I'll be using the Proton CE editor (to be renamed) as the base for my
proof-of-concept editor. Quite a bit of work has been done to take this editor
close to the point where it can be distributed via CPAN.
It has been reorganised as a CPAN tarball, and is in the process of being
converted to File::Spec and File::UserConfig.
It should appear on CPAN shortly.
- Helped create App::GUI::Notepad
Hopefully released by the time you read this, I've worked with Ben Marsh to
create a small re-implementation of Notepad that works fully cross-platform
and installs directly from CPAN. I set up the structure for the distribution
and ensured the depenedencies all install cleanly, and Ben has created
application itself and done the WxWindows work.
- Perl::Critic
The amazing Jeffery Thalhammer has produced a great implementation of a
scanner for Damien Conways Perl Best Practices Book. I've chipped in with
attaboys and various changes to PPI as needed to help out.
- Perl::Metrics
Perl::Metrics is done, but is idling in the face of CPAN::Metrics crashing due
to memory issues 2-3 times per CPAN run. Left it for now to focus on getting
the main editor up and running.
Current Status:
The Proton CE cpanification is progressing fine, heading towards an initial
function-neutral release before beginning to add the PPI magic to the
editor.
In the mean time, App::GUI::Notepad will serve as the basis for an excellent
testing platform and alternative host for the Perl::Editor implementation.
I'd put my current progress at around 80%, with 99% the heavy preliminaries
out of the way and only the guts of the editor itself to go.
Comments (0)