docs/reference/rules.md
condition: body is in case value
rule: always
value
'lower-case'
possible values
[
"lower-case", // default
"upper-case", // UPPERCASE
"camel-case", // camelCase
"kebab-case", // kebab-case
"pascal-case", // PascalCase
"sentence-case", // Sentence case
"snake-case", // snake_case
"start-case", // Start Case
];
body is emptynevercondition: body ends with value
rule: never
value
'.'
body begins with blank linealwayscondition: body has value or less characters
rule: always
value
Infinity
condition: body lines have value or less characters, or contain a URL
rule: always
value
Infinity
condition: body has value or more characters
rule: always
value
0
header has an exclamation mark before the : marker
and a line in footer matches the regular expression ^BREAKING[ -]CHANGE:always[!NOTE]
This rule enforces that breaking changes are marked by both a
!in the header andBREAKING CHANGEin the footer. The behavior is that of an XNOR operation:
- It passes when either both are present or both are not.
- It fails when one is present and the other is not.
footer is emptyneverfooter begins with blank linealwayscondition: footer has value or less characters
rule: always
value
Infinity
condition: footer lines have value or less characters
rule: always
value
Infinity
condition: footer has value or more characters
rule: always
value
0
condition: header is in case value
rule: always
value
'lower-case'
possible values
[
"lower-case", // default
"upper-case", // UPPERCASE
"camel-case", // camelCase
"kebab-case", // kebab-case
"pascal-case", // PascalCase
"sentence-case", // Sentence case
"snake-case", // snake_case
"start-case", // Start Case
];
condition: header ends with value
rule: never
value
'.'
condition: header has value or less characters
rule: always
value
72
condition: header has value or more characters
rule: always
value
0
header must not have initial or trailing whitespacesalwaysreferences has at least one entrynevercondition: scope is in case value
rule: always
value
'lower-case'
possible values
[
"lower-case", // default
"upper-case", // UPPERCASE
"camel-case", // camelCase
"kebab-case", // kebab-case
"pascal-case", // PascalCase
"sentence-case", // Sentence case
"snake-case", // snake_case
"start-case", // Start Case
];
extended value (object based)
{
cases: ["kebab-case"],
delimiters: ["/"]
}
cases — list of allowed case formatsdelimiters — optional list of delimiter strings used to split multi-segment scopes (default: ["/", "\", ","])condition: all delimiters found in scope must match value
rule: always
value
["/", "\", ","]
[!NOTE]
- When using this rule together with scope-enum or scope-case, make sure to provide the same
delimitersconfiguration in those rules as well. Otherwise scope parsing may become inconsistent.
scope is emptynevercondition: scope is found in value
rule: always
value
[]
extended value (object based)
{
scopes: ["foo", "bar"],
delimiters: ["/"]
}
scopes — list of allowed scope valuesdelimiters — optional list of delimiter strings used to split multi-segment scopes (default: ["/", "\", ","])[!NOTE]
- This rule always passes if no scopes are provided in the message or the value > is an empty array.
- When set to
always, all message scopes must be found in the value.- When set to
never, none of the message scopes can be found in the value.
condition: scope has value or less characters
rule: always
value
Infinity
condition: scope has value or more characters
rule: always
value
0
condition: message has value
rule: always
value
'Signed-off-by:'
condition: subject is in case value
rule: never
value
["sentence-case", "start-case", "pascal-case", "upper-case"];
possible values
[
"lower-case", // lower case
"upper-case", // UPPERCASE
"camel-case", // camelCase
"kebab-case", // kebab-case
"pascal-case", // PascalCase
"sentence-case", // Sentence case
"snake-case", // snake_case
"start-case", // Start Case
];
subject is emptyneversubject has exclamation before the : markernevercondition: subject ends with value
rule: never
value
'.'
condition: subject has value or less characters
rule: always
value
Infinity
condition: subject has value or more characters
rule: always
value
0
condition: message has trailer value
rule: always
value
'Signed-off-by:'
description: type is in case value
rule: always
value
'lower-case'
possible values
[
"lower-case", // default
"upper-case", // UPPERCASE
"camel-case", // camelCase
"kebab-case", // kebab-case
"pascal-case", // PascalCase
"sentence-case", // Sentence case
"snake-case", // snake_case
"start-case", // Start Case
];
type is emptynevercondition: type is found in value
rule: always
value
[
"build",
"chore",
"ci",
"docs",
"feat",
"fix",
"perf",
"refactor",
"revert",
"style",
"test",
];
condition: type has value or less characters
rule: always
value
Infinity
condition: type has value or more characters
rule: always
value
0