mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
ci(lintcommit): allow colon not followed by space in description
(cherry picked from commit 6ddb775a2e
)
This commit is contained in:
parent
95bead71b3
commit
3a80c6ad18
@ -51,7 +51,7 @@ local function validate_commit(commit_message)
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
local commit_split = vim.split(commit_message, ":")
|
local commit_split = vim.split(commit_message, ":", {plain = true})
|
||||||
-- Return nil if the type is vim-patch since most of the normal rules don't
|
-- Return nil if the type is vim-patch since most of the normal rules don't
|
||||||
-- apply.
|
-- apply.
|
||||||
if commit_split[1] == "vim-patch" then
|
if commit_split[1] == "vim-patch" then
|
||||||
@ -63,13 +63,22 @@ local function validate_commit(commit_message)
|
|||||||
return [[Commit message is too long, a maximum of 80 characters is allowed.]]
|
return [[Commit message is too long, a maximum of 80 characters is allowed.]]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local before_colon = commit_split[1]
|
||||||
|
|
||||||
if vim.tbl_count(commit_split) < 2 then
|
local after_idx = 2
|
||||||
|
if before_colon:match('^[^%(]*%([^%)]*$') then
|
||||||
|
-- Need to find the end of commit scope when commit scope contains colons.
|
||||||
|
while after_idx <= vim.tbl_count(commit_split) do
|
||||||
|
after_idx = after_idx + 1
|
||||||
|
if commit_split[after_idx - 1]:find(')') then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if after_idx > vim.tbl_count(commit_split) then
|
||||||
return [[Commit message does not include colons.]]
|
return [[Commit message does not include colons.]]
|
||||||
end
|
end
|
||||||
|
local after_colon = commit_split[after_idx]
|
||||||
local before_colon = commit_split[1]
|
|
||||||
local after_colon = commit_split[#commit_split]
|
|
||||||
|
|
||||||
-- Check if commit introduces a breaking change.
|
-- Check if commit introduces a breaking change.
|
||||||
if vim.endswith(before_colon, "!") then
|
if vim.endswith(before_colon, "!") then
|
||||||
@ -77,7 +86,7 @@ local function validate_commit(commit_message)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Check if type is correct
|
-- Check if type is correct
|
||||||
local type = vim.split(before_colon, "%(")[1]
|
local type = vim.split(before_colon, "(", {plain = true})[1]
|
||||||
local allowed_types = {'build', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'test', 'vim-patch'}
|
local allowed_types = {'build', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'test', 'vim-patch'}
|
||||||
if not vim.tbl_contains(allowed_types, type) then
|
if not vim.tbl_contains(allowed_types, type) then
|
||||||
return string.format(
|
return string.format(
|
||||||
@ -234,7 +243,16 @@ function M._test()
|
|||||||
['ci: Capitalized first word'] = false,
|
['ci: Capitalized first word'] = false,
|
||||||
['ci: UPPER_CASE First Word'] = true,
|
['ci: UPPER_CASE First Word'] = true,
|
||||||
['unknown: using unknown type'] = false,
|
['unknown: using unknown type'] = false,
|
||||||
|
['feat: foo:bar'] = true,
|
||||||
|
['feat(something): foo:bar'] = true,
|
||||||
['feat(:grep): read from pipe'] = true,
|
['feat(:grep): read from pipe'] = true,
|
||||||
|
['feat(:grep/:make): read from pipe'] = true,
|
||||||
|
['feat(:grep): foo:bar'] = true,
|
||||||
|
['feat(:grep/:make): foo:bar'] = true,
|
||||||
|
['feat(:grep)'] = false,
|
||||||
|
['feat(:grep/:make)'] = false,
|
||||||
|
['feat(:grep'] = false,
|
||||||
|
['feat(:grep/:make'] = false,
|
||||||
['ci: you\'re saying this commit message just goes on and on and on and on and on and on for way too long?'] = false,
|
['ci: you\'re saying this commit message just goes on and on and on and on and on and on for way too long?'] = false,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user