Skip to content

Conversation

@jpenilla
Copy link
Member

@jpenilla jpenilla commented Nov 23, 2025

closes #35

@github-actions
Copy link

github-actions bot commented Nov 23, 2025

built with Refined Cloudflare Pages Action

⚡ Cloudflare Pages Deployment

Name Status Preview Last Commit
diffs ✅ Ready (View Log) Visit Preview 5b69246

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements functionality to allow selecting patch line ranges and linking to them via URL hashes. The main changes include migrating from Svelte actions to attachments, adding selection state management, and implementing URL-based navigation to specific file lines.

  • Migrates event handlers from svelte/action to svelte/attachments API
  • Implements line selection functionality with URL hash support for linking
  • Adds visual indicators for selected lines in the diff viewer

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
Sidebar.svelte Migrates focusFileDoubleClick from Action to Attachment; adds selection clearing on file double-click
FileHeader.svelte Adds selectHeader function to set file selection when clicking file headers
DiffWrapper.svelte Binds selection state between viewer and ConciseDiffView component
util.ts Converts resizeObserver from Action to Attachment pattern
open-diff-dialog.svelte.ts Adds linkable flag to diff metadata; preserves URL hash in navigation
diff-viewer.svelte.ts Implements selection state management, URL hash parsing/writing, and jump-to-selection logic
ShikiThemeSelector.svelte Updates resizeObserver usage to new Attachment API
concise-diff-view.svelte.ts Adds LineRef types, selection logic, line reference parsing/writing functions
ConciseDiffView.svelte Implements selection UI with visual indicators and jump-to-selection behavior

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +1317 to +1323
const newStartIdx = lineIdx + 1;
if (newStartIdx > existingSelection.end.idx) {
// Selection would be empty, clear it
this.props.selection.current = undefined;
return;
}
const newStartLine = hunk.lines[newStartIdx];
Copy link

Copilot AI Nov 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Potential array out-of-bounds access. While line 1318 checks if newStartIdx > existingSelection.end.idx, it doesn't validate that newStartIdx is within the bounds of hunk.lines. Add a check: if (newStartIdx >= hunk.lines.length) before accessing hunk.lines[newStartIdx].

Copilot uses AI. Check for mistakes.
Comment on lines +1334 to +1340
const newEndIdx = lineIdx - 1;
if (newEndIdx < existingSelection.start.idx) {
// Selection would be empty, clear it
this.props.selection.current = undefined;
return;
}
const newEndLine = hunk.lines[newEndIdx];
Copy link

Copilot AI Nov 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Potential array out-of-bounds access. While line 1335 checks if newEndIdx < existingSelection.start.idx, it doesn't validate that newEndIdx >= 0. If lineIdx is 0, newEndIdx would be -1, causing an invalid array access. Add a check: if (newEndIdx < 0) before accessing hunk.lines[newEndIdx].

Copilot uses AI. Check for mistakes.
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.

Share diff with lines marked

2 participants