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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1624
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
1 " Vim syntax file
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
2 " Language: generic git output
2034
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
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
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
5
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
6 if exists("b:current_syntax")
2202
f7579a31705c Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2034
diff changeset
7 finish
1624
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
8 endif
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
9
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
10 syn case match
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
11 syn sync minlines=50
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
12
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
13 syn include @gitDiff syntax/diff.vim
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
14
27036
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
15 syn region gitHead start=/\%^\%(tag \|tree \|object \)\@=/ end=/^$/ contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
16 syn region gitHead start=/\%(^commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/ contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
17 " git log --oneline
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
18 " minimize false positives by verifying contents of buffer
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
19 if getline(1) =~# '^\x\{7,\} ' && getline('$') =~# '^\x\{7,\} '
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
20 syn match gitHashAbbrev /^\x\{7,\} \@=/ contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
21 elseif getline(1) =~# '^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \x\{7,\} '
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
22 syn match gitHashAbbrev /^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \zs\x\{7,\} \@=/ contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
23 endif
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
24 " git log --graph
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
25 syn region gitGraph start=/\%(^[|\/\\_ ]*\*[|\/\\_ ]\{-\} commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^\%([|\/\\_ ]*$\)\@=/ contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
26 " git blame --porcelain
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
27 syn region gitHead start=/\%(^\x\{40,\} \d\+ \d\+\%( \d\+\)\=$\)\@=/ end=/^\t\@=/ contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
28 " git ls-tree
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
29 syn match gitMode /^\d\{6\}\%( \%(blob\|tree\) \x\{4,\}\t\)\@=/ nextgroup=gitType skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
30 " git ls-files --stage
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
31 syn match gitMode /^\d\{6\}\%( \x\{4,\} [0-3]\t\)\@=/ nextgroup=gitHashStage skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
32 " .git/HEAD, .git/refs/
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
33 syn match gitKeyword /\%^ref: \@=/ nextgroup=gitReference skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
34 syn match gitHash /\%^\x\{40,}\%$/ skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
35 " .git/logs/
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
36 syn match gitReflog /^\x\{40,\} \x\{40,\} .\{-\}\d\+\s-\d\{4\}\t.*/ skipwhite contains=@NoSpell,gitReflogOld
1624
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
37
2034
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
38 syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
39 syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
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
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
42 syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
43 syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge
27036
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
44 syn match gitDiffAdded "{+[^}]*+}" contained containedin=gitDiff
2034
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
45 syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge
27036
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
46 syn match gitDiffRemoved "\[-[^]]*-\]" contained containedin=gitDiff
1624
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
47
27036
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
48 syn match gitKeyword /^commit \@=/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
49 syn match gitKeyword /^\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitHead nextgroup=gitHash skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
50 syn match gitKeyword /^Merge:/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
51 syn match gitIdentityKeyword /^\%(author\|committer\|tagger\) \@=/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
52 syn match gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
53 syn match gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
54
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
55 syn match gitKeyword /^[*|\/\\_ ]\+\zscommit \@=/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
56 syn match gitKeyword /^[|\/\\_ ]\+\zs\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitGraph nextgroup=gitHash skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
57 syn match gitKeyword /^[|\/\\_ ]\+\zsMerge:/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
58 syn match gitIdentityKeyword /^[|\/\\_ ]\+\zs\%(author\|committer\|tagger\) \@=/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
59 syn match gitIdentityHeader /^[|\/\\_ ]\+\zs\%(Author\|Commit\|Tagger\):/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
60 syn match gitDateHeader /^[|\/\\_ ]\+\zs\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitGraph nextgroup=gitDate skipwhite contains=@NoSpell
1624
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
61
27036
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
62 syn match gitKeyword /^type \@=/ contained containedin=gitHead nextgroup=gitType skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
63 syn match gitKeyword /^\%(summary\|boundary\|filename\|\%(author\|committer\)-\%(time\|tz\)\) \@=/ contained containedin=gitHead skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
64 syn match gitKeyword /^tag \@=/ contained containedin=gitHead nextgroup=gitReference skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
65 syn match gitIdentityKeyword /^\%(author\|committer\)-mail \@=/ contained containedin=gitHead nextgroup=gitEmail skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
66 syn match gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
67 syn match gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
68 syn match gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity contains=@NoSpell
1624
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
69
27036
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
70 syn match gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
71 syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
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
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
73 syn match gitDate /-\=\d\+ [+-]\d\d\d\d\>/ contained contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
74 syn match gitDate /\<\d\+ \l\+ ago\>/ contained contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
75 syn match gitType /\<\%(tag\|commit\|tree\|blob\)\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
76 syn match gitReference /\S\+\S\@!/ contained contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
77 syn match gitHash /\<\x\{40,\}\>/ contained nextgroup=gitIdentity,gitHash skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
78 syn match gitReflogOld /^\x\{40,\} \@=/ contained nextgroup=gitReflogNew skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
79 syn match gitReflogNew /\<\x\{40,\} \@=/ contained nextgroup=gitIdentity skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
80 syn match gitHashAbbrev /\<\x\{4,\}\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
81 syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
82 syn match gitHashStage /\<\x\{4,\}\>/ contained nextgroup=gitStage skipwhite contains=@NoSpell
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
83 syn match gitStage /\<\d\t\@=/ contained contains=@NoSpell
2034
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
84
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
85
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
86 syn match gitNotesHeader /^Notes:\ze\n /
1624
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
87
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
88 hi def link gitDateHeader gitIdentityHeader
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
89 hi def link gitIdentityHeader gitIdentityKeyword
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
90 hi def link gitIdentityKeyword Label
2034
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
91 hi def link gitNotesHeader gitKeyword
1624
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
92 hi def link gitReflogHeader gitKeyword
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
93 hi def link gitKeyword Keyword
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
94 hi def link gitIdentity String
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
95 hi def link gitEmailDelimiter Delimiter
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
96 hi def link gitEmail Special
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
97 hi def link gitDate Number
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
98 hi def link gitMode Number
27036
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
99 hi def link gitHashStage gitHash
1624
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
100 hi def link gitHashAbbrev gitHash
27036
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
101 hi def link gitReflogOld gitHash
3e661b0cf500 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18818
diff changeset
102 hi def link gitReflogNew gitHash
1624
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
103 hi def link gitHash Identifier
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
104 hi def link gitReflogMiddle gitReference
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
105 hi def link gitReference Function
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
106 hi def link gitStage gitType
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
107 hi def link gitType Type
2034
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
108 hi def link gitDiffAdded diffAdded
7bc41231fbc7 Update runtime files.
Bram Moolenaar <bram@zimbu.org>
parents: 1624
diff changeset
109 hi def link gitDiffRemoved diffRemoved
1624
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
110
18ee39301b82 updated for version 7.2a
vimboss
parents:
diff changeset
111 let b:current_syntax = "git"