/** @test */ public function can_parse_var_docblocks() { $docblock = '/** blah blah */'; $this->assertEquals(null, DocblockParser::getPropertyType($docblock)); $docblock = '/** @var Foo */'; $this->assertEquals('Foo', DocblockParser::getPropertyType($docblock)); $docblock = '/** @var Foo $foo */'; $this->assertEquals('Foo', DocblockParser::getPropertyType($docblock)); $docblock = '/** * blah blah * @var Bar */'; $this->assertEquals('Bar', DocblockParser::getPropertyType($docblock)); }
private function getReflectionType($reflector) { if ($reflector instanceof ReflectionMethod && $reflector->isConstructor()) { $className = $reflector->getDeclaringClass()->getName(); return [$className]; } $docstr = $reflector->getDocComment(); if (!$docstr) { return false; } if ($reflector instanceof ReflectionMethod) { $file = $reflector->getFileName(); $type = DocblockParser::getMethodType($docstr); } elseif ($reflector instanceof ReflectionProperty) { $file = $reflector->getDeclaringClass()->getFileName(); $type = DocblockParser::getPropertyType($docstr); } else { if (PHINT_DEBUG) { var_dump(__METHOD__ . ':' . __LINE__); var_dump($reflector); throw new \RuntimeException(); } return null; } if (!$type) { return null; } if ($file == $this->context->getFileName()) { $context = $this->context; } else { $context = $this->getExternalFileContext($file); } $types = $context->parseDocblockType($type); return $types; }