You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Allow path slice assignments that remove every segment - #262
path[:] = [] raises IndexError after removing the segments because Path.__setitem__ immediately indexes the first/last segment. The same operation also fails on an already empty path.
Reset the cached endpoints to None when slice assignment leaves no segments, consistently with deletion. Tests check cached length/endpoints after clearing, reuse of the emptied path, no-op assignment on an empty path, and partial/nonempty replacements.
Validation: the new tests report 2 failed / 1 passed on unchanged master, then 3 passed with the fix. The complete test directory reports 114 passed (Python 3.11 / NumPy 1.26).
AI assistance was used to investigate, implement and test this change.
Summary by CodeRabbit
Bug Fixes
Fixed empty-slice assignments so paths clear correctly without errors and their endpoints are reset.
Preserved expected behavior for partial and nonempty slice assignments.
No actionable comments were generated in the recent review.
Walkthrough
Path.__setitem__ now refreshes cached endpoints after slice assignment. It sets both endpoints to None when the path has no segments. Tests cover empty and nonempty slice assignments.
Changes: Path Slice Assignment
Layer / File(s)
Summary
Update endpoint caches after slice assignment svgpathtools/path.py, test/test_empty_slice_assignment.py
Path.__setitem__ refreshes cached endpoints from the resulting segments or clears both caches when no segments remain. Tests cover clearing and repopulating a path, empty assignment to an empty path, and partial and nonempty slice assignments.
The targeted cache update appears safe to merge; no actionable risk is established.
Pre-merge checks: 4 · 1
Failed checks: 1 warning
Check name
Status
Explanation
Resolution
Docstring Coverage
Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat…
Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed checks: 4 passed
Check name
Status
Explanation
Description Check
Check skipped - CodeRabbit’s high-level summary is enabled.
Title check
The title "Allow path slice assignments that remove every segment" matches the main change. The PR makes Path.setitem stop raising IndexError when a slice assignment removes all segments, and it r…
Linked Issues check
Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check
Check skipped because no linked issues were found for this pull request.
Full details: Title check
Explanation
The title "Allow path slice assignments that remove every segment" matches the main change. The PR makes Path.setitem stop raising IndexError when a slice assignment removes all segments, and it resets the cached _start and _end to None when the path becomes empty. The title is specific, concise, and states the primary behavior change from the developer's perspective.
Full details: Docstring Coverage
Explanation
Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 1 functions across 2 files.
Resolution
Write docstrings for the functions missing them to satisfy the coverage threshold.
Finishing Touches
Generate unit tests (beta)
Create a new PR
Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
File: No configuration file from this repository applied
Commit: Unavailable
Layers: Repository UI
Review profile: CHILL
Plan: Advanced
Run ID: 4d1834bf-ad5b-4af4-95d2-b73e3a11c536
Commits
Reviewing files that changed from the base of the PR and between 15b500e and 5899ec0.
Files selected for processing: 2
svgpathtools/path.py
test/test_empty_slice_assignment.py
Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 3 remain after this review.
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
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.
path[:] = []raisesIndexErrorafter removing the segments becausePath.__setitem__immediately indexes the first/last segment. The same operation also fails on an already empty path.Reset the cached endpoints to None when slice assignment leaves no segments, consistently with deletion. Tests check cached length/endpoints after clearing, reuse of the emptied path, no-op assignment on an empty path, and partial/nonempty replacements.
Validation: the new tests report 2 failed / 1 passed on unchanged master, then 3 passed with the fix. The complete test directory reports 114 passed (Python 3.11 / NumPy 1.26).
AI assistance was used to investigate, implement and test this change.
Summary by CodeRabbit