1
1
import 'types/commit.dart' ;
2
+ import 'types/parser.dart' ;
2
3
3
4
///
4
5
/// Parse Commit Message String to Convensional Commit
5
6
///
6
-
7
- final _kHeaderPattern =
8
- RegExp (r'^(?<type>\w*?)(\((?<scope>.*)\))?!?: (?<subject>.+)$' );
9
- const _kHeaderCorrespondence = ['type' , 'scope' , 'subject' ];
10
-
11
- const _kReferenceActions = [
12
- 'close' ,
13
- 'closes' ,
14
- 'closed' ,
15
- 'fix' ,
16
- 'fixes' ,
17
- 'fixed' ,
18
- 'resolve' ,
19
- 'resolves' ,
20
- 'resolved'
21
- ];
22
-
23
- const _kIssuePrefixes = ['#' ];
24
- const _kNoteKeywords = ['BREAKING CHANGE' , 'BREAKING-CHANGE' ];
25
- final _kMergePattern = RegExp (r'^(Merge|merge)\s(.*)$' );
26
- final _kRevertPattern = RegExp (
27
- r'^(?:Revert|revert:)\s"?(?<header>[\s\S]+?)"?\s*This reverts commit (?<hash>\w*)\.' );
28
- const _kRevertCorrespondence = ['header' , 'hash' ];
29
-
30
- final _kMentionsPattern = RegExp (r'@([\w-]+)' );
31
-
32
- Commit parse (String raw) {
7
+ Commit parse (
8
+ String raw, {
9
+ ParserOptions ? options,
10
+ }) {
11
+ options ?? = const ParserOptions ();
33
12
if (raw.trim ().isEmpty) {
34
13
throw ArgumentError .value (raw, null , 'message raw must have content.' );
35
14
}
@@ -44,7 +23,7 @@ Commit parse(String raw) {
44
23
final rawLines = _trimOffNewlines (raw).split (RegExp (r'\r?\n' ));
45
24
final lines = _truncateToScissor (rawLines).where (_gpgFilter).toList ();
46
25
merge = lines.removeAt (0 );
47
- final mergeMatch = _kMergePattern .firstMatch (merge);
26
+ final mergeMatch = RegExp (options.mergePattern) .firstMatch (merge);
48
27
if (mergeMatch != null ) {
49
28
merge = mergeMatch.group (0 );
50
29
if (lines.isNotEmpty) {
@@ -58,22 +37,27 @@ Commit parse(String raw) {
58
37
header = merge;
59
38
merge = null ;
60
39
}
61
- final headerMatch = _kHeaderPattern .firstMatch (header);
40
+ final headerMatch = RegExp (options.headerPattern) .firstMatch (header);
62
41
final headerParts = < String , String ? > {};
63
42
if (headerMatch != null ) {
64
- for (var name in _kHeaderCorrespondence) {
65
- headerParts[name] = headerMatch.namedGroup (name);
43
+ for (int i = 0 ; i < options.headerCorrespondence.length; i++ ) {
44
+ final String key = options.headerCorrespondence[i];
45
+ headerParts[key] = headerMatch.group (i + 1 );
66
46
}
47
+ // for (var name in options.headerCorrespondence) {
48
+ // headerParts[name] = headerMatch.namedGroup(name);
49
+ // }
67
50
}
68
- final referencesPattern = _getReferenceRegex (_kReferenceActions);
69
- final referencePartsPattern = _getReferencePartsRegex (_kIssuePrefixes, false );
51
+ final referencesPattern = _getReferenceRegex (options.referenceActions);
52
+ final referencePartsPattern =
53
+ _getReferencePartsRegex (options.issuePrefixes, false );
70
54
references.addAll (_getReferences (header,
71
55
referencesPattern: referencesPattern,
72
56
referencePartsPattern: referencePartsPattern));
73
57
74
58
bool continueNote = false ;
75
59
bool isBody = true ;
76
- final notesPattern = _getNotesRegex (_kNoteKeywords );
60
+ final notesPattern = _getNotesRegex (options.noteKeywords );
77
61
78
62
/// body or footer
79
63
for (var line in lines) {
@@ -118,18 +102,19 @@ Commit parse(String raw) {
118
102
}
119
103
}
120
104
121
- Match ? mentionsMatch = _kMentionsPattern.firstMatch (raw);
105
+ final mentionsRegex = RegExp (options.mentionsPattern);
106
+ Match ? mentionsMatch = mentionsRegex.firstMatch (raw);
122
107
while (mentionsMatch != null ) {
123
108
mentions.add (mentionsMatch.group (1 )! );
124
- mentionsMatch = _kMentionsPattern .matchAsPrefix (raw, mentionsMatch.end);
109
+ mentionsMatch = mentionsRegex .matchAsPrefix (raw, mentionsMatch.end);
125
110
}
126
111
127
112
// does this commit revert any other commit?
128
- final revertMatch = _kRevertPattern .firstMatch (raw);
113
+ final revertMatch = RegExp (options.revertPattern) .firstMatch (raw);
129
114
if (revertMatch != null ) {
130
115
revert = {};
131
- for (var i = 0 ; i < _kRevertCorrespondence .length; i++ ) {
132
- revert[_kRevertCorrespondence [i]] = revertMatch.group (i + 1 );
116
+ for (var i = 0 ; i < options.revertCorrespondence .length; i++ ) {
117
+ revert[options.revertCorrespondence [i]] = revertMatch.group (i + 1 );
133
118
}
134
119
}
135
120
@@ -141,7 +126,7 @@ Commit parse(String raw) {
141
126
merge: merge,
142
127
header: header,
143
128
type: headerParts['type' ],
144
- scopes: headerParts['scope' ]? .split (RegExp (r'(/|,|\\) ' )),
129
+ scopes: headerParts['scope' ]? .split (RegExp (r'\/|\\|, ? ' )),
145
130
subject: headerParts['subject' ],
146
131
body: body != null ? _trimOffNewlines (body) : null ,
147
132
footer: footer != null ? _trimOffNewlines (footer) : null ,
0 commit comments