diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
new file mode 100644
index 00000000000..e9c863cb838
--- /dev/null
+++ b/.github/workflows/continuous-integration.yml
@@ -0,0 +1,16 @@
+
+name: "Continuous Integration"
+
+on:
+ pull_request:
+
+jobs:
+ static-analysis-psalm:
+ name: Static Analysis with Psalm
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Psalm
+ uses: docker://vimeo/psalm-github-actions
diff --git a/baseline.xml b/baseline.xml
new file mode 100644
index 00000000000..9da2445f6a8
--- /dev/null
+++ b/baseline.xml
@@ -0,0 +1,253 @@
+
+
+
+
+ int
+
+
+
+
+ public function getMessage();
+
+
+
+
+ DB2_AUTOCOMMIT_OFF
+ DB2_AUTOCOMMIT_ON
+ DB2_AUTOCOMMIT_ON
+
+
+
+
+ DB2_PARAM_IN
+ DB2_LONG
+ DB2_PARAM_FILE
+ DB2_BINARY
+ DB2_PARAM_IN
+ DB2_CHAR
+
+
+
+
+ $this->conn
+ $this->conn->connect_error
+ $this->conn->sqlstate
+ $this->conn->connect_errno
+ $this->conn
+ $this->conn
+ $this->conn->sqlstate
+ $this->conn->errno
+
+
+ MYSQLI_OPT_CONNECT_TIMEOUT
+ MYSQLI_OPT_LOCAL_INFILE
+ MYSQLI_INIT_COMMAND
+ MYSQLI_READ_DEFAULT_FILE
+ MYSQLI_READ_DEFAULT_GROUP
+
+
+ mysqli
+ mysqli
+ $this->conn
+ $this->conn->server_version
+ $this->conn->server_version
+ $this->conn->server_version
+ $this->conn
+ $this->conn
+ $this->conn->error
+ $this->conn->sqlstate
+ $this->conn->errno
+ $this->conn->affected_rows
+ $this->conn->insert_id
+ $this->conn
+ $this->conn
+ $this->conn
+ $this->conn->errno
+ $this->conn->error
+ $this->conn->sqlstate
+ $this->conn->errno
+ $this->conn
+ $this->conn
+
+
+
+
+ mysqli
+
+
+ mysqli
+ mysqli_stmt
+ $this->_stmt->error
+ $this->_stmt->errno
+ $this->_stmt
+ $this->_stmt->error
+ $this->_stmt->sqlstate
+ $this->_stmt->errno
+ $this->_stmt
+ $this->_stmt
+ $this->_stmt
+ $this->_stmt->error
+ $this->_stmt->sqlstate
+ $this->_stmt->errno
+ $this->_stmt
+ $this->_stmt->error
+ $this->_stmt->sqlstate
+ $this->_stmt->errno
+ $this->_stmt
+ $this->_stmt->error
+ $this->_stmt->sqlstate
+ $this->_stmt->errno
+ $this->_stmt
+ $this->_stmt
+ $this->_stmt->error
+ $this->_stmt->sqlstate
+ $this->_stmt->errno
+ $this->_stmt->errno
+ $this->_stmt->error
+ $this->_stmt
+ $this->_stmt->affected_rows
+ $this->_stmt->num_rows
+ $this->_stmt->field_count
+
+
+
+
+ OCI_DEFAULT
+
+
+
+
+ OCI_DEFAULT
+ OCI_NO_AUTO_COMMIT
+ OCI_COMMIT_ON_SUCCESS
+ OCI_COMMIT_ON_SUCCESS
+ OCI_COMMIT_ON_SUCCESS
+
+
+
+
+ $lob
+
+
+ OCI_D_LOB
+ OCI_TEMP_BLOB
+ OCI_B_BIN
+ OCI_B_BLOB
+ SQLT_CHR
+ OCI_RETURN_NULLS
+ OCI_RETURN_LOBS
+ OCI_BOTH
+ OCI_FETCHSTATEMENT_BY_ROW
+ OCI_FETCHSTATEMENT_BY_COLUMN
+ OCI_RETURN_NULLS
+ OCI_RETURN_LOBS
+ OCI_NUM
+ OCI_RETURN_NULLS
+ OCI_RETURN_LOBS
+ OCI_BOTH
+ OCI_ASSOC
+ OCI_NUM
+ OCI_NUM
+
+
+
+
+ PDO::SQLSRV_ENCODING_BINARY
+
+
+
+
+ sasql_pconnect($dsn)
+ sasql_connect($dsn)
+ sasql_set_option($this->connection, 'verbose_errors', false)
+ sasql_set_option($this->connection, 'auto_commit', 'on')
+ sasql_set_option($this->connection, 'auto_commit', 'off')
+ sasql_commit($this->connection)
+ sasql_errorcode($this->connection)
+ sasql_error($this->connection)
+ sasql_real_query($this->connection, $statement)
+ sasql_affected_rows($this->connection)
+ sasql_insert_id($this->connection)
+ sasql_escape_string($this->connection, $input)
+ sasql_rollback($this->connection)
+ sasql_set_option($this->connection, 'auto_commit', 'on')
+
+
+
+
+ sasql_sqlstate($conn)
+ sasql_sqlstate()
+ sasql_stmt_errno($stmt)
+ sasql_stmt_error($stmt)
+ sasql_errorcode($conn)
+ sasql_error($conn)
+ sasql_errorcode()
+ sasql_error()
+
+
+
+
+ SASQL_BOTH
+
+
+ sasql_prepare($conn, $sql)
+ sasql_stmt_bind_param_ex($this->stmt, $column - 1, $variable, $type, $variable === null)
+ sasql_stmt_reset($this->stmt)
+ sasql_stmt_field_count($this->stmt)
+ sasql_stmt_errno($this->stmt)
+ sasql_stmt_error($this->stmt)
+ sasql_stmt_execute($this->stmt)
+ sasql_stmt_result_metadata($this->stmt)
+ sasql_fetch_assoc($this->result)
+ sasql_fetch_array($this->result, SASQL_BOTH)
+ sasql_fetch_object($this->result)
+ sasql_fetch_row($this->result)
+ sasql_fetch_object($this->result)
+ sasql_stmt_affected_rows($this->stmt)
+
+
+
+
+ SQLSRV_ERR_ERRORS
+ SQLSRV_ERR_ERRORS
+
+
+
+
+ SQLSRV_ERR_ERRORS
+
+
+
+
+ SQLSRV_ERR_ERRORS
+ SQLSRV_ERR_ERRORS
+ SQLSRV_PARAM_IN
+ SQLSRV_ENC_BINARY
+ SQLSRV_PARAM_IN
+ SQLSRV_ENC_BINARY
+ SQLSRV_FETCH_BOTH
+ SQLSRV_FETCH_ASSOC
+ SQLSRV_FETCH_NUMERIC
+
+
+ SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY)
+ SQLSRV_SQLTYPE_VARBINARY('max')
+ SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY)
+
+
+
+
+ int
+
+
+
+
+ string
+
+
+
+
+ Collection
+
+
+
diff --git a/composer.json b/composer.json
index 6b6d89c4bce..56f9bff6589 100644
--- a/composer.json
+++ b/composer.json
@@ -42,7 +42,8 @@
"jetbrains/phpstorm-stubs": "^2019.1",
"phpstan/phpstan": "^0.12",
"phpunit/phpunit": "^8.4.1",
- "symfony/console": "^2.0.5|^3.0|^4.0|^5.0"
+ "symfony/console": "^2.0.5|^3.0|^4.0|^5.0",
+ "vimeo/psalm": "^3.11"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
diff --git a/composer.lock b/composer.lock
index 9d28267555f..bb2b4bdf2b6 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": "08757a8479fc25fcfed097e16207ce83",
+ "content-hash": "76432c1ea195ea97865d309875ec7580",
"packages": [
{
"name": "doctrine/cache",
@@ -156,6 +156,254 @@
}
],
"packages-dev": [
+ {
+ "name": "amphp/amp",
+ "version": "v2.4.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/amphp/amp.git",
+ "reference": "feca077369a47263b22156b3c6389e55f3809f24"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/amphp/amp/zipball/feca077369a47263b22156b3c6389e55f3809f24",
+ "reference": "feca077369a47263b22156b3c6389e55f3809f24",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7"
+ },
+ "require-dev": {
+ "amphp/php-cs-fixer-config": "dev-master",
+ "amphp/phpunit-util": "^1",
+ "ext-json": "*",
+ "jetbrains/phpstorm-stubs": "^2019.3",
+ "phpunit/phpunit": "^6.0.9 | ^7",
+ "react/promise": "^2",
+ "vimeo/psalm": "^3.9@dev"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Amp\\": "lib"
+ },
+ "files": [
+ "lib/functions.php",
+ "lib/Internal/functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Lowrey",
+ "email": "rdlowrey@php.net"
+ },
+ {
+ "name": "Aaron Piotrowski",
+ "email": "aaron@trowski.com"
+ },
+ {
+ "name": "Bob Weinand",
+ "email": "bobwei9@hotmail.com"
+ },
+ {
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
+ }
+ ],
+ "description": "A non-blocking concurrency framework for PHP applications.",
+ "homepage": "http://amphp.org/amp",
+ "keywords": [
+ "async",
+ "asynchronous",
+ "awaitable",
+ "concurrency",
+ "event",
+ "event-loop",
+ "future",
+ "non-blocking",
+ "promise"
+ ],
+ "time": "2020-04-04T15:05:26+00:00"
+ },
+ {
+ "name": "amphp/byte-stream",
+ "version": "v1.7.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/amphp/byte-stream.git",
+ "reference": "b867505edb79dda8f253ca3c3a2bbadae4b16592"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/amphp/byte-stream/zipball/b867505edb79dda8f253ca3c3a2bbadae4b16592",
+ "reference": "b867505edb79dda8f253ca3c3a2bbadae4b16592",
+ "shasum": ""
+ },
+ "require": {
+ "amphp/amp": "^2"
+ },
+ "require-dev": {
+ "amphp/php-cs-fixer-config": "dev-master",
+ "amphp/phpunit-util": "^1",
+ "friendsofphp/php-cs-fixer": "^2.3",
+ "jetbrains/phpstorm-stubs": "^2019.3",
+ "phpunit/phpunit": "^6 || ^7 || ^8",
+ "vimeo/psalm": "^3.9@dev"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Amp\\ByteStream\\": "lib"
+ },
+ "files": [
+ "lib/functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Aaron Piotrowski",
+ "email": "aaron@trowski.com"
+ },
+ {
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
+ }
+ ],
+ "description": "A stream abstraction to make working with non-blocking I/O simple.",
+ "homepage": "http://amphp.org/byte-stream",
+ "keywords": [
+ "amp",
+ "amphp",
+ "async",
+ "io",
+ "non-blocking",
+ "stream"
+ ],
+ "time": "2020-04-04T16:56:54+00:00"
+ },
+ {
+ "name": "composer/semver",
+ "version": "1.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/semver.git",
+ "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
+ "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.5 || ^5.0.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Semver\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "keywords": [
+ "semantic",
+ "semver",
+ "validation",
+ "versioning"
+ ],
+ "time": "2020-01-13T12:06:48+00:00"
+ },
+ {
+ "name": "composer/xdebug-handler",
+ "version": "1.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/xdebug-handler.git",
+ "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/1ab9842d69e64fb3a01be6b656501032d1b78cb7",
+ "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0",
+ "psr/log": "^1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Composer\\XdebugHandler\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "John Stevenson",
+ "email": "john-stevenson@blueyonder.co.uk"
+ }
+ ],
+ "description": "Restarts a process without Xdebug.",
+ "keywords": [
+ "Xdebug",
+ "performance"
+ ],
+ "time": "2020-03-01T12:26:26+00:00"
+ },
{
"name": "dealerdirect/phpcodesniffer-composer-installer",
"version": "v0.5.0",
@@ -339,6 +587,94 @@
],
"time": "2019-03-17T17:37:11+00:00"
},
+ {
+ "name": "felixfbecker/advanced-json-rpc",
+ "version": "v3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git",
+ "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/0ed363f8de17d284d479ec813c9ad3f6834b5c40",
+ "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40",
+ "shasum": ""
+ },
+ "require": {
+ "netresearch/jsonmapper": "^1.0 || ^2.0",
+ "php": ">=7.0",
+ "phpdocumentor/reflection-docblock": "^4.0.0 || ^5.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "AdvancedJsonRpc\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "ISC"
+ ],
+ "authors": [
+ {
+ "name": "Felix Becker",
+ "email": "felix.b@outlook.com"
+ }
+ ],
+ "description": "A more advanced JSONRPC implementation",
+ "time": "2020-03-11T15:21:41+00:00"
+ },
+ {
+ "name": "felixfbecker/language-server-protocol",
+ "version": "v1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/felixfbecker/php-language-server-protocol.git",
+ "reference": "378801f6139bb74ac215d81cca1272af61df9a9f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/378801f6139bb74ac215d81cca1272af61df9a9f",
+ "reference": "378801f6139bb74ac215d81cca1272af61df9a9f",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "*",
+ "phpunit/phpunit": "^6.3",
+ "squizlabs/php_codesniffer": "^3.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "LanguageServerProtocol\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "ISC"
+ ],
+ "authors": [
+ {
+ "name": "Felix Becker",
+ "email": "felix.b@outlook.com"
+ }
+ ],
+ "description": "PHP classes for the Language Server Protocol",
+ "keywords": [
+ "language",
+ "microsoft",
+ "php",
+ "server"
+ ],
+ "time": "2019-06-23T21:03:50+00:00"
+ },
{
"name": "jetbrains/phpstorm-stubs",
"version": "v2019.1",
@@ -426,6 +762,52 @@
],
"time": "2019-08-09T12:45:53+00:00"
},
+ {
+ "name": "netresearch/jsonmapper",
+ "version": "v2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cweiske/jsonmapper.git",
+ "reference": "e245890383c3ed38b6d202ee373c23ccfebc0f54"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/e245890383c3ed38b6d202ee373c23ccfebc0f54",
+ "reference": "e245890383c3ed38b6d202ee373c23ccfebc0f54",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "ext-reflection": "*",
+ "ext-spl": "*",
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8.35 || ~5.7 || ~6.4 || ~7.0",
+ "squizlabs/php_codesniffer": "~3.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "JsonMapper": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "OSL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Christian Weiske",
+ "email": "cweiske@cweiske.de",
+ "homepage": "http://github.com/cweiske/jsonmapper/",
+ "role": "Developer"
+ }
+ ],
+ "description": "Map nested JSON structures onto PHP classes",
+ "time": "2020-03-04T17:23:33+00:00"
+ },
{
"name": "nikic/php-parser",
"version": "v4.3.0",
@@ -478,6 +860,105 @@
],
"time": "2019-11-08T13:50:10+00:00"
},
+ {
+ "name": "ocramius/package-versions",
+ "version": "1.4.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Ocramius/PackageVersions.git",
+ "reference": "44af6f3a2e2e04f2af46bcb302ad9600cba41c7d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/44af6f3a2e2e04f2af46bcb302ad9600cba41c7d",
+ "reference": "44af6f3a2e2e04f2af46bcb302ad9600cba41c7d",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.0.0",
+ "php": "^7.1.0"
+ },
+ "require-dev": {
+ "composer/composer": "^1.6.3",
+ "doctrine/coding-standard": "^5.0.1",
+ "ext-zip": "*",
+ "infection/infection": "^0.7.1",
+ "phpunit/phpunit": "^7.5.17"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "PackageVersions\\Installer",
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PackageVersions\\": "src/PackageVersions"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com"
+ }
+ ],
+ "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
+ "time": "2019-11-15T16:17:10+00:00"
+ },
+ {
+ "name": "openlss/lib-array2xml",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nullivex/lib-array2xml.git",
+ "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90",
+ "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "LSS": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Bryan Tong",
+ "email": "bryan@nullivex.com",
+ "homepage": "https://www.nullivex.com"
+ },
+ {
+ "name": "Tony Butler",
+ "email": "spudz76@gmail.com",
+ "homepage": "https://www.nullivex.com"
+ }
+ ],
+ "description": "Array2XML conversion library credit to lalit.org",
+ "homepage": "https://www.nullivex.com",
+ "keywords": [
+ "array",
+ "array conversion",
+ "xml",
+ "xml conversion"
+ ],
+ "time": "2019-03-29T20:06:56+00:00"
+ },
{
"name": "phar-io/manifest",
"version": "1.0.3",
@@ -2421,6 +2902,104 @@
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"time": "2019-06-13T22:48:21+00:00"
},
+ {
+ "name": "vimeo/psalm",
+ "version": "3.11.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vimeo/psalm.git",
+ "reference": "d470903722cfcbc1cd04744c5491d3e6d13ec3d9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vimeo/psalm/zipball/d470903722cfcbc1cd04744c5491d3e6d13ec3d9",
+ "reference": "d470903722cfcbc1cd04744c5491d3e6d13ec3d9",
+ "shasum": ""
+ },
+ "require": {
+ "amphp/amp": "^2.1",
+ "amphp/byte-stream": "^1.5",
+ "composer/semver": "^1.4",
+ "composer/xdebug-handler": "^1.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "felixfbecker/advanced-json-rpc": "^3.0.3",
+ "felixfbecker/language-server-protocol": "^1.4",
+ "netresearch/jsonmapper": "^1.0 || ^2.0",
+ "nikic/php-parser": "^4.3",
+ "ocramius/package-versions": "^1.2",
+ "openlss/lib-array2xml": "^1.0",
+ "php": "^7.1.3|^8",
+ "sebastian/diff": "^3.0 || ^4.0",
+ "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0",
+ "webmozart/glob": "^4.1",
+ "webmozart/path-util": "^2.3"
+ },
+ "provide": {
+ "psalm/psalm": "self.version"
+ },
+ "require-dev": {
+ "amphp/amp": "^2.4.2",
+ "bamarni/composer-bin-plugin": "^1.2",
+ "brianium/paratest": "^4.0.0",
+ "ext-curl": "*",
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpmyadmin/sql-parser": "5.1.0",
+ "phpspec/prophecy": ">=1.9.0",
+ "phpunit/phpunit": "^7.5.16 || ^8.5 || ^9.0",
+ "psalm/plugin-phpunit": "^0.10",
+ "slevomat/coding-standard": "^5.0",
+ "squizlabs/php_codesniffer": "^3.5",
+ "symfony/process": "^4.3"
+ },
+ "suggest": {
+ "ext-igbinary": "^2.0.5"
+ },
+ "bin": [
+ "psalm",
+ "psalm-language-server",
+ "psalm-plugin",
+ "psalm-refactor",
+ "psalter"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev",
+ "dev-2.x": "2.x-dev",
+ "dev-1.x": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psalm\\Plugin\\": "src/Psalm/Plugin",
+ "Psalm\\": "src/Psalm"
+ },
+ "files": [
+ "src/functions.php",
+ "src/spl_object_id.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matthew Brown"
+ }
+ ],
+ "description": "A static analysis tool for finding errors in PHP applications",
+ "keywords": [
+ "code",
+ "inspection",
+ "php"
+ ],
+ "time": "2020-04-13T12:47:11+00:00"
+ },
{
"name": "webmozart/assert",
"version": "1.5.0",
@@ -2470,6 +3049,99 @@
"validate"
],
"time": "2019-08-24T08:43:50+00:00"
+ },
+ {
+ "name": "webmozart/glob",
+ "version": "4.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozart/glob.git",
+ "reference": "3cbf63d4973cf9d780b93d2da8eec7e4a9e63bbe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozart/glob/zipball/3cbf63d4973cf9d780b93d2da8eec7e4a9e63bbe",
+ "reference": "3cbf63d4973cf9d780b93d2da8eec7e4a9e63bbe",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.3|^7.0",
+ "webmozart/path-util": "^2.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.6",
+ "sebastian/version": "^1.0.1",
+ "symfony/filesystem": "^2.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Glob\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "A PHP implementation of Ant's glob.",
+ "time": "2015-12-29T11:14:33+00:00"
+ },
+ {
+ "name": "webmozart/path-util",
+ "version": "2.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozart/path-util.git",
+ "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
+ "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "webmozart/assert": "~1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.6",
+ "sebastian/version": "^1.0.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\PathUtil\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
+ "time": "2015-12-17T08:42:14+00:00"
}
],
"aliases": [],
diff --git a/psalm.xml b/psalm.xml
new file mode 100644
index 00000000000..bdb42ca5274
--- /dev/null
+++ b/psalm.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+