private static function getFixersHelp()
{
$help = '';
$fixerFactory = new FixerFactory();
$fixers = $fixerFactory->registerBuiltInFixers()->getFixers();
// sort fixers by name
usort($fixers, function (FixerInterface $a, FixerInterface $b) {
return strcmp($a->getName(), $b->getName());
});
$ruleSets = array();
foreach (RuleSet::create()->getSetDefinitionNames() as $setName) {
$ruleSets[$setName] = new RuleSet(array($setName => true));
}
$getSetsWithRule = function ($rule) use($ruleSets) {
$sets = array();
foreach ($ruleSets as $setName => $ruleSet) {
if ($ruleSet->hasRule($rule)) {
$sets[] = $setName;
}
}
return $sets;
};
$count = count($fixers) - 1;
foreach ($fixers as $i => $fixer) {
$sets = $getSetsWithRule($fixer->getName());
if ($fixer instanceof DefinedFixerInterface) {
$description = $fixer->getDefinition()->getSummary();
} else {
$description = '[n/a]';
}
$attributes = array();
if ($fixer->isRisky()) {
$attributes[] = 'risky';
}
if ($fixer instanceof ConfigurableFixerInterface) {
$attributes[] = 'configurable';
}
$description = wordwrap($description, 72, "\n | ");
if (!empty($sets)) {
$help .= sprintf(" * <comment>%s</comment> [%s]\n | %s\n", $fixer->getName(), implode(', ', $sets), $description);
} else {
$help .= sprintf(" * <comment>%s</comment>\n | %s\n", $fixer->getName(), $description);
}
if (count($attributes)) {
sort($attributes);
$help .= sprintf(" | *Rule is: %s.*\n", implode(', ', $attributes));
}
if ($count !== $i) {
$help .= "\n";
}
}
return $help;
}