Potential Duplicate Pull Requests
A review of the 112 open PRs identified the following clusters where PRs appear to address the same problem, modify the same files, or would conflict with each other. Consolidating these would reduce review burden and prevent merge conflicts.
1. UTF-8 decoding when use utf8 is present (EXACT DUPLICATE)
Near-identical titles, same files changed (Tokenizer.pm, t/14_charsets.t), same approach (utf8::decode() in Tokenizer::new()). The only difference is which issue each references. One should be closed in favor of the other.
2. Encoding support for PPI::Document->new
Both add an encoding() accessor and modify Document.pm. They solve the same problem with different API designs. At most one approach should be adopted.
3. Whitespace between sigil and identifier
Both modify Token/Symbol.pm and Token/Unknown.pm. Same problem, likely same fix.
4. cmp_document functions
Both add document comparison. PR #146 is a much larger changeset that appears to subsume #49.
5. Minimum Perl version bump / IO::String removal
All three modify dist.ini, Token/Data.pm, and test files. PR #393 (5.008001) supersedes #362 (5.008). PR #386's IO::String removal is a subset of #362's changes.
6. PPI::Exception caller tracking
Both fix the same bug in Exception.pm (instance throw() not recording callers). #391 adds more comprehensive tests. One subsumes the other.
7. Element->namespace() and package block handling
All three modify Statement/Package.pm. PRs #399 and #414 both implement Element->namespace() and Package->block(). PR #414 appears to be the most complete, likely subsuming both #399 and #376.
8. DESTROY cleanup safety
Both modify Node.pm and address DESTROY-related corruption. Different approaches to the same root problem — will likely conflict.
9. __DATA__ / __END__ / Pod parsing
All three address how the tokenizer handles __DATA__ sections. PRs #349 and #439 both modify Token/Data.pm and deal with Pod extraction from data sections. These will conflict with each other.
10. Extensibility / Plugin mechanisms
All three modify Lexer.pm and add different extension mechanisms. These are competing designs for the same need — at most one should be adopted, or they need to be reconciled into a unified approach.
11. insert_before / insert_after improvements
Five PRs touching the same insert API surface. PR #151 is a massive changeset. PR #392 extends the API. PRs #367 and #419 are docs-only. These need coordinated review — merging any one will likely break the others.
Other related (but probably distinct) PRs worth noting
These groups touch related areas but appear to solve different sub-problems. Flagging them in case they conflict at the code level:
🤖 Generated by Kōan from PR audit session
Potential Duplicate Pull Requests
A review of the 112 open PRs identified the following clusters where PRs appear to address the same problem, modify the same files, or would conflict with each other. Consolidating these would reduce review burden and prevent merge conflicts.
1. UTF-8 decoding when
use utf8is present (EXACT DUPLICATE)Near-identical titles, same files changed (
Tokenizer.pm,t/14_charsets.t), same approach (utf8::decode()inTokenizer::new()). The only difference is which issue each references. One should be closed in favor of the other.2. Encoding support for
PPI::Document->newencodingparameter toDocument->new()new_from_string,new_from_file,new_from_handle) with encoding supportBoth add an
encoding()accessor and modifyDocument.pm. They solve the same problem with different API designs. At most one approach should be adopted.3. Whitespace between sigil and identifier
Both modify
Token/Symbol.pmandToken/Unknown.pm. Same problem, likely same fix.4.
cmp_documentfunctionsBoth add document comparison. PR #146 is a much larger changeset that appears to subsume #49.
5. Minimum Perl version bump / IO::String removal
All three modify
dist.ini,Token/Data.pm, and test files. PR #393 (5.008001) supersedes #362 (5.008). PR #386's IO::String removal is a subset of #362's changes.6.
PPI::Exceptioncaller trackingBoth fix the same bug in
Exception.pm(instancethrow()not recording callers). #391 adds more comprehensive tests. One subsumes the other.7.
Element->namespace()and package block handlingAll three modify
Statement/Package.pm. PRs #399 and #414 both implementElement->namespace()andPackage->block(). PR #414 appears to be the most complete, likely subsuming both #399 and #376.8. DESTROY cleanup safety
Both modify
Node.pmand address DESTROY-related corruption. Different approaches to the same root problem — will likely conflict.9.
__DATA__/__END__/ Pod parsingAll three address how the tokenizer handles
__DATA__sections. PRs #349 and #439 both modifyToken/Data.pmand deal with Pod extraction from data sections. These will conflict with each other.10. Extensibility / Plugin mechanisms
All three modify
Lexer.pmand add different extension mechanisms. These are competing designs for the same need — at most one should be adopted, or they need to be reconciled into a unified approach.11.
insert_before/insert_afterimprovementsFive PRs touching the same insert API surface. PR #151 is a massive changeset. PR #392 extends the API. PRs #367 and #419 are docs-only. These need coordinated review — merging any one will likely break the others.
Other related (but probably distinct) PRs worth noting
These groups touch related areas but appear to solve different sub-problems. Flagging them in case they conflict at the code level:
Document.pmandt/29_logical_filename.t🤖 Generated by Kōan from PR audit session