Skip to content

Conversation

@mrsdizzie
Copy link
Member

For diffs we first syntax highlight the before and after line then use a 3rd party diff library to find the difference in them and create a substring based on that, which we then highlight a 2nd time to show the specific difference within a line that has changed. In a specific case if the diffrence also changes the chroma class it will split in the middle of the attr and cause broken HTML:

<span class="nx">oldtext<span>
<span class="k">var newtext<span>

Will then split on

<span class="

Where the difference starts, and produce something broken like:

<span class="<span class="removed-code">nx"oldtext</span></span

Fix that by detecting when it happens and putting the HTML back together properly before highlighting the added/deleted code.

Fixes #12235

For diffs we first syntax highlight the before and after line then use a 3rd party diff library to find the difference in them and create a substring based on that, which we then highlight a 2nd time to show the specific difference within a line that has changed. In a specific case if the diffrence also changes the chroma class it will split in the middle of the attr and cause broken HTML:

```
<span class="nx">oldtext<span>
<span class="k">var newtext<span>
```

Will then split on

```
<span class="
```

Where the difference starts, and produce something broken like:

```
<span class="<span class="removed-code">nx"oldtext</span></span

```

Fix that by detecting when it happens and putting the HTML back together properly before highlighting the added/deleted code.

Fixes go-gitea#12235
@lafriks lafriks added this to the 1.13.0 milestone Jul 13, 2020
@lafriks lafriks added the skip-changelog This PR is irrelevant for the (next) changelog, for example bug fixes for unreleased features. label Jul 13, 2020
@silverwind
Copy link
Member

silverwind commented Jul 13, 2020

Not totally resolved it seems. Check line 518,519,707,708,709 of this commit.

image

image

@GiteaBot GiteaBot added the lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. label Jul 13, 2020
@mrsdizzie
Copy link
Member Author

Ah I see same problem can happen for any diff section not just equal part -- will fix

@mrsdizzie
Copy link
Member Author

Think it should work OK now. Thanks for finding all these broken cases

@GiteaBot GiteaBot added lgtm/need 1 This PR needs approval from one additional maintainer to be merged. and removed lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. labels Jul 14, 2020
@GiteaBot GiteaBot added lgtm/done This PR has enough approvals to get merged. There are no important open reservations anymore. and removed lgtm/need 1 This PR needs approval from one additional maintainer to be merged. labels Jul 16, 2020
@lafriks lafriks merged commit 9542b73 into go-gitea:master Jul 16, 2020
mrsdizzie added a commit to mrsdizzie/gitea that referenced this pull request Aug 7, 2020
Make previous fix from go-gitea#12238 more robust since I saw a case where a diff changes only a single character in a chroma class instead of the entire thing. Add another more complicated test to match.
zeripath pushed a commit that referenced this pull request Aug 8, 2020
Make previous fix from #12238 more robust since I saw a case where a diff changes only a single character in a chroma class instead of the entire thing. Add another more complicated test to match.

Co-authored-by: Lauris BH <lauris@nix.lv>
@go-gitea go-gitea locked and limited conversation to collaborators Nov 24, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

lgtm/done This PR has enough approvals to get merged. There are no important open reservations anymore. skip-changelog This PR is irrelevant for the (next) changelog, for example bug fixes for unreleased features. type/bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Diff syntax highlighting HTML spilling into content

4 participants