Mercurial > vim
annotate runtime/syntax/git.vim @ 34379:37b4c89ba420 v9.1.0116
patch 9.1.0116: win_split_ins may not check available room
Commit: https://github.com/vim/vim/commit/0fd44a5ad81ade342cb54d8984965bdedd2272c8
Author: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Date: Tue Feb 20 20:28:15 2024 +0100
patch 9.1.0116: win_split_ins may not check available room
Problem: win_split_ins has no check for E36 when moving an existing
window
Solution: check for room and fix the issues in f_win_splitmove()
(Sean Dewar)
win_split_ins has no check for E36 when moving an existing window,
allowing for layouts with many overlapping zero-sized windows to be
created (which may also cause drawing issues with tablines and such).
f_win_splitmove also has some bugs.
So check for room and fix the issues in f_win_splitmove. Handle failure
in the two relevant win_split_ins callers by restoring the original
layout, and factor the common logic into win_splitmove.
Don't check for room when opening an autocommand window, as it's a
temporary window that's rarely interacted with or drawn anyhow, and is
rather important for some autocommands.
Issues fixed in f_win_splitmove:
- Error if splitting is disallowed.
- Fix heap-use-after-frees if autocommands fired from switching to "targetwin"
close "wp" or "oldwin".
- Fix splitting the wrong window if autocommands fired from switching to
"targetwin" switch to a different window.
- Ensure -1 is returned for all errors.
Also handle allocation failure a bit earlier in make_snapshot (callers,
except win_splitmove, don't really care if a snapshot can't be made, so
just ignore the return value).
Note: Test_smoothscroll_in_zero_width_window failed after these changes with
E36, as it was using the previous behaviour to create a zero-width window.
I've fixed the test such that it fails with UBSAN as expected when v9.0.1367 is
reverted (and simplified it too).
related: #14042
Signed-off-by: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 20 Feb 2024 22:30:04 +0100 |
parents | efb7fc51cc5f |
children |
rev | line source |
---|---|
1624 | 1 " Vim syntax file |
2 " Language: generic git output | |
2034 | 3 " Maintainer: Tim Pope <vimNOSPAM@tpope.org> |
34038
efb7fc51cc5f
runtime(git): Make diffs foldable
Christian Brabandt <cb@256bit.org>
parents:
27036
diff
changeset
|
4 " Last Change: 2023 Dec 28 |
1624 | 5 |
6 if exists("b:current_syntax") | |
2202 | 7 finish |
1624 | 8 endif |
9 | |
10 syn case match | |
11 syn sync minlines=50 | |
12 | |
13 syn include @gitDiff syntax/diff.vim | |
14 | |
27036 | 15 syn region gitHead start=/\%^\%(tag \|tree \|object \)\@=/ end=/^$/ contains=@NoSpell |
16 syn region gitHead start=/\%(^commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/ contains=@NoSpell | |
17 " git log --oneline | |
18 " minimize false positives by verifying contents of buffer | |
19 if getline(1) =~# '^\x\{7,\} ' && getline('$') =~# '^\x\{7,\} ' | |
20 syn match gitHashAbbrev /^\x\{7,\} \@=/ contains=@NoSpell | |
21 elseif getline(1) =~# '^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \x\{7,\} ' | |
22 syn match gitHashAbbrev /^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \zs\x\{7,\} \@=/ contains=@NoSpell | |
23 endif | |
24 " git log --graph | |
25 syn region gitGraph start=/\%(^[|\/\\_ ]*\*[|\/\\_ ]\{-\} commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^\%([|\/\\_ ]*$\)\@=/ contains=@NoSpell | |
26 " git blame --porcelain | |
27 syn region gitHead start=/\%(^\x\{40,\} \d\+ \d\+\%( \d\+\)\=$\)\@=/ end=/^\t\@=/ contains=@NoSpell | |
28 " git ls-tree | |
29 syn match gitMode /^\d\{6\}\%( \%(blob\|tree\) \x\{4,\}\t\)\@=/ nextgroup=gitType skipwhite contains=@NoSpell | |
30 " git ls-files --stage | |
31 syn match gitMode /^\d\{6\}\%( \x\{4,\} [0-3]\t\)\@=/ nextgroup=gitHashStage skipwhite contains=@NoSpell | |
32 " .git/HEAD, .git/refs/ | |
33 syn match gitKeyword /\%^ref: \@=/ nextgroup=gitReference skipwhite contains=@NoSpell | |
34 syn match gitHash /\%^\x\{40,}\%$/ skipwhite contains=@NoSpell | |
35 " .git/logs/ | |
36 syn match gitReflog /^\x\{40,\} \x\{40,\} .\{-\}\d\+\s-\d\{4\}\t.*/ skipwhite contains=@NoSpell,gitReflogOld | |
1624 | 37 |
2034 | 38 syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold |
39 syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff | |
40 | |
34038
efb7fc51cc5f
runtime(git): Make diffs foldable
Christian Brabandt <cb@256bit.org>
parents:
27036
diff
changeset
|
41 syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold |
2034 | 42 syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff |
43 syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge | |
27036 | 44 syn match gitDiffAdded "{+[^}]*+}" contained containedin=gitDiff |
2034 | 45 syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge |
27036 | 46 syn match gitDiffRemoved "\[-[^]]*-\]" contained containedin=gitDiff |
1624 | 47 |
27036 | 48 syn match gitKeyword /^commit \@=/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell |
49 syn match gitKeyword /^\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitHead nextgroup=gitHash skipwhite contains=@NoSpell | |
50 syn match gitKeyword /^Merge:/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell | |
51 syn match gitIdentityKeyword /^\%(author\|committer\|tagger\) \@=/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell | |
52 syn match gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell | |
53 syn match gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite contains=@NoSpell | |
54 | |
55 syn match gitKeyword /^[*|\/\\_ ]\+\zscommit \@=/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell | |
56 syn match gitKeyword /^[|\/\\_ ]\+\zs\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitGraph nextgroup=gitHash skipwhite contains=@NoSpell | |
57 syn match gitKeyword /^[|\/\\_ ]\+\zsMerge:/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell | |
58 syn match gitIdentityKeyword /^[|\/\\_ ]\+\zs\%(author\|committer\|tagger\) \@=/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell | |
59 syn match gitIdentityHeader /^[|\/\\_ ]\+\zs\%(Author\|Commit\|Tagger\):/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell | |
60 syn match gitDateHeader /^[|\/\\_ ]\+\zs\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitGraph nextgroup=gitDate skipwhite contains=@NoSpell | |
1624 | 61 |
27036 | 62 syn match gitKeyword /^type \@=/ contained containedin=gitHead nextgroup=gitType skipwhite contains=@NoSpell |
63 syn match gitKeyword /^\%(summary\|boundary\|filename\|\%(author\|committer\)-\%(time\|tz\)\) \@=/ contained containedin=gitHead skipwhite contains=@NoSpell | |
64 syn match gitKeyword /^tag \@=/ contained containedin=gitHead nextgroup=gitReference skipwhite contains=@NoSpell | |
65 syn match gitIdentityKeyword /^\%(author\|committer\)-mail \@=/ contained containedin=gitHead nextgroup=gitEmail skipwhite contains=@NoSpell | |
66 syn match gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite contains=@NoSpell | |
67 syn match gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite contains=@NoSpell | |
68 syn match gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity contains=@NoSpell | |
1624 | 69 |
27036 | 70 syn match gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite contains=@NoSpell |
71 syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity contains=@NoSpell | |
72 syn match gitDate /\<\u\l\l \u\l\l \d\=\d \d\d:\d\d:\d\d \d\d\d\d [+-]\d\d\d\d/ contained contains=@NoSpell | |
73 syn match gitDate /-\=\d\+ [+-]\d\d\d\d\>/ contained contains=@NoSpell | |
74 syn match gitDate /\<\d\+ \l\+ ago\>/ contained contains=@NoSpell | |
75 syn match gitType /\<\%(tag\|commit\|tree\|blob\)\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell | |
76 syn match gitReference /\S\+\S\@!/ contained contains=@NoSpell | |
77 syn match gitHash /\<\x\{40,\}\>/ contained nextgroup=gitIdentity,gitHash skipwhite contains=@NoSpell | |
78 syn match gitReflogOld /^\x\{40,\} \@=/ contained nextgroup=gitReflogNew skipwhite contains=@NoSpell | |
79 syn match gitReflogNew /\<\x\{40,\} \@=/ contained nextgroup=gitIdentity skipwhite contains=@NoSpell | |
80 syn match gitHashAbbrev /\<\x\{4,\}\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell | |
81 syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell | |
82 syn match gitHashStage /\<\x\{4,\}\>/ contained nextgroup=gitStage skipwhite contains=@NoSpell | |
83 syn match gitStage /\<\d\t\@=/ contained contains=@NoSpell | |
2034 | 84 |
85 | |
86 syn match gitNotesHeader /^Notes:\ze\n / | |
1624 | 87 |
88 hi def link gitDateHeader gitIdentityHeader | |
89 hi def link gitIdentityHeader gitIdentityKeyword | |
90 hi def link gitIdentityKeyword Label | |
2034 | 91 hi def link gitNotesHeader gitKeyword |
1624 | 92 hi def link gitReflogHeader gitKeyword |
93 hi def link gitKeyword Keyword | |
94 hi def link gitIdentity String | |
95 hi def link gitEmailDelimiter Delimiter | |
96 hi def link gitEmail Special | |
97 hi def link gitDate Number | |
98 hi def link gitMode Number | |
27036 | 99 hi def link gitHashStage gitHash |
1624 | 100 hi def link gitHashAbbrev gitHash |
27036 | 101 hi def link gitReflogOld gitHash |
102 hi def link gitReflogNew gitHash | |
1624 | 103 hi def link gitHash Identifier |
104 hi def link gitReflogMiddle gitReference | |
105 hi def link gitReference Function | |
106 hi def link gitStage gitType | |
107 hi def link gitType Type | |
2034 | 108 hi def link gitDiffAdded diffAdded |
109 hi def link gitDiffRemoved diffRemoved | |
1624 | 110 |
111 let b:current_syntax = "git" |