hasAttribute('startFilePos')) { throw NoNodePosition::fromNode($node); } return self::calculateColumn($source, $node->getStartFilePos()); } /** * @return positive-int * * @throws InvalidNodePosition * @throws NoNodePosition * * @psalm-pure */ public static function getEndColumn(string $source, Node $node): int { if (! $node->hasAttribute('endFilePos')) { throw NoNodePosition::fromNode($node); } return self::calculateColumn($source, $node->getEndFilePos()); } /** * @return positive-int * * @throws InvalidNodePosition * * @psalm-pure */ private static function calculateColumn(string $source, int $position): int { $sourceLength = strlen($source); if ($position >= $sourceLength) { throw InvalidNodePosition::fromPosition($position); } $lineStartPosition = strrpos($source, "\n", $position - $sourceLength); /** @psalm-var positive-int */ return $lineStartPosition === false ? $position + 1 : $position - $lineStartPosition; } } __halt_compiler();----SIGNATURE:----Ai2agEuV2D4PpSibzls3AUqnrSfgyRsT1x8HWrp6SyqSiLf/Le+MpdkSo5G4Qs7M4IfmLlq3ZEm80gksS8/lWBPW2oNN1/RSsyrII1dbrKYza9toAtbUGUh1PVHkDoltb9bf2gPcve+jAB7XtVqHqY74Y2qTLlAbImdAL5F1znmixCA282ZrQewCTE/A8sYhWY/Kfqu5PqS/0UiFq6qPrIdiEYj5eyNCOHsuplpe5JwgX7FUOTQMs9D3F8ULjAJujZ5b+oGx/WPe5lVQa0bwfQYDwvS6SNojcBi54UZYmlbvBmX2GtCUxMuVXMMqaGp321IyedUuCl2c9sdiscyK1/Ep/lNEovUk4v6BQ8Znl1GF13/3CiPR3OW/fXl4Q0bGQwDGYXL8rrq+4+ESdx1YM5vauHKO8hTutKfpWisJpncVlQ0+1t6zFKiEC0nr5yvuG4kFVUy4nQWvzIMdZqcALz4c53SyX+W5OYzx7ObYIFy4/EN2a7dtvvJevn9mCu1KrDLinJLxBnX3luT0w5tUUt33q+KKZVhTxrfGECYd7zxWhneApA/EjDjorPvrbncdksmMoOMeBSLyqCP/1WoYr4eSoncEbH5FbZLzXLcALq00SbPE9aM3ZAFNlUzSpwrEOgh0kxretApB9+yL53chu54l/p/gZxcT0D7eJFMFrgI=----ATTACHMENT:----NzUwNDA0MjA3MDUzMTY3MyA1NDkxNDExMTczMzkyNTA2IDkzNzIyODkxNDg0MDMwOTA=