11import 'types/commit.dart' ;
2+ import 'types/parser.dart' ;
23
34///
45/// Parse Commit Message String to Convensional Commit
56///
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 ();
3312 if (raw.trim ().isEmpty) {
3413 throw ArgumentError .value (raw, null , 'message raw must have content.' );
3514 }
@@ -44,7 +23,7 @@ Commit parse(String raw) {
4423 final rawLines = _trimOffNewlines (raw).split (RegExp (r'\r?\n' ));
4524 final lines = _truncateToScissor (rawLines).where (_gpgFilter).toList ();
4625 merge = lines.removeAt (0 );
47- final mergeMatch = _kMergePattern .firstMatch (merge);
26+ final mergeMatch = RegExp (options.mergePattern) .firstMatch (merge);
4827 if (mergeMatch != null ) {
4928 merge = mergeMatch.group (0 );
5029 if (lines.isNotEmpty) {
@@ -58,22 +37,27 @@ Commit parse(String raw) {
5837 header = merge;
5938 merge = null ;
6039 }
61- final headerMatch = _kHeaderPattern .firstMatch (header);
40+ final headerMatch = RegExp (options.headerPattern) .firstMatch (header);
6241 final headerParts = < String , String ? > {};
6342 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 );
6646 }
47+ // for (var name in options.headerCorrespondence) {
48+ // headerParts[name] = headerMatch.namedGroup(name);
49+ // }
6750 }
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 );
7054 references.addAll (_getReferences (header,
7155 referencesPattern: referencesPattern,
7256 referencePartsPattern: referencePartsPattern));
7357
7458 bool continueNote = false ;
7559 bool isBody = true ;
76- final notesPattern = _getNotesRegex (_kNoteKeywords );
60+ final notesPattern = _getNotesRegex (options.noteKeywords );
7761
7862 /// body or footer
7963 for (var line in lines) {
@@ -118,18 +102,19 @@ Commit parse(String raw) {
118102 }
119103 }
120104
121- Match ? mentionsMatch = _kMentionsPattern.firstMatch (raw);
105+ final mentionsRegex = RegExp (options.mentionsPattern);
106+ Match ? mentionsMatch = mentionsRegex.firstMatch (raw);
122107 while (mentionsMatch != null ) {
123108 mentions.add (mentionsMatch.group (1 )! );
124- mentionsMatch = _kMentionsPattern .matchAsPrefix (raw, mentionsMatch.end);
109+ mentionsMatch = mentionsRegex .matchAsPrefix (raw, mentionsMatch.end);
125110 }
126111
127112 // does this commit revert any other commit?
128- final revertMatch = _kRevertPattern .firstMatch (raw);
113+ final revertMatch = RegExp (options.revertPattern) .firstMatch (raw);
129114 if (revertMatch != null ) {
130115 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 );
133118 }
134119 }
135120
@@ -141,7 +126,7 @@ Commit parse(String raw) {
141126 merge: merge,
142127 header: header,
143128 type: headerParts['type' ],
144- scopes: headerParts['scope' ]? .split (RegExp (r'(/|,|\\) ' )),
129+ scopes: headerParts['scope' ]? .split (RegExp (r'\/|\\|, ? ' )),
145130 subject: headerParts['subject' ],
146131 body: body != null ? _trimOffNewlines (body) : null ,
147132 footer: footer != null ? _trimOffNewlines (footer) : null ,
0 commit comments