mutate($description, [ Mutators\EnsureDynamicContentIsHighlighted::class, Mutators\EnsureNoPunctuation::class, Mutators\EnsureRelativePaths::class, ]); $descriptionWidth = mb_strlen(preg_replace("/\<[\w=#\/\;,:.&,%?]+\>|\\e\[\d+m/", '$1', $description) ?? ''); $this->output->write(" $description ", false, $verbosity); $startTime = microtime(true); $result = false; try { $result = ($task ?: fn () => true)(); } catch (Throwable $e) { throw $e; } finally { $runTime = $task ? (' '.number_format((microtime(true) - $startTime) * 1000).'ms') : ''; $runTimeWidth = mb_strlen($runTime); $width = min(terminal()->width(), 150); $dots = max($width - $descriptionWidth - $runTimeWidth - 10, 0); $this->output->write(str_repeat('.', $dots), false, $verbosity); $this->output->write("$runTime", false, $verbosity); $this->output->writeln( $result !== false ? ' DONE' : ' FAIL', $verbosity, ); } } }