Repository navigation
Stop inst() deep-copying the match set it replaces - #157
Open
gravitypdf-bot wants to merge 4 commits into
Open
gravitypdf-bot wants to merge 4 commits into
gravitypdf-bot wants to merge 4 commits into
Conversation
inst() cloned the object, and __clone() deep-copied every match with cloneNode(true), only for inst() to swap the match set straight after. Each find() from the root copied the whole document, and every chained call copied whatever was in hand. The copies also became the previous match set, so end() returned detached copies rather than the nodes the query started from. inst() now marks the clone as shallow so __clone() skips the copy; clone $qp still deep-copies the matches. Fixes #137 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 26, 2026
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #157 +/- ##
============================================
+ Coverage 90.69% 91.24% +0.55%
- Complexity 1424 1442 +18
============================================
Files 25 26 +1
Lines 3170 3188 +18
============================================
+ Hits 2875 2909 +34
+ Misses 295 279 -16 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #137.
Every method that returns a new object (
find(),children(),filter(),eq(), …) went throughinst(), which usedclone $this.__clone()deep-copied every node in the match set, andinst()then threw the copies away.inst()now sets a private flag that makes__clone()skip the copy.clone $qpstill deep-copies, as documented.On a 50,000-paragraph document, timings on PHP 8.5:
children()from the rootfind('#nope')clone $qpSide effect:
end()now returns the original document nodes. Before, it returned the detached copies that__clone()had made.Tests
tests/Issues/Issue137Test.phpchecks that:end()returns the original nodes afterfind(),children(),filter(),eq()andnot().end()reach the document.clonestill deep-copies.Every PR in this set adds its CHANGELOG line at the end of
# Unreleased changes, so each one after the first needs a one-line conflict resolved there.🤖 Generated with Claude Code