@@ -16,9 +16,21 @@ export type Rule =
1616 | Readonly < [ RuleConfigSeverity , RuleConfigCondition , unknown ] > ;
1717
1818/**
19- * Check if a rule definition is active
20- * @param rule to check
21- * @return if the rule definition is active
19+ * @description : rule is Disabled
20+ * @example : ruleIsDisabled([0]) => true
21+ * @example : ruleIsDisabled([2]) => false
22+ */
23+ export function ruleIsDisabled ( rule : Rule ) : rule is Readonly < [ RuleConfigSeverity . Disabled ] > {
24+ if ( rule && Array . isArray ( rule ) && rule [ 0 ] === RuleConfigSeverity . Disabled ) {
25+ return true ;
26+ }
27+ return false ;
28+ }
29+
30+ /**
31+ * @description : rule is use
32+ * @example : ruleIsActive([0]) => false
33+ * @example : ruleIsActive([2]) => true
2234 */
2335export function ruleIsActive < T extends Rule > (
2436 rule : T
@@ -30,9 +42,21 @@ export function ruleIsActive<T extends Rule>(
3042}
3143
3244/**
33- * Check if a rule definition is applicable
34- * @param rule to check
35- * @return if the rule definition is applicable
45+ * @description : rule is can ignore
46+ */
47+ export function ruleIsNotApplicable (
48+ rule : Rule
49+ ) : rule is
50+ | Readonly < [ RuleConfigSeverity , "never" ] >
51+ | Readonly < [ RuleConfigSeverity , "never" , unknown ] > {
52+ if ( rule && Array . isArray ( rule ) ) {
53+ return rule [ 1 ] === "never" ;
54+ }
55+ return false ;
56+ }
57+
58+ /**
59+ * @description : rule is effect
3660 */
3761export function ruleIsApplicable (
3862 rule : Rule
@@ -45,8 +69,20 @@ export function ruleIsApplicable(
4569 return false ;
4670}
4771
72+ export function enumRuleIsActive (
73+ rule : Rule
74+ ) : rule is Readonly < [ RuleConfigSeverity . Warning | RuleConfigSeverity . Error , "always" , string [ ] ] > {
75+ return (
76+ ruleIsActive ( rule ) && ruleIsApplicable ( rule ) && Array . isArray ( rule [ 2 ] ) && rule [ 2 ] . length > 0
77+ ) ;
78+ }
79+
80+ export function getEnumList ( rule : Rule ) : string [ ] {
81+ return Array . isArray ( rule [ 2 ] ) ? rule [ 2 ] : [ ] ;
82+ }
83+
4884/**
49- * @example : getMaxLength(rules['max-line -length'])
85+ * @example : getMaxLength(rules['max-header -length'] => 100 )
5086 */
5187export function getMaxLength ( rule ?: Rule ) : number {
5288 if ( rule && ruleIsActive ( rule ) && ruleIsApplicable ( rule ) && typeof rule [ 2 ] === "number" ) {
@@ -55,6 +91,9 @@ export function getMaxLength(rule?: Rule): number {
5591 return Infinity ;
5692}
5793
94+ /**
95+ * @example : getMinLength(rules['min-header-length'] => 2)
96+ */
5897export function getMinLength ( rule ?: Rule ) : number {
5998 if ( rule && ruleIsActive ( rule ) && ruleIsApplicable ( rule ) && typeof rule [ 2 ] === "number" ) {
6099 return rule [ 2 ] ;
@@ -109,13 +148,23 @@ export const getMaxSubjectLength = (
109148 scope : Answers [ "scope" ] ,
110149 options : CommitizenGitOptions
111150) => {
151+ let optionMaxLength = Infinity ;
152+ const maxHeaderLength = options ?. maxHeaderLength ? options ?. maxHeaderLength : Infinity ;
153+ const maxSubjectLength = options ?. maxSubjectLength ? options ?. maxSubjectLength : Infinity ;
154+ if ( options ?. maxHeaderLength === 0 || options ?. maxSubjectLength === 0 ) {
155+ return 0 ;
156+ } else if ( maxHeaderLength === Infinity ) {
157+ optionMaxLength = maxSubjectLength !== Infinity ? maxSubjectLength : Infinity ;
158+ } else {
159+ optionMaxLength = maxHeaderLength < maxSubjectLength ? maxHeaderLength : maxSubjectLength ;
160+ }
112161 return (
113- ( options ?. maxSubjectLength ? options ?. maxSubjectLength : 100 ) -
162+ optionMaxLength -
114163 ( type ?. length ? type . length : 0 ) -
115- // `: `
116- 2 -
117164 // `()`
118165 ( scope ? scope . length + 2 : 0 ) -
166+ // `: `
167+ 2 -
119168 ( options . useEmoji ? getEmojiStrLength ( options , type ) : 0 )
120169 ) ;
121170} ;
0 commit comments