Skip to content

Allow path slice assignments that remove every segment - #262

Open
xixihaha-ha wants to merge 1 commit into
mathandy:masterfrom
xixihaha-ha:fix/svgpath-slice-20261104
Open

xixihaha-ha wants to merge 1 commit into
mathandy:masterfrom
xixihaha-ha:fix/svgpath-slice-20261104

Conversation

@xixihaha-ha

@xixihaha-ha xixihaha-ha commented Nov 4, 2026 •

Copy link
Copy Markdown

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.

@coderabbitai

coderabbitai Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

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.

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Merge Risk: Minimal · up to 5899e

The targeted cache update appears safe to merge; no actionable risk is established.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning 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 Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed 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 Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed 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.

Share
Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant