Revision history for Perl extension PPI
0.841 Sat Jan 8 2005
General:
- Completed much more documentation on the core classes
- PPI::Tester back in sync again (seperate distribution)
- PPI::Processor and PPI::Tinderbox completed (seperate distribution)
Details:
- Documented PPI::Tokenizer
- PPI::Document->new( $source ) added as a convenience
- PPI::Lexer::lex_file can now be called statically
- PPI::Lexer::lex_source can now be called statically
- PPI::Lexer::lex_tokenizer can now be called statically
- Fixed a small bug in PPI::Dumper::print
- Fixed CPAN #9582 Tokenizer Bug: C< sub y { } # Comment >
- Fixed similar case with C< foo->y() >
0.840 Thu Dec 21 2004
General:
- Changed the PPI summary to no longer use the devisive word "parse"
Now: "PPI - Analyze and manipulate Perl code without using perl itself"
- Total rewrite of all the ->location code
- Upgrading MakeFile.PL to Module::Install
- Fixed #CPAN 8752 (a round-trip edge case bug)
- Added 08_regression.t to do code/dump regression testing for lexer bugs
- Completed (hopefully) HereDocs conversion to a single complex token
- PPI is now compatible with prefork.pm (although not dependant)
Details:
- Added PPI::Node::find_first object method
- Changed PPI::Node::find_any to just call PPI::Node::find_first
- Added PPI::Element::first_token object method
- Added PPI::Element::last_token object method
- Made a partial-removal-capable PPI::Element::_flush_locations
- PPI::Document::flush_locations uses PPI::Element::_flush_locations
- PPI::Document::index_locations is here-doc sane
- Added PPI::Token::HereDoc::heredoc object method
- Added PPI::Token::HereDoc::terminator object method
- Documented PPI::Token::HereDoc
- Added a HereDoc code/dump test to 05_lexer_practical.t
- Added PPI::Document::serialize, which replaces the use of
->content for generating the actual string to write out to
files when saving Documents.
- File::Spec reduced from dependency to build dependency
- Updated Test::ClassAPI dependency to newest version
- Enabled API collision detection in 02_api.t
- Updated Class::Autouse dependency to newest version
0.840_01 Tue Dec 21 2004
General:
- Perl Foundation Funding Commences
- Changes separated into General and Details from here one
- Complete re-organisation of the quote-like token classes.
Any and all code that works with quotes will be broken.
- Gave up on the old PPI::Query code and wrote a complete new and
much thinner implementation based roughly on the API of
File::Find::Rule.
PPI::Find uses the &wanted function (which also has a slightly
different API to the old one) but has the ->in style search methods.
It should be relatively easy for someone to write PPI::Find::Rule
on top of it.
- PPI::Transform is thus temporarily stale
Details:
- Introduced a bug for C< foreach $foo () > and caught/fixed it
during the changeover.
- Changed PPI::Lexer::Dump to PPI::Dumper
- API Freeze PPI::Find
- API Freeze PPI::Dumper
- Documented PPI::Find
- Documented PPI::Dumper
0.831 Fri Nov 5 2004
- Overloaded PPI::Document bool => true
- Overloaded PPI::Document "" => content
(That is, ::Documents stringify to their content)
- Fixed PPI::Document::save
- Merged Leon Brocard's docs patch
- Cleaned up PPI::Node::_condition and documented conditions better (fixed #7799)
- Allow dropping of the initial PPI:: in class search conditions
- Fixed two instances of File::Slurp::read_file being called as a method
0.830 Mon Sep 27 2004
- Added PPI::Statement::Package::file_scoped object method
- Handle potentially dangerous C< sub foo ($$ > safer
- Resolve C< sub BEGIN { } > to PPI::Statement::Scheduled correctly
- Resolve C< sub () { 1 }; > to PPI::Statement correctly
- API Freeze PPI::Statement::Package
- API Freeze PPI::Statement::Scheduled
- API Freeze PPI::Statement::Sub
- Documented PPI::Statement
- Documented PPI::Statement::Package
- Documented PPI::Statement::Scheduled
- Documented PPI::Statement::Sub
- Documented PPI::Document::Fragment
0.829 Sat Sep 25 2004
- BREAKS API COMPATIBILITY
- Changed PPI::Token::SubPrototype to PPI::Token::Prototype
- Added PPI::Token::Prototype::prototype object method
- Added PPI::Statement::Sub::prototype object method
- Added PPI::Statement::Sub::block object method
- Fixed PPI::Statement::Include::version
0.828 Sun Aug 8 2004
- BREAKS API COMPATIBILITY
- Changed PPI::Token::DashedBareword to PPI::Token::Quote::Dashed
- Changed PPI::Token::Bareword to PPI::Token::Word
- Vastly improved PPI::Manual
0.827 Thu Aug 5 2004
- Added PPI::Token::Seperator class ( for __DATA__ and __END__ )
- Added better Tokenizer handling of __DATA__ and __END__
- Added better Lexer handling of __DATA__ and __END__
- Fixed some version inconsistencies
0.826 Sat Jul 31 2004
- Added PPI::Element::statement object method
- Added PPI::Transform abstract class
- Sped up the 'bool' overload for PPI::Element
- Added PPI::Element::snext_sibling object method
- Added PPI::Element::sprevious_sibling object method
- Added PPI::Element::insert_before object method placeholder
- Added PPI::Element::insert_after object method placeholder
- Changed {elements} to {children} to match PPI::Node definitions
- Added PPI::Node::first_element object method
- Added PPI::Node::last_element object method
- Added PPI::Element::next_token object method
- Added PPI::Element::previous_token object method
- Added PPI::Token::Symbol::symbol object method
0.825 Mon Jul 26 2004
- Added PPI::Statement::Include::type object method
- Added PPI::Statement::Include::module object method
- Added PPI::Statement::Include::pragma object method
- Added PPI::Statement::Include::version object method
- Overloaded == as "the same object" for PPI::Element
- Overloaded eq as "->content is the same" for PPI::Element
- Overloaded bool as always true, to prevent an error
- Added PPI::Statement::Package::namespace object method
- 100% round-trip safe. What goes in, will come out.
- Reduced leaks by 95%. Process size 30meg after 5000 files.
Still some leaks remaining when Lexing errors out.
- Seperated largest Tokens into their own files.
This aligns token class structure with that of ::Statement and ::Structure
- Rewrote PPI::Node::DESTROY several times while hunting down more leaks
- Fixed Tokenizer crash on empty subroutine prototypes such as C< sub foo() {} >
- Treat unexpected braces as an implicit close, to make the lexer more resilient
- Added PPI::Statement::UnmatchedBrace (name suggested by Abhijit Menon-Sen)
to handle closing braces found at the base of a Document.
- Enabled foo'bar package notation again.
- Getting close to the first 0.900 series beta release
0.824 Wed Jul 21 2004
- Removed a 6 meg tmon.out file I accidentally bundled
0.823 Wed Jul 21 2004
- Added PPI::Document::Fragment class
- Added PPI::Node::schildren object method
- Completed compound statement parsing
- Lexer is now officially feature complete
0.822 Wed Jul 21 2004
- Filling out the API test as much as possible
- Added PPI::Statement::label object method
- Moved PPI::Structure::elements object method to PPI::Node::elements
- Re-organised statement parsing to better implement ::Compound statements
- Added PPI::Statement::Data class
- Added PPI::Statement::End class
- Re-organised the _lex_statement, _statement_continues stuff, ready for while
- Added PPI::Lexer::_lex_statement_end to handle PPI::Statement::End properly
- Organising 02_api.t was getting hard, so added implicit Module=class to Test::ClassAPI
0.821 Mon Jul 19 2004
- Cleaned up test data files directories
- Added PPI::Statement::Variable::type object method
- Added PPI::Statement::Variable::variables object method
- Added some more classes to the API testing
- Started 07_tokens.t for testing particular token classes
- Added PPI::Token::Symbol::canonical object method (and tests)
- PPI::Token::Magic now ISA PPI::Token::Symbol
- PPI::Element::clone now fixes _PARENT links for Nodes
0.820 Mon Jul 19 2004
- Added Round-Trip-Safe testing for all PPI files
- Added PPI::Node::find_any object method
- Added PPI::Node::contains object method
- Continuing the never ending addition of tests
- Structure open and close brace tokens now see the Structure as their parent
- Removed the sample application, to streamline the core install
- Removed dependencies for the sample application
- Removed custom META.yml, as now no longer needed
0.819 Mon Jul 14 2004
- Many parts of PPI are VASTLY changed in this revision
- Breaks API compatibility heavily
- Adds dependency on List::MoreUtils
- Added PPI::Lexer support for CHECK blocks
- Added PPI::Document::load method
- Added PPI::Document::save method
- Added PPI::Document::index_locations method
- Added PPI::Document::flush_locations method
- Added PPI::Element::top method
- Added PPI::Element::document method
- Renamed PPI::Element::extract -> PPI::Element::remove
- Added test script for element-y stuff
- Optimisation across the board using List::Any
- Added PPI::Node::first_child method
- Added PPI::Node::last_child method
- Added PPI::Element::clone method
- Removed Filehandle support from PPI::Tokenizer, to allow the
ability to rollback source lines into the buffer if needed.
- Added POD documentation for PPI::Element
- Added POD documentation for PPI::Node
- Added POD documentation for PPI::Document
0.818 Mon Jul 5 2004
- Changed lib/PPI/Manual.pm to lib/PPI/Manual.pod
- Added documentation for PPI::Lexer
- Fixed the misparsing of s{//}{\}
- More clues added for deciding "slash or regex"
- Removed PPI::Batch from the default distribution
- Replaced File::Flat with File::Slurp to reduce dependencies
0.817 Thu Jul 1 2004
- Fixed the misparsing of $#{ }
- Changed PPI::ParentElement to PPI::Node and moved it to it's own file
- Changed PPI::Common to PPI::Base
- Fixed PPI::Node::find
- Added PPI::Node::prune
- Started to add a little more class structure documentation
- Tried to make the DESTROY sequence of events work better
0.816 Tue Jun 29 2004
- Solved the "last token in file parses wrong" bug
0.815 Sun Jun 27 2004
- Fixed a bug with the detection of @- and @+
- Added support for @*
- Added missing classmap entry for ^ to ::Token::WhiteSpace
- Added support for arcane "foo"x10 idiosyncracy
0.814 Sat Jun 26 2004
- Added the PPI tester, a desktop-based interactive debugger, which
should greatly accelerate finding and fixing both ::Tokenizer
and ::Lexer bugs. This will probably end up as a seperate
distribution though, as it has a dependency on wxPerl.
- Fixed the misparsing of Foo::Bar::Baz
- Fixed the misparsing of *100
- Fixed the misparsing of Class::->method properly, or rather Foo::
- Tokenizer correctly identifies labels
- Changed PPI::Statement::Flow to PPI::Statement::Compound
- Removed the extra null whitespace token appearing after a bareword
at the end of a file.
- -X operator are recognised correctly, although not at end of file
- Lexer detects subroutine and if () statement ends correctly
0.813 Sat Jun 26 2004
- PPI::Lexer is now structurally complete
0.812 Tue Jun 22 2004
- No changes to PPI itself.
- With the addition of Test::ClassAPI 'complete' support,
upgraded 02_api.t to use it. Fixed a few small house-keeping bugs.
0.811 Mon Jun 21 2004
- Added support for subroutine attributes
- Fixed some problems with anonymous subroutines and prototypes
- $#$foo parses as (Cast,Symbol) now, not (Magic,Symbol)
0.810 Mon Jun 14 2004
- Recognise the _ magic filehandle
0.809 Sat Apr 17 2004
- No changes to PPI itself.
Set the correct number of tests to match changes to Test::ClassAPI
0.808 Sat Apr 17 2004
- No changes to PPI itself.
Upgraded 02_api.t to match changes to Test::ClassAPI
0.807 Sat Apr 3 2004
- Added a manual META.yml file to stop the bundled private AppLib
library from being indexed by CPAN
0.806 Mon Mar 22 2004
- The $} magic variable is now supported
- Fixed a "tight sub property" bug ( sub foo:lvalue )
0.805 Sun Sep 28 2003
- The maximum line length regressed, reseting it to 5000.
- In PPI::Format::HTML, not any parsing error causing a
premature end of tokenizer by adding it in a comment at
the end of the file.
0.804 Sat Sep 06 2003
- Statement and Structure resolution preliminarily work.
Some basic types of statements and structures are identified.
- PPI::Format::Apache has been seperated into a different module
0.803 Sat Sep 06 2003
- Added very long line protection support.
Maximum line length is now 5000.
- Added bug fixes to the Lexer so that block tree building works
mostly OK again, without adding broken duplicate tokens.
- Added the PPI::Lexer::Dump module, to do Lexer object dumps.
0.802 Sat Aug 23 2003
- PPI::Format::HTML sends the correct content headers
0.801 Fri Aug 22 2003
- Moved to a new numbering scheme to get more room before 1.0
- Always fully load when called under mod_perl
- Add mod_perl hook to PPI::Format::HTML
0.8 Fixes to the quote parsing engine
0.7 Fixed some minor bugs
0.6 Fixed POD, fixed version number, included $'a as a symbol
0.5 Missing
0.4 Mon Dec 23 10:24:21
- Some more minor parsing fixes in Tokenizer
- Completely changed the API from doThis to do_this style
- Changed API to indicate private methods properly
0.3 Tue Dec 17 10:29:27
- Restructured a little bit
- Fixed some mis-parsing cases
0.2 Unknown
- Added test script
0.1 Thu Dec 06 16:50:23 2002
- original version