55use App \Event \GitHubEvent ;
66use App \GitHubEvents ;
77use App \Issues \GitHub \CachedLabelsApi ;
8- use App \Repository \ Repository ;
8+ use App \Service \ LabelNameExtractor ;
99use Symfony \Component \EventDispatcher \EventSubscriberInterface ;
1010
1111/**
@@ -15,19 +15,12 @@ class AutoLabelFromContentSubscriber implements EventSubscriberInterface
1515{
1616 private $ labelsApi ;
1717
18- private static $ labelAliases = [
19- 'di ' => 'DependencyInjection ' ,
20- 'bridge\twig ' => 'TwigBridge ' ,
21- 'router ' => 'Routing ' ,
22- 'translation ' => 'Translator ' ,
23- 'twig bridge ' => 'TwigBridge ' ,
24- 'wdt ' => 'WebProfilerBundle ' ,
25- 'profiler ' => 'WebProfilerBundle ' ,
26- ];
27-
28- public function __construct (CachedLabelsApi $ labelsApi )
18+ private $ labelExtractor ;
19+
20+ public function __construct (CachedLabelsApi $ labelsApi , LabelNameExtractor $ labelExtractor )
2921 {
3022 $ this ->labelsApi = $ labelsApi ;
23+ $ this ->labelExtractor = $ labelExtractor ;
3124 }
3225
3326 public function onPullRequest (GitHubEvent $ event )
@@ -44,7 +37,7 @@ public function onPullRequest(GitHubEvent $event)
4437 $ prLabels = [];
4538
4639 // the PR title usually contains one or more labels
47- foreach ($ this ->extractLabels ($ prTitle , $ repository ) as $ label ) {
40+ foreach ($ this ->labelExtractor -> extractLabels ($ prTitle , $ repository ) as $ label ) {
4841 $ prLabels [] = $ label ;
4942 }
5043
@@ -83,7 +76,7 @@ public function onIssue(GitHubEvent $event)
8376 $ labels = [];
8477
8578 // the issue title usually contains one or more labels
86- foreach ($ this ->extractLabels ($ prTitle , $ repository ) as $ label ) {
79+ foreach ($ this ->labelExtractor -> extractLabels ($ prTitle , $ repository ) as $ label ) {
8780 $ labels [] = $ label ;
8881 }
8982
@@ -95,49 +88,6 @@ public function onIssue(GitHubEvent $event)
9588 ]);
9689 }
9790
98- private function extractLabels ($ title , Repository $ repository )
99- {
100- $ labels = [];
101-
102- // e.g. "[PropertyAccess] [RFC] [WIP] Allow custom methods on property accesses"
103- if (preg_match_all ('/\[(?P<labels>.+)\]/U ' , $ title , $ matches )) {
104- // creates a key=>val array, but the key is lowercased
105- $ allLabels = $ this ->labelsApi ->getAllLabelsForRepository ($ repository );
106- $ validLabels = array_combine (
107- array_map (function ($ s ) {
108- return strtolower ($ s );
109- }, $ allLabels ),
110- $ allLabels
111- );
112-
113- foreach ($ matches ['labels ' ] as $ label ) {
114- $ label = $ this ->fixLabelName ($ label );
115-
116- // check case-insensitively, but the apply the correctly-cased label
117- if (isset ($ validLabels [strtolower ($ label )])) {
118- $ labels [] = $ validLabels [strtolower ($ label )];
119- }
120- }
121- }
122-
123- return $ labels ;
124- }
125-
126- /**
127- * It fixes common misspellings and aliases commonly used for label names
128- * (e.g. DI -> DependencyInjection).
129- */
130- private function fixLabelName ($ label )
131- {
132- $ labelAliases = self ::$ labelAliases ;
133-
134- if (isset ($ labelAliases [strtolower ($ label )])) {
135- return $ labelAliases [strtolower ($ label )];
136- }
137-
138- return $ label ;
139- }
140-
14191 public static function getSubscribedEvents ()
14292 {
14393 return [
0 commit comments