From 67bbbec467b027ac1fe2cbf859ae5ddb88e6cad7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Demonchaux?= Date: Tue, 1 Dec 2020 13:46:57 +0100 Subject: [PATCH] fix #45 : Psalm integration --- .gitattributes | 3 +- .github/workflows/psalm.yml | 56 + composer.json | 7 +- psalm-baseline.xml | 4439 +++++++++++++++++++++++++++++++++++ psalm.xml | 33 + 5 files changed, 4535 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/psalm.yml create mode 100644 psalm-baseline.xml create mode 100644 psalm.xml diff --git a/.gitattributes b/.gitattributes index 70b009d9..cbf8ec65 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,9 +2,10 @@ /.gitattributes export-ignore /.github/ export-ignore /.gitignore export-ignore -/.travis.yml export-ignore /docs/ export-ignore /mkdocs.yml export-ignore /phpcs.xml export-ignore /phpunit.xml.dist export-ignore +/psalm.xml export-ignore +/psalm-baseline.xml export-ignore /test/ export-ignore diff --git a/.github/workflows/psalm.yml b/.github/workflows/psalm.yml new file mode 100644 index 00000000..8356e723 --- /dev/null +++ b/.github/workflows/psalm.yml @@ -0,0 +1,56 @@ +name: "Static Analysis by Psalm" + +on: + pull_request: + push: + +jobs: + static-analysis-psalm: + name: "Static Analysis by Psalm" + + runs-on: ${{ matrix.operating-system }} + + strategy: + matrix: + dependencies: + - "locked" + php-version: + - "7.4" + operating-system: + - "ubuntu-latest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "pcov" + php-version: "${{ matrix.php-version }}" + ini-values: memory_limit=-1 + tools: composer:v2, cs2pr + + - name: "Cache dependencies" + uses: "actions/cache@v2" + with: + path: | + ~/.composer/cache + vendor + key: "php-${{ matrix.php-version }}-${{ matrix.dependencies }}" + restore-keys: "php-${{ matrix.php-version }}-${{ matrix.dependencies }}" + + - name: "Install lowest dependencies" + if: ${{ matrix.dependencies == 'lowest' }} + run: "composer update --prefer-lowest --no-interaction --no-progress --no-suggest" + + - name: "Install highest dependencies" + if: ${{ matrix.dependencies == 'highest' }} + run: "composer update --no-interaction --no-progress --no-suggest" + + - name: "Install locked dependencies" + if: ${{ matrix.dependencies == 'locked' }} + run: "composer install --no-interaction --no-progress --no-suggest" + + - name: "psalm" + run: "vendor/bin/psalm --output-format=github --shepherd --stats" diff --git a/composer.json b/composer.json index 3f857db8..a68829f6 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,9 @@ "doctrine/annotations": "^1.10.4", "laminas/laminas-coding-standard": "^1.0.0", "laminas/laminas-stdlib": "^3.3.0", - "phpunit/phpunit": "^9.4.2" + "phpunit/phpunit": "^9.4.2", + "psalm/plugin-phpunit": "^0.13.0", + "vimeo/psalm": "^4.2" }, "conflict": { "phpspec/prophecy": "<1.9.0" @@ -56,7 +58,8 @@ "cs-check": "phpcs", "cs-fix": "phpcbf", "test": "phpunit --colors=always", - "test-coverage": "phpunit --colors=always --coverage-clover clover.xml" + "test-coverage": "phpunit --colors=always --coverage-clover clover.xml", + "static-analysis": "psalm --shepherd --stats" }, "replace": { "zendframework/zend-code": "self.version" diff --git a/psalm-baseline.xml b/psalm-baseline.xml new file mode 100644 index 00000000..c7ef18af --- /dev/null +++ b/psalm-baseline.xml @@ -0,0 +1,4439 @@ + + + + + $value + + + $directive + + + $this->value + $value + + + self + + + self::{$method}($value) + + + + + ! is_array($options) && ! $options instanceof Traversable + + + $this->indentation + + + string + + + $optionName + $optionValue + + + $optionName + + + $sourceContent + + + + + $docBlock instanceof DocBlockGenerator + + + $flag + $this->flags + + + $flag + + + + + $content + BodyGenerator + + + + + ! is_string($name) + is_string($name) + is_string($name) + + + [$this, 'validateConstantValue'] + + + string + + + $this->flags + $this->flags + $this->flags + $this->flags + + + 0x00 + + + $this->flags & self::FLAG_FINAL + + + bool + + + $this->flags & ~$flag + $this->flags | $flag + self::FLAG_ABSTRACT + self::FLAG_ABSTRACT + self::FLAG_FINAL + self::FLAG_FINAL + + + addTraitAlias + addTraitOverride + generate + removeTrait + + + $array['name'] + $implemented + $implementedInterface + $this->traitUsageGenerator->generate() + $value + $value + $value + $value + $value + $value + $value + $value + array_values($constant) + array_values($method) + array_values($property) + + + $name + + + $flag + $method + $property + $this->flags + $use + $value + $value + + + $flag + $use + static::IMPLEMENTS_KEYWORD + static::OBJECT_TYPE + + + null + + + $this->traitUsageGenerator->getUseAlias($fqnClassName) + + + $classReflection->getDocBlock() + strrpos($name, '\\') + + + strrpos($name, '\\') + + + getInterfaces + getName + + + $namespaceAlias + + + $containingFileGenerator + $docBlock + $extendedClass + $name + $namespaceName + ClassGenerator + + + is_array($constant) + is_array($interfaces) + null !== ($docBlock = $this->getDocBlock()) + null !== ($namespace = $this->getNamespaceName()) + + + new static($array['name']) + new static($classReflection->getName()) + + + + + $tagManager->createTagFromReflection($reflectionTag) + $this->setContent($description) + + + Tag + Tag + + + Tag + Tag + Tag + + + + + $description + AbstractTypeableTag + + + + + $tagManager->createTagFromReflection($reflectionTag) + + + AuthorTag + + + $authorEmail + $authorName + AuthorTag + + + + + $content + $name + GenericTag + + + + + $tagManager->createTagFromReflection($reflectionTag) + + + ReturnTag + + + $licenseName + $url + LicenseTag + + + + + $types + + + $methodName + MethodTag + MethodTag + + + + + $tagManager->createTagFromReflection($reflectionTag) + $this->setTypes($datatype) + + + $types + + + ParamTag + ParamTag + + + $variableName + ParamTag + ParamTag + + + + + $types + + + $propertyName + PropertyTag + PropertyTag + + + + + $tagManager->createTagFromReflection($reflectionTag) + $this->setTypes($datatype) + + + ReturnTag + ReturnTag + + + ReturnTag + ReturnTag + + + + + ThrowsTag + ThrowsTag + + + + + VarTag + VarTag + + + + + $newTag + + + TagInterface + + + TagManager + + + + + new Tag() + + + $tag instanceof TagInterface + isset(static::$tagManager) + + + $tag + $value + $value + $value + + + $name + + + $tag + $value + + + $this->tags + TagInterface[] + + + $longDescription + $shortDescription + DocBlockGenerator + + + is_array($tags) + + + null !== ($ld = $this->getLongDescription()) + null !== ($sd = $this->getShortDescription()) + + + generate + + + new static() + new static() + + + + + $class instanceof ClassGenerator + $docBlock instanceof DocBlockGenerator + + + $docBlock + + + $value + + + setDeclares + + + $alias + $alias + $class + $class->generate() + $fileUse['as'] + $fileUse['use'] + $import + $import + $import + $uses[$useIndex][0] + $uses[$useIndex][0] + $value + $value + $value + $value + $value + + + $name + $name + + + $alias + $fileUse['as'] + $fileUse['use'] + $import + $uses[$useIndex][0] + $uses[$useIndex][0] + $uses[$useIndex][0] + $uses[$useIndex][1] + + + $uses[$useIndex][2] + $uses[$useIndex][2] + $uses[$useIndex][2] + + + $alias + $class + $class + $class + $fileUse + $import + $import + $requiredFile + $use + $use + $uses[$useIndex][2] + $uses[$useIndex][2] + $value + list($import, $alias) + + + ClassGenerator + + + isSourceDirty + + + $class->generate() + $requiredFile + + + $class + $this->classes[(string)$name] + + + $this->classes + ClassGenerator[] + + + null + + + $docBlock + + + $namespace + + + $body + $docBlock + $filename + $namespace + FileGenerator + + + ! empty($uses) && is_array($uses) + $docBlock + is_array($uses) + null !== ($docBlock = $this->getDocBlock()) + + + new static() + new static() + + + + + registerFileCodeGenerator + + + + + generate + + + + + $extendedClass + + + $array['name'] + $value + $value + $value + $value + $value + $value + + + $name + + + $value + $value + + + $classReflection->getDocBlock() + + + InterfaceGenerator + InterfaceGenerator + InterfaceGenerator + InterfaceGenerator + InterfaceGenerator + InterfaceGenerator + + + new static($array['name']) + new static($classReflection->getName()) + + + + + $parameter instanceof ParameterGenerator + + + $array['name'] + $parameter + $parameterOutput + $value + $value + $value + $value + $value + $value + $value + $value + $value + $value + + + $name + + + $parameterOutput[] + + + $parameter + $value + + + $this->returnType->generate() + + + $reflectionMethod->getDocBlock() + + + $parameterOutput + + + $body + $docBlock + MethodGenerator + MethodGenerator + + + method_exists($methodReflection, 'getReturnType') + + + new static($array['name']) + new static() + + + + + string + + + $array['name'] + $defaultValue + $reflectionParameter->getDefaultValue() + $value + $value + $value + $value + $value + $value + $value + $value + + + $name + + + $value + + + $this->type->generate() + + + + getName + getParentClass + + + $defaultValue + $name + $position + ParameterGenerator + + + method_exists($reflectionParameter, 'getType') + method_exists($reflectionParameter, 'isVariadic') + + + $this->defaultValue instanceof ValueGenerator + + + new static($array['name']) + + + + + 'null;' + 'null;' + + + $array['name'] + $value + $value + $value + $value + $value + $value + $value + $value + + + $name + + + $defaultValue + $value + + + $reflectionProperty->getDocBlock() + + + $defaultValue + $isConst + PropertyGenerator + PropertyGenerator + + + $defaultValue !== null + $defaultValue !== null + $defaultValue !== null + + + new static($array['name']) + new static() + + + + + PropertyValueGenerator + PropertyValueGenerator + + + + + $array['name'] + $value + $value + $value + $value + $value + + + $name + + + $value + + + $classReflection->getDocBlock() + + + TraitGenerator + TraitGenerator + TraitGenerator + TraitGenerator + TraitGenerator + TraitGenerator + + + new static($array['name']) + new static($classReflection->getName()) + + + + + is_string($alias) + + + addTraitAlias + addTraitOverride + generate + removeTrait + + + $alias['alias'] + $alias['alias'] + $alias['visibility'] + $method + $this->traitOverrides[$method] + $this->traitOverrides[$traitAndMethod] + $traitAndMethod + $traitAndMethod + $traitAndMethod + $traitAndMethod + $traitAndMethod + $traitName + $value + $value + $value + $value + + + $key + $key + + + $alias['alias'] + $alias['alias'] + $alias['alias'] + $alias['visibility'] + $alias['visibility'] + $this->traitOverrides[$method][$key] + + + $this->traitOverrides[$traitAndMethod][] + + + $this->traitAliases[$traitAndMethod] + $this->traitOverrides[$method][$key] + $this->traitOverrides[$traitAndMethod] + $this->traitOverrides[$traitAndMethod] + $this->traitOverrides[$traitAndMethod] + $this->uses[$value] + $this->uses[$value] + + + $this->traitOverrides[$traitAndMethod] + + + $alias + $alias + $insteadof + $insteadofTrait + $insteadofTraits + $key + $trait + $traitAndMethod + $traitAndMethod + $traitName + $traitName + $traitToRemove + $value + $value + $value + $value + $value + $value + + + $alias['alias'] + $insteadofTrait + $method['method'] + $method['traitName'] + current(Reflection::getModifierNames($alias['visibility'])) + + + TraitUsageGenerator + + + addTraitOverride + + + addAlias + + + + + addTraitAlias + addTraitOverride + removeTrait + + + + + $trimmedNullable + $trimmedType + $trimmedType + $trimmedType + + + generate + + + $this->generate() + + + $nullable + $trimmedType + + + $isInternalPhpType + $nullable + $type + + + + + $constants instanceof SplArrayObject || $constants instanceof StdlibArrayObject + $constants instanceof StdlibArrayObject + + + $this->indentation + $this->indentation + $this->indentation + $this->indentation + + + initEnvironmentConstants + + + $n + $value + + + $constant + $curValue + $n + $outputParts[] + $partV + $v + $value + + + generate + setArrayDepth + + + $partV + $value + + + $allowedTypes + ValueGenerator + + + 'float' + + + + + ! $this->hasPrototype($prototypeName) && ! isset($this->genericPrototype) + + + addPrototype + setGenericPrototype + + + $newPrototype + + + clone $this->prototypes[$prototypeName] + + + PrototypeInterface + + + $newPrototype + + + $genericPrototype + + + + + setName + + + + + addUse + + + $as + $as + $use + + + $as + $as + $use + + + $use + + + $namespace + + + is_string($use) + + + $this->namespace !== null + $this->uses + + + + + parent::getStartLine() + strstr(implode('', $lines), '{') + + + ClassReflection|bool + + + int + string + + + Exception\ExceptionInterface + + + ClassReflection[] + MethodReflection[] + PropertyReflection[] + null|array + + + $docBlock + $docBlock + + + getStartLine + + + $traits === null + + + + + $authorEmail + $authorName + + + + + parse + setName + + + string + + + $this->values[$position] + + + $this->contentSplitCharacter + + + $content + $name + + + + + $licenseName + $url + + + + + $description + $methodName + + + null|string + + + $this->types[0] + + + $this->types + getTypes + + + + + $description + $variableName + + + string + + + $this->types[0] + + + $this->types + getTypes + + + + + $description + $propertyName + + + null|string + + + $this->types[0] + + + $this->types + getTypes + + + + + $description + + + string + + + $this->types[0] + + + $this->types + getTypes + + + + + array + + + $description + + + + + $newTag + + + TagInterface + + + TagManager + + + initialize + + + + + ! is_string($filter) + + + $tag['name'] + $tag['value'] + $this->docComment + $this->docComment + + + $tag['name'] + $tag['value'] + + + $returnTags[] + $tag + $tag + $tag + $tag + $tag + $this->docComment + $this->endLine + $this->startLine + + + DocBlockTagInterface|false + + + getName + getName + getName + + + $tag + + + $tag + + + $returnTags + $this->tags + DocBlockTagInterface[] + + + $endLine + $reflector + $startLine + + + is_string($commentOrReflector) + + + getStartLine + getStartLine + + + + + $name + + + $function + + + $value + + + $token[0] + $token[1] + $token[2] + + + $lineNum + $this->docComment + $this->startLine + $token + $type + $value + + + $lineNum + + + $scanner->getClassNames() + $scanner->getIncludes() + $scanner->getNamespaces() + $scanner->getUses() + + + $scanner->getDocComment() + + + $contents + $endLine + + + include $fileRealPath + + + + + ParameterReflection[] + + + $returnTypes + $returnTypes + + + $returnTypes[0] + + + $returnType + $returnTypes + + + $prototype['return'] + + + strrpos($this->getName(), '\\') + strrpos($this->getName(), '\\') + + + getDescription + getTypes + + + $endLine + $endLine + $startLine + $startLine + $startLine + $startLine + + + $docBlock + + + getDescription + getTypes + + + + + bool + + + ParameterReflection[] + + + $haystack[$i][0] + $haystack[$i][0] + $haystack[$i][0] + $returnTypes + $returnTypes + + + $returnTypes[0] + + + $returnType + $returnTypes + $tokenType + $tokenType + $tokenType + $tokenValue + $tokenValue + + + $prototype['return'] + $tokenValue + + + getStartLine + getTypes + + + getTypes + + + + + $phpReflection->getName() + $phpReflectionType->getName() + + + string|null + + + getName + + + $params[$this->getPosition()]->getType() + + + getName + + + $type + + + getType + + + + + $returnDerivedScannerClass + $returnScannerClass + + + getFunctions + getIncludes + getNamespaces + + + $class + $classScanner + $returnDerivedScannerClass + + + $info['name'] + $info['type'] + + + $class + $classScanner + $functions[] + $info + + + getClass + + + $returnScannerClass + $returnScannerClass + + + getClasses + hasClass + hasClass + + + AggregateDirectoryScanner + + + $this->infos + + + + + $this->fileScanner->getClass($className) + + + array + array|null|string + + + ClassScanner + + + array + + + array + + + $this->fileScanner + + + $this->fileScanner->getIncludes() + + + getClass + getClassNameInformation + getClassNames + getClasses + getDocComment + getFile + getFunctionNames + getFunctions + getIncludes + getNamespaces + getUses + + + CachingFileScanner + CachingFileScanner + + + + + $returnMethod + + + MethodScanner + + + $return + $this->traits + + + ClassScanner[] + PropertyScanner[] + + + $visibility + + + __toString + + + function () use ( + function () use (&$infoIndex, &$infos, &$tokenIndex, &$tokenLine) { + + + export + + + $alias['alias'] + $alias['original'] + $alias['original'] + $info['name'] + $info['name'] + $info['tokenEnd'] - $info['tokenStart'] + 1 + $info['tokenEnd'] - $info['tokenStart'] + 1 + $info['tokenEnd'] - $info['tokenStart'] + 1 + $info['tokenStart'] + $info['tokenStart'] + $info['tokenStart'] + $lastTokenArray[1] ?? '' + $si + $tokenContent + $traitName + $traitName + $traitName + $traitName + + + $methodAlias + + + $alias['alias'] + $alias['alias'] + $alias['alias'] + $alias['original'] + $alias['original'] + $alias['visibility'] + $info['aliases'] + $info['aliases'] + $info['aliases'] + $info['aliases'] + $info['aliases'] + $info['aliases'] + $info['name'] + $info['name'] + $info['name'] + $info['name'] + $info['name'] + $info['name'] + $info['name'] + $info['name'] + $info['name'] + $info['tokenEnd'] + $info['tokenEnd'] + $info['tokenEnd'] + $info['tokenStart'] + $info['tokenStart'] + $info['tokenStart'] + $info['tokenStart'] + $info['tokenStart'] + $info['tokenStart'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['use_statements'] + $info['use_statements'] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $tokenContent + $tokenLine + $tokenType + $tokens[$tokenIndex + 1] + $tokens[$tokenIndex + 1] + $tokens[$tokenIndex + 2] + $tokens[$tokenIndex + 2] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + + + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + + + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $return[$alias['alias']] + $tokens[$tokenIndex + 1] + $tokens[$tokenIndex + 1] + $tokens[$tokenIndex + 2] + $tokens[$tokenIndex + 2] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + + + $alias + $alias + $alias + $classContext + $info + $info + $info + $info + $info + $info + $info + $info + $info + $info + $info + $info + $info + $info + $info + $info + $infoIndex + $infos[$infoIndex]['aliases'][$useStatementIndex]['alias'] + $infos[$infoIndex]['aliases'][$useStatementIndex]['visibility'] + $infos[$infoIndex]['lineEnd'] + $infos[$infoIndex]['name'] + $infos[$infoIndex]['name'] + $infos[$infoIndex]['tokenEnd'] + $infos[$infoIndex]['tokenEnd'] + $lastTokenArray + $methodNameOrInfoIndex + $return + $return[] + $return[] + $return[] + $si + $this->docComment + $this->lineEnd + $this->lineStart + $this->name + $this->name + $this->shortName + $this->shortName + $token + $tokenIndex + $trait + $traitName + $traitName + [$tokenType, $tokenContent, $tokenLine] + + + string + + + $infoIndex + $info['tokenEnd'] + $info['tokenEnd'] + $info['tokenEnd'] + $infos[$infoIndex]['aliases'][$useStatementIndex]['original'] + $infos[$infoIndex]['use_statements'][$useStatementIndex] + $this->shortInterfaces[$classInterfaceIndex] + $this->shortInterfaces[$classInterfaceIndex] + $this->shortName + $this->shortName + $tokenContent + $tokenIndex + $tokenIndex + $tokenIndex + $tokenIndex + $tokenIndex + $tokenLine + + + $return + + + $this->methods + $this->traits + MethodScanner[] + + + $return + + + $infos[$infoIndex]['aliases'][$useStatementIndex]['original'] + + + $trait->getName() + + + $nameInformation + + + $docComment + $lineEnd + $lineStart + $name + $parentClass + $shortName + $shortParentClass + + + $tokenType === T_STRING && null === $infos[$infoIndex]['name'] + $tokenType === null && $tokenContent === '{' && $braceCount === 0 + false === $useAliasContext + + + $this->nameInformation + $this->nameInformation + $this->nameInformation + $this->nameInformation instanceof NameInformation + $this->nameInformation instanceof NameInformation + $this->nameInformation instanceof NameInformation + $this->parentClass !== null + is_object($this->getMethod($name)) + is_string($constantNameOrInfoIndex) + is_string($propertyNameOrInfoIndex) + null !== $visibility + + + $braceCount === 0 + $memberContext !== null + $memberContext === 'method' + $memberContext === 'method' + $useAliasContext === true + + + T_NAME_FULLY_QUALIFIED + T_NAME_QUALIFIED + + + + + $this->docComment === null + $this->name === null + null === $this->name + + + $tokenContent + $tokenLine + $tokenNextContent + $tokenNextContent + $tokenNextLine + $tokenNextLine + $tokenNextType + $tokenNextType + $tokenType + + + list($tokenNextType, $tokenNextContent, $tokenNextLine) + list($tokenNextType, $tokenNextContent, $tokenNextLine) + list($tokenType, $tokenContent, $tokenLine) + + + scan + setClass + setScannerClass + + + $string + $string + $string + $string + $tokenNextContent + $tokenNextContent + + + $tokenContent + $tokenLine + $tokenNextContent + $tokenNextContent + $tokenNextLine + $tokenNextLine + $tokenNextType + $tokenNextType + $tokenType + + + $string + $string + $this->docComment + $this->name + $this->value + $token + list($tokenNextType, $tokenNextContent, $tokenNextLine) + list($tokenNextType, $tokenNextContent, $tokenNextLine) + list($tokenType, $tokenContent, $tokenLine) + + + is_string($token) + is_string($token) + + + getValue + + + $nameInformation + + + $class + $docComment + $lineStart + $name + $scannerClass + $value + + + + + $iName + $iName + + + $this->interfaceClassScanners + + + $constantNameOrInfoIndex + $methodNameOrInfoIndex + $propertyNameOrInfoIndex + + + array + + + $pClassScanner->getConstantNames() + $pClassScanner->getConstants($namesOnly) + $pClassScanner->getInterfaces() + $pClassScanner->getMethodNames() + $pClassScanner->getMethods() + $pClassScanner->getProperties($returnScannerProperty) + $pClassScanner->getPropertyNames() + + + $pClassScanner + $pClassScanner + $pClassScanner + $pClassScanner + $pClassScanner + $pClassScanner + $pClassScanner + $pClassScanner + $pClassScanner + $pClassScanner + $pClassScanner + $pClassScanner + $pClassScanner + + + MethodScanner + bool|ConstantScanner + bool|PropertyScanner + + + getConstant + getConstantNames + getConstants + getInterfaces + getMethod + getMethodNames + getMethods + getProperties + getProperty + getPropertyNames + hasConstant + hasConstant + hasMethod + hasMethod + hasProperty + hasProperty + + + $pClassScanner->getConstant($constantNameOrInfoIndex) + $pClassScanner->getMethod($methodNameOrInfoIndex) + $pClassScanner->getProperty($propertyNameOrInfoIndex) + + + $methods + MethodScanner[] + + + $currentParentClassName + $currentParentClassName + $this->classScanner->getName() + $this->classScanner->getName() + $this->classScanner->getName() + + + $this->parentClassScanners + + + DerivedClassScanner + DerivedClassScanner + DerivedClassScanner + DerivedClassScanner + DerivedClassScanner + DerivedClassScanner + DerivedClassScanner + DerivedClassScanner + + + getProperties + + + + + $this->classToFileScanner === null + $this->classToFileScanner === null + $this->classToFileScanner === null + $this->classToFileScanner === null + + + $returnClass + + + ClassScanner|DerivedClassScanner + + + __toString + + + export + getNamespaces + + + $d + $item->getRealPath() + $item->getRealPath() + + + $this->classToFileScanner[$fsClassName] + $this->fileScanners[$fsIndex] + $this->fileScanners[$this->classToFileScanner[$class]] + + + $d + $fsClassName + $fsIndex + $item + + + getRealPath + getRealPath + isFile + + + $classScanner + + + $classToFileScanner + + + $this->classToFileScanner !== null + is_array($directory) + is_string($directory) + + + + + $length + $positionsForward + $type + + + function ($length) use (&$currentWord, &$tokens, &$tokenIndex) { + function ($positionsForward = 1) use ( + function ($type) use (&$tokenIndex, &$tokens) { + function () use (&$currentChar, &$tokens, &$tokenIndex) { + function () use (&$currentLine, &$MACRO_STREAM_ADVANCE_CHAR) { + function () use (&$currentLine, &$tokens, &$tokenIndex) { + function () use (&$currentWord, &$MACRO_STREAM_ADVANCE_CHAR) { + function () use (&$currentWord, &$tokens, &$tokenIndex) { + function () use (&$tokenIndex, &$tokens) { + + + $currentLine + $currentWord + $currentWord + $length + $stream + $stream + $streamIndex + $streamIndex + $tokens + + + $stream[$streamIndex] + $this->tags[$tagIndex]['value'] + $this->tags[$tagIndex]['value'] + $token[0] + $token[1] + $token[1] + $token[1] + $token[1] + $token[1] + $token[1] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + + + $this->tags[$tagIndex]['value'] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + + + $stream[$streamIndex] + $stream[$streamIndex] + $this->tags[$tagIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + + + $currentChar + $positionsForward + $streamIndex + $token + $tokenIndex + $tokens[$tokenIndex][0] + + + $MACRO_STREAM_ADVANCE_CHAR() + $MACRO_STREAM_ADVANCE_CHAR() + $MACRO_STREAM_ADVANCE_CHAR() + $MACRO_STREAM_ADVANCE_CHAR(strlen($currentLine)) + $MACRO_STREAM_ADVANCE_CHAR(strlen($currentWord)) + + + array + + + $CONTEXT_INSIDE_ASTERISK + $CONTEXT_INSIDE_ASTERISK + $CONTEXT_INSIDE_ASTERISK + $CONTEXT_INSIDE_DOCBLOCK + $CONTEXT_INSIDE_DOCBLOCK + $CONTEXT_INSIDE_DOCBLOCK + $context + $streamIndex + $this->tags[$tagIndex]['value'] + $tokenIndex + $token[1] + $token[1] + $token[1] + $token[1] + $tokens[$tokenIndex][1] + $tokens[$tokenIndex][1] + $tokens[$tokenIndex][1] + $tokens[$tokenIndex][1] + ~$CONTEXT_INSIDE_ASTERISK + ~$CONTEXT_INSIDE_DOCBLOCK + + + $tokens + + + null + + + $nameInformation + + + $shortDescription + + + $context === 0x00 + $this->shortDescription != '' && $tagIndex === null + + + $tagIndex !== null + + + + + FileScanner + + + + + $this->docComment === null + $this->name === null + + + function () use ( + function () use (&$infoIndex, &$infos, &$tokenIndex, &$tokenLine) { + function () use (&$infoIndex, &$infos, &$tokenIndex, &$tokenLine) { + + + export + scan + + + $info['name'] + $info['position'] + $info['tokenEnd'] - $info['tokenStart'] + $info['tokenStart'] + $lastTokenArray[1] ?? '' + $tokenContent + + + $info['name'] + $info['name'] + $info['name'] + $info['position'] + $info['tokenEnd'] + $info['tokenStart'] + $info['tokenStart'] + $info['type'] + $info['type'] + $info['type'] + $infos[$infoIndex] + $infos[$infoIndex] + $tokenContent + $tokenLine + $tokenType + $tokens[$tokenIndex] + + + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + + + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + + + $info + $info + $info + $infoIndex + $infos[$infoIndex]['lineEnd'] + $infos[$infoIndex]['tokenEnd'] + $lastTokenArray + $return[] + $this->docComment + $this->lineEnd + $this->lineStart + $this->name + $token + $tokenIndex + [$tokenType, $tokenContent, $tokenLine] + + + $infoIndex + $infoIndex + $info['tokenEnd'] + $tokenContent + $tokenIndex + $tokenLine + + + $nameInformation + null + + + $info + $info + $info + $info + + + $class + $docComment + $lineEnd + $lineStart + $name + $scannerClass + + + $tokenType === T_STRING && $parentCount === 0 + + + is_string($parameterNameOrInfoIndex) + + + $parentCount === 1 + $parentCount === 1 + + + T_NAME_FULLY_QUALIFIED + T_NAME_QUALIFIED + + + + + ClassScanner + MethodScanner + int + string + string + string + string + string + + + $token[1] + is_string($token) ? $token : $token[1] + + + $token[0] + $token[0] + $token[1] + $token[1] + $token[1] + + + $token + + + $token[1] + + + $this->class + $this->declaringClass + $this->declaringFunction + $this->declaringScannerClass + $this->declaringScannerFunction + $this->defaultValue + $this->name + $this->position + + + $this->tokens + $tokens + $tokens + + + $this->defaultValue + + + T_NAME_FULLY_QUALIFIED + T_NAME_QUALIFIED + + + + + $this->docComment === null && $this->name === null + $this->name === null + + + scan + setClass + setScannerClass + + + $token + $token + $tokenContent + $tokenContent + + + $tokenContent + $tokenLine + $tokenType + + + $tempValue + $this->docComment + $token + list($tokenType, $tokenContent, $tokenLine) + + + $tempValue + + + $nameInformation + empty($value) ? null : $value + + + $class + $docComment + $lineStart + $name + $scannerClass + $value + $valueType + + + + + $namespace === null + is_string($namespace) + + + $return + + + ClassScanner[] + + + __toString + + + function () use ( + function () use (&$infoIndex, &$infos, &$tokenIndex, &$tokenLine) { + function () use (&$tokenIndex, &$docCommentIndex) { + function () use (&$tokenIndex, &$docCommentIndex) { + function () use (&$tokenType, &$docCommentIndex) { + + + export + scan + + + $info['name'] + $info['namespace'] + $info['namespace'] + $info['tokenEnd'] - $info['tokenStart'] + 1 + $info['tokenStart'] + $info['uses'] + $info['uses'] + $namespace + $validTrailingTokens + + + $includeTypes[$tokens[$tokenIndex][0]] + $info['name'] + $info['name'] + $info['name'] + $info['name'] + $info['name'] + $info['namespace'] + $info['namespace'] + $info['namespace'] + $info['namespace'] + $info['namespace'] + $info['namespace'] + $info['statements'] + $info['tokenEnd'] + $info['tokenStart'] + $info['tokenStart'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['type'] + $info['uses'] + $info['uses'] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $token[0] + $token[1] + $token[2] + $tokens[$tokenIndex + 2] + $tokens[$tokenIndex + 2] + $tokens[$tokenIndex + 2] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + + + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + + + $includeTypes[$tokens[$tokenIndex][0]] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $infos[$infoIndex] + $tokens[$tokenIndex + 2] + $tokens[$tokenIndex + 2] + $tokens[$tokenIndex + 2] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + $tokens[$tokenIndex] + + + $docCommentIndex + $functionNames[] + $info + $info + $info + $info + $info + $info + $info + $info + $info + $info + $infoIndex + $infos[$infoIndex]['lineEnd'] + $infos[$infoIndex]['shortName'] + $infos[$infoIndex]['statements'][$useStatementIndex]['as'] + $infos[$infoIndex]['tokenEnd'] + $namespace + $namespace + $namespaces[] + $namespaces[] + $return[] + $statement + $this->docComment + $token + $token + $tokenContent + $tokenIndex + $tokenIndex + $type + $uses[] + $value + + + string|null + + + $infoIndex + $info['tokenEnd'] + $infos[$infoIndex]['shortName'] + $infos[$infoIndex]['statements'][$useStatementIndex]['use'] + $namespace + $tokenContent + $tokenContent + $tokenIndex + $tokenIndex + $tokenIndex + $tokenIndex + $tokenIndex + + + $this->docComment + + + $namespace + $namespace + + + $tokens + + + $info + $info + $info + $info + $info + + + $nameInformation + + + is_string($name) + + + + + $data->uses + + + $data->uses[$firstPart] + + + $data->namespace + $data->namespace + + + $data->uses + + + + + testConstructor + testSetOptionsThrowsExceptionOnInvalidArgument + + + + + new \stdClass() + + + testSetDocBlockThrowsExceptionWithInvalidType + testSetFlagsWithArray + + + + + 'InvalidArgumentException' + 'LaminasTest_Code_NsTest_BarClass' + + + $resource + ExceptionInterface::class + [] + new ClassGenerator() + new \stdClass() + + + 'public' + 'public' + true + true + true + + + testAbstractAccessors + testAddConstantAcceptsMixedScalars + testAddConstantRejectsArrayWithInvalidNestedValue + testAddConstantRejectsObjectConstantValue + testAddConstantRejectsResourceConstantValue + testAddConstantThrowsExceptionOnDuplicate + testAddConstantThrowsExceptionWithEmptyConstantName + testAddConstantThrowsExceptionWithInvalidName + testAddOneUseTwiceOnlyAddsOne + testAddOneUseWithAliasTwiceOnlyAddsOne + testAddPropertiesIsBackwardsCompatibleWithConstants + testAddPropertyIsBackwardsCompatibleWithConstants + testAddTraitAliasExceptionInvalidAliasArgument + testAddTraitAliasExceptionInvalidMethodFormat + testAddTraitAliasExceptionInvalidMethodTraitDoesNotExist + testAddTraitAliasExceptionInvalidVisibilityValue + testAddTraitAliasExceptionMethodAlreadyExists + testAddTraitOverrideExceptionInvalidMethodArgInArray + testAddTraitOverrideExceptionInvalidMethodFormat + testAddTraitOverrideExceptionInvalidMethodTraitDoesNotExist + testAddTraitOverrideExceptionInvalidTraitName + testAddTraitOverrideExceptionInvalidTraitToReplaceArgument + testAddUses + testCanAddConstant + testCanAddConstantsWithArrayOfGenerators + testCanAddConstantsWithArrayOfKeyValues + testCanAddMultipleTraitOverrides + testCanAddTraitAliasWithArray + testCanAddTraitAliasWithString + testCanAddTraitOverride + testCanAddTraitWithArray + testCanAddTraitWithString + testCanGetTraitsMethod + testCanRemoveAllTraitOverrides + testCanRemoveTrait + testCanRemoveTraitOverride + testClassCanBeGeneratedWithConstantAndPropertyWithSameName + testClassDocBlockAccessors + testClassFromReflectionDiscardParentImplementedInterfaces + testClassFromReflectionThatImplementsInterfaces + testCodeGenerationShouldTakeIntoAccountNamespacesFromReflection + testConstantsAddedFromReflection + testConstruction + testCorrectExtendNames + testCorrectExtendNamesFromGlobalNamespace + testCorrectImplementNames + testCorrectlyExtendsAliasOfProvidedFQCNIfUseAliasExists + testCorrectlyExtendsFullyQualifiedParentClass + testCorrectlyExtendsProvidedAliasIfUseAliasExists + testCorrectlyExtendsProvidedNamespaceAliasIfUseAliasExistsForNamespace + testCorrectlyExtendsRelativeParentClass + testCorrectlyExtendsWithNamespaceAliasOfProvidedFQCNIfUseAliasExistsForNamespace + testCreateFromArrayWithDocBlockFromArray + testCreateFromArrayWithDocBlockInstance + testExtendedClassAccessors + testExtendedClassProperies + testGenerateClassAndAddMethod + testGenerateWithFinalFlag + testHasExtendedClass + testHasImplementedInterface + testHasMethod + testHasMethodInsensitive + testHasProperty + testHasUse + testHasUseAlias + testHereDoc + testImplementedInterfacesAccessors + testMethodAccessors + testNameAccessors + testNonNamespaceClassReturnsAllMethods + testPassingANamespacedClassnameShouldGenerateAClassnameWithoutItsNamespace + testPassingANamespacedClassnameShouldGenerateANamespaceDeclaration + testPropertyAccessors + testRemoveConstant + testRemoveExtendedClass + testRemoveImplementedInterface + testRemoveMethod + testRemoveMethodInsensitive + testRemoveProperty + testRemoveUse + testRemoveUseAlias + testSetMethodNameAlreadyExistsThrowsException + testSetMethodNoMethodOrArrayThrowsException + testSetNameShouldDetermineIfNamespaceSegmentIsPresent + testSetPropertyAlreadyExistsThrowsException + testSetPropertyNoArrayOrPropertyThrowsException + testSetextendedclassShouldIgnoreEmptyClassnameOnGenerate + testSetextendedclassShouldNotIgnoreNonEmptyClassnameOnGenerate + testToString + testTraitGenerationWithAliasesAndOverrides + testUseTraitGeneration + + + $classGenerator->generate() + $classGenerator->generate() + $classGenerator->generate() + $classGenerator->generate() + $classGenerator->generate() + $classGenerator->generate() + $code + $code + $code + $generated + $generated + $generated + $generated + $generated + $generated + $generated + $output + $output + $overrides['myTrait::foo'] + $overrides['myTrait::foo'] + $overrides['myTrait::foo'] + $overrides['myTrait::foo'] + $received + $received + $received + $received + $received + + + $aliases['myTrait::method']['alias'] + $aliases['myTrait::method']['alias'] + $aliases['myTrait::method']['visibility'] + $aliases['myTrait::method']['visibility'] + $overrides['myTrait::foo'][0] + $overrides['myTrait::foo'][1] + $overrides['myTrait::foo'][1] + + + $code + $code + $code + $generated + $generated + $generated + $generated + $generated + $generated + $generated + $output + $output + $output + $received + $received + $received + + + getDefaultValue + getDefaultValue + getDefaultValue + getDefaultValue + getDefaultValue + getDefaultValue + getDefaultValue + getDefaultValue + getDefaultValue + getDefaultValue + getDefaultValue + getDefaultValue + getDefaultValue + getDefaultValue + getDefaultValue + + + + + testConstructorWithOptions + testCreatingTagFromReflection + testGetterAndSetterPersistValue + testNameIsCorrect + testParamProducesCorrectDocBlockLine + + + $reflectionTag + + + null + null + + + + + testConstructorWithOptions + testCreatingTagFromReflection + testGetterAndSetterPersistValue + testParamProducesCorrectDocBlockLine + + + $reflectionTag + + + null + null + + + + + testConstructorWithOptions + testCreatingTagFromReflection + testGetterAndSetterPersistValue + testLicenseProducesCorrectDocBlockLine + testNameIsCorrect + + + $reflectionTag + + + null + null + + + + + testConstructorWithOptions + testCreatingTagFromReflection + testGetterAndSetterPersistValue + testGetterForMethodNameTrimsCorrectly + testNameIsCorrect + testParamProducesCorrectDocBlockLine + + + $reflectionTag + + + null + null + + + + + testConstructorWithOptions + testCreatingTagFromReflection + testGetterAndSetterPersistValue + testGetterForVariableNameTrimsCorrectly + testNameIsCorrect + testParamProducesCorrectDocBlockLine + + + $reflectionTag + + + null + null + + + + + testConstructorWithOptions + testCreatingTagFromReflection + testGetterAndSetterPersistValue + testGetterForVariableNameTrimsCorrectly + testNameIsCorrect + testParamProducesCorrectDocBlockLine + + + $reflectionTag + + + null + null + + + + + testCreatingTagFromReflection + testNameIsCorrect + testReturnProducesCorrectDocBlockLine + + + $reflectionTag + + + null + null + + + + + testCreatingTagFromReflection + testNameIsCorrect + testParamProducesCorrectDocBlockLine + + + $reflectionTag + + + null + null + + + + + testConstructorWithOptions + testGetterAndSetterPersistValue + testGetterForTypesAsStringWithMultipleTypes + testGetterForTypesAsStringWithMultipleTypesAndDelimiter + testGetterForTypesAsStringWithSingleType + testGetterForTypesAsStringWithSingleTypeAndDelimiter + + + null + + + + + setVariableName + setVariableName + + + + + setDatatype + setDatatype + + + testCanPassTagsToConstructor + testCreateFromArray + testDocBlockFromReflectionAuthorTag + testDocBlockFromReflectionLicenseTag + testDocBlockFromReflectionLongDescription + testDocBlockFromReflectionParamTag + testDocBlockFromReflectionReturnTag + testDocBlockFromReflectionShortDescription + testDocBlockFromReflectionTagsCount + testGenerateWithWordWrapDisabled + testGenerateWordWrapIsEnabledByDefault + testGenerationOfDocBlock + testLongDescriptionGetterAndSetter + testShortDescriptionGetterAndSetter + testTagGettersAndSetters + + + + + testCanAppendToBodyOfReflectedFile + testClassNotFoundException + testConstruction + testCreateFromArrayWithClassFromArray + testCreateFromArrayWithClassInstance + testFileLineEndingsAreAlwaysLineFeed + testFromFileReflection + testFromReflection + testGeneratedClassesHaveUses + testGeneratesNamespaceStatements + testGeneratesUseStatements + testGeneratingFromAReflectedFileName + testIndentationGetterAndSetter + testIssue4747FileGenerationWithAddedMethodIsCorrectlyFormatted + testSetUseAllowsMultipleAliasedUseStatements + testSetUseDoesntGenerateMultipleIdenticalUseStatements + testSetUsesDoesntGenerateMultipleIdenticalUseStatements + testSetUsesWithArrays + testSetUsesWithGetUses + testSetUsesWithString + testSourceContentGetterAndSetter + testToString + + + require_once $file + require_once $tempFile + + + + + testAbstractAccessorsReturnsFalse + testClassNotAnInterfaceException + testCodeGenerationShouldTakeIntoAccountNamespacesFromReflection + testCreateFromArrayWithDocBlockFromArray + testCreateFromArrayWithDocBlockInstance + testExtendedClassAccessors + testGenerateClassAndAddMethod + testGenerateImplementsInterface + testImplementedInterfacesAccessors + testMethodAccessors + testPassingANamespacedClassnameShouldGenerateAClassnameWithoutItsNamespace + testPassingANamespacedClassnameShouldGenerateANamespaceDeclaration + testPropertyAccessors + testSetNameShouldDetermineIfNamespaceSegmentIsPresent + testSetextendedclassShouldIgnoreEmptyClassnameOnGenerate + testSetextendedclassShouldNotIgnoreNonEmptyClassnameOnGenerate + testToString + + + $received + $received + $received + $received + $received + + + $output + $output + $output + $received + $received + $received + + + isInterface + isInterface + + + + + $className + + + new stdClass() + + + $baz + $foo + + + returnTypeHintClasses + testByRefReturnType + testCopyMethodSignature + testCreateFromArray + testCreateInterfaceMethodFromArray + testDefaultValueGenerationDoesNotIncludeTrailingSemicolon + testDocBlockGetterAndSetter + testFrom + testFromByReferenceMethodReflection + testMethodBodyGetterAndSetter + testMethodCanHaveDocBlock + testMethodConstructor + testMethodFromReflection + testMethodFromReflectionMultiLinesIndention + testMethodParameterAccessors + testMethodParameterMutator + testMethodWithFinalModifierIsEmitted + testMethodWithFinalModifierIsNotEmittedWhenMethodIsAbstract + testMethodWithStaticModifierIsEmitted + testSetReturnType + testSetReturnTypeWithNull + + + generate + + + + + 'LaminasTest_Code_NsTest_BarClass' + 'Namespaced\TypeHint\Bar' + + + + string[][] + + + dataFromReflectionGenerate + testCallableTypeHint + testCreateFromArray + testDefaultValueGetterAndSetterPersistValue + testFromReflectionGenerate + testFromReflectionGetArrayHint + testFromReflectionGetDefaultValue + testFromReflectionGetDefaultValueNotOptional + testFromReflectionGetParameterName + testFromReflectionGetParameterType + testFromReflectionGetReference + testFromReflectionGetWithNativeType + testGenerateIsCorrect + testGeneratedParametersHaveEscapedDefaultValues + testGeneratesSimpleHints + testGetInternalClassDefaultParameterValue + testNameGetterAndSetterPersistValue + testOmitType + testParameterGeneratorReturnsCorrectTypeForNonNamespaceClasses + testPositionGetterAndSetterPersistValue + testSetGetVariadic + testTypeGetterAndSetterPersistValue + testTypeHintFromReflection + testTypeHintFromReflectionGeneratedCode + testTypeHintWithValidClassName + testTypehintsWithNamespaceInNamepsacedClassReturnTypewithBackslash + testVariadicArgumentFromReflection + + + $parameter[3] + + + + + [PropertyGenerator::FLAG_CONSTANT, $flag] + new \stdClass() + + + + bool[][]|string[][]|int[][]|null[][] + + + testOmitType + + + Generator + + + testSetTypeSetValueGenerate + + + assertIsArray + + + + + testPropertyValueAddsSemicolonToValueGenerator + + + + + foo + + + + + $privateClassProperty + $protectedClassProperty + $publicClassProperty + + + + + $privateExtendedClassProperty + $protectedExtendedClassProperty + $publicExtendedClassProperty + + + + + method + + + + + $array + $array + $b + $baz + $con + $float + $number + $number + $param + $val + $val + $value + $value + + + defaultArray + defaultArrayWithValues + defaultConstant + defaultFalse + defaultFloat + defaultNull + defaultNumber + defaultObjectEqualsNullAndNotOptional + defaultTrue + defaultValue + defaultZero + fromArray + hasNativeDocTypes + name + reference + type + + + + + setName + + + + + someFunction + + + + + $_barProperty + $_barStaticProperty + $_bazProperty + $_bazStaticProperty + $_complexType + $fooStaticProperty + + + + + bool + + + $mixed + + + + + bool + + + + + generate + + + TypeableTag + TypeableTag + + + + + 'LaminasTest_Code_NsTest_BarClass' + + + ExceptionInterface::class + + + true + true + + + testAbstractAccessorsReturnsFalse + testAddOneUseTwiceOnlyAddsOne + testAddOneUseWithAliasTwiceOnlyAddsOne + testAddUses + testClassDocBlockAccessors + testClassFromReflectionDiscardParentImplementedInterfaces + testClassFromReflectionThatImplementsInterfaces + testCodeGenerationShouldTakeIntoAccountNamespacesFromReflection + testConstruction + testCreateFromArrayWithDocBlockFromArray + testCreateFromArrayWithDocBlockInstance + testExtendedClassAccessors + testExtendedClassProperies + testGenerateClassAndAddMethod + testHasMethod + testHasMethodInsensitive + testHasProperty + testImplementedInterfacesAccessors + testMethodAccessors + testNameAccessors + testNonNamespaceClassReturnsAllMethods + testPassingANamespacedClassnameShouldGenerateAClassnameWithoutItsNamespace + testPassingANamespacedClassnameShouldGenerateANamespaceDeclaration + testPropertyAccessors + testRemoveMethod + testRemoveMethodInsensitive + testSetMethodNameAlreadyExistsThrowsException + testSetMethodNoMethodOrArrayThrowsException + testSetNameShouldDetermineIfNamespaceSegmentIsPresent + testSetPropertyAlreadyExistsThrowsException + testSetPropertyNoArrayOrPropertyThrowsException + testSetextendedclassShouldIgnoreEmptyClassnameOnGenerate + testSetextendedclassShouldNotIgnoreNonEmptyClassnameOnGenerate + testToString + + + $code + $code + $code + $generated + $generated + $generated + $output + $received + $received + $received + $received + $received + + + $code + $code + $code + $generated + $generated + $generated + $output + $output + $received + $received + $received + + + + + testFromValidTypeString + testIsAGenerator + testRejectsInvalidTypeString + testStringCastFromValidTypeString + testStripsPrefixingBackslashFromClassNames + + + + + 3 => 'e' + + + $constants + + + constantsType + testAllowedPossibleConstantsType + testDefaultInstance + testEscaping + testInvalidConstantsType + testPropertyDefaultValueCanHandleArray + testPropertyDefaultValueCanHandleArrayWithUnsortedKeys + testPropertyDefaultValueCanHandleBool + testPropertyDefaultValueCanHandleComplexArrayOfTypes + testPropertyDefaultValueCanHandleStrings + testPropertyDefaultValueCanHandleUnquotedString + testPropertyDefaultValueConstructor + testPropertyDefaultValueIsSettable + testValidConstantTypes + + + Generator + array + array + array + array + array + + + + + setMethods + + + testAddAndGetPrototype + testFallBackToGeneric + testSetNameOnGenericIsCalledOnce + + + null + + + + + testNamespaceResolverCorrectlyResolvesNames + testNamespaceResolverPersistsNamespace + testNamespaceResolverPersistsUseRules + + + + + 'ReflectionClass' + __NAMESPACE__ . '\\' . $className + + + testGetContentsReturnsContents + testGetContentsReturnsContentsWithImplementsOnSeparateLine + testGetContentsReturnsEmptyContentsOnEvaldCode + testGetContentsReturnsEmptyContentsOnInternalCode + testGetDeclaringFileReturnsFilename + testGetTraits + testInterfaceReturn + testMethodReturns + testParentReturn + testPropertyReturns + testStartLine + + + $parent + + + getName + + + + + testParseName + testParseNameAndEmail + + + + + testParse + + + + + testParseUrl + testParseUrlAndLicenseName + + + + + getReturnType + getReturnType + getReturnType + getReturnType + getReturnType + + + testParseName + testParseNameAndStatic + testParseNameAndStaticAndDescription + testParseNameAndType + testParseNameAndTypeAndStaticAndDescription + + + + + getType + getType + getType + getType + + + testParseName + testParseNameAndDescription + testParseTypeAndName + testParseTypeAndNameAndDescription + + + + + testAllCharactersFromTypenameAreSupported + testMultipleTypesWithDescription + testMultipleTypesWithoutDescription + testSingleTypeWithDescription + testSingleTypeWithoutDescription + + + + + testParse + + + array + + + + + getType + getType + getType + getType + getType + + + testDocBlockContents + testDocBlockLines + testDocBlockLongDescription + testDocBlockShortDescription + testDocBlockTags + testFunctionDocBlockTags + testShortDocBlocks + testTabbedDocBlockTags + testToString + + + getContents + getLongDescription + getShortDescription + getShortDescription + getShortDescription + getStartLine + getTag + getTag + getTag + getTag + getTag + getTag + getTag + getTag + getTag + getTags + getTags + getTags + getTags + getTags + getTags + getTags + getTags + getTags + hasTag + hasTag + + + getDescription + getType + getType + getType + + + + + testFileCanReflectFileWithInterface + testFileCanReflectFileWithUses + testFileConstructorFromAReflectedFilenameInIncludePath + testFileConstructorFromAReflectedFilenameInIncludePathWithoutIncludeFlagEnabled + testFileConstructorFromAReflectedFilenameIncluded + testFileConstructorThrowsExceptionOnNonExistentFile + testFileGetClassReturnsClassReflectionObject + testFileGetClassReturnsFirstClassWithNoOptions + testFileGetClassThrowsExceptionOnNonExistentClassName + testFileGetDocBlockReturnsFileDocBlock + testFileGetFilenameReturnsCorrectFilename + testFileGetFunctionsReturnsFunctions + testFileGetLineNumbersWorks + testFileReflectionShouldNotRaiseNoticesWhenReflectingClosures + testFileReflectorRequiredFunctionsDoNothing + + + getAuthorEmail + getAuthorName + + + getAuthorEmail + getAuthorName + + + include_once $fileToReflect + include_once $fileToReflect + include_once $fileToReflect + include_once $fileToReflect + include_once $fileToReflect + include_once $fileToReflect + include_once $fileToReflect + include_once $fileToRequire + + + + + __NAMESPACE__ . '\\' . $functionName + + + testFunctionBodyReturn + testFunctionClosureBodyReturn + testFunctionClosureContentsReturnWithDocBlock + testFunctionClosureContentsReturnWithoutDocBlock + testFunctionContentsReturnWithDocBlock + testFunctionContentsReturnWithoutDocBlock + testFunctionDocBlockReturn + testGetContentsReturnsEmptyContentsOnEvaldCode + testGetContentsReturnsEmptyContentsOnInternalCode + testGetPrototypeMethod + testInternalFunctionBodyReturn + testInternalFunctionContentsReturn + testParemeterReturn + + + $function1 + $function10 + $function10 + $function2 + $function2 + $function3 + $function4 + $function5 + $function6 + $function7 + $function8 + $function9 + $function9 + $function9 + + + $list1['closure'] + $list2[0] + $list3[0] + + + $function5 + $function6 + $function7 + + + $body + $body + $body + $body + $body + $body + $body + $body + $body + $body + $body + $body + $body + $body + $body + $body + $body + $body + + + $function1 + $function10 + $function10 + $function2 + $function2 + $function3 + $function4 + $function8 + $function9 + $function9 + $function9 + $list1 + $list2 + $list3 + + + + + 'DOMDocument' + 'DOMDocument' + 'DateTime' + 'FooClass' + 'ReflectionClass' + 'ReflectionException' + __NAMESPACE__ . '\\' . $className + + + testCanParseClassBodyWhenUsingTrait + testCodeGetBodyReturnsEmptyWithCommentedFunction + testCodeGetContentsDoesNotThrowExceptionOnDocBlock + testDeclaringClassReturn + testFunctionContentsReturnWithDocBlock + testGetBodyReturnsCorrectBody + testGetContentsReturnsEmptyContentsOnEvaldCode + testGetContentsReturnsEmptyContentsOnInternalCode + testGetContentsWithCoreClass + testGetPrototypeMethod + testInternalFunctionBodyReturn + testInternalMethodContentsReturn + testMethodContentsReturnWithoutDocBlock + testParemeterReturn + testStartLine + + + + + paramType + testCallableTypeHint + testClassReturn + testClassReturnNoClassGivenReturnsNull + testDeclaringClassReturn + testDetectType + testDetectTypeWithDocBlockOnlyTypes + testGetType + testGetTypeWithDocBlockOnlyTypes + testTypeReturn + + + + + testDeclaringClassReturn + + + + + testAllowsMultipleSpacesInDocBlockTagLine + testAllowsMultipleSpacesInDocBlockTagLine2 + testNamespaceInParam + testPropertyVarDoc + testReturnClassWithNamespace + testTagDescriptionIsReturned + testTagShouldAllowJustTagNameInDocBlockTagLine + testTagShouldAllowMultipleWhitespacesBeforeDescription + testToString + testType + testTypeParam + testVariableName + + + array + + + getAuthorEmail + getAuthorName + getContent + getContent + getDescription + getDescription + getDescription + getName + getTag + getTag + getTag + getTag + getTag + getTag + getTag + getTag + getTag + getTag + getTag + getTag + getType + getType + getType + getType + getType + getType + getVariableName + getVariableName + getVariableName + + + $tag + + + getAuthorEmail + getAuthorName + getContent + getContent + getDescription + getDescription + getDescription + getType + getType + getType + getType + getType + getType + getVariableName + getVariableName + getVariableName + + + + + foo + + + + + $bar + $foo + + + test1 + test2 + + + + + $fileScanner + + + $fileScanner + + + setFileScanner + + + createFileScanner + + + $this->fileScanner + + + + + $fileScanner + + + $fileScanner + + + setFileScanner + + + createFileScanner + + + $this->fileScanner + + + + + $fileScanner + + + $fileScanner + + + setFileScanner + + + createFileScanner + + + $this->fileScanner + + + + + $content + + + $content + + + initialize + + + $content + + + + + 'mixedValue' + + + int + + + $two + $two + + + + + $foo + + + function($foo) { return $foo; } + + + $one + $three + $two + + + doSomethingAgain + doSomethingElse + doStaticSomething + emptyFunction + getCacheKey + inline1 + inline2 + inline3 + visibility + + + $arg + $argElement + + + $arg + $argElement + + + + + Something + + + doSomething + + + Something + + + + + $onlyType + $typeDescription + $typeName + $typeNameDescription + + + + + [] + + + getIterator + + + $param1 + + + $_prop1 + $_prop2 + + + getProp1 + getProp2 + + + + + 'mixedValue' + + + int + + + $two + $two + + + + + Laminas\Code\Reflection\DocBlock + + + Laminas\Code\Reflection\DocBlock + + + + + Laminas\Code\Reflection\DocBlock + + + Laminas\Code\Reflection\DocBlock + + + + + [] + + + getIterator + + + $param1 + + + $_prop1 + $_prop2 + + + getProp1 + getProp2 + + + + + $autoFetchingAllowed + + + Model_AbstractModel + + + $dummy + + + Model_AbstractModel + + + + + $arg + + + function($arg) { + function() + function() + function() use ($list1) { return 'function 8'; } + function() { return $c = function() { return 'function7'; }; return $c(); } + function() { return 'bar'; } + function() { return 'function2'; } + function() { return 'function5'; } + function() { return 'function6'; } + function() {} + + + + + function() { return 'bar'; } + function() { return 'function10'; } + + + $arg + + + function1 + function10 + function11 + function12 + function4 + function5 + function6 + function7 + function8 + function9 + + + + + testAggregationOfDirectories + + + + + assertDifferentInternalFileScanner + assertSameInternalFileScanner + getCacheCount + testCachingFileScannerWillUseSameInternalFileScannerWithMatchingFileName + + + $cacheProp->getValue($cfs) + + + + + FooClass + FooClass + FooClass + FooClass + FooClass + FooClass + FooClass + FooClass + FooClass + FooClass + FooClass + FooClass + FooClass + FooClass + + + testAbstractClassIsNotInstantiable + testClassIsInstantiable + testClassScannerCanGetTraitMethodsInGetMethods + testClassScannerCanReturnLineNumbers + testClassScannerCanScanClassAndGetTraitsAliases + testClassScannerCanScanClassThatUsesTraits + testClassScannerCanScanInterface + testClassScannerCanScanTraits + testClassScannerHasClassInformation + testClassScannerHasConstant + testClassScannerHasMethods + testClassScannerHasProperties + testClassScannerReturnsMethodsWithMethodScanners + testClassScannerReturnsPropertiesWithPropertyScanners + testGetConstantsReturnsConstantNames + testGetConstantsReturnsInstancesOfConstantScanner + testGetInterfacesFromInterface + testGetMethodsThrowsExceptionOnDuplicateMethods + testHasConstant + testHasMethod + testHasProperty + testInterfaceIsNotInstantiable + testTraitIsNotInstantiable + + + $method->getBody + FooClass::class + FooClass::class + FooClass::class + FooClass::class + FooClass::class + FooClass::class + FooClass::class + FooClass::class + FooClass::class + FooClass::class + FooClass::class + FooClass::class + FooClass::class + + + getConstantNames + getConstants + getConstants + getLineStart + getLineStart + getMethodNames + getMethods + getMethods + getName + getName + getProperties + getPropertyNames + hasConstant + hasMethod + hasProperty + isAbstract + isAbstract + isInterface + isInterface + isTrait + isTrait + isTrait + isTrait + isTrait + + + assertIsArray + + + $testMethod === 'bar' + $testMethod === 'bar' + + + $method->getBody + + + + + FooClass + + + testConstantScannerHasConstantInformation + + + FooClass::class + + + getConstant + + + getDocComment + getName + getName + getName + getValue + getValue + getValue + + + + + testCreatesClass + + + + + testDocBlockScannerDescriptions + testDocBlockScannerParsesTagsWithNoValuesProperly + + + $tags[0] + $tags[0] + + + $tags[0]['name'] + $tags[0]['value'] + + + + + testFileScannerCanReturnClasses + + + getName + getName + + + + + '\Laminas\Code\Exception\InvalidArgumentException' + + + FooClass + + + testMethodScannerHasMethodInformation + testMethodScannerMethodSignatureLatestOptionalParamHasParentheses + testMethodScannerParsesClassNames + testMethodScannerReturnsBodyMethods + testMethodScannerReturnsLineNumbersForMethods + testMethodScannerReturnsParameterScanner + testMethodScannerReturnsParameters + testMethodScannerReturnsPropertyWithNoDefault + testMethodScannerSetVisibilityAcceptsIntegerTokens + testMethodScannerSetVisibilityThrowsInvalidArgumentException + testMethodScannerWorksWithSingleAbstractFunction + + + FooClass::class + + + getMethod + getMethod + getMethod + getMethod + getMethod + getMethod + getMethod + getMethod + getMethod + + + assertIsArray + + + + + testParameterScannerHasParameterInformation + + + getMethod + + + + + assertNull + + + FooClass + + + testPropertyScannerHasPropertyInformation + testPropertyScannerReturnsProperValue + testPropertyScannerReturnsProperValueRegardlessOfOrder + + + FooClass::class + + + getProperties + getProperty + getProperty + + + getName + getName + getName + getValue + getValue + getValue + getValue + getValue + getValueType + getValueType + isPrivate + isPrivate + isPrivate + isProtected + isProtected + isProtected + isPublic + isPublic + isPublic + isStatic + isStatic + isStatic + + + + + $password + $username + + + $password + $username + + + $this->password + $this->username + + + + + $dbAdapter + + + setDbAdapter + + + $this->dbAdapter + + + + + $mapper + + + find + setMapper + + + $this->mapper + + + + + findEntityOfTypeB + + + + + require_once __DIR__ . '/BarTrait.php' + require_once __DIR__ . '/TraitWithSameMethods.php' + + + bazFooBar + + + + + FooClass + + + testScannerCanHandleMultipleNamespaceFile + testScannerReturnsClassNames + testScannerReturnsClassNamesForTraits + testScannerReturnsClassScanner + testScannerReturnsFunctions + testScannerReturnsNamespaces + testScannerReturnsNamespacesInNotNamespacedClasses + + + $use['use'] + + + $foundUses[] + $use + + + getName + getName + + + assertIsArray + assertIsArray + assertIsArray + assertIsArray + assertIsArray + + + + + $config + + + getConfig + helloWorld + + + + + FooBarBaz\BazBarFoo + + + include __DIR__ . '/foo/bar/baz.php' + + + $one + $two + + + $bar + + + five + four + one + three + two + + + FooBarBaz\BazBarFoo + + + + + bar + + + + + $foo + + + + + baz + + + + + classParameter + closureParameter + importedClosureParameter + otherClassParameter + parentParameter + selfParameter + + + + + byRefReturn + + + + + DocBlockOnlyHintsClass + InternalHintsClass + array + bool + callable + float + int + self + string + + + + + include __DIR__ . '/foo/bar/baz.php' + + + E\Blarg + Local\SubClass + + + + + fooBarBaz + + + + + foo + fooBarBaz + + + + + arrayParameter + boolParameter + callableParameter + floatParameter + intParameter + stringParameter + + + + + ?iterable + iterable + + + iterableParameter + nullDefaultIterableParameter + nullableIterableParameter + + + + + setGlobalStuff + + + Bam + Bar\Boo + GlobalStuff + SM\Blah + + + + + fooMethod + + + + + arrayParameter + boolParameter + callableParameter + floatParameter + intParameter + nullDefaultHintsClassParameter + selfParameter + stringParameter + + + + + arrayParameter + boolParameter + callableParameter + floatParameter + intParameter + nullableDefaultHintsClassParameter + parentParameter + selfParameter + stringParameter + + + + + arrayParameter + boolParameter + callableParameter + floatParameter + intParameter + nullableHintsClassParameter + parentParameter + selfParameter + stringParameter + + + + + ?InternalHintsClass + ?NullableReturnTypeHintedClass + ?array + ?bool + ?callable + ?float + ?int + ?parent + ?self + ?string + + + + + ?object + object + + + nullDefaultObjectParameter + nullableObjectParameter + objectParameter + + + + + getCache + + + CachingFileScannerProxy + CachingFileScannerProxy + + + + + InternalHintsClass + ReturnTypeHintedClass + array + bool + callable + float + int + parent + self + string + + + + + bazFooBar + + + + + $bar + $bar + $foo + $foo + + + byRefTypeHintedVariadic + byRefVariadic + firstVariadicParameter + secondVariadicParameter + typeHintedVariadicParameter + + + + + bar_foo + foo_bar + + + diff --git a/psalm.xml b/psalm.xml new file mode 100644 index 00000000..788bbc00 --- /dev/null +++ b/psalm.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +