diff --git a/.gitattributes b/.gitattributes index baa3232..455e1e0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -19,8 +19,6 @@ /phpstan-tests.neon export-ignore /phpstan.neon.dist export-ignore /phpunit.xml.dist export-ignore -/psalm-baseline.xml export-ignore -/psalm.xml export-ignore /resources/ export-ignore /SECURITY.md export-ignore /tests/ export-ignore diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index df9c3b1..f27f5fc 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -63,9 +63,6 @@ jobs: - name: "Statically analyze code (PHPStan)" run: "composer phpstan -- --ansi" - - name: "Statically analyze code (Psalm)" - run: "composer psalm -- --shepherd" - benchmark: name: "Benchmark" needs: ["coding-standards", "static-analysis"] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 75d91f5..8535a9e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -129,9 +129,8 @@ composer phpcbf ### Static Analysis -This project uses a combination of [PHPStan](https://github.com/phpstan/phpstan) -and [Psalm](https://github.com/vimeo/psalm) to provide static analysis of PHP -code. +This project uses [PHPStan](https://github.com/phpstan/phpstan) to provide +static analysis of PHP code. CaptainHook will run static analysis checks before committing. diff --git a/README.md b/README.md index 2720a41..5a5fcec 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,6 @@ Read License Build Status Codecov Code Coverage - Psalm Type Coverage

ramsey/uuid is a PHP library for generating and working with universally unique diff --git a/composer.json b/composer.json index 084c537..c84590a 100644 --- a/composer.json +++ b/composer.json @@ -24,16 +24,13 @@ "php-mock/php-mock-mockery": "^1.3", "php-parallel-lint/php-parallel-lint": "^1.4.0", "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.1", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "psalm/plugin-phpunit": "^0.16.1", - "ramsey/composer-repl": "^1.4", "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.22" + "squizlabs/php_codesniffer": "^3.5" }, "replace": { "rhumsaa/uuid": "self.version" @@ -66,8 +63,7 @@ "captainhook/plugin-composer": true, "ergebnis/composer-normalize": true, "phpstan/extension-installer": true, - "dealerdirect/phpcodesniffer-composer-installer": true, - "ramsey/composer-repl": true + "dealerdirect/phpcodesniffer-composer-installer": true }, "sort-packages": true }, @@ -77,29 +73,21 @@ } }, "scripts": { - "analyze": [ - "@phpstan", - "@psalm" - ], + "analyze": "@phpstan", "build:clean": "git clean -fX build/", "lint": "parallel-lint src tests", "lint:paths": "parallel-lint", "phpbench": "phpbench run", "phpcbf": "phpcbf -vpw --cache=build/cache/phpcs.cache", "phpcs": "phpcs --cache=build/cache/phpcs.cache", - "phpstan": [ - "phpstan analyse --no-progress --memory-limit=1G", - "phpstan analyse -c phpstan-tests.neon --no-progress --memory-limit=1G" - ], + "phpstan": "phpstan analyse --memory-limit=1G", "phpunit": "phpunit --verbose --colors=always", "phpunit-coverage": "phpunit --verbose --colors=always --coverage-html build/coverage", - "psalm": "psalm --show-info=false --config=psalm.xml", "test": [ "@lint", "@phpbench", "@phpcs", "@phpstan", - "@psalm", "@phpunit" ] } diff --git a/composer.lock b/composer.lock index d54646d..19ade73 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e17d280f45e686b94dad8bca568a2a98", + "content-hash": "fc6577f454e08f13e218ac9add695c90", "packages": [ { "name": "brick/math", @@ -70,16 +70,16 @@ "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.2", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", "shasum": "" }, "require": { @@ -91,8 +91,8 @@ "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", "phpunit/phpunit": "^7 | ^8 | ^9", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" + "react/promise": "^2", + "vimeo/psalm": "^3.12" }, "type": "library", "extra": { @@ -147,7 +147,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.2" + "source": "https://github.com/amphp/amp/tree/v2.6.4" }, "funding": [ { @@ -155,20 +155,20 @@ "type": "github" } ], - "time": "2022-02-20T17:52:18+00:00" + "time": "2024-03-21T18:52:26+00:00" }, { "name": "amphp/byte-stream", - "version": "v1.8.1", + "version": "v1.8.2", "source": { "type": "git", "url": "https://github.com/amphp/byte-stream.git", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", "shasum": "" }, "require": { @@ -184,11 +184,6 @@ "psalm/phar": "^3.11.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { "files": [ "lib/functions.php" @@ -212,7 +207,7 @@ } ], "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "http://amphp.org/byte-stream", + "homepage": "https://amphp.org/byte-stream", "keywords": [ "amp", "amphp", @@ -222,9 +217,8 @@ "stream" ], "support": { - "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" + "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" }, "funding": [ { @@ -232,7 +226,7 @@ "type": "github" } ], - "time": "2021-03-30T17:13:30+00:00" + "time": "2024-04-13T18:00:56+00:00" }, { "name": "captainhook/captainhook", @@ -1762,16 +1756,16 @@ }, { "name": "felixfbecker/language-server-protocol", - "version": "v1.5.2", + "version": "v1.5.3", "source": { "type": "git", "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" + "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/a9e113dbc7d849e35b8776da39edaf4313b7b6c9", + "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9", "shasum": "" }, "require": { @@ -1812,9 +1806,9 @@ ], "support": { "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.3" }, - "time": "2022-03-02T22:36:06+00:00" + "time": "2024-04-30T00:40:11+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -2130,16 +2124,16 @@ }, { "name": "netresearch/jsonmapper", - "version": "v4.1.0", + "version": "v4.5.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "cfa81ea1d35294d64adb9c68aa4cb9e92400e53f" + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/cfa81ea1d35294d64adb9c68aa4cb9e92400e53f", - "reference": "cfa81ea1d35294d64adb9c68aa4cb9e92400e53f", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", "shasum": "" }, "require": { @@ -2150,7 +2144,7 @@ "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", "squizlabs/php_codesniffer": "~3.5" }, "type": "library", @@ -2175,9 +2169,9 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.1.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" }, - "time": "2022-12-08T20:46:14+00:00" + "time": "2024-09-08T10:13:13+00:00" }, { "name": "nikic/php-parser", @@ -2954,24 +2948,27 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.2", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d" + "reference": "153ae662783729388a584b4361f2545e4d841e3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d", - "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", + "reference": "153ae662783729388a584b4361f2545e4d841e3c", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" }, "require-dev": { "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.1", @@ -3003,28 +3000,28 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" }, - "time": "2022-10-14T12:47:21+00:00" + "time": "2024-02-23T11:10:43+00:00" }, { "name": "phpstan/extension-installer", - "version": "1.2.0", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/phpstan/extension-installer.git", - "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40" + "reference": "85e90b3942d06b2326fba0403ec24fe912372936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f06dbb052ddc394e7896fcd1cfcd533f9f6ace40", - "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/85e90b3942d06b2326fba0403ec24fe912372936", + "reference": "85e90b3942d06b2326fba0403ec24fe912372936", "shasum": "" }, "require": { "composer-plugin-api": "^2.0", "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.8.0" + "phpstan/phpstan": "^1.9.0 || ^2.0" }, "require-dev": { "composer/composer": "^2.0", @@ -3045,11 +3042,15 @@ "MIT" ], "description": "Composer plugin for automatic installation of PHPStan extensions", + "keywords": [ + "dev", + "static analysis" + ], "support": { "issues": "https://github.com/phpstan/extension-installer/issues", - "source": "https://github.com/phpstan/extension-installer/tree/1.2.0" + "source": "https://github.com/phpstan/extension-installer/tree/1.4.3" }, - "time": "2022-10-17T12:59:16+00:00" + "time": "2024-09-04T20:21:43+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -3098,20 +3099,20 @@ }, { "name": "phpstan/phpstan", - "version": "1.9.4", + "version": "2.1.17", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "d03bccee595e2146b7c9d174486b84f4dc61b0f2" + "reference": "89b5ef665716fa2a52ecd2633f21007a6a349053" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d03bccee595e2146b7c9d174486b84f4dc61b0f2", - "reference": "d03bccee595e2146b7c9d174486b84f4dc61b0f2", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/89b5ef665716fa2a52ecd2633f21007a6a349053", + "reference": "89b5ef665716fa2a52ecd2633f21007a6a349053", "shasum": "" }, "require": { - "php": "^7.2|^8.0" + "php": "^7.4|^8.0" }, "conflict": { "phpstan/phpstan-shim": "*" @@ -3136,8 +3137,11 @@ "static analysis" ], "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.9.4" + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, "funding": [ { @@ -3147,39 +3151,34 @@ { "url": "https://github.com/phpstan", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" } ], - "time": "2022-12-17T13:33:52+00:00" + "time": "2025-05-21T20:55:28+00:00" }, { "name": "phpstan/phpstan-mockery", - "version": "1.1.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-mockery.git", - "reference": "245b17ccd00f04be3c6b9fc6645f63793b37b2ea" + "reference": "89a949d0ac64298e88b7c7fa00caee565c198394" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-mockery/zipball/245b17ccd00f04be3c6b9fc6645f63793b37b2ea", - "reference": "245b17ccd00f04be3c6b9fc6645f63793b37b2ea", + "url": "https://api.github.com/repos/phpstan/phpstan-mockery/zipball/89a949d0ac64298e88b7c7fa00caee565c198394", + "reference": "89a949d0ac64298e88b7c7fa00caee565c198394", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.5.0" + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.0" }, "require-dev": { - "mockery/mockery": "^1.2.4", - "nikic/php-parser": "^4.13.0", + "mockery/mockery": "^1.6.11", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5" + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6" }, "type": "phpstan-extension", "extra": { @@ -3201,36 +3200,37 @@ "description": "PHPStan Mockery extension", "support": { "issues": "https://github.com/phpstan/phpstan-mockery/issues", - "source": "https://github.com/phpstan/phpstan-mockery/tree/1.1.0" + "source": "https://github.com/phpstan/phpstan-mockery/tree/2.0.0" }, - "time": "2022-05-09T13:12:35+00:00" + "time": "2024-10-14T03:18:12+00:00" }, { "name": "phpstan/phpstan-phpunit", - "version": "1.3.3", + "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-phpunit.git", - "reference": "54a24bd23e9e80ee918cdc24f909d376c2e273f7" + "reference": "6b92469f8a7995e626da3aa487099617b8dfa260" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/54a24bd23e9e80ee918cdc24f909d376c2e273f7", - "reference": "54a24bd23e9e80ee918cdc24f909d376c2e273f7", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/6b92469f8a7995e626da3aa487099617b8dfa260", + "reference": "6b92469f8a7995e626da3aa487099617b8dfa260", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.9.3" + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.0.4" }, "conflict": { "phpunit/phpunit": "<7.0" }, "require-dev": { - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^5", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5" + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6" }, "type": "phpstan-extension", "extra": { @@ -3253,9 +3253,9 @@ "description": "PHPUnit extensions and rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.3.3" + "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.6" }, - "time": "2022-12-21T15:25:00+00:00" + "time": "2025-03-26T12:47:06+00:00" }, { "name": "phpunit/php-code-coverage", @@ -3889,265 +3889,25 @@ }, "time": "2021-07-14T16:46:02+00:00" }, - { - "name": "psy/psysh", - "version": "v0.11.10", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "e9eadffbed9c9deb5426fd107faae0452bf20a36" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/e9eadffbed9c9deb5426fd107faae0452bf20a36", - "reference": "e9eadffbed9c9deb5426fd107faae0452bf20a36", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "^4.0 || ^3.1", - "php": "^8.0 || ^7.0.8", - "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" - }, - "conflict": { - "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." - }, - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.11.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], - "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.10" - }, - "time": "2022-12-23T17:47:18+00:00" - }, - { - "name": "ramsey/composer-repl", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/ramsey/composer-repl.git", - "reference": "24553610c07df626c7dfd44ef328b7ae3349366f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/composer-repl/zipball/24553610c07df626c7dfd44ef328b7ae3349366f", - "reference": "24553610c07df626c7dfd44ef328b7ae3349366f", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^2", - "php": "^7.4 || ^8", - "ramsey/composer-repl-lib": "^1.1" - }, - "require-dev": { - "captainhook/captainhook": "^5.10", - "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.25", - "roave/security-advisories": "dev-latest" - }, - "type": "composer-plugin", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - }, - "captainhook": { - "force-install": true - }, - "class": "Ramsey\\Dev\\Repl\\Composer\\ReplPlugin", - "ramsey/conventional-commits": { - "configFile": "conventional-commits.json" - }, - "ramsey/devtools": { - "command-prefix": "dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A REPL for PHP built into Composer.", - "keywords": [ - "REPL", - "psysh", - "shell" - ], - "support": { - "issues": "https://github.com/ramsey/composer-repl/issues", - "source": "https://github.com/ramsey/composer-repl/tree/1.4.1" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - } - ], - "time": "2022-04-17T02:07:54+00:00" - }, - { - "name": "ramsey/composer-repl-lib", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/ramsey/composer-repl-lib.git", - "reference": "53f7666f1f4b49711741ad22b633671a312a6fdc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/composer-repl-lib/zipball/53f7666f1f4b49711741ad22b633671a312a6fdc", - "reference": "53f7666f1f4b49711741ad22b633671a312a6fdc", - "shasum": "" - }, - "require": { - "composer/composer": "^2.1.9", - "php": "^7.4 || ^8", - "phpunit/phpunit": "^6 || ^7 || ^8 || ^9", - "psy/psysh": "^0.11.0", - "symfony/console": "^4.4.30 || ^5.3.7 || ^6", - "symfony/process": "^4.4.30 || ^5.3.7 || ^6" - }, - "require-dev": { - "captainhook/captainhook": "^5.10", - "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.25", - "hamcrest/hamcrest-php": "^2.0", - "mockery/mockery": "^1.5", - "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-mockery": "^1.0", - "phpstan/phpstan-phpunit": "^1.1", - "psalm/plugin-mockery": "^0.9.1", - "psalm/plugin-phpunit": "^0.16.1", - "ramsey/coding-standard": "^2.0.3", - "roave/security-advisories": "dev-latest", - "vimeo/psalm": "^4.22" - }, - "bin": [ - "bin/repl" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - }, - "captainhook": { - "force-install": true - }, - "ramsey/composer-repl": { - "includes": [ - "repl.php" - ] - }, - "ramsey/conventional-commits": { - "configFile": "conventional-commits.json" - } - }, - "autoload": { - "psr-4": { - "Ramsey\\Dev\\Repl\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "The library behind ramsey/composer-repl, allowing for extension of the ramsey/composer-repl Composer plugin and non-plugin use of the repl command.", - "keywords": [ - "REPL", - "psysh", - "shell" - ], - "support": { - "issues": "https://github.com/ramsey/composer-repl-lib/issues", - "source": "https://github.com/ramsey/composer-repl-lib/tree/1.1.0" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - } - ], - "time": "2022-04-17T01:54:57+00:00" - }, { "name": "react/promise", - "version": "v2.9.0", + "version": "v2.11.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" + "reference": "1a8460931ea36dc5c76838fec5734d55c88c6831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", + "url": "https://api.github.com/repos/reactphp/promise/zipball/1a8460931ea36dc5c76838fec5734d55c88c6831", + "reference": "1a8460931ea36dc5c76838fec5734d55c88c6831", "shasum": "" }, "require": { "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" }, "type": "library", "autoload": { @@ -4191,19 +3951,15 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.9.0" + "source": "https://github.com/reactphp/promise/tree/v2.11.0" }, "funding": [ { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2022-02-11T10:27:51+00:00" + "time": "2023-11-16T16:16:50+00:00" }, { "name": "sebastian/cli-parser", @@ -5458,16 +5214,16 @@ }, { "name": "seld/signal-handler", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/Seldaek/signal-handler.git", - "reference": "f69d119511dc0360440cdbdaa71829c149b7be75" + "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/f69d119511dc0360440cdbdaa71829c149b7be75", - "reference": "f69d119511dc0360440cdbdaa71829c149b7be75", + "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", + "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", "shasum": "" }, "require": { @@ -5513,9 +5269,9 @@ ], "support": { "issues": "https://github.com/Seldaek/signal-handler/issues", - "source": "https://github.com/Seldaek/signal-handler/tree/2.0.1" + "source": "https://github.com/Seldaek/signal-handler/tree/2.0.2" }, - "time": "2022-07-20T18:31:45+00:00" + "time": "2023-09-03T09:24:00+00:00" }, { "name": "slevomat/coding-standard", @@ -6327,29 +6083,26 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.27.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6386,7 +6139,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.32.0" }, "funding": [ { @@ -6402,33 +6155,30 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.27.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6469,7 +6219,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" }, "funding": [ { @@ -6485,33 +6235,30 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.27.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6548,7 +6295,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0" }, "funding": [ { @@ -6564,7 +6311,7 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", @@ -6798,94 +6545,6 @@ ], "time": "2022-12-14T16:11:27+00:00" }, - { - "name": "symfony/var-dumper", - "version": "v6.2.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "fdbadd4803bc3c96ef89238c9c9e2ebe424ec2e0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/fdbadd4803bc3c96ef89238c9c9e2ebe424ec2e0", - "reference": "fdbadd4803bc3c96ef89238c9c9e2ebe424ec2e0", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<5.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.2.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-12-22T17:55:15+00:00" - }, { "name": "theseer/tokenizer", "version": "1.2.1", @@ -7008,10 +6667,10 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev", - "dev-3.x": "3.x-dev", + "dev-1.x": "1.x-dev", "dev-2.x": "2.x-dev", - "dev-1.x": "1.x-dev" + "dev-3.x": "3.x-dev", + "dev-master": "4.x-dev" } }, "autoload": { diff --git a/phpstan-tests.neon b/phpstan-tests.neon deleted file mode 100644 index 03e164e..0000000 --- a/phpstan-tests.neon +++ /dev/null @@ -1,32 +0,0 @@ -parameters: - tmpDir: ./build/cache/phpstan - level: max - paths: - - ./tests - bootstrapFiles: - - ./tests/static-analysis/stubs.php - checkMissingIterableValueType: false - reportUnmatchedIgnoredErrors: false - excludePaths: - analyse: - - ./tests/ExpectedBehaviorTest.php - - ./tests/static-analysis/stubs.php - ignoreErrors: - - - message: "#^Call to static method Ramsey\\\\Uuid\\\\.+ on a separate line has no effect\\.$#" - paths: - - ./tests/*Test.php - - ./tests/benchmark/*Bench.php - - - message: "#^Call to method Ramsey\\\\Uuid\\\\.+ on a separate line has no effect\\.$#" - paths: - - ./tests/Builder/*Test.php - - ./tests/Converter/*Test.php - - ./tests/Generator/*Test.php - - ./tests/Guid/*Test.php - - ./tests/Nonstandard/*Test.php - - ./tests/Rfc4122/*Test.php - - - message: "#^Method Ramsey\\\\Uuid\\\\.+ should return non-empty-string but returns string\\.$#" - paths: - - ./tests/static-analysis/ValidUuidIsNonEmpty.php diff --git a/phpstan.neon.dist b/phpstan.neon.dist index c90f431..4afc863 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -1,25 +1,13 @@ parameters: tmpDir: ./build/cache/phpstan level: max + treatPhpDocTypesAsCertain: false paths: - ./src - checkMissingIterableValueType: false + - ./tests bootstrapFiles: - ./tests/static-analysis/stubs.php - ignoreErrors: - - - message: '#^Comparison operation ">" between 6 and 0 is always true\.$#' - count: 1 - path: ./src/Generator/CombGenerator.php - - - message: '#^Result of \|\| is always false\.$#' - count: 1 - path: ./src/Generator/DceSecurityGenerator.php - - - message: '#^Comparison operation ">" between int<0, 63>\|null and 63 is always false\.$#' - count: 1 - path: ./src/Generator/DceSecurityGenerator.php - - - message: '#^Comparison operation "<" between int<0, 63>\|null and 0 is always false\.$#' - count: 1 - path: ./src/Generator/DceSecurityGenerator.php + excludePaths: + analyse: + - ./tests/ExpectedBehaviorTest.php + - ./tests/static-analysis/stubs.php diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 519e3a0..e69de29 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1,133 +0,0 @@ - - - - - - $this - - - - - $this - $this - - - - - $calculator - $dceSecurityGenerator - $numberConverter - $timeConverter - $timeGenerator - - - - - uuid_generate_md5 - uuid_generate_sha1 - uuid_parse - - - - - $this - $this - $this - - - - - $this - $this - $this - - - - - shell_exec('id -g') - shell_exec('id -u') - shell_exec('net user %username% | findstr /b /i "Local Group Memberships"') - shell_exec('whoami /user /fo csv /nh') - shell_exec('wmic group get name,sid | findstr /b /i ' . escapeshellarg($firstGroup)) - - - - - $macs - - - $macs[] - - - - - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - - - - - NonstandardUuidV6 - - - - - $this->isNegative - - - - - getFactory - getFactory - getFactory - getFactory - getFactory - getFactory - - - - - $this->codec - $this->codec - $this->codec - $this->isDefaultFeatureSet - $this->nameGenerator - $this->numberConverter - - - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - $this - - - diff --git a/psalm.xml b/psalm.xml index 65815e5..e69de29 100644 --- a/psalm.xml +++ b/psalm.xml @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/src/BinaryUtils.php b/src/BinaryUtils.php index 16fcbec..e730f04 100644 --- a/src/BinaryUtils.php +++ b/src/BinaryUtils.php @@ -35,8 +35,6 @@ class BinaryUtils * variant is applied * * @return int The 16-bit clock sequence multiplexed with the UUID variant - * - * @psalm-pure */ public static function applyVariant(int $clockSeq, Variant $variant = Variant::Rfc4122): int { @@ -59,8 +57,6 @@ class BinaryUtils * * @return int The 16-bit time_hi field of the timestamp multiplexed with * the UUID version number - * - * @psalm-pure */ public static function applyVersion(int $timeHi, Version $version): int { @@ -80,22 +76,20 @@ class BinaryUtils * @param Version $version The RFC 4122 version to apply * * @return non-empty-string A 16-byte string with the UUID version and variant applied - * - * @psalm-pure */ public static function applyVersionAndVariant( string $bytes, Version $version, Variant $variant = Variant::Rfc4122 ): string { - /** @var array $unpackedTime */ + /** @var int[] $unpackedTime */ $unpackedTime = unpack('n*', substr($bytes, 6, 2)); - $timeHi = (int) $unpackedTime[1]; + $timeHi = $unpackedTime[1]; $timeHiAndVersion = pack('n*', self::applyVersion($timeHi, $version)); - /** @var array $unpackedClockSeq */ + /** @var int[] $unpackedClockSeq */ $unpackedClockSeq = unpack('n*', substr($bytes, 8, 2)); - $clockSeqHi = (int) $unpackedClockSeq[1]; + $clockSeqHi = $unpackedClockSeq[1]; $clockSeqHiAndReserved = pack('n*', self::applyVariant($clockSeqHi, $variant)); $bytes = substr_replace($bytes, $timeHiAndVersion, 6, 2); diff --git a/src/Builder/FallbackBuilder.php b/src/Builder/FallbackBuilder.php index 2728d3c..4496e23 100644 --- a/src/Builder/FallbackBuilder.php +++ b/src/Builder/FallbackBuilder.php @@ -23,7 +23,7 @@ use Ramsey\Uuid\UuidInterface; * FallbackBuilder builds a UUID by stepping through a list of UUID builders * until a UUID can be constructed without exceptions * - * @psalm-immutable + * @immutable */ class FallbackBuilder implements UuidBuilderInterface { @@ -42,8 +42,6 @@ class FallbackBuilder implements UuidBuilderInterface * @param non-empty-string $bytes The byte string from which to construct a UUID * * @return UuidInterface an instance of a UUID object - * - * @psalm-pure */ public function build(CodecInterface $codec, string $bytes): UuidInterface { diff --git a/src/Builder/UuidBuilderInterface.php b/src/Builder/UuidBuilderInterface.php index a6638f1..fb5d341 100644 --- a/src/Builder/UuidBuilderInterface.php +++ b/src/Builder/UuidBuilderInterface.php @@ -20,7 +20,7 @@ use Ramsey\Uuid\UuidInterface; /** * A UUID builder builds instances of UuidInterface * - * @psalm-immutable + * @immutable */ interface UuidBuilderInterface { @@ -32,8 +32,6 @@ interface UuidBuilderInterface * * @return UuidInterface Implementations may choose to return more specific * instances of UUIDs that implement UuidInterface - * - * @psalm-pure */ public function build(CodecInterface $codec, string $bytes): UuidInterface; } diff --git a/src/Codec/CodecInterface.php b/src/Codec/CodecInterface.php index 8ef1c63..6def8cd 100644 --- a/src/Codec/CodecInterface.php +++ b/src/Codec/CodecInterface.php @@ -19,7 +19,7 @@ use Ramsey\Uuid\UuidInterface; /** * A codec encodes and decodes a UUID according to defined rules * - * @psalm-immutable + * @immutable */ interface CodecInterface { diff --git a/src/Codec/GuidStringCodec.php b/src/Codec/GuidStringCodec.php index 46389cc..04c65e0 100644 --- a/src/Codec/GuidStringCodec.php +++ b/src/Codec/GuidStringCodec.php @@ -26,7 +26,7 @@ use function substr; * * @see Guid * - * @psalm-immutable + * @immutable */ class GuidStringCodec extends StringCodec { diff --git a/src/Codec/OrderedTimeCodec.php b/src/Codec/OrderedTimeCodec.php index 4276891..9c05186 100644 --- a/src/Codec/OrderedTimeCodec.php +++ b/src/Codec/OrderedTimeCodec.php @@ -41,7 +41,7 @@ use function substr; * * @link https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/ Storing UUID Values in MySQL * - * @psalm-immutable + * @immutable */ class OrderedTimeCodec extends StringCodec { @@ -49,7 +49,7 @@ class OrderedTimeCodec extends StringCodec * Returns a binary string representation of a UUID, with the timestamp * fields rearranged for optimized storage * - * @inheritDoc + * @return non-empty-string */ public function encodeBinary(UuidInterface $uuid): string { @@ -86,12 +86,7 @@ class OrderedTimeCodec extends StringCodec ); } - /** - * Rearrange the bytes to their original order. - * - * @psalm-suppress UnnecessaryVarAnnotation - * @phpstan-var non-empty-string $rearrangedBytes - */ + // Rearrange the bytes to their original order. $rearrangedBytes = $bytes[4] . $bytes[5] . $bytes[6] . $bytes[7] . $bytes[2] . $bytes[3] . $bytes[0] . $bytes[1] diff --git a/src/Codec/StringCodec.php b/src/Codec/StringCodec.php index e124ba9..c4c6fe8 100644 --- a/src/Codec/StringCodec.php +++ b/src/Codec/StringCodec.php @@ -33,7 +33,7 @@ use function substr; * * @link http://tools.ietf.org/html/rfc4122 * - * @psalm-immutable + * @immutable */ class StringCodec implements CodecInterface { @@ -61,6 +61,9 @@ class StringCodec implements CodecInterface ); } + /** + * @return non-empty-string + */ public function encodeBinary(UuidInterface $uuid): string { return $uuid->getFields()->getBytes(); diff --git a/src/Codec/TimestampFirstCombCodec.php b/src/Codec/TimestampFirstCombCodec.php index 81e084f..e7cf97d 100644 --- a/src/Codec/TimestampFirstCombCodec.php +++ b/src/Codec/TimestampFirstCombCodec.php @@ -46,10 +46,13 @@ use function substr_replace; * * @link https://www.informit.com/articles/printerfriendly/25862 The Cost of GUIDs as Primary Keys * - * @psalm-immutable + * @immutable */ class TimestampFirstCombCodec extends StringCodec { + /** + * @return non-empty-string + */ public function encode(UuidInterface $uuid): string { $bytes = $this->swapBytes($uuid->getFields()->getBytes()); @@ -65,6 +68,9 @@ class TimestampFirstCombCodec extends StringCodec ); } + /** + * @return non-empty-string + */ public function encodeBinary(UuidInterface $uuid): string { return $this->swapBytes($uuid->getFields()->getBytes()); diff --git a/src/Codec/TimestampLastCombCodec.php b/src/Codec/TimestampLastCombCodec.php index 4856dea..ffc8674 100644 --- a/src/Codec/TimestampLastCombCodec.php +++ b/src/Codec/TimestampLastCombCodec.php @@ -44,7 +44,7 @@ namespace Ramsey\Uuid\Codec; * * @link https://www.informit.com/articles/printerfriendly/25862 The Cost of GUIDs as Primary Keys * - * @psalm-immutable + * @immutable */ class TimestampLastCombCodec extends StringCodec { diff --git a/src/Converter/Number/GenericNumberConverter.php b/src/Converter/Number/GenericNumberConverter.php index f19898e..e62ea49 100644 --- a/src/Converter/Number/GenericNumberConverter.php +++ b/src/Converter/Number/GenericNumberConverter.php @@ -22,7 +22,7 @@ use Ramsey\Uuid\Type\Integer as IntegerObject; * GenericNumberConverter uses the provided calculator to convert decimal * numbers to and from hexadecimal values * - * @psalm-immutable + * @immutable */ class GenericNumberConverter implements NumberConverterInterface { @@ -30,17 +30,11 @@ class GenericNumberConverter implements NumberConverterInterface { } - /** - * @psalm-pure - */ public function fromHex(string $hex): string { return $this->calculator->fromBase($hex, 16)->toString(); } - /** - * @psalm-pure - */ public function toHex(string $number): string { return $this->calculator->toBase(new IntegerObject($number), 16); diff --git a/src/Converter/NumberConverterInterface.php b/src/Converter/NumberConverterInterface.php index 5df2bad..d90e288 100644 --- a/src/Converter/NumberConverterInterface.php +++ b/src/Converter/NumberConverterInterface.php @@ -18,7 +18,7 @@ namespace Ramsey\Uuid\Converter; * A number converter converts UUIDs from hexadecimal characters into * representations of integers and vice versa * - * @psalm-immutable + * @immutable */ interface NumberConverterInterface { @@ -27,13 +27,11 @@ interface NumberConverterInterface * the number * * The integer representation returned is a string representation of the - * integer, to accommodate unsigned integers greater than PHP_INT_MAX. + * integer to accommodate unsigned integers greater than PHP_INT_MAX. * * @param non-empty-string $hex The hexadecimal string representation to convert * * @return numeric-string String representation of an integer - * - * @psalm-pure */ public function fromHex(string $hex): string; @@ -46,8 +44,6 @@ interface NumberConverterInterface * greater than PHP_INT_MAX. * * @return non-empty-string Hexadecimal string - * - * @psalm-pure */ public function toHex(string $number): string; } diff --git a/src/Converter/Time/GenericTimeConverter.php b/src/Converter/Time/GenericTimeConverter.php index 4c808ce..a32b16e 100644 --- a/src/Converter/Time/GenericTimeConverter.php +++ b/src/Converter/Time/GenericTimeConverter.php @@ -30,7 +30,7 @@ use const STR_PAD_LEFT; * GenericTimeConverter uses the provided calculator to calculate and convert * time values * - * @psalm-immutable + * @immutable */ class GenericTimeConverter implements TimeConverterInterface { diff --git a/src/Converter/Time/PhpTimeConverter.php b/src/Converter/Time/PhpTimeConverter.php index a2815a0..7522f5f 100644 --- a/src/Converter/Time/PhpTimeConverter.php +++ b/src/Converter/Time/PhpTimeConverter.php @@ -37,7 +37,7 @@ use const STR_PAD_LEFT; * available to the PHP programming language to provide facilities for * converting parts of time into representations that may be used in UUIDs * - * @psalm-immutable + * @immutable */ class PhpTimeConverter implements TimeConverterInterface { @@ -79,7 +79,7 @@ class PhpTimeConverter implements TimeConverterInterface // Check to see whether we've overflowed the max/min integer size. // If so, we will default to a different time converter. - /** @psalm-suppress RedundantCondition */ + // @phpstan-ignore function.alreadyNarrowedType (the integer value might have overflowed) if (!is_int($uuidTime)) { return $this->fallbackConverter->calculateTime( $seconds->toString(), diff --git a/src/Converter/Time/UnixTimeConverter.php b/src/Converter/Time/UnixTimeConverter.php index 4d6d0a8..1cd2e26 100644 --- a/src/Converter/Time/UnixTimeConverter.php +++ b/src/Converter/Time/UnixTimeConverter.php @@ -30,7 +30,7 @@ use const STR_PAD_LEFT; * UnixTimeConverter converts Unix Epoch timestamps to/from hexadecimal values * consisting of milliseconds elapsed since the Unix Epoch * - * @psalm-immutable + * @immutable */ class UnixTimeConverter implements TimeConverterInterface { diff --git a/src/Converter/TimeConverterInterface.php b/src/Converter/TimeConverterInterface.php index c399947..e10b61c 100644 --- a/src/Converter/TimeConverterInterface.php +++ b/src/Converter/TimeConverterInterface.php @@ -21,7 +21,7 @@ use Ramsey\Uuid\Type\Time; * A time converter converts timestamps into representations that may be used * in UUIDs * - * @psalm-immutable + * @immutable */ interface TimeConverterInterface { @@ -38,8 +38,6 @@ interface TimeConverterInterface * micro-seconds associated with the time to calculate * * @return Hexadecimal The full UUID timestamp as a Hexadecimal value - * - * @psalm-pure */ public function calculateTime(string $seconds, string $microseconds): Hexadecimal; @@ -51,8 +49,6 @@ interface TimeConverterInterface * since UTC 00:00:00.00, 15 October 1582. * * @return Time An instance of {@see Time} - * - * @psalm-pure */ public function convertTime(Hexadecimal $uuidTimestamp): Time; } diff --git a/src/FeatureSet.php b/src/FeatureSet.php index 67eb382..2a50dab 100644 --- a/src/FeatureSet.php +++ b/src/FeatureSet.php @@ -210,7 +210,6 @@ class FeatureSet $this->numberConverter = $this->buildNumberConverter($calculator); $this->timeConverter = $this->buildTimeConverter($calculator); - /** @psalm-suppress RedundantPropertyInitializationCheck */ if (isset($this->timeProvider)) { $this->timeGenerator = $this->buildTimeGenerator($this->timeProvider); } diff --git a/src/Fields/FieldsInterface.php b/src/Fields/FieldsInterface.php index cde4cce..59cf70a 100644 --- a/src/Fields/FieldsInterface.php +++ b/src/Fields/FieldsInterface.php @@ -15,11 +15,11 @@ declare(strict_types=1); namespace Ramsey\Uuid\Fields; /** - * UUIDs are comprised of unsigned integers, the bytes of which are separated + * UUIDs consist of unsigned integers, the bytes of which are separated * into fields and arranged in a particular layout defined by the specification * for the variant * - * @psalm-immutable + * @immutable */ interface FieldsInterface { diff --git a/src/Fields/SerializableFieldsTrait.php b/src/Fields/SerializableFieldsTrait.php index b81a5dd..196b0a6 100644 --- a/src/Fields/SerializableFieldsTrait.php +++ b/src/Fields/SerializableFieldsTrait.php @@ -23,7 +23,7 @@ use function strlen; /** * Provides common serialization functionality to fields * - * @psalm-immutable + * @immutable */ trait SerializableFieldsTrait { @@ -49,7 +49,6 @@ trait SerializableFieldsTrait /** * @inheritDoc - * @psalm-suppress UnusedMethodCall */ public function __unserialize(array $data): void { diff --git a/src/Generator/CombGenerator.php b/src/Generator/CombGenerator.php index 49f769f..d2a38ab 100644 --- a/src/Generator/CombGenerator.php +++ b/src/Generator/CombGenerator.php @@ -87,6 +87,8 @@ class CombGenerator implements RandomGeneratorInterface } $hash = ''; + + /** @phpstan-ignore greater.alwaysTrue (TIMESTAMP_BYTES constant could change in child classes) */ if (self::TIMESTAMP_BYTES > 0 && $length > self::TIMESTAMP_BYTES) { $hash = $this->generator->generate($length - self::TIMESTAMP_BYTES); } diff --git a/src/Generator/DceSecurityGenerator.php b/src/Generator/DceSecurityGenerator.php index 2b59343..6312285 100644 --- a/src/Generator/DceSecurityGenerator.php +++ b/src/Generator/DceSecurityGenerator.php @@ -124,7 +124,7 @@ class DceSecurityGenerator implements DceSecurityGeneratorInterface // Shift the clock sequence 8 bits to the left, so it matches 0x3f00. if ($clockSeq !== null) { - /** @var int<0, 16383> $clockSeq */ + /** @var int<0, 16128> $clockSeq */ $clockSeq = $clockSeq << 8; } diff --git a/src/Generator/DefaultNameGenerator.php b/src/Generator/DefaultNameGenerator.php index e029c07..9d8b7fb 100644 --- a/src/Generator/DefaultNameGenerator.php +++ b/src/Generator/DefaultNameGenerator.php @@ -26,26 +26,15 @@ use function hash; */ class DefaultNameGenerator implements NameGeneratorInterface { - /** - * @inheritDoc - * @psalm-pure - */ public function generate(UuidInterface $ns, string $name, string $hashAlgorithm): string { try { - /** @var non-empty-string|false $bytes */ - $bytes = @hash($hashAlgorithm, $ns->getBytes() . $name, true); + return hash($hashAlgorithm, $ns->getBytes() . $name, true); } catch (ValueError $e) { - $bytes = false; // keep same behavior than PHP 7 + throw new NameException( + message: sprintf('Unable to hash namespace and name with algorithm \'%s\'', $hashAlgorithm), + previous: $e, + ); } - - if ($bytes === false) { - throw new NameException(sprintf( - 'Unable to hash namespace and name with algorithm \'%s\'', - $hashAlgorithm - )); - } - - return $bytes; } } diff --git a/src/Generator/NameGeneratorInterface.php b/src/Generator/NameGeneratorInterface.php index 28d834f..b512e89 100644 --- a/src/Generator/NameGeneratorInterface.php +++ b/src/Generator/NameGeneratorInterface.php @@ -31,8 +31,6 @@ interface NameGeneratorInterface * @param non-empty-string $hashAlgorithm The hashing algorithm to use * * @return non-empty-string A binary string - * - * @psalm-pure */ public function generate(UuidInterface $ns, string $name, string $hashAlgorithm): string; } diff --git a/src/Generator/PeclUuidNameGenerator.php b/src/Generator/PeclUuidNameGenerator.php index 1f477de..9d7b207 100644 --- a/src/Generator/PeclUuidNameGenerator.php +++ b/src/Generator/PeclUuidNameGenerator.php @@ -30,10 +30,6 @@ use function uuid_parse; */ class PeclUuidNameGenerator implements NameGeneratorInterface { - /** - * @inheritDoc - * @psalm-pure - */ public function generate(UuidInterface $ns, string $name, string $hashAlgorithm): string { $uuid = match ($hashAlgorithm) { diff --git a/src/Guid/Fields.php b/src/Guid/Fields.php index 269cc37..e60568d 100644 --- a/src/Guid/Fields.php +++ b/src/Guid/Fields.php @@ -38,11 +38,11 @@ use function unpack; use const STR_PAD_LEFT; /** - * GUIDs are comprised of a set of named fields, according to RFC 4122 + * GUIDs consist of a set of named fields, according to RFC 4122 * * @see Guid * - * @psalm-immutable + * @immutable */ final class Fields implements FieldsInterface { @@ -90,7 +90,7 @@ final class Fields implements FieldsInterface public function getTimeLow(): Hexadecimal { // Swap the bytes from little endian to network byte order. - /** @var array{mixed, non-empty-string} $hex */ + /** @var non-empty-string[] $hex */ $hex = unpack( 'H*', pack( @@ -106,7 +106,7 @@ final class Fields implements FieldsInterface public function getTimeMid(): Hexadecimal { // Swap the bytes from little endian to network byte order. - /** @var array{mixed, non-empty-string} $hex */ + /** @var non-empty-string[] $hex */ $hex = unpack( 'H*', pack( @@ -121,7 +121,7 @@ final class Fields implements FieldsInterface public function getTimeHiAndVersion(): Hexadecimal { // Swap the bytes from little endian to network byte order. - /** @var array{mixed, non-empty-string} $hex */ + /** @var non-empty-string[] $hex */ $hex = unpack( 'H*', pack( @@ -189,10 +189,10 @@ final class Fields implements FieldsInterface return null; } - /** @var array $parts */ + /** @var int[] $parts */ $parts = unpack('n*', $this->bytes); - return Version::tryFrom(((int) $parts[4] >> 4) & 0x00f); + return Version::tryFrom(($parts[4] >> 4) & 0x00f); } private function isCorrectVariant(): bool diff --git a/src/Guid/Guid.php b/src/Guid/Guid.php index b3ed096..0af0210 100644 --- a/src/Guid/Guid.php +++ b/src/Guid/Guid.php @@ -46,7 +46,7 @@ use Ramsey\Uuid\Uuid; * @link https://docs.microsoft.com/en-us/dotnet/api/system.guid .NET Guid Struct * @link https://docs.microsoft.com/en-us/dotnet/api/system.guid.tobytearray .NET Guid.ToByteArray Method * - * @psalm-immutable + * @immutable */ final class Guid extends Uuid { diff --git a/src/Guid/GuidBuilder.php b/src/Guid/GuidBuilder.php index b6ba6f8..84bf25d 100644 --- a/src/Guid/GuidBuilder.php +++ b/src/Guid/GuidBuilder.php @@ -27,7 +27,7 @@ use Throwable; * * @see Guid * - * @psalm-immutable + * @immutable */ class GuidBuilder implements UuidBuilderInterface { @@ -50,8 +50,6 @@ class GuidBuilder implements UuidBuilderInterface * @param non-empty-string $bytes The byte string from which to construct a UUID * * @return Guid The GuidBuilder returns an instance of Ramsey\Uuid\Guid\Guid - * - * @psalm-pure */ public function build(CodecInterface $codec, string $bytes): UuidInterface { diff --git a/src/Lazy/LazyUuidFromString.php b/src/Lazy/LazyUuidFromString.php index f1a7138..d94fe17 100644 --- a/src/Lazy/LazyUuidFromString.php +++ b/src/Lazy/LazyUuidFromString.php @@ -38,19 +38,14 @@ use function substr; * conversion. This object optimizes instantiation, serialization and string conversion time, at the cost of * increased overhead for more advanced UUID operations. * - * @internal this type is used internally for performance reasons, and is not supposed to be directly referenced + * @internal this type is used internally for performance reasons and is not supposed to be directly referenced * in consumer libraries. * - * @psalm-immutable - * * Note: the {@see FieldsInterface} does not declare methods that deprecated API * relies upon: the API has been ported from the {@see \Ramsey\Uuid\Uuid} definition, * and is deprecated anyway. * Note: the deprecated API from {@see \Ramsey\Uuid\Uuid} is in use here (on purpose): it will be removed * once the deprecated API is gone from this class too. - * - * @psalm-suppress UndefinedInterfaceMethod - * @psalm-suppress DeprecatedMethod */ final class LazyUuidFromString implements TimeBasedUuidInterface { @@ -59,15 +54,12 @@ final class LazyUuidFromString implements TimeBasedUuidInterface private ?UuidInterface $unwrapped = null; /** - * @psalm-param non-empty-string $uuid + * @param non-empty-string $uuid */ public function __construct(private readonly string $uuid) { } - /** - * @psalm-pure - */ public static function fromBytes(string $bytes): self { $base16Uuid = bin2hex($bytes); @@ -95,7 +87,6 @@ final class LazyUuidFromString implements TimeBasedUuidInterface /** * @inheritDoc - * @psalm-suppress UnusedMethodCall */ public function __unserialize(array $data): void { @@ -119,7 +110,6 @@ final class LazyUuidFromString implements TimeBasedUuidInterface throw new UnsupportedOperationException('Not a time-based UUID'); } - /** @psalm-suppress DeprecatedMethod */ public function getUrn(): string { return ($this->unwrapped ?? $this->unwrap()) @@ -141,16 +131,9 @@ final class LazyUuidFromString implements TimeBasedUuidInterface return $this->uuid === $other->toString(); } - /** - * {@inheritDoc} - * - * @psalm-suppress MoreSpecificReturnType - * @psalm-suppress LessSpecificReturnStatement we know that {@see self::$uuid} is a non-empty string, so - * we know that {@see hex2bin} will retrieve a non-empty string too. - */ public function getBytes(): string { - /** @phpstan-ignore-next-line PHPStan complains that this is not a non-empty-string. */ + /** @var non-empty-string */ return (string) hex2bin(str_replace('-', '', $this->uuid)); } @@ -209,18 +192,8 @@ final class LazyUuidFromString implements TimeBasedUuidInterface return $instance; } - /** - * @psalm-suppress ImpureMethodCall the retrieval of the factory is a clear violation of purity here: this is a - * known pitfall of the design of this library, where a value object contains - * a mutable reference to a factory. We use a fixed factory here, so the violation - * will not have real-world effects, as this object is only instantiated with the - * default factory settings/features. - * @psalm-suppress InaccessibleProperty property {@see $unwrapped} is used as a cache: we don't expose it to the - * outside world, so we should be fine here. - */ private function unwrap(): UuidInterface { - return $this->unwrapped = (new UuidFactory()) - ->fromString($this->uuid); + return $this->unwrapped = (new UuidFactory())->fromString($this->uuid); } } diff --git a/src/Math/BrickMathCalculator.php b/src/Math/BrickMathCalculator.php index 31642e2..20d9d4a 100644 --- a/src/Math/BrickMathCalculator.php +++ b/src/Math/BrickMathCalculator.php @@ -27,7 +27,7 @@ use Ramsey\Uuid\Type\NumberInterface; /** * A calculator using the brick/math library for arbitrary-precision arithmetic * - * @psalm-immutable + * @immutable */ final class BrickMathCalculator implements CalculatorInterface { diff --git a/src/Math/CalculatorInterface.php b/src/Math/CalculatorInterface.php index 95aa76a..cea445c 100644 --- a/src/Math/CalculatorInterface.php +++ b/src/Math/CalculatorInterface.php @@ -21,7 +21,7 @@ use Ramsey\Uuid\Type\NumberInterface; /** * A calculator performs arithmetic operations on numbers * - * @psalm-immutable + * @immutable */ interface CalculatorInterface { diff --git a/src/Nonstandard/Fields.php b/src/Nonstandard/Fields.php index d2473fb..0a3d86e 100644 --- a/src/Nonstandard/Fields.php +++ b/src/Nonstandard/Fields.php @@ -41,7 +41,7 @@ use const STR_PAD_LEFT; * Internally, this class represents the fields together as a 16-byte binary * string. * - * @psalm-immutable + * @immutable */ final class Fields implements FieldsInterface { diff --git a/src/Nonstandard/Uuid.php b/src/Nonstandard/Uuid.php index 715f825..5810b5f 100644 --- a/src/Nonstandard/Uuid.php +++ b/src/Nonstandard/Uuid.php @@ -22,7 +22,7 @@ use Ramsey\Uuid\Uuid as BaseUuid; /** * Nonstandard\Uuid is a UUID that doesn't conform to RFC 4122 * - * @psalm-immutable + * @immutable */ final class Uuid extends BaseUuid { diff --git a/src/Nonstandard/UuidBuilder.php b/src/Nonstandard/UuidBuilder.php index d5c8e42..279b7ef 100644 --- a/src/Nonstandard/UuidBuilder.php +++ b/src/Nonstandard/UuidBuilder.php @@ -25,7 +25,7 @@ use Throwable; /** * Nonstandard\UuidBuilder builds instances of Nonstandard\Uuid * - * @psalm-immutable + * @immutable */ class UuidBuilder implements UuidBuilderInterface { @@ -49,8 +49,6 @@ class UuidBuilder implements UuidBuilderInterface * * @return Uuid The Nonstandard\UuidBuilder returns an instance of * Nonstandard\Uuid - * - * @psalm-pure */ public function build(CodecInterface $codec, string $bytes): UuidInterface { diff --git a/src/Nonstandard/UuidV6.php b/src/Nonstandard/UuidV6.php index f90bab0..c50c55b 100644 --- a/src/Nonstandard/UuidV6.php +++ b/src/Nonstandard/UuidV6.php @@ -36,7 +36,7 @@ use Ramsey\Uuid\Uuid as BaseUuid; * @link https://github.com/uuid6/uuid6-ietf-draft UUID version 6 IETF draft * @link http://gh.peabody.io/uuidv6/ "Version 6" UUIDs * - * @psalm-immutable + * @immutable */ class UuidV6 extends BaseUuid implements UuidInterface, TimeBasedUuidInterface { diff --git a/src/Provider/Dce/SystemDceSecurityProvider.php b/src/Provider/Dce/SystemDceSecurityProvider.php index 9ed84c8..f5313c9 100644 --- a/src/Provider/Dce/SystemDceSecurityProvider.php +++ b/src/Provider/Dce/SystemDceSecurityProvider.php @@ -146,10 +146,7 @@ class SystemDceSecurityProvider implements DceSecurityProviderInterface */ private function getOs(): string { - /** - * @psalm-suppress UnnecessaryVarAnnotation - * @var string $os - */ + /** @var string $os */ $os = constant('PHP_OS'); return strtoupper(substr($os, 0, 3)); @@ -207,9 +204,7 @@ class SystemDceSecurityProvider implements DceSecurityProviderInterface return ''; } - /** @var string[] $userGroups */ $userGroups = preg_split('/\s{2,}/', (string) $response, -1, PREG_SPLIT_NO_EMPTY); - $firstGroup = trim($userGroups[1] ?? '', "* \t\n\r\0\x0B"); if ($firstGroup === '') { @@ -222,9 +217,7 @@ class SystemDceSecurityProvider implements DceSecurityProviderInterface return ''; } - /** @var string[] $userGroup */ $userGroup = preg_split('/\s{2,}/', (string) $response, -1, PREG_SPLIT_NO_EMPTY); - $sid = $userGroup[1] ?? ''; if (($lastHyphen = strrpos($sid, '-')) === false) { diff --git a/src/Provider/Node/SystemNodeProvider.php b/src/Provider/Node/SystemNodeProvider.php index ca59035..16ce8a9 100644 --- a/src/Provider/Node/SystemNodeProvider.php +++ b/src/Provider/Node/SystemNodeProvider.php @@ -72,10 +72,11 @@ class SystemNodeProvider implements NodeProviderInterface */ protected function getNodeFromSystem(): string { + /** @var string | null $node */ static $node = null; if ($node !== null) { - return (string) $node; + return $node; } // First, try a Linux-specific approach. @@ -104,10 +105,7 @@ class SystemNodeProvider implements NodeProviderInterface return ''; } - /** - * @psalm-suppress UnnecessaryVarAnnotation - * @var string $os - */ + /** @var string $os */ $os = constant('PHP_OS'); ob_start(); @@ -151,10 +149,7 @@ class SystemNodeProvider implements NodeProviderInterface { $mac = ''; - /** - * @psalm-suppress UnnecessaryVarAnnotation - * @var string $os - */ + /** @var string $os */ $os = constant('PHP_OS'); if (strtoupper($os) === 'LINUX') { @@ -176,9 +171,8 @@ class SystemNodeProvider implements NodeProviderInterface $macs = array_map(trim(...), $macs); // Remove invalid entries. - $macs = array_filter($macs, function (string $address) { - return $address !== '00:00:00:00:00:00' - && preg_match(self::SYSFS_PATTERN, $address); + $macs = array_filter($macs, function (mixed $address): bool { + return $address !== '00:00:00:00:00:00' && preg_match(self::SYSFS_PATTERN, $address); }); /** @var string|bool $mac */ diff --git a/src/Rfc4122/Fields.php b/src/Rfc4122/Fields.php index 7ec6ae7..628ba81 100644 --- a/src/Rfc4122/Fields.php +++ b/src/Rfc4122/Fields.php @@ -31,12 +31,12 @@ use function unpack; use const STR_PAD_LEFT; /** - * RFC 4122 variant UUIDs are comprised of a set of named fields + * RFC 4122 variant UUIDs consist of a set of named fields * * Internally, this class represents the fields together as a 16-byte binary * string. * - * @psalm-immutable + * @immutable */ final class Fields implements FieldsInterface { diff --git a/src/Rfc4122/FieldsInterface.php b/src/Rfc4122/FieldsInterface.php index 2e39e5b..732556a 100644 --- a/src/Rfc4122/FieldsInterface.php +++ b/src/Rfc4122/FieldsInterface.php @@ -36,7 +36,7 @@ use Ramsey\Uuid\Variant; * * @link http://tools.ietf.org/html/rfc4122#section-4.1 RFC 4122, § 4.1: Format * - * @psalm-immutable + * @immutable */ interface FieldsInterface extends BaseFieldsInterface { diff --git a/src/Rfc4122/MaxTrait.php b/src/Rfc4122/MaxTrait.php index dedb727..9bdbb10 100644 --- a/src/Rfc4122/MaxTrait.php +++ b/src/Rfc4122/MaxTrait.php @@ -22,7 +22,7 @@ namespace Ramsey\Uuid\Rfc4122; * * @link https://datatracker.ietf.org/doc/html/draft-ietf-uuidrev-rfc4122bis-00#section-5.10 Max UUID * - * @psalm-immutable + * @immutable */ trait MaxTrait { diff --git a/src/Rfc4122/MaxUuid.php b/src/Rfc4122/MaxUuid.php index e5ffa72..7143885 100644 --- a/src/Rfc4122/MaxUuid.php +++ b/src/Rfc4122/MaxUuid.php @@ -20,7 +20,7 @@ use Ramsey\Uuid\Uuid; * The max UUID is special form of UUID that is specified to have all 128 bits * set to one * - * @psalm-immutable + * @immutable */ final class MaxUuid extends Uuid implements UuidInterface { diff --git a/src/Rfc4122/NilTrait.php b/src/Rfc4122/NilTrait.php index 9a9774d..8bbe13e 100644 --- a/src/Rfc4122/NilTrait.php +++ b/src/Rfc4122/NilTrait.php @@ -22,7 +22,7 @@ namespace Ramsey\Uuid\Rfc4122; * * @link https://tools.ietf.org/html/rfc4122#section-4.1.7 RFC 4122, § 4.1.7: Nil UUID * - * @psalm-immutable + * @immutable */ trait NilTrait { diff --git a/src/Rfc4122/NilUuid.php b/src/Rfc4122/NilUuid.php index c49b994..831378e 100644 --- a/src/Rfc4122/NilUuid.php +++ b/src/Rfc4122/NilUuid.php @@ -20,7 +20,7 @@ use Ramsey\Uuid\Uuid; * The nil UUID is special form of UUID that is specified to have all 128 bits * set to zero * - * @psalm-immutable + * @immutable */ final class NilUuid extends Uuid implements UuidInterface { diff --git a/src/Rfc4122/TimeTrait.php b/src/Rfc4122/TimeTrait.php index 0c9d4e2..068b0bc 100644 --- a/src/Rfc4122/TimeTrait.php +++ b/src/Rfc4122/TimeTrait.php @@ -26,7 +26,7 @@ use const STR_PAD_LEFT; /** * Provides common functionality for getting the time from a time-based UUID * - * @psalm-immutable + * @immutable */ trait TimeTrait { diff --git a/src/Rfc4122/UuidBuilder.php b/src/Rfc4122/UuidBuilder.php index 02dfde8..0427094 100644 --- a/src/Rfc4122/UuidBuilder.php +++ b/src/Rfc4122/UuidBuilder.php @@ -29,7 +29,7 @@ use Throwable; /** * UuidBuilder builds instances of RFC 4122 UUIDs * - * @psalm-immutable + * @immutable */ class UuidBuilder implements UuidBuilderInterface { @@ -59,8 +59,6 @@ class UuidBuilder implements UuidBuilderInterface * @param non-empty-string $bytes The byte string from which to construct a UUID * * @return Rfc4122UuidInterface UuidBuilder returns instances of Rfc4122UuidInterface - * - * @psalm-pure */ public function build(CodecInterface $codec, string $bytes): UuidInterface { diff --git a/src/Rfc4122/UuidInterface.php b/src/Rfc4122/UuidInterface.php index 7608da7..69f26b9 100644 --- a/src/Rfc4122/UuidInterface.php +++ b/src/Rfc4122/UuidInterface.php @@ -22,7 +22,7 @@ use Ramsey\Uuid\UuidInterface as BaseUuidInterface; * * @link https://tools.ietf.org/html/rfc4122 RFC 4122 * - * @psalm-immutable + * @immutable */ interface UuidInterface extends BaseUuidInterface { diff --git a/src/Rfc4122/UuidV1.php b/src/Rfc4122/UuidV1.php index 5802059..af16c25 100644 --- a/src/Rfc4122/UuidV1.php +++ b/src/Rfc4122/UuidV1.php @@ -26,7 +26,7 @@ use Ramsey\Uuid\Uuid; * Gregorian time, or version 1, UUIDs include timestamp, clock sequence, and node * values that are combined into a 128-bit unsigned integer * - * @psalm-immutable + * @immutable */ final class UuidV1 extends Uuid implements UuidInterface, TimeBasedUuidInterface { diff --git a/src/Rfc4122/UuidV2.php b/src/Rfc4122/UuidV2.php index 4681545..7c1623a 100644 --- a/src/Rfc4122/UuidV2.php +++ b/src/Rfc4122/UuidV2.php @@ -49,7 +49,7 @@ use function hexdec; * @link https://pubs.opengroup.org/onlinepubs/9629399/apdxa.htm DCE 1.1: RPC, Appendix A * @link https://github.com/google/uuid Go package for UUIDs (includes DCE implementation) * - * @psalm-immutable + * @immutable */ final class UuidV2 extends Uuid implements UuidInterface, TimeBasedUuidInterface { diff --git a/src/Rfc4122/UuidV3.php b/src/Rfc4122/UuidV3.php index e16bed6..2a887f6 100644 --- a/src/Rfc4122/UuidV3.php +++ b/src/Rfc4122/UuidV3.php @@ -22,10 +22,10 @@ use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface; use Ramsey\Uuid\Uuid; /** - * Version 3 UUIDs are named-based, using combination of a namespace and name + * Version 3 UUIDs are named-based, using a combination of a namespace and name * that are hashed into a 128-bit unsigned integer using MD5 * - * @psalm-immutable + * @immutable */ final class UuidV3 extends Uuid implements UuidInterface { diff --git a/src/Rfc4122/UuidV4.php b/src/Rfc4122/UuidV4.php index 1c9e139..e3eca6f 100644 --- a/src/Rfc4122/UuidV4.php +++ b/src/Rfc4122/UuidV4.php @@ -25,7 +25,7 @@ use Ramsey\Uuid\Uuid; * Random, or version 4, UUIDs are randomly or pseudo-randomly generated 128-bit * integers * - * @psalm-immutable + * @immutable */ final class UuidV4 extends Uuid implements UuidInterface { diff --git a/src/Rfc4122/UuidV5.php b/src/Rfc4122/UuidV5.php index 27bd16f..d6be4e4 100644 --- a/src/Rfc4122/UuidV5.php +++ b/src/Rfc4122/UuidV5.php @@ -22,10 +22,10 @@ use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface; use Ramsey\Uuid\Uuid; /** - * Version 5 UUIDs are named-based, using combination of a namespace and name + * Version 5 UUIDs are named-based, using a combination of a namespace and name * that are hashed into a 128-bit unsigned integer using SHA1 * - * @psalm-immutable + * @immutable */ final class UuidV5 extends Uuid implements UuidInterface { diff --git a/src/Rfc4122/UuidV6.php b/src/Rfc4122/UuidV6.php index bc18775..4b12d90 100644 --- a/src/Rfc4122/UuidV6.php +++ b/src/Rfc4122/UuidV6.php @@ -23,7 +23,7 @@ use Ramsey\Uuid\TimeBasedUuidInterface; * * @link https://datatracker.ietf.org/doc/html/draft-ietf-uuidrev-rfc4122bis-00#section-5.6 UUID Version 6 * - * @psalm-immutable + * @immutable */ final class UuidV6 extends NonstandardUuidV6 implements UuidInterface, TimeBasedUuidInterface { diff --git a/src/Rfc4122/UuidV7.php b/src/Rfc4122/UuidV7.php index 4b8930e..f5c548c 100644 --- a/src/Rfc4122/UuidV7.php +++ b/src/Rfc4122/UuidV7.php @@ -28,7 +28,7 @@ use Ramsey\Uuid\Uuid; * * @link https://datatracker.ietf.org/doc/html/draft-ietf-uuidrev-rfc4122bis-00#section-5.7 UUID Version 7 * - * @psalm-immutable + * @immutable */ final class UuidV7 extends Uuid implements UuidInterface, TimeBasedUuidInterface { diff --git a/src/Rfc4122/UuidV8.php b/src/Rfc4122/UuidV8.php index efa8ab6..cda5cb8 100644 --- a/src/Rfc4122/UuidV8.php +++ b/src/Rfc4122/UuidV8.php @@ -32,7 +32,7 @@ use Ramsey\Uuid\Uuid; * * @link https://datatracker.ietf.org/doc/html/draft-ietf-uuidrev-rfc4122bis-00#section-5.8 UUID Version 8 * - * @psalm-immutable + * @immutable */ final class UuidV8 extends Uuid implements UuidInterface { diff --git a/src/Rfc4122/Validator.php b/src/Rfc4122/Validator.php index 6447444..96d0abc 100644 --- a/src/Rfc4122/Validator.php +++ b/src/Rfc4122/Validator.php @@ -23,13 +23,16 @@ use function str_replace; /** * Rfc4122\Validator validates strings as UUIDs of the RFC 4122 variant * - * @psalm-immutable + * @immutable */ final class Validator implements ValidatorInterface { private const VALID_PATTERN = '\A[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-' . '[1-8][0-9A-Fa-f]{3}-[ABab89][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}\z'; + /** + * @return non-empty-string + */ public function getPattern(): string { return self::VALID_PATTERN; diff --git a/src/Rfc4122/VariantTrait.php b/src/Rfc4122/VariantTrait.php index 1b28453..777071a 100644 --- a/src/Rfc4122/VariantTrait.php +++ b/src/Rfc4122/VariantTrait.php @@ -29,7 +29,7 @@ use const STR_PAD_LEFT; /** * Provides common functionality for handling the variant, as defined by RFC 4122 * - * @psalm-immutable + * @immutable */ trait VariantTrait { diff --git a/src/Rfc4122/VersionTrait.php b/src/Rfc4122/VersionTrait.php index de5e1bf..b5923a0 100644 --- a/src/Rfc4122/VersionTrait.php +++ b/src/Rfc4122/VersionTrait.php @@ -17,7 +17,7 @@ namespace Ramsey\Uuid\Rfc4122; /** * Provides common functionality for handling the version, as defined by RFC 4122 * - * @psalm-immutable + * @immutable */ trait VersionTrait { diff --git a/src/TimeBasedUuidFactoryInterface.php b/src/TimeBasedUuidFactoryInterface.php index 9fb5ad7..3ceb72d 100644 --- a/src/TimeBasedUuidFactoryInterface.php +++ b/src/TimeBasedUuidFactoryInterface.php @@ -21,7 +21,7 @@ use Ramsey\Uuid\Type\Hexadecimal; * TimeBasedUuidFactoryInterface defines common functionality all factories for * time-based UUIDs must implement * - * @psalm-immutable + * @immutable */ interface TimeBasedUuidFactoryInterface extends UuidFactoryInterface { @@ -37,8 +37,6 @@ interface TimeBasedUuidFactoryInterface extends UuidFactoryInterface * * @return UuidInterface A UuidInterface instance that represents a * UUID created from a DateTimeInterface instance - * - * @psalm-pure */ public function fromDateTime( DateTimeInterface $dateTime, diff --git a/src/TimeBasedUuidInterface.php b/src/TimeBasedUuidInterface.php index 1f4f21a..1660713 100644 --- a/src/TimeBasedUuidInterface.php +++ b/src/TimeBasedUuidInterface.php @@ -19,7 +19,7 @@ use DateTimeInterface; /** * Time-based UUIDs are derived from a date/time value * - * @psalm-immutable + * @immutable */ interface TimeBasedUuidInterface extends UuidInterface { diff --git a/src/Type/Decimal.php b/src/Type/Decimal.php index 45deb64..1bb8c79 100644 --- a/src/Type/Decimal.php +++ b/src/Type/Decimal.php @@ -32,8 +32,6 @@ use function str_starts_with; * * To support values as true decimals and not as floats or doubles, we store the * decimals as strings. - * - * @psalm-immutable */ final class Decimal implements NumberInterface { diff --git a/src/Type/Hexadecimal.php b/src/Type/Hexadecimal.php index 983d9d3..f63e298 100644 --- a/src/Type/Hexadecimal.php +++ b/src/Type/Hexadecimal.php @@ -30,7 +30,7 @@ use function substr; * returned from ramsey/uuid methods as strings are truly hexadecimal and not some * other kind of string. * - * @psalm-immutable + * @immutable */ final class Hexadecimal implements TypeInterface { diff --git a/src/Type/Integer.php b/src/Type/Integer.php index 38969b6..0948048 100644 --- a/src/Type/Integer.php +++ b/src/Type/Integer.php @@ -34,7 +34,7 @@ use function substr; * To support large integers beyond PHP_INT_MAX and PHP_INT_MIN on both 64-bit * and 32-bit systems, we store the integers as strings. * - * @psalm-immutable + * @immutable */ final class Integer implements NumberInterface { @@ -43,6 +43,9 @@ final class Integer implements NumberInterface */ private readonly string $value; + /** + * @phpstan-ignore property.readOnlyByPhpDocDefaultValue + */ private bool $isNegative = false; public function __construct(float | int | self | string $value) @@ -56,7 +59,7 @@ final class Integer implements NumberInterface } /** - * @psalm-return numeric-string + * @return numeric-string */ public function toString(): string { @@ -64,7 +67,7 @@ final class Integer implements NumberInterface } /** - * @psalm-return numeric-string + * @return numeric-string */ public function __toString(): string { @@ -72,7 +75,7 @@ final class Integer implements NumberInterface } /** - * @psalm-return numeric-string + * @return numeric-string */ public function jsonSerialize(): string { @@ -134,7 +137,7 @@ final class Integer implements NumberInterface if ($sign === '-' && $value !== '0') { $value = $sign . $value; - /** @psalm-suppress InaccessibleProperty */ + /** @phpstan-ignore property.readOnlyByPhpDocAssignNotInConstructor */ $this->isNegative = true; } diff --git a/src/Type/NumberInterface.php b/src/Type/NumberInterface.php index bf4ae9d..d85e103 100644 --- a/src/Type/NumberInterface.php +++ b/src/Type/NumberInterface.php @@ -17,7 +17,7 @@ namespace Ramsey\Uuid\Type; /** * NumberInterface ensures consistency in numeric values returned by ramsey/uuid * - * @psalm-immutable + * @immutable */ interface NumberInterface extends TypeInterface { diff --git a/src/Type/Time.php b/src/Type/Time.php index a543b50..fccaff7 100644 --- a/src/Type/Time.php +++ b/src/Type/Time.php @@ -26,7 +26,7 @@ use function sprintf; * by ramsey/uuid are truly timestamp integers and not some other kind of string * or integer. * - * @psalm-immutable + * @immutable */ final class Time implements TypeInterface { @@ -56,8 +56,11 @@ final class Time implements TypeInterface */ public function toString(): string { + /** @var numeric-string $microseconds */ + $microseconds = sprintf('%06s', $this->microseconds->toString()); + /** @var numeric-string */ - return $this->seconds->toString() . '.' . sprintf('%06s', $this->microseconds->toString()); + return "{$this->seconds->toString()}.$microseconds"; } /** diff --git a/src/Type/TypeInterface.php b/src/Type/TypeInterface.php index 452543b..c350a02 100644 --- a/src/Type/TypeInterface.php +++ b/src/Type/TypeInterface.php @@ -19,7 +19,7 @@ use JsonSerializable; /** * TypeInterface ensures consistency in typed values returned by ramsey/uuid * - * @psalm-immutable + * @immutable */ interface TypeInterface extends JsonSerializable { diff --git a/src/Uuid.php b/src/Uuid.php index 61293d8..5cd6797 100644 --- a/src/Uuid.php +++ b/src/Uuid.php @@ -42,12 +42,12 @@ use function substr; /** * Uuid provides constants and static methods for working with and generating UUIDs * - * @psalm-immutable + * @immutable */ class Uuid implements Rfc4122UuidInterface { /** - * When this namespace is specified, the name string is a fully-qualified + * When this namespace is specified, the name string is a fully qualified * domain name * * @link http://tools.ietf.org/html/rfc4122#appendix-C RFC 4122, Appendix C: Some Name Space IDs @@ -124,12 +124,16 @@ class Uuid implements Rfc4122UuidInterface self::DCE_DOMAIN_ORG => 'org', ]; + /** + * @phpstan-ignore property.readOnlyByPhpDocDefaultValue + */ private static ?UuidFactoryInterface $factory = null; /** * @var bool flag to detect if the UUID factory was replaced internally, * which disables all optimizations for the default/happy path internal * scenarios + * @phpstan-ignore property.readOnlyByPhpDocDefaultValue */ private static bool $factoryReplaced = false; @@ -166,7 +170,7 @@ class Uuid implements Rfc4122UuidInterface } /** - * @psalm-return non-empty-string + * @return non-empty-string */ public function __toString(): string { @@ -238,6 +242,9 @@ class Uuid implements Rfc4122UuidInterface return $this->compareTo($other) === 0; } + /** + * @return non-empty-string + */ public function getBytes(): string { return $this->codec->encodeBinary($this); @@ -266,6 +273,9 @@ class Uuid implements Rfc4122UuidInterface return 'urn:uuid:' . $this->toString(); } + /** + * @return non-empty-string + */ public function toString(): string { return $this->codec->encode($this); @@ -324,13 +334,6 @@ class Uuid implements Rfc4122UuidInterface * string representation * * @throws InvalidArgumentException - * - * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, - * but under constant factory setups, this method operates in functionally pure manners - * @psalm-suppress ImpureStaticProperty we know that the factory being replaced can lead to massive - * havoc across all consumers: that should never happen, and - * is generally to be discouraged. Until the factory is kept - * un-replaced, this method is effectively pure. */ public static function fromBytes(string $bytes): UuidInterface { @@ -363,19 +366,11 @@ class Uuid implements Rfc4122UuidInterface * string representation * * @throws InvalidArgumentException - * - * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, - * but under constant factory setups, this method operates in functionally pure manners - * @psalm-suppress ImpureStaticProperty we know that the factory being replaced can lead to massive - * havoc across all consumers: that should never happen, and - * is generally to be discouraged. Until the factory is kept - * un-replaced, this method is effectively pure. */ public static function fromString(string $uuid): UuidInterface { $uuid = strtolower($uuid); if (!self::$factoryReplaced && preg_match(LazyUuidFromString::VALID_REGEX, $uuid) === 1) { - /** @psalm-suppress DocblockTypeContradiction */ assert($uuid !== ''); return new LazyUuidFromString($uuid); @@ -411,24 +406,19 @@ class Uuid implements Rfc4122UuidInterface * @param Hexadecimal $hex Hexadecimal object representing a hexadecimal number * * @return UuidInterface A UuidInterface instance created from the Hexadecimal - * object representing a hexadecimal number + * object representing a hexadecimal number * * @throws InvalidArgumentException - * - * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, - * but under constant factory setups, this method operates in functionally pure manners - * @psalm-suppress MixedInferredReturnType,MixedReturnStatement */ public static function fromHexadecimal(Hexadecimal $hex): UuidInterface { $factory = self::getFactory(); if (method_exists($factory, 'fromHexadecimal')) { - /** - * @phpstan-ignore-next-line - * @psalm-suppress UndefinedInterfaceMethod - */ - return self::getFactory()->fromHexadecimal($hex); + $uuid = $factory->fromHexadecimal($hex); + assert($uuid instanceof UuidInterface); + + return $uuid; } throw new BadMethodCallException('The method fromHexadecimal() does not exist on the provided factory'); @@ -443,13 +433,9 @@ class Uuid implements Rfc4122UuidInterface * representation of a 128-bit integer * * @throws InvalidArgumentException - * - * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, - * but under constant factory setups, this method operates in functionally pure manners */ public static function fromInteger(string $integer): UuidInterface { - /** @psalm-suppress ImpureMethodCall */ return self::getFactory()->fromInteger($integer); } @@ -460,14 +446,10 @@ class Uuid implements Rfc4122UuidInterface * * @return bool True if the string is a valid UUID, false otherwise * - * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, - * but under constant factory setups, this method operates in functionally pure manners - * - * @psalm-assert-if-true =non-empty-string $uuid + * @phpstan-assert-if-true =non-empty-string $uuid */ public static function isValid(string $uuid): bool { - /** @psalm-suppress ImpureMethodCall */ return self::getFactory()->getValidator()->validate($uuid); } @@ -528,14 +510,6 @@ class Uuid implements Rfc4122UuidInterface * * @return UuidInterface A UuidInterface instance that represents a * version 3 UUID - * - * @psalm-suppress ImpureMethodCall we know that the factory being replaced can lead to massive - * havoc across all consumers: that should never happen, and - * is generally to be discouraged. Until the factory is kept - * un-replaced, this method is effectively pure. - * - * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, - * but under constant factory setups, this method operates in functionally pure manners */ public static function uuid3(UuidInterface | string $ns, string $name): UuidInterface { @@ -562,14 +536,6 @@ class Uuid implements Rfc4122UuidInterface * * @return UuidInterface A UuidInterface instance that represents a * version 5 UUID - * - * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, - * but under constant factory setups, this method operates in functionally pure manners - * - * @psalm-suppress ImpureMethodCall we know that the factory being replaced can lead to massive - * havoc across all consumers: that should never happen, and - * is generally to be discouraged. Until the factory is kept - * un-replaced, this method is effectively pure. */ public static function uuid5(UuidInterface | string $ns, string $name): UuidInterface { diff --git a/src/UuidFactory.php b/src/UuidFactory.php index 52defae..c8767ed 100644 --- a/src/UuidFactory.php +++ b/src/UuidFactory.php @@ -42,9 +42,6 @@ use function substr; use const STR_PAD_LEFT; -/** - * @psalm-suppress MissingImmutableAnnotation - */ class UuidFactory implements UuidFactoryInterface { private CodecInterface $codec; @@ -241,9 +238,6 @@ class UuidFactory implements UuidFactoryInterface $this->uuidBuilder = $builder; } - /** - * @psalm-mutation-free - */ public function getValidator(): ValidatorInterface { return $this->validator; @@ -262,17 +256,11 @@ class UuidFactory implements UuidFactoryInterface $this->validator = $validator; } - /** - * @psalm-pure - */ public function fromBytes(string $bytes): UuidInterface { return $this->codec->decodeBytes($bytes); } - /** - * @psalm-pure - */ public function fromString(string $uuid): UuidInterface { $uuid = strtolower($uuid); @@ -280,9 +268,6 @@ class UuidFactory implements UuidFactoryInterface return $this->codec->decode($uuid); } - /** - * @psalm-pure - */ public function fromInteger(string $integer): UuidInterface { $hex = $this->numberConverter->toHex($integer); @@ -313,9 +298,6 @@ class UuidFactory implements UuidFactoryInterface return $this->uuidFromBytesAndVersion($bytes, Version::Time); } - /** - * @psalm-pure - */ public function fromHexadecimal(Hexadecimal $hex): UuidInterface { return $this->codec->decode($hex->__toString()); @@ -344,10 +326,6 @@ class UuidFactory implements UuidFactoryInterface return $this->uuidFromBytesAndVersion($bytes, Version::DceSecurity); } - /** - * @inheritDoc - * @psalm-pure - */ public function uuid3(UuidInterface | string $ns, string $name): UuidInterface { return $this->uuidFromNsAndName($ns, $name, Version::HashMd5, 'md5'); @@ -360,10 +338,6 @@ class UuidFactory implements UuidFactoryInterface return $this->uuidFromBytesAndVersion($bytes, Version::Random); } - /** - * @inheritDoc - * @psalm-pure - */ public function uuid5(UuidInterface | string $ns, string $name): UuidInterface { return $this->uuidFromNsAndName($ns, $name, Version::HashSha1, 'sha1'); @@ -438,12 +412,9 @@ class UuidFactory implements UuidFactoryInterface * * @return UuidInterface An instance of UuidInterface, created from the * provided bytes - * - * @psalm-pure */ public function uuid(string $bytes): UuidInterface { - /** @psalm-suppress ImpurePropertyFetch */ return $this->uuidBuilder->build($this->codec, $bytes); } @@ -458,8 +429,6 @@ class UuidFactory implements UuidFactoryInterface * * @return UuidInterface An instance of UuidInterface, created by hashing * together the provided namespace and name - * - * @psalm-pure */ private function uuidFromNsAndName( UuidInterface | string $ns, @@ -487,8 +456,6 @@ class UuidFactory implements UuidFactoryInterface * * @return UuidInterface An instance of UuidInterface, created from the * byte string and version - * - * @psalm-pure */ private function uuidFromBytesAndVersion(string $bytes, Version $version): UuidInterface { diff --git a/src/UuidFactoryInterface.php b/src/UuidFactoryInterface.php index adb4cd5..046dcaf 100644 --- a/src/UuidFactoryInterface.php +++ b/src/UuidFactoryInterface.php @@ -20,10 +20,10 @@ use Ramsey\Uuid\Type\Integer as IntegerObject; use Ramsey\Uuid\Validator\ValidatorInterface; /** - * UuidFactoryInterface defines common functionality all `UuidFactory` instances + * UuidFactoryInterface defines the common functionality all `UuidFactory` instances * must implement * - * @psalm-immutable + * @immutable */ interface UuidFactoryInterface { @@ -34,8 +34,6 @@ interface UuidFactoryInterface * * @return UuidInterface A UuidInterface instance created from a binary * string representation - * - * @psalm-pure */ public function fromBytes(string $bytes): UuidInterface; @@ -65,8 +63,6 @@ interface UuidFactoryInterface * * @return UuidInterface A UuidInterface instance created from the string * representation of a 128-bit integer - * - * @psalm-pure */ public function fromInteger(string $integer): UuidInterface; @@ -77,15 +73,11 @@ interface UuidFactoryInterface * * @return UuidInterface A UuidInterface instance created from a hexadecimal * string representation - * - * @psalm-pure */ public function fromString(string $uuid): UuidInterface; /** - * Returns the validator to use for the factory - * - * @psalm-mutation-free + * Returns the validator used by the factory */ public function getValidator(): ValidatorInterface; @@ -140,8 +132,6 @@ interface UuidFactoryInterface * * @return UuidInterface A UuidInterface instance that represents a * version 3 UUID - * - * @psalm-pure */ public function uuid3(UuidInterface | string $ns, string $name): UuidInterface; @@ -162,8 +152,6 @@ interface UuidFactoryInterface * * @return UuidInterface A UuidInterface instance that represents a * version 5 UUID - * - * @psalm-pure */ public function uuid5(UuidInterface | string $ns, string $name): UuidInterface; diff --git a/src/UuidInterface.php b/src/UuidInterface.php index 474957e..5a9871e 100644 --- a/src/UuidInterface.php +++ b/src/UuidInterface.php @@ -24,7 +24,7 @@ use Stringable; * A UUID is a universally unique identifier adhering to an agreed-upon * representation format and standard for generation * - * @psalm-immutable + * @immutable */ interface UuidInterface extends JsonSerializable, Stringable { @@ -36,7 +36,7 @@ interface UuidInterface extends JsonSerializable, Stringable /** * Casts the UUID to the string standard representation * - * @psalm-return non-empty-string + * @return non-empty-string */ public function __toString(): string; @@ -78,7 +78,7 @@ interface UuidInterface extends JsonSerializable, Stringable /** * Returns the binary string representation of the UUID * - * @psalm-return non-empty-string + * @return non-empty-string */ public function getBytes(): string; @@ -108,7 +108,7 @@ interface UuidInterface extends JsonSerializable, Stringable /** * Returns the string standard representation of the UUID * - * @psalm-return non-empty-string + * @return non-empty-string */ public function toString(): string; } diff --git a/src/Validator/GenericValidator.php b/src/Validator/GenericValidator.php index 5c0ebdf..36fb56e 100644 --- a/src/Validator/GenericValidator.php +++ b/src/Validator/GenericValidator.php @@ -22,7 +22,7 @@ use function str_replace; /** * GenericValidator validates strings as UUIDs of any variant * - * @psalm-immutable + * @immutable */ final class GenericValidator implements ValidatorInterface { @@ -31,6 +31,9 @@ final class GenericValidator implements ValidatorInterface */ private const VALID_PATTERN = '\A[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\z'; + /** + * @return non-empty-string + */ public function getPattern(): string { return self::VALID_PATTERN; diff --git a/src/Validator/ValidatorInterface.php b/src/Validator/ValidatorInterface.php index 95833f8..f125513 100644 --- a/src/Validator/ValidatorInterface.php +++ b/src/Validator/ValidatorInterface.php @@ -17,7 +17,7 @@ namespace Ramsey\Uuid\Validator; /** * A validator validates a string as a proper UUID * - * @psalm-immutable + * @immutable */ interface ValidatorInterface { diff --git a/src/functions.php b/src/functions.php index d35821f..2c15928 100644 --- a/src/functions.php +++ b/src/functions.php @@ -72,9 +72,6 @@ function v2( * @param non-empty-string $name The name to use for creating a UUID * * @return non-empty-string Version 3 UUID as a string - * - * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, - * but under constant factory setups, this method operates in functionally pure manners */ function v3(UuidInterface | string $ns, string $name): string { @@ -99,9 +96,6 @@ function v4(): string * @param non-empty-string $name The name to use for creating a UUID * * @return non-empty-string Version 5 UUID as a string - * - * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, - * but under constant factory setups, this method operates in functionally pure manners */ function v5(UuidInterface | string $ns, string $name): string { diff --git a/tests/BinaryUtilsTest.php b/tests/BinaryUtilsTest.php index 9ffa32f..537fae4 100644 --- a/tests/BinaryUtilsTest.php +++ b/tests/BinaryUtilsTest.php @@ -46,7 +46,7 @@ class BinaryUtilsTest extends TestCase } /** - * @return array + * @return array */ public function provideVersionTestValues(): array { @@ -199,7 +199,7 @@ class BinaryUtilsTest extends TestCase } /** - * @return array + * @return array */ public function provideVariantTestValues(): array { diff --git a/tests/Builder/FallbackBuilderTest.php b/tests/Builder/FallbackBuilderTest.php index 6e87f5e..3e7b17b 100644 --- a/tests/Builder/FallbackBuilderTest.php +++ b/tests/Builder/FallbackBuilderTest.php @@ -4,7 +4,6 @@ declare(strict_types=1); namespace Ramsey\Uuid\Test\Builder; -use DateTimeInterface; use Mockery; use Ramsey\Uuid\Builder\FallbackBuilder; use Ramsey\Uuid\Builder\UuidBuilderInterface; @@ -103,7 +102,7 @@ class FallbackBuilderTest extends TestCase $uuid = $builder->build($codec, $bytes); if (($uuid instanceof UuidV1) || ($uuid instanceof UuidV2) || ($uuid instanceof UuidV6)) { - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); + $this->assertNotEmpty($uuid->getDateTime()->format('r')); } } catch (UnableToBuildUuidException $exception) { switch ($exception->getMessage()) { @@ -120,78 +119,78 @@ class FallbackBuilderTest extends TestCase } /** - * @return array + * @return array */ public function provideBytes(): array { return [ [ // GUID bytes - 'bytes' => hex2bin('b08c6fff7dc5e1110b210800200c9a66'), + 'bytes' => (string) hex2bin('b08c6fff7dc5e1110b210800200c9a66'), ], [ // GUID bytes - 'bytes' => hex2bin('b08c6fff7dc5e1111b210800200c9a66'), + 'bytes' => (string) hex2bin('b08c6fff7dc5e1111b210800200c9a66'), ], [ // GUID bytes - 'bytes' => hex2bin('b08c6fff7dc5e1112b210800200c9a66'), + 'bytes' => (string) hex2bin('b08c6fff7dc5e1112b210800200c9a66'), ], [ // GUID bytes - 'bytes' => hex2bin('b08c6fff7dc5e1113b210800200c9a66'), + 'bytes' => (string) hex2bin('b08c6fff7dc5e1113b210800200c9a66'), ], [ // GUID bytes - 'bytes' => hex2bin('b08c6fff7dc5e1114b210800200c9a66'), + 'bytes' => (string) hex2bin('b08c6fff7dc5e1114b210800200c9a66'), ], [ // GUID bytes - 'bytes' => hex2bin('b08c6fff7dc5e1115b210800200c9a66'), + 'bytes' => (string) hex2bin('b08c6fff7dc5e1115b210800200c9a66'), ], [ // GUID bytes - 'bytes' => hex2bin('b08c6fff7dc5e1116b210800200c9a66'), + 'bytes' => (string) hex2bin('b08c6fff7dc5e1116b210800200c9a66'), ], [ // GUID bytes - 'bytes' => hex2bin('b08c6fff7dc5e1117b210800200c9a66'), + 'bytes' => (string) hex2bin('b08c6fff7dc5e1117b210800200c9a66'), ], [ // GUID bytes - 'bytes' => hex2bin('b08c6fff7dc5e111eb210800200c9a66'), + 'bytes' => (string) hex2bin('b08c6fff7dc5e111eb210800200c9a66'), ], [ // GUID bytes - 'bytes' => hex2bin('b08c6fff7dc5e111fb210800200c9a66'), + 'bytes' => (string) hex2bin('b08c6fff7dc5e111fb210800200c9a66'), ], [ // Version 1 bytes - 'bytes' => hex2bin('ff6f8cb0c57d11e19b210800200c9a66'), + 'bytes' => (string) hex2bin('ff6f8cb0c57d11e19b210800200c9a66'), ], [ // Version 2 bytes - 'bytes' => hex2bin('000001f55cde21ea84000242ac130003'), + 'bytes' => (string) hex2bin('000001f55cde21ea84000242ac130003'), ], [ // Version 3 bytes - 'bytes' => hex2bin('ff6f8cb0c57d31e1bb210800200c9a66'), + 'bytes' => (string) hex2bin('ff6f8cb0c57d31e1bb210800200c9a66'), ], [ // Version 4 bytes - 'bytes' => hex2bin('ff6f8cb0c57d41e1ab210800200c9a66'), + 'bytes' => (string) hex2bin('ff6f8cb0c57d41e1ab210800200c9a66'), ], [ // Version 5 bytes - 'bytes' => hex2bin('ff6f8cb0c57d51e18b210800200c9a66'), + 'bytes' => (string) hex2bin('ff6f8cb0c57d51e18b210800200c9a66'), ], [ // Version 6 bytes - 'bytes' => hex2bin('ff6f8cb0c57d61e18b210800200c9a66'), + 'bytes' => (string) hex2bin('ff6f8cb0c57d61e18b210800200c9a66'), ], [ // NIL bytes - 'bytes' => hex2bin('00000000000000000000000000000000'), + 'bytes' => (string) hex2bin('00000000000000000000000000000000'), ], ]; } diff --git a/tests/Converter/Time/GenericTimeConverterTest.php b/tests/Converter/Time/GenericTimeConverterTest.php index 1b0dab4..748d602 100644 --- a/tests/Converter/Time/GenericTimeConverterTest.php +++ b/tests/Converter/Time/GenericTimeConverterTest.php @@ -14,6 +14,7 @@ class GenericTimeConverterTest extends TestCase /** * @param numeric-string $seconds * @param numeric-string $microseconds + * @param non-empty-string $expected * * @dataProvider provideCalculateTime */ @@ -28,7 +29,7 @@ class GenericTimeConverterTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideCalculateTime(): array { @@ -83,6 +84,9 @@ class GenericTimeConverterTest extends TestCase } /** + * @param numeric-string $unixTimestamp + * @param numeric-string $microseconds + * * @dataProvider provideConvertTime */ public function testConvertTime(Hexadecimal $uuidTimestamp, string $unixTimestamp, string $microseconds): void @@ -97,7 +101,7 @@ class GenericTimeConverterTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideConvertTime(): array { diff --git a/tests/Converter/Time/PhpTimeConverterTest.php b/tests/Converter/Time/PhpTimeConverterTest.php index a55f56c..073a475 100644 --- a/tests/Converter/Time/PhpTimeConverterTest.php +++ b/tests/Converter/Time/PhpTimeConverterTest.php @@ -77,6 +77,9 @@ class PhpTimeConverterTest extends TestCase } /** + * @param numeric-string $unixTimestamp + * @param numeric-string $microseconds + * * @dataProvider provideConvertTime */ public function testConvertTime(Hexadecimal $uuidTimestamp, string $unixTimestamp, string $microseconds): void @@ -92,7 +95,7 @@ class PhpTimeConverterTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideConvertTime(): array { @@ -143,6 +146,7 @@ class PhpTimeConverterTest extends TestCase /** * @param numeric-string $seconds * @param numeric-string $microseconds + * @param non-empty-string $expected * * @dataProvider provideCalculateTime */ @@ -158,7 +162,7 @@ class PhpTimeConverterTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideCalculateTime(): array { diff --git a/tests/FeatureSetTest.php b/tests/FeatureSetTest.php index b69ef67..cff2e28 100644 --- a/tests/FeatureSetTest.php +++ b/tests/FeatureSetTest.php @@ -46,6 +46,7 @@ class FeatureSetTest extends TestCase { $featureSet = new FeatureSet(); + /** @phpstan-ignore method.alreadyNarrowedType */ $this->assertInstanceOf(TimeConverterInterface::class, $featureSet->getTimeConverter()); } diff --git a/tests/Generator/DefaultNameGeneratorTest.php b/tests/Generator/DefaultNameGeneratorTest.php index a58f52e..9bfb556 100644 --- a/tests/Generator/DefaultNameGeneratorTest.php +++ b/tests/Generator/DefaultNameGeneratorTest.php @@ -15,6 +15,7 @@ class DefaultNameGeneratorTest extends TestCase { /** * @param non-empty-string $ns + * @param non-empty-string $name * @param non-empty-string $algorithm * * @dataProvider provideNamesForHashingTest @@ -30,7 +31,7 @@ class DefaultNameGeneratorTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideNamesForHashingTest(): array { diff --git a/tests/Generator/PeclUuidNameGeneratorTest.php b/tests/Generator/PeclUuidNameGeneratorTest.php index a4e18fc..d95b00f 100644 --- a/tests/Generator/PeclUuidNameGeneratorTest.php +++ b/tests/Generator/PeclUuidNameGeneratorTest.php @@ -34,14 +34,14 @@ class PeclUuidNameGeneratorTest extends TestCase // Need to add the version and variant, since ext-uuid already includes // these in the values returned. - /** @var array $unpackedTime */ + /** @var int[] $unpackedTime */ $unpackedTime = unpack('n*', substr($expectedBytes, 6, 2)); - $timeHi = (int) $unpackedTime[1]; + $timeHi = $unpackedTime[1]; $timeHiAndVersion = pack('n*', BinaryUtils::applyVersion($timeHi, $version)); - /** @var array $unpackedClockSeq */ + /** @var int[] $unpackedClockSeq */ $unpackedClockSeq = unpack('n*', substr($expectedBytes, 8, 2)); - $clockSeqHi = (int) $unpackedClockSeq[1]; + $clockSeqHi = $unpackedClockSeq[1]; $clockSeqHiAndReserved = pack('n*', BinaryUtils::applyVariant($clockSeqHi)); $expectedBytes = substr_replace($expectedBytes, $timeHiAndVersion, 6, 2); @@ -101,7 +101,6 @@ class PeclUuidNameGeneratorTest extends TestCase 'Unable to hash namespace and name with algorithm \'aBadAlgorithm\'' ); - /** @phpstan-ignore-next-line */ $generator->generate($namespace, 'a test name', 'aBadAlgorithm'); } } diff --git a/tests/Generator/RandomBytesGeneratorTest.php b/tests/Generator/RandomBytesGeneratorTest.php index e6259fd..db60539 100644 --- a/tests/Generator/RandomBytesGeneratorTest.php +++ b/tests/Generator/RandomBytesGeneratorTest.php @@ -15,7 +15,7 @@ use function hex2bin; class RandomBytesGeneratorTest extends TestCase { /** - * @return array + * @return array */ public function lengthAndHexDataProvider(): array { @@ -28,6 +28,7 @@ class RandomBytesGeneratorTest extends TestCase /** * @param positive-int $length + * @param non-empty-string $hex * * @throws Exception * @@ -53,7 +54,7 @@ class RandomBytesGeneratorTest extends TestCase * @runInSeparateProcess * @preserveGlobalState disabled */ - public function testGenerateThrowsExceptionWhenExceptionThrownByRandombytes(): void + public function testGenerateThrowsExceptionWhenExceptionThrownByRandomBytes(): void { PHPMockery::mock('Ramsey\Uuid\Generator', 'random_bytes') ->once() diff --git a/tests/Generator/TimeGeneratorFactoryTest.php b/tests/Generator/TimeGeneratorFactoryTest.php index dcf1a34..fb456b4 100644 --- a/tests/Generator/TimeGeneratorFactoryTest.php +++ b/tests/Generator/TimeGeneratorFactoryTest.php @@ -28,6 +28,7 @@ class TimeGeneratorFactoryTest extends TestCase $factory = new TimeGeneratorFactory($nodeProvider, $timeConverter, $timeProvider); $generator = $factory->getGenerator(); + /** @phpstan-ignore method.alreadyNarrowedType */ $this->assertInstanceOf(TimeGeneratorInterface::class, $generator); } } diff --git a/tests/Guid/FieldsTest.php b/tests/Guid/FieldsTest.php index e4065b3..0c0ad8d 100644 --- a/tests/Guid/FieldsTest.php +++ b/tests/Guid/FieldsTest.php @@ -28,6 +28,8 @@ class FieldsTest extends TestCase } /** + * @param non-empty-string $guid + * * @dataProvider nonRfc4122GuidVariantProvider */ public function testConstructorThrowsExceptionIfNotRfc4122Variant(string $guid): void @@ -47,7 +49,7 @@ class FieldsTest extends TestCase /** * These values are already in GUID byte order, for easy testing. * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function nonRfc4122GuidVariantProvider(): array { @@ -68,6 +70,8 @@ class FieldsTest extends TestCase } /** + * @param non-empty-string $guid + * * @dataProvider invalidVersionProvider */ public function testConstructorThrowsExceptionIfInvalidVersion(string $guid): void @@ -84,7 +88,7 @@ class FieldsTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function invalidVersionProvider(): array { @@ -104,12 +108,16 @@ class FieldsTest extends TestCase } /** + * @param non-empty-string $bytes + * @param non-empty-string $methodName + * @param Variant | Version | bool | non-empty-string | null $expectedValue + * * @dataProvider fieldGetterMethodProvider */ public function testFieldGetterMethods( string $bytes, string $methodName, - bool | string | Variant | Version | null $expectedValue + Variant | Version | bool | string | null $expectedValue, ): void { /** @var non-empty-string $bytes */ $bytes = (string) hex2bin($bytes); @@ -125,7 +133,11 @@ class FieldsTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function fieldGetterMethodProvider(): array { diff --git a/tests/Math/BrickMathCalculatorTest.php b/tests/Math/BrickMathCalculatorTest.php index 57989cd..8cb5d90 100644 --- a/tests/Math/BrickMathCalculatorTest.php +++ b/tests/Math/BrickMathCalculatorTest.php @@ -8,7 +8,6 @@ use Ramsey\Uuid\Exception\InvalidArgumentException; use Ramsey\Uuid\Math\BrickMathCalculator; use Ramsey\Uuid\Math\RoundingMode; use Ramsey\Uuid\Test\TestCase; -use Ramsey\Uuid\Type\Hexadecimal; use Ramsey\Uuid\Type\Integer as IntegerObject; class BrickMathCalculatorTest extends TestCase @@ -71,7 +70,6 @@ class BrickMathCalculatorTest extends TestCase $result = $calculator->fromBase('ffffffffffffffffffff', 16); - $this->assertInstanceOf(IntegerObject::class, $result); $this->assertSame('1208925819614629174706175', $result->toString()); } @@ -90,7 +88,6 @@ class BrickMathCalculatorTest extends TestCase $result = $calculator->toHexadecimal($intValue); - $this->assertInstanceOf(Hexadecimal::class, $result); $this->assertSame('ffffffffffffffffffff', $result->toString()); } diff --git a/tests/Nonstandard/FieldsTest.php b/tests/Nonstandard/FieldsTest.php index e4ac2ee..fc1c688 100644 --- a/tests/Nonstandard/FieldsTest.php +++ b/tests/Nonstandard/FieldsTest.php @@ -28,12 +28,17 @@ class FieldsTest extends TestCase } /** - * @param string|int $expectedValue + * @param non-empty-string $uuid + * @param non-empty-string $methodName + * @param Variant | bool | non-empty-string | null $expectedValue * * @dataProvider fieldGetterMethodProvider */ - public function testFieldGetterMethods(string $uuid, string $methodName, $expectedValue): void - { + public function testFieldGetterMethods( + string $uuid, + string $methodName, + Variant | bool | string | null $expectedValue, + ): void { /** @var non-empty-string $bytes */ $bytes = (string) hex2bin(str_replace('-', '', $uuid)); $fields = new Fields($bytes); @@ -48,7 +53,7 @@ class FieldsTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function fieldGetterMethodProvider(): array { diff --git a/tests/Nonstandard/UuidV6Test.php b/tests/Nonstandard/UuidV6Test.php index 78d268c..2330e0d 100644 --- a/tests/Nonstandard/UuidV6Test.php +++ b/tests/Nonstandard/UuidV6Test.php @@ -45,7 +45,7 @@ class UuidV6Test extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideTestVersions(): array { @@ -77,7 +77,7 @@ class UuidV6Test extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideUuidV6WithOddMicroseconds(): array { @@ -145,7 +145,7 @@ class UuidV6Test extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideUuidV1UuidV6Equivalents(): array { diff --git a/tests/Provider/Dce/SystemDceSecurityProviderTest.php b/tests/Provider/Dce/SystemDceSecurityProviderTest.php index f65f398..6ad0e88 100644 --- a/tests/Provider/Dce/SystemDceSecurityProviderTest.php +++ b/tests/Provider/Dce/SystemDceSecurityProviderTest.php @@ -8,7 +8,6 @@ use Mockery; use Ramsey\Uuid\Exception\DceSecurityException; use Ramsey\Uuid\Provider\Dce\SystemDceSecurityProvider; use Ramsey\Uuid\Test\TestCase; -use Ramsey\Uuid\Type\Integer as IntegerObject; use phpmock\mockery\PHPMockery; use function array_merge; @@ -147,13 +146,12 @@ class SystemDceSecurityProviderTest extends TestCase $uid = $provider->getUid(); - $this->assertInstanceOf(IntegerObject::class, $uid); $this->assertSame($expectedId, $uid->toString()); $this->assertSame($uid, $provider->getUid()); } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideWindowsGoodWhoAmIValues(): array { @@ -199,7 +197,6 @@ class SystemDceSecurityProviderTest extends TestCase $uid = $provider->getUid(); - $this->assertInstanceOf(IntegerObject::class, $uid); $this->assertSame($id, $uid->toString()); $this->assertSame($uid, $provider->getUid()); } @@ -298,7 +295,6 @@ class SystemDceSecurityProviderTest extends TestCase $gid = $provider->getGid(); - $this->assertInstanceOf(IntegerObject::class, $gid); $this->assertSame($id, $gid->toString()); $this->assertSame($gid, $provider->getGid()); } @@ -419,13 +415,17 @@ class SystemDceSecurityProviderTest extends TestCase $gid = $provider->getGid(); - $this->assertInstanceOf(IntegerObject::class, $gid); $this->assertSame($expectedId, $gid->toString()); $this->assertSame($gid, $provider->getGid()); } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideWindowsGoodNetUserAndWmicGroupValues(): array { @@ -458,7 +458,7 @@ class SystemDceSecurityProviderTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function providePosixTestValues(): array { @@ -474,7 +474,7 @@ class SystemDceSecurityProviderTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideWindowsBadValues(): array { @@ -490,7 +490,7 @@ class SystemDceSecurityProviderTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideWindowsBadGroupValues(): array { diff --git a/tests/Provider/Node/FallbackNodeProviderTest.php b/tests/Provider/Node/FallbackNodeProviderTest.php index 30c678f..f42180d 100644 --- a/tests/Provider/Node/FallbackNodeProviderTest.php +++ b/tests/Provider/Node/FallbackNodeProviderTest.php @@ -81,7 +81,6 @@ class FallbackNodeProviderTest extends TestCase foreach ($unserializedNodeProviderCollection as $nodeProvider) { $this->assertInstanceOf(NodeProviderInterface::class, $nodeProvider); - $this->assertInstanceOf(Hexadecimal::class, $nodeProvider->getNode()); } } } diff --git a/tests/Provider/Node/StaticNodeProviderTest.php b/tests/Provider/Node/StaticNodeProviderTest.php index e8665ca..5a6c47a 100644 --- a/tests/Provider/Node/StaticNodeProviderTest.php +++ b/tests/Provider/Node/StaticNodeProviderTest.php @@ -12,6 +12,8 @@ use Ramsey\Uuid\Type\Hexadecimal; class StaticNodeProviderTest extends TestCase { /** + * @param non-empty-string $expectedNode + * * @dataProvider provideNodeForTest */ public function testStaticNode(Hexadecimal $node, string $expectedNode): void @@ -22,7 +24,7 @@ class StaticNodeProviderTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideNodeForTest(): array { diff --git a/tests/Provider/Node/SystemNodeProviderTest.php b/tests/Provider/Node/SystemNodeProviderTest.php index a0b292e..f1daddf 100644 --- a/tests/Provider/Node/SystemNodeProviderTest.php +++ b/tests/Provider/Node/SystemNodeProviderTest.php @@ -401,6 +401,7 @@ class SystemNodeProviderTest extends TestCase /* Arrange */ $this->arrangeMockFunctions( function () { + /** @var non-empty-list $macs */ static $macs = ["00:00:00:00:00:00\n", "01:02:03:04:05:06\n"]; return array_shift($macs); @@ -654,11 +655,11 @@ class SystemNodeProviderTest extends TestCase self::MOCK_IS_READABLE => $isReadableAssert, ]; - array_walk($mockFunctionAsserts, function ($asserts, $key): void { + array_walk($mockFunctionAsserts, function (mixed $asserts, string $key): void { if ($asserts === null) { // Assert the function was never invoked. $this->assertEmpty($this->functionProxies[$key]->getInvocations()); - } elseif (is_array($asserts)) { + } elseif (is_array($asserts)) { /** @phpstan-ignore function.alreadyNarrowedType */ // Assert there was at least one invocation for this function. $this->assertNotEmpty($this->functionProxies[$key]->getInvocations()); @@ -686,7 +687,7 @@ class SystemNodeProviderTest extends TestCase /** * Provides the command that should be executed per supported OS * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideCommandPerOs(): array { @@ -703,7 +704,7 @@ class SystemNodeProviderTest extends TestCase /** * Values that are NOT parsed to a mac address by the class under test * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideInvalidNetStatOutput(): array { @@ -729,7 +730,7 @@ class SystemNodeProviderTest extends TestCase /** * Provides notations that the class under test should NOT attempt to strip * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideInvalidNotationalFormats(): array { @@ -749,7 +750,7 @@ class SystemNodeProviderTest extends TestCase /** * Provides mac addresses that the class under test should strip notational format from * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideNotationalFormats(): array { @@ -762,168 +763,172 @@ class SystemNodeProviderTest extends TestCase /** * Values that are parsed to a mac address by the class under test * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideValidNetStatOutput(): array { return [ /* Full output of related command */ - 'Full output - Linux' => [<<<'TXT' - Kernel Interface table - docker0 Link encap:Ethernet HWaddr 01:23:45:67:89:ab - inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 - UP BROADCAST MULTICAST MTU:1500 Metric:1 - RX packets:0 errors:0 dropped:0 overruns:0 frame:0 - TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 - collisions:0 txqueuelen:0 - RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) + 'Full output - Linux' => [ + <<<'TXT' + Kernel Interface table + docker0 Link encap:Ethernet HWaddr 01:23:45:67:89:ab + inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 + UP BROADCAST MULTICAST MTU:1500 Metric:1 + RX packets:0 errors:0 dropped:0 overruns:0 frame:0 + TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:0 + RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) - enp3s0 Link encap:Ethernet HWaddr fe:dc:ba:98:76:54 - inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0 - inet6 addr: ffee::ddcc:bbaa:9988:7766/64 Scope:Link - UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 - RX packets:943077 errors:0 dropped:0 overruns:0 frame:0 - TX packets:2168039 errors:0 dropped:0 overruns:0 carrier:0 - collisions:0 txqueuelen:1000 - RX bytes:748596414 (748.5 MB) TX bytes:2930448282 (2.9 GB) + enp3s0 Link encap:Ethernet HWaddr fe:dc:ba:98:76:54 + inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0 + inet6 addr: ffee::ddcc:bbaa:9988:7766/64 Scope:Link + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + RX packets:943077 errors:0 dropped:0 overruns:0 frame:0 + TX packets:2168039 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:1000 + RX bytes:748596414 (748.5 MB) TX bytes:2930448282 (2.9 GB) - lo Link encap:Local Loopback - inet addr:127.0.0.1 Mask:255.0.0.0 - inet6 addr: ::1/128 Scope:Host - UP LOOPBACK RUNNING MTU:65536 Metric:1 - RX packets:8302 errors:0 dropped:0 overruns:0 frame:0 - TX packets:8302 errors:0 dropped:0 overruns:0 carrier:0 - collisions:0 txqueuelen:1000 - RX bytes:1094983 (1.0 MB) TX bytes:1094983 (1.0 MB) -TXT - , '0123456789ab', + lo Link encap:Local Loopback + inet addr:127.0.0.1 Mask:255.0.0.0 + inet6 addr: ::1/128 Scope:Host + UP LOOPBACK RUNNING MTU:65536 Metric:1 + RX packets:8302 errors:0 dropped:0 overruns:0 frame:0 + TX packets:8302 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:1000 + RX bytes:1094983 (1.0 MB) TX bytes:1094983 (1.0 MB) + TXT, + '0123456789ab', ], - 'Full output - MacOS' => [<<<'TXT' - lo0: flags=8049 mtu 16384 - options=1203 - inet 127.0.0.1 netmask 0xff000000 - inet6 ::1 prefixlen 128 - inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 - nd6 options=201 - gif0: flags=8010 mtu 1280 - stf0: flags=0<> mtu 1280 - EHC29: flags=0<> mtu 0 - XHC20: flags=0<> mtu 0 - EHC26: flags=0<> mtu 0 - aa0: flags=8863 mtu 1500 - options=10b - ether 00:00:00:00:00:00 - status: active - en0: flags=8863 mtu 1500 - options=10b - ether 10:dd:b1:b4:e4:8e - inet6 fe80::c70:76f5:aa1:5db1%en0 prefixlen 64 secured scopeid 0x7 - inet 10.53.8.112 netmask 0xfffffc00 broadcast 10.53.11.255 - nd6 options=201 - media: autoselect (1000baseT ) - status: active - en1: flags=8863 mtu 1500 - ether ec:35:86:38:c8:c2 - inet6 fe80::aa:d44f:5f5f:7fd4%en1 prefixlen 64 secured scopeid 0x8 - inet 10.53.17.196 netmask 0xfffffc00 broadcast 10.53.19.255 - nd6 options=201 - media: autoselect - status: active - p2p0: flags=8843 mtu 2304 - ether 0e:35:86:38:c8:c2 - media: autoselect - status: inactive - awdl0: flags=8943 mtu 1484 - ether ea:ab:ae:25:f5:d0 - inet6 fe80::e8ab:aeff:fe25:f5d0%awdl0 prefixlen 64 scopeid 0xa - nd6 options=201 - media: autoselect - status: active - en2: flags=8963 mtu 1500 - options=60 - ether 32:00:18:9b:dc:60 - media: autoselect - status: inactive - en3: flags=8963 mtu 1500 - options=60 - ether 32:00:18:9b:dc:61 - media: autoselect - status: inactive - bridge0: flags=8822 mtu 1500 - options=63 - ether 32:00:18:9b:dc:60 - Configuration: - id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0 - maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200 - root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0 - ipfilter disabled flags 0x2 - member: en2 flags=3 - ifmaxaddr 0 port 11 priority 0 path cost 0 - member: en3 flags=3 - ifmaxaddr 0 port 12 priority 0 path cost 0 - media: - status: inactive - utun0: flags=8051 mtu 2000 - options=6403 - inet6 fe80::57c6:d692:9d41:d28f%utun0 prefixlen 64 scopeid 0xe - nd6 options=201 -TXT - , '10ddb1b4e48e', + 'Full output - MacOS' => [ + <<<'TXT' + lo0: flags=8049 mtu 16384 + options=1203 + inet 127.0.0.1 netmask 0xff000000 + inet6 ::1 prefixlen 128 + inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 + nd6 options=201 + gif0: flags=8010 mtu 1280 + stf0: flags=0<> mtu 1280 + EHC29: flags=0<> mtu 0 + XHC20: flags=0<> mtu 0 + EHC26: flags=0<> mtu 0 + aa0: flags=8863 mtu 1500 + options=10b + ether 00:00:00:00:00:00 + status: active + en0: flags=8863 mtu 1500 + options=10b + ether 10:dd:b1:b4:e4:8e + inet6 fe80::c70:76f5:aa1:5db1%en0 prefixlen 64 secured scopeid 0x7 + inet 10.53.8.112 netmask 0xfffffc00 broadcast 10.53.11.255 + nd6 options=201 + media: autoselect (1000baseT ) + status: active + en1: flags=8863 mtu 1500 + ether ec:35:86:38:c8:c2 + inet6 fe80::aa:d44f:5f5f:7fd4%en1 prefixlen 64 secured scopeid 0x8 + inet 10.53.17.196 netmask 0xfffffc00 broadcast 10.53.19.255 + nd6 options=201 + media: autoselect + status: active + p2p0: flags=8843 mtu 2304 + ether 0e:35:86:38:c8:c2 + media: autoselect + status: inactive + awdl0: flags=8943 mtu 1484 + ether ea:ab:ae:25:f5:d0 + inet6 fe80::e8ab:aeff:fe25:f5d0%awdl0 prefixlen 64 scopeid 0xa + nd6 options=201 + media: autoselect + status: active + en2: flags=8963 mtu 1500 + options=60 + ether 32:00:18:9b:dc:60 + media: autoselect + status: inactive + en3: flags=8963 mtu 1500 + options=60 + ether 32:00:18:9b:dc:61 + media: autoselect + status: inactive + bridge0: flags=8822 mtu 1500 + options=63 + ether 32:00:18:9b:dc:60 + Configuration: + id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0 + maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200 + root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0 + ipfilter disabled flags 0x2 + member: en2 flags=3 + ifmaxaddr 0 port 11 priority 0 path cost 0 + member: en3 flags=3 + ifmaxaddr 0 port 12 priority 0 path cost 0 + media: + status: inactive + utun0: flags=8051 mtu 2000 + options=6403 + inet6 fe80::57c6:d692:9d41:d28f%utun0 prefixlen 64 scopeid 0xe + nd6 options=201 + TXT, + '10ddb1b4e48e', ], - 'Full output - Window' => [<<<'TXT' - Windows IP Configuration + 'Full output - Window' => [ + <<<'TXT' + Windows IP Configuration - Host Name . . . . . . . . . . . . : MSEDGEWIN10 - Primary Dns Suffix . . . . . . . : - Node Type . . . . . . . . . . . . : Hybrid - IP Routing Enabled. . . . . . . . : No - WINS Proxy Enabled. . . . . . . . : No - DNS Suffix Search List. . . . . . : network.lan + Host Name . . . . . . . . . . . . : MSEDGEWIN10 + Primary Dns Suffix . . . . . . . : + Node Type . . . . . . . . . . . . : Hybrid + IP Routing Enabled. . . . . . . . : No + WINS Proxy Enabled. . . . . . . . : No + DNS Suffix Search List. . . . . . : network.lan - Some kind of adapter: + Some kind of adapter: - Connection-specific DNS Suffix . : network.foo - Description . . . . . . . . . . . : Some Adapter - Physical Address. . . . . . . . . : 00-00-00-00-00-00 + Connection-specific DNS Suffix . : network.foo + Description . . . . . . . . . . . : Some Adapter + Physical Address. . . . . . . . . : 00-00-00-00-00-00 - Ethernet adapter Ethernet: + Ethernet adapter Ethernet: - Connection-specific DNS Suffix . : network.lan - Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Desktop Adapter - Physical Address. . . . . . . . . : 08-00-27-B8-42-C6 - DHCP Enabled. . . . . . . . . . . : Yes - Autoconfiguration Enabled . . . . : Yes - Link-local IPv6 Address . . . . . : fe80::606a:ae33:7ce1:b5e9%3(Preferred) - IPv4 Address. . . . . . . . . . . : 10.0.2.15(Preferred) - Subnet Mask . . . . . . . . . . . : 255.255.255.0 - Lease Obtained. . . . . . . . . . : Tuesday, January 30, 2018 11:25:31 PM - Lease Expires . . . . . . . . . . : Wednesday, January 31, 2018 11:25:27 PM - Default Gateway . . . . . . . . . : 10.0.2.2 - DHCP Server . . . . . . . . . . . : 10.0.2.2 - DHCPv6 IAID . . . . . . . . . . . : 34078759 - DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-21-40-72-3F-08-00-27-B8-42-C6 - DNS Servers . . . . . . . . . . . : 10.0.2.3 - NetBIOS over Tcpip. . . . . . . . : Enabled + Connection-specific DNS Suffix . : network.lan + Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Desktop Adapter + Physical Address. . . . . . . . . : 08-00-27-B8-42-C6 + DHCP Enabled. . . . . . . . . . . : Yes + Autoconfiguration Enabled . . . . : Yes + Link-local IPv6 Address . . . . . : fe80::606a:ae33:7ce1:b5e9%3(Preferred) + IPv4 Address. . . . . . . . . . . : 10.0.2.15(Preferred) + Subnet Mask . . . . . . . . . . . : 255.255.255.0 + Lease Obtained. . . . . . . . . . : Tuesday, January 30, 2018 11:25:31 PM + Lease Expires . . . . . . . . . . : Wednesday, January 31, 2018 11:25:27 PM + Default Gateway . . . . . . . . . : 10.0.2.2 + DHCP Server . . . . . . . . . . . : 10.0.2.2 + DHCPv6 IAID . . . . . . . . . . . : 34078759 + DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-21-40-72-3F-08-00-27-B8-42-C6 + DNS Servers . . . . . . . . . . . : 10.0.2.3 + NetBIOS over Tcpip. . . . . . . . : Enabled - Tunnel adapter isatap.network.lan: + Tunnel adapter isatap.network.lan: - Media State . . . . . . . . . . . : Media disconnected - Connection-specific DNS Suffix . : network.lan - Description . . . . . . . . . . . : Microsoft ISATAP Adapter - Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 - DHCP Enabled. . . . . . . . . . . : No - Autoconfiguration Enabled . . . . : Yes -TXT - , '080027b842c6', + Media State . . . . . . . . . . . : Media disconnected + Connection-specific DNS Suffix . : network.lan + Description . . . . . . . . . . . : Microsoft ISATAP Adapter + Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 + DHCP Enabled. . . . . . . . . . . : No + Autoconfiguration Enabled . . . . : Yes + TXT, + '080027b842c6', ], - 'Full output - FreeBSD' => [<<<'TXT' - Name Mtu Network Address Ipkts Ierrs Idrop Opkts Oerrs Coll - aa0 0 00:00:00:00:00:00 0 0 0 0 0 0 - em0 1500 08:00:27:71:a1:00 65514 0 0 42918 0 0 - em1 1500 08:00:27:d0:60:a0 1199 0 0 535 0 0 - lo0 16384 lo0 4 0 0 4 0 0 -TXT - , '08002771a100', + 'Full output - FreeBSD' => [ + <<<'TXT' + Name Mtu Network Address Ipkts Ierrs Idrop Opkts Oerrs Coll + aa0 0 00:00:00:00:00:00 0 0 0 0 0 0 + em0 1500 08:00:27:71:a1:00 65514 0 0 42918 0 0 + em1 1500 08:00:27:d0:60:a0 1199 0 0 535 0 0 + lo0 16384 lo0 4 0 0 4 0 0 + TXT, + '08002771a100', ], /* The single line that is relevant */ diff --git a/tests/Provider/Time/SystemTimeProviderTest.php b/tests/Provider/Time/SystemTimeProviderTest.php index 4655aea..243af52 100644 --- a/tests/Provider/Time/SystemTimeProviderTest.php +++ b/tests/Provider/Time/SystemTimeProviderTest.php @@ -15,6 +15,7 @@ class SystemTimeProviderTest extends TestCase $provider = new SystemTimeProvider(); $time = $provider->getTime(); + /** @phpstan-ignore method.alreadyNarrowedType */ $this->assertInstanceOf(Time::class, $time); } } diff --git a/tests/Rfc4122/FieldsTest.php b/tests/Rfc4122/FieldsTest.php index 6d5ae9b..cbf1595 100644 --- a/tests/Rfc4122/FieldsTest.php +++ b/tests/Rfc4122/FieldsTest.php @@ -29,6 +29,8 @@ class FieldsTest extends TestCase } /** + * @param non-empty-string $uuid + * * @dataProvider nonRfc4122VariantProvider */ public function testConstructorThrowsExceptionIfNotRfc4122Variant(string $uuid): void @@ -45,7 +47,7 @@ class FieldsTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function nonRfc4122VariantProvider(): array { @@ -66,6 +68,8 @@ class FieldsTest extends TestCase } /** + * @param non-empty-string $uuid + * * @dataProvider invalidVersionProvider */ public function testConstructorThrowsExceptionIfInvalidVersion(string $uuid): void @@ -82,7 +86,7 @@ class FieldsTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function invalidVersionProvider(): array { @@ -99,12 +103,16 @@ class FieldsTest extends TestCase } /** + * @param non-empty-string $uuid + * @param non-empty-string $methodName + * @param Variant | Version | bool | non-empty-string | null $expectedValue + * * @dataProvider fieldGetterMethodProvider */ public function testFieldGetterMethods( string $uuid, string $methodName, - bool | string | Variant | Version | null $expectedValue + Variant | Version | bool | string | null $expectedValue, ): void { /** @var non-empty-string $bytes */ $bytes = (string) hex2bin(str_replace('-', '', $uuid)); @@ -120,7 +128,11 @@ class FieldsTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function fieldGetterMethodProvider(): array { diff --git a/tests/Rfc4122/UuidBuilderTest.php b/tests/Rfc4122/UuidBuilderTest.php index d2ac79c..079a754 100644 --- a/tests/Rfc4122/UuidBuilderTest.php +++ b/tests/Rfc4122/UuidBuilderTest.php @@ -31,6 +31,7 @@ use function str_replace; class UuidBuilderTest extends TestCase { /** + * @param non-empty-string $uuid * @param class-string $expectedClass * * @dataProvider provideBuildTestValues @@ -56,7 +57,7 @@ class UuidBuilderTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideBuildTestValues(): array { diff --git a/tests/Rfc4122/UuidV1Test.php b/tests/Rfc4122/UuidV1Test.php index bd01c4d..72b54f6 100644 --- a/tests/Rfc4122/UuidV1Test.php +++ b/tests/Rfc4122/UuidV1Test.php @@ -44,7 +44,7 @@ class UuidV1Test extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideTestVersions(): array { @@ -61,6 +61,7 @@ class UuidV1Test extends TestCase /** * @param non-empty-string $uuid + * @param numeric-string $expected * * @dataProvider provideUuidV1WithOddMicroseconds */ @@ -76,7 +77,7 @@ class UuidV1Test extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideUuidV1WithOddMicroseconds(): array { diff --git a/tests/Rfc4122/UuidV2Test.php b/tests/Rfc4122/UuidV2Test.php index b8e63a8..026397d 100644 --- a/tests/Rfc4122/UuidV2Test.php +++ b/tests/Rfc4122/UuidV2Test.php @@ -55,7 +55,7 @@ class UuidV2Test extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideTestVersions(): array { @@ -115,7 +115,17 @@ class UuidV2Test extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * phpcs:ignore SlevomatCodingStandard.TypeHints.LongTypeHints.UsedLongTypeHint + * @return array */ public function provideLocalDomainAndIdentifierForTests(): array { diff --git a/tests/Rfc4122/UuidV3Test.php b/tests/Rfc4122/UuidV3Test.php index 9abb5de..b8a1745 100644 --- a/tests/Rfc4122/UuidV3Test.php +++ b/tests/Rfc4122/UuidV3Test.php @@ -39,7 +39,7 @@ class UuidV3Test extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideTestVersions(): array { diff --git a/tests/Rfc4122/UuidV4Test.php b/tests/Rfc4122/UuidV4Test.php index bb817d0..f653d8d 100644 --- a/tests/Rfc4122/UuidV4Test.php +++ b/tests/Rfc4122/UuidV4Test.php @@ -39,7 +39,7 @@ class UuidV4Test extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideTestVersions(): array { diff --git a/tests/Rfc4122/UuidV5Test.php b/tests/Rfc4122/UuidV5Test.php index c38e678..d9c8f3a 100644 --- a/tests/Rfc4122/UuidV5Test.php +++ b/tests/Rfc4122/UuidV5Test.php @@ -39,7 +39,7 @@ class UuidV5Test extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideTestVersions(): array { diff --git a/tests/Rfc4122/UuidV6Test.php b/tests/Rfc4122/UuidV6Test.php index f5f3657..cc4e969 100644 --- a/tests/Rfc4122/UuidV6Test.php +++ b/tests/Rfc4122/UuidV6Test.php @@ -62,6 +62,7 @@ class UuidV6Test extends TestCase /** * @param non-empty-string $uuid + * @param non-empty-string $expected * * @dataProvider provideUuidV6WithOddMicroseconds */ @@ -77,7 +78,7 @@ class UuidV6Test extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideUuidV6WithOddMicroseconds(): array { @@ -145,7 +146,7 @@ class UuidV6Test extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideUuidV1UuidV6Equivalents(): array { diff --git a/tests/Rfc4122/ValidatorTest.php b/tests/Rfc4122/ValidatorTest.php index b3b2e8a..86f2d72 100644 --- a/tests/Rfc4122/ValidatorTest.php +++ b/tests/Rfc4122/ValidatorTest.php @@ -43,7 +43,7 @@ class ValidatorTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideValuesForValidation(): array { diff --git a/tests/Rfc4122/VariantTraitTest.php b/tests/Rfc4122/VariantTraitTest.php index baf3d80..74fc82e 100644 --- a/tests/Rfc4122/VariantTraitTest.php +++ b/tests/Rfc4122/VariantTraitTest.php @@ -35,7 +35,7 @@ class VariantTraitTest extends TestCase } /** - * @return array + * @return array */ public function invalidBytesProvider(): array { @@ -63,7 +63,7 @@ class VariantTraitTest extends TestCase } /** - * @return array + * @return array */ public function uuidVariantProvider(): array { diff --git a/tests/TestCase.php b/tests/TestCase.php index ed22f93..455a4a1 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -21,7 +21,7 @@ class TestCase extends PhpUnitTestCase public static function isLittleEndianSystem(): bool { - /** @var array $unpacked */ + /** @var int[] $unpacked */ $unpacked = unpack('v', pack('S', 0x00FF)); return current($unpacked) === 0x00FF; diff --git a/tests/UuidFactoryTest.php b/tests/UuidFactoryTest.php index 671d18e..76222e7 100644 --- a/tests/UuidFactoryTest.php +++ b/tests/UuidFactoryTest.php @@ -162,7 +162,7 @@ class UuidFactoryTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideDateTime(): array { diff --git a/tests/UuidTest.php b/tests/UuidTest.php index 643f243..7b6ce5d 100644 --- a/tests/UuidTest.php +++ b/tests/UuidTest.php @@ -244,21 +244,18 @@ class UuidTest extends TestCase // Check a recent date /** @var UuidV1 $uuid */ $uuid = Uuid::fromString('ff6f8cb0-c57d-11e1-9b21-0800200c9a66'); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame('2012-07-04T02:14:34+00:00', $uuid->getDateTime()->format('c')); $this->assertSame('1341368074.491000', $uuid->getDateTime()->format('U.u')); // Check an old date /** @var UuidV1 $uuid */ $uuid = Uuid::fromString('0901e600-0154-1000-9b21-0800200c9a66'); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame('1582-10-16T16:34:04+00:00', $uuid->getDateTime()->format('c')); $this->assertSame('-12219146756.000000', $uuid->getDateTime()->format('U.u')); // Check a future date /** @var UuidV1 $uuid */ $uuid = Uuid::fromString('ff9785f6-ffff-1fff-9669-00007ffffffe'); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame('5236-03-31T21:20:59+00:00', $uuid->getDateTime()->format('c')); $this->assertSame('103072857659.999999', $uuid->getDateTime()->format('U.u')); @@ -267,21 +264,18 @@ class UuidTest extends TestCase // {@see \Ramsey\Uuid\Test\Converter\Time\GenericTimeConverterTest::provideCalculateTime()} /** @var UuidV1 $uuid */ $uuid = Uuid::fromString('fffffffa-ffff-1fff-8b1e-acde48001122'); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame('5236-03-31T21:21:00+00:00', $uuid->getDateTime()->format('c')); $this->assertSame('103072857660.684697', $uuid->getDateTime()->format('U.u')); // Check the oldest date /** @var UuidV1 $uuid */ $uuid = Uuid::fromString('00000000-0000-1000-9669-00007ffffffe'); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame('1582-10-15T00:00:00+00:00', $uuid->getDateTime()->format('c')); $this->assertSame('-12219292800.000000', $uuid->getDateTime()->format('U.u')); // The Unix epoch /** @var UuidV1 $uuid */ $uuid = Uuid::fromString('13814000-1dd2-11b2-9669-00007ffffffe'); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame('1970-01-01T00:00:00+00:00', $uuid->getDateTime()->format('c')); $this->assertSame('0.000000', $uuid->getDateTime()->format('U.u')); } @@ -291,21 +285,18 @@ class UuidTest extends TestCase // Check a recent date /** @var UuidV6 $uuid */ $uuid = Uuid::fromString('1e1c57df-f6f8-6cb0-9b21-0800200c9a66'); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame('2012-07-04T02:14:34+00:00', $uuid->getDateTime()->format('c')); $this->assertSame('1341368074.491000', $uuid->getDateTime()->format('U.u')); // Check an old date /** @var UuidV6 $uuid */ $uuid = Uuid::fromString('00001540-901e-6600-9b21-0800200c9a66'); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame('1582-10-16T16:34:04+00:00', $uuid->getDateTime()->format('c')); $this->assertSame('-12219146756.000000', $uuid->getDateTime()->format('U.u')); // Check a future date /** @var UuidV6 $uuid */ $uuid = Uuid::fromString('ffffffff-f978-65f6-9669-00007ffffffe'); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame('5236-03-31T21:20:59+00:00', $uuid->getDateTime()->format('c')); $this->assertSame('103072857659.999999', $uuid->getDateTime()->format('U.u')); @@ -314,21 +305,18 @@ class UuidTest extends TestCase // {@see \Ramsey\Uuid\Test\Converter\Time\GenericTimeConverterTest::provideCalculateTime()} /** @var UuidV6 $uuid */ $uuid = Uuid::fromString('ffffffff-ffff-6ffa-8b1e-acde48001122'); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame('5236-03-31T21:21:00+00:00', $uuid->getDateTime()->format('c')); $this->assertSame('103072857660.684697', $uuid->getDateTime()->format('U.u')); // Check the oldest date /** @var UuidV6 $uuid */ $uuid = Uuid::fromString('00000000-0000-6000-9669-00007ffffffe'); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame('1582-10-15T00:00:00+00:00', $uuid->getDateTime()->format('c')); $this->assertSame('-12219292800.000000', $uuid->getDateTime()->format('U.u')); // The Unix epoch /** @var UuidV6 $uuid */ $uuid = Uuid::fromString('1b21dd21-3814-6000-9669-00007ffffffe'); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame('1970-01-01T00:00:00+00:00', $uuid->getDateTime()->format('c')); $this->assertSame('0.000000', $uuid->getDateTime()->format('U.u')); } @@ -425,7 +413,7 @@ class UuidTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideVariousVariantUuids(): array { @@ -509,7 +497,6 @@ class UuidTest extends TestCase { /** @var UuidV1 $uuid */ $uuid = Uuid::uuid1(); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame(Variant::Rfc4122, $uuid->getFields()->getVariant()); $this->assertSame(Version::Time, $uuid->getFields()->getVersion()); } @@ -601,7 +588,6 @@ class UuidTest extends TestCase /** @var UuidV1 $uuid */ $uuid = Uuid::uuid1(); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame(Variant::Rfc4122, $uuid->getFields()->getVariant()); $this->assertSame(Version::Time, $uuid->getFields()->getVersion()); } @@ -610,7 +596,6 @@ class UuidTest extends TestCase { /** @var UuidV1 $uuid */ $uuid = Uuid::uuid1(new Hexadecimal((string) (new RandomNodeProvider())->getNode())); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame(Variant::Rfc4122, $uuid->getFields()->getVariant()); $this->assertSame(Version::Time, $uuid->getFields()->getVersion()); } @@ -619,7 +604,6 @@ class UuidTest extends TestCase { /** @var UuidV6 $uuid */ $uuid = Uuid::uuid6(); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame(Variant::Rfc4122, $uuid->getFields()->getVariant()); $this->assertSame(Version::ReorderedTime, $uuid->getFields()->getVersion()); } @@ -628,7 +612,6 @@ class UuidTest extends TestCase { /** @var UuidV6 $uuid */ $uuid = Uuid::uuid6(new Hexadecimal('0800200c9a66'), 0x1669); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame(Variant::Rfc4122, $uuid->getFields()->getVariant()); $this->assertSame(Version::ReorderedTime, $uuid->getFields()->getVersion()); $this->assertSame('1669', $uuid->getFields()->getClockSeq()->toString()); @@ -641,7 +624,6 @@ class UuidTest extends TestCase /** @var UuidV6 $uuid */ $uuid = Uuid::uuid6(new Hexadecimal('7160355e')); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame(Variant::Rfc4122, $uuid->getFields()->getVariant()); $this->assertSame(Version::ReorderedTime, $uuid->getFields()->getVersion()); $this->assertSame('00007160355e', $uuid->getFields()->getNode()->toString()); @@ -652,7 +634,6 @@ class UuidTest extends TestCase /** @var UuidV6 $uuid */ $uuid = Uuid::uuid6(new Hexadecimal('71B0aD5e')); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame(Variant::Rfc4122, $uuid->getFields()->getVariant()); $this->assertSame(Version::ReorderedTime, $uuid->getFields()->getVersion()); $this->assertSame('000071b0ad5e', $uuid->getFields()->getNode()->toString()); @@ -680,7 +661,6 @@ class UuidTest extends TestCase /** @var UuidV6 $uuid */ $uuid = Uuid::uuid6(); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame(Variant::Rfc4122, $uuid->getFields()->getVariant()); $this->assertSame(Version::ReorderedTime, $uuid->getFields()->getVersion()); } @@ -689,7 +669,6 @@ class UuidTest extends TestCase { /** @var UuidV6 $uuid */ $uuid = Uuid::uuid6(new Hexadecimal((string) (new RandomNodeProvider())->getNode())); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame(Variant::Rfc4122, $uuid->getFields()->getVariant()); $this->assertSame(Version::ReorderedTime, $uuid->getFields()->getVersion()); } @@ -698,7 +677,6 @@ class UuidTest extends TestCase { /** @var UuidV7 $uuid */ $uuid = Uuid::uuid7(); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame(Variant::Rfc4122, $uuid->getFields()->getVariant()); $this->assertSame(Version::UnixTime, $uuid->getFields()->getVersion()); } @@ -722,7 +700,6 @@ class UuidTest extends TestCase /** @var UuidV7 $uuid */ $uuid = Uuid::uuid7($dateTime); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame(Variant::Rfc4122, $uuid->getFields()->getVariant()); $this->assertSame(Version::UnixTime, $uuid->getFields()->getVersion()); $this->assertSame( @@ -759,7 +736,6 @@ class UuidTest extends TestCase /** @var UuidV7 $uuid */ $uuid = Uuid::uuid7($dateTime); - $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime()); $this->assertSame(Variant::Rfc4122, $uuid->getFields()->getVariant()); $this->assertSame(Version::UnixTime, $uuid->getFields()->getVersion()); @@ -829,6 +805,7 @@ class UuidTest extends TestCase * * @param non-empty-string $uuid * @param non-empty-string $ns + * @param non-empty-string $name * * @dataProvider provideUuid3WithKnownUuids */ @@ -847,7 +824,7 @@ class UuidTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideUuid3WithKnownUuids(): array { @@ -891,7 +868,7 @@ class UuidTest extends TestCase $mock = $this->getMockBuilder(RandomGeneratorInterface::class)->getMock(); $mock->expects($this->any()) ->method('generate') - ->willReturnCallback(function ($length) { + ->willReturnCallback(function (int $length) { // Makes first fields of UUIDs equal return hex2bin(str_pad('', $length * 2, '0')); }); @@ -921,7 +898,7 @@ class UuidTest extends TestCase $mock = $this->getMockBuilder(RandomGeneratorInterface::class)->getMock(); $mock->expects($this->any()) ->method('generate') - ->willReturnCallback(function ($length) { + ->willReturnCallback(function (int $length) { // Makes first fields of UUIDs equal return hex2bin(str_pad('', $length * 2, '0')); }); @@ -970,6 +947,7 @@ class UuidTest extends TestCase * * @param non-empty-string $uuid * @param non-empty-string $ns + * @param non-empty-string $name * * @dataProvider provideUuid5WithKnownUuids */ @@ -988,7 +966,7 @@ class UuidTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideUuid5WithKnownUuids(): array { @@ -1323,6 +1301,8 @@ class UuidTest extends TestCase * @param numeric-string $int * @param string[] $fields * @param non-empty-string $urn + * @param non-empty-string $time + * @param non-empty-string $clockSeq * * @dataProvider providePythonTests */ @@ -1381,7 +1361,19 @@ class UuidTest extends TestCase * Taken from the Python UUID tests in * http://hg.python.org/cpython/file/2f4c4db9aee5/Lib/test/test_uuid.py * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array, + * urn: non-empty-string, + * time: non-empty-string, + * clock_seq: non-empty-string, + * variant: Variant, + * version: Version | null, + * }> */ public function providePythonTests(): array { @@ -1849,7 +1841,7 @@ class UuidTest extends TestCase } /** - * @param mixed[] $args + * @param array $args * * @dataProvider provideStaticMethods */ @@ -1861,7 +1853,7 @@ class UuidTest extends TestCase } /** - * @param mixed[] $args + * @param array $args * * @dataProvider provideStaticMethods */ @@ -1869,6 +1861,7 @@ class UuidTest extends TestCase string $staticMethod, array $args = [] ): void { + /** @var UuidInterface $generated */ $generated = Uuid::$staticMethod(...$args); self::assertSame( @@ -1878,7 +1871,7 @@ class UuidTest extends TestCase } /** - * @param mixed[] $args + * @param array $args * * @dataProvider provideStaticMethods */ @@ -1886,6 +1879,7 @@ class UuidTest extends TestCase string $staticMethod, array $args = [] ): void { + /** @var UuidInterface $generated */ $generated = Uuid::$staticMethod(...$args); self::assertSame( @@ -1895,7 +1889,7 @@ class UuidTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array}> */ public function provideStaticMethods(): array { diff --git a/tests/Validator/GenericValidatorTest.php b/tests/Validator/GenericValidatorTest.php index 4a41330..609ea8c 100644 --- a/tests/Validator/GenericValidatorTest.php +++ b/tests/Validator/GenericValidatorTest.php @@ -34,7 +34,7 @@ class GenericValidatorTest extends TestCase } /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification + * @return array */ public function provideValuesForValidation(): array { diff --git a/tests/benchmark/UuidSerializationBench.php b/tests/benchmark/UuidSerializationBench.php index ea02bbd..a137280 100644 --- a/tests/benchmark/UuidSerializationBench.php +++ b/tests/benchmark/UuidSerializationBench.php @@ -133,8 +133,7 @@ final class UuidSerializationBench /** @var UuidInterface */ private $uuid; /** - * @var UuidInterface[] - * @psalm-var non-empty-list + * @var non-empty-list */ private $promiscuousUuids; /** @var string */ @@ -144,8 +143,7 @@ final class UuidSerializationBench /** @var string */ private $serializedUuid; /** - * @var string[] - * @psalm-var non-empty-list + * @var non-empty-list */ private $serializedPromiscuousUuids; diff --git a/tests/benchmark/UuidStringConversionBench.php b/tests/benchmark/UuidStringConversionBench.php index 303b5ae..d7c098c 100644 --- a/tests/benchmark/UuidStringConversionBench.php +++ b/tests/benchmark/UuidStringConversionBench.php @@ -132,28 +132,23 @@ final class UuidStringConversionBench /** @var UuidInterface */ private $uuid; /** - * @var UuidInterface[] - * @psalm-var non-empty-list + * @var non-empty-list */ private $promiscuousUuids; /** - * @var string - * @psalm-var non-empty-string + * @var non-empty-string */ private $tinyUuidBytes; /** - * @var string - * @psalm-var non-empty-string + * @var non-empty-string */ private $hugeUuidBytes; /** - * @var string - * @psalm-var non-empty-string + * @var non-empty-string */ private $uuidBytes; /** - * @var string[] - * @psalm-var non-empty-list + * @var non-empty-list */ private $promiscuousUuidsBytes; diff --git a/tests/static-analysis/UuidIsImmutable.php b/tests/static-analysis/UuidIsImmutable.php index b52d04f..795c09b 100644 --- a/tests/static-analysis/UuidIsImmutable.php +++ b/tests/static-analysis/UuidIsImmutable.php @@ -29,13 +29,11 @@ use Ramsey\Uuid\UuidInterface; */ final class UuidIsImmutable { - /** @psalm-pure */ public static function pureCompareTo(UuidInterface $a, UuidInterface $b): int { return $a->compareTo($b); } - /** @psalm-pure */ public static function pureEquals(UuidInterface $a, ?object $b): bool { return $a->equals($b); @@ -43,9 +41,6 @@ final class UuidIsImmutable /** * @return mixed[] - * - * @psalm-pure - * @psalm-suppress DeprecatedMethod */ public static function pureGetters(UuidInterface $a): array { @@ -62,8 +57,6 @@ final class UuidIsImmutable /** * @return array{UuidInterface, UuidInterface, bool} - * - * @psalm-pure */ public static function pureStaticUuidApi(): array { @@ -76,7 +69,6 @@ final class UuidIsImmutable ]; } - /** @psalm-pure */ public static function uuid3IsPure(): UuidInterface { return Uuid::uuid3( @@ -85,7 +77,6 @@ final class UuidIsImmutable ); } - /** @psalm-pure */ public static function uuid5IsPure(): UuidInterface { return Uuid::uuid5( diff --git a/tests/static-analysis/UuidIsNeverEmpty.php b/tests/static-analysis/UuidIsNeverEmpty.php index 0ff395f..2fbc1b5 100644 --- a/tests/static-analysis/UuidIsNeverEmpty.php +++ b/tests/static-analysis/UuidIsNeverEmpty.php @@ -22,13 +22,13 @@ use Ramsey\Uuid\UuidInterface; */ final class UuidIsNeverEmpty { - /** @psalm-return non-empty-string */ + /** @return non-empty-string */ public function bytesAreNeverEmpty(UuidInterface $uuid): string { return $uuid->getBytes(); } - /** @psalm-return non-empty-string */ + /** @return non-empty-string */ public function stringIsNeverEmpty(UuidInterface $uuid): string { return $uuid->toString(); diff --git a/tests/static-analysis/stubs.php b/tests/static-analysis/stubs.php index a8e9047..dda2e45 100644 --- a/tests/static-analysis/stubs.php +++ b/tests/static-analysis/stubs.php @@ -16,18 +16,14 @@ if (!defined('UUID_TYPE_RANDOM')) { define('UUID_TYPE_RANDOM', 4); } if (!function_exists('uuid_create')) { - /** @psalm-suppress all */ function uuid_create(int $uuid_type=UUID_TYPE_DEFAULT): string {} // @phpstan-ignore-line } if (!function_exists('uuid_generate_md5')) { - /** @psalm-suppress all */ function uuid_generate_md5(string $uuid_ns, string $name): string {} // @phpstan-ignore-line } if (!function_exists('uuid_generate_sha1')) { - /** @psalm-suppress all */ function uuid_generate_sha1(string $uuid_ns, string $name): string {} // @phpstan-ignore-line } if (!function_exists('uuid_parse')) { - /** @psalm-suppress all */ function uuid_parse(string $uuid): string {} // @phpstan-ignore-line }