Merge pull request #21787 from nextcloud/enh/hello-psalm

Hello psalm
This commit is contained in:
Morris Jobke 2020-08-18 13:38:03 +02:00 committed by GitHub
commit 92b67409fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 37342 additions and 8 deletions

View File

@ -0,0 +1,25 @@
name: Static code analysis
on: [pull_request]
jobs:
static-code-analysis:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Checkout submodules
shell: bash
run: |
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
git submodule sync --recursive
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
- name: Remove composer.json
shell: bash
run: rm composer.json composer.lock
- name: Psalm
uses: docker://jakzal/phpqa:php7.4-alpine
with:
args: psalm --monochrome --no-progress --output-format=text --update-baseline
- name: Check for changes in Psalm baseline
run: |
bash -c "[[ ! \"`git status --porcelain build/psalm-baseline.xml`\" ]] || ( echo 'Uncommited changes in Psalm baseline' && git status && git diff && exit 1 )"

View File

@ -13,6 +13,7 @@ $config
->exclude('config')
->exclude('data')
->notPath('3rdparty')
->notPath('build/stubs')
->notPath('composer')
->notPath('vendor')
->in(__DIR__);

View File

@ -70,6 +70,7 @@ $expectedFiles = [
'ocs',
'package-lock.json',
'package.json',
'psalm.xml',
'public.php',
'README.md',
'remote.php',

6295
build/psalm-baseline.xml Normal file

File diff suppressed because it is too large Load Diff

1368
build/stubs/IntlChar.php Normal file

File diff suppressed because it is too large Load Diff

659
build/stubs/apcu.php Normal file
View File

@ -0,0 +1,659 @@
<?php
/**
* Stubs for APC (apcu_bc nowadays) extension
*/
/**
* @link https://php.net/manual/en/apc.constants.php
*/
define('APC_BIN_VERIFY_MD5', 1);
/**
* @link https://php.net/manual/en/apc.constants.php
*/
define('APC_BIN_VERIFY_CRC32', 2);
/**
* Retrieves cached information and meta-data from APC's data store
* @link https://php.net/manual/en/function.apc-cache-info.php
* @param string $type If cache_type is "user", information about the user cache will be returned.
* If cache_type is "filehits", information about which files have been served from the bytecode
* cache for the current request will be returned. This feature must be enabled at compile time
* using --enable-filehits. If an invalid or no cache_type is specified, information about the
* system cache (cached files) will be returned.
* @param bool $limited If limited is TRUE, the return value will exclude the individual list
* of cache entries. This is useful when trying to optimize calls for statistics gathering.
* @return array|bool Array of cached data (and meta-data) or FALSE on failure.
*/
function apc_cache_info($type = '', $limited = false){}
/**
* Clears the APC cache
* @link https://php.net/manual/en/function.apc-clear-cache.php
* @param string $cache_type If cache_type is "user", the user cache will be cleared;
* otherwise, the system cache (cached files) will be cleared.
* @return bool Returns TRUE on success or FALSE on failure.
*/
function apc_clear_cache($cache_type = ''){}
/**
* Retrieves APC's Shared Memory Allocation information
* @link https://php.net/manual/en/function.apc-sma-info.php
* @param bool $limited When set to FALSE (default) apc_sma_info() will
* return a detailed information about each segment.
* @return array|bool Array of Shared Memory Allocation data; FALSE on failure.
*/
function apc_sma_info($limited = false){}
/**
* Cache a variable in the data store
* @link https://php.net/manual/en/function.apc-store.php
* @param string|array $key String: Store the variable using this name. Keys are cache-unique,
* so storing a second value with the same key will overwrite the original value.
* Array: Names in key, variables in value.
* @param mixed $var [optional] The variable to store
* @param int $ttl [optional] Time To Live; store var in the cache for ttl seconds. After the ttl has passed,
* the stored variable will be expunged from the cache (on the next request). If no ttl is supplied
* (or if the ttl is 0), the value will persist until it is removed from the cache manually,
* or otherwise fails to exist in the cache (clear, restart, etc.).
* @return bool|array Returns TRUE on success or FALSE on failure | array with error keys.
*/
function apc_store($key, $var, $ttl = 0){}
/**
* Fetch a stored variable from the cache
* @link https://php.net/manual/en/function.apc-fetch.php
* @param string|string[] $key The key used to store the value (with apc_store()).
* If an array is passed then each element is fetched and returned.
* @param bool $success Set to TRUE in success and FALSE in failure.
* @return mixed The stored variable or array of variables on success; FALSE on failure.
*/
function apc_fetch($key, &$success = null){}
/**
* Removes a stored variable from the cache
* @link https://php.net/manual/en/function.apc-delete.php
* @param string|string[]|APCIterator $key The key used to store the value (with apc_store()).
* @return bool|string[] Returns TRUE on success or FALSE on failure. For array of keys returns list of failed keys.
*/
function apc_delete($key){}
/**
* Defines a set of constants for retrieval and mass-definition
*
* define() is notoriously slow. Since the main benefit of APC is to increase
* the performance of scripts/applications, this mechanism is provided to streamline
* the process of mass constant definition. However, this function does not perform
* as well as anticipated. For a better-performing solution, try the hidef extension from PECL.
*
* @link https://php.net/manual/en/function.apc-define-constants.php
* @param string $key The key serves as the name of the constant set being stored.
* This key is used to retrieve the stored constants in apc_load_constants().
* @param array $constants An associative array of constant_name => value pairs.
* The constant_name must follow the normal constant naming rules. Value must evaluate to a scalar value.
* @param bool $case_sensitive The default behaviour for constants is to be declared case-sensitive;
* i.e. CONSTANT and Constant represent different values. If this parameter evaluates to FALSE
* the constants will be declared as case-insensitive symbols.
* @return bool Returns TRUE on success or FALSE on failure.
*/
function apc_define_constants($key, array $constants, $case_sensitive = true){}
/**
* Caches a variable in the data store, only if it's not already stored
* @link https://php.net/manual/en/function.apc-add.php
* @param string $key Store the variable using this name. Keys are cache-unique,
* so attempting to use apc_add() to store data with a key that already exists will not
* overwrite the existing data, and will instead return FALSE. (This is the only difference
* between apc_add() and apc_store().)
* @param mixed $var The variable to store
* @param int $ttl Time To Live; store var in the cache for ttl seconds. After the ttl has passed,
* the stored variable will be expunged from the cache (on the next request). If no ttl is supplied
* (or if the ttl is 0), the value will persist until it is removed from the cache manually,
* or otherwise fails to exist in the cache (clear, restart, etc.).
* @return bool
*/
function apc_add($key, $var, $ttl = 0){}
/**
* Stores a file in the bytecode cache, bypassing all filters
* @link https://php.net/manual/en/function.apc-compile-file.php
* @param string|string[] $filename Full or relative path to a PHP file that will be
* compiled and stored in the bytecode cache.
* @param bool $atomic
* @return bool Returns TRUE on success or FALSE on failure.
*/
function apc_compile_file($filename, $atomic = true){}
/**
* Loads a set of constants from the cache
* @link https://php.net/manual/en/function.apc-load-constants.php
* @param string $key The name of the constant set (that was stored
* with apc_define_constants()) to be retrieved.
* @param bool $case_sensitive The default behaviour for constants is to be declared case-sensitive;
* i.e. CONSTANT and Constant represent different values. If this parameter evaluates to FALSE
* the constants will be declared as case-insensitive symbols.
* @return bool Returns TRUE on success or FALSE on failure.
*/
function apc_load_constants($key, $case_sensitive = true){}
/**
* Checks if APC key exists
* @link https://php.net/manual/en/function.apc-exists.php
* @param bool|string[] $keys A string, or an array of strings, that contain keys.
* @return bool|string[] Returns TRUE if the key exists, otherwise FALSE
* Or if an array was passed to keys, then an array is returned that
* contains all existing keys, or an empty array if none exist.
*/
function apc_exists($keys){}
/**
* Deletes the given files from the opcode cache
*
* Accepts a string, array of strings, or APCIterator object.
* Returns True/False, or for an Array an Array of failed files.
*
* @link https://php.net/manual/en/function.apc-delete-file.php
* @param string|string[]|APCIterator $keys
* @return bool|string[]
*/
function apc_delete_file($keys){}
/**
* Increase a stored number
* @link https://php.net/manual/en/function.apc-inc.php
* @param string $key The key of the value being increased.
* @param int $step The step, or value to increase.
* @param bool $success Optionally pass the success or fail boolean value to this referenced variable.
* @return int|bool Returns the current value of key's value on success, or FALSE on failure.
*/
function apc_inc($key, $step = 1, &$success = null){}
/**
* Decrease a stored number
* @link https://php.net/manual/en/function.apc-dec.php
* @param string $key The key of the value being decreased.
* @param int $step The step, or value to decrease.
* @param bool $success Optionally pass the success or fail boolean value to this referenced variable.
* @return int|bool Returns the current value of key's value on success, or FALSE on failure.
*/
function apc_dec($key, $step = 1, &$success = null){}
/**
* @link https://php.net/manual/en/function.apc-cas.php
* @param string $key
* @param int $old
* @param int $new
* @return bool
*/
function apc_cas($key, $old, $new){}
/**
* Returns a binary dump of the given files and user variables from the APC cache
*
* A NULL for files or user_vars signals a dump of every entry, while array() will dump nothing.
*
* @link https://php.net/manual/en/function.apc-bin-dump.php
* @param string[]|null $files The files. Passing in NULL signals a dump of every entry, while passing in array() will dump nothing.
* @param string[]|null $user_vars The user vars. Passing in NULL signals a dump of every entry, while passing in array() will dump nothing.
* @return string|bool|null Returns a binary dump of the given files and user variables from the APC cache, FALSE if APC is not enabled, or NULL if an unknown error is encountered.
*/
function apc_bin_dump($files = null, $user_vars = null){}
/**
* Output a binary dump of the given files and user variables from the APC cache to the named file
* @link https://php.net/manual/en/function.apc-bin-dumpfile.php
* @param string[]|null $files The file names being dumped.
* @param string[]|null $user_vars The user variables being dumped.
* @param string $filename The filename where the dump is being saved.
* @param int $flags Flags passed to the filename stream. See the file_put_contents() documentation for details.
* @param resource $context The context passed to the filename stream. See the file_put_contents() documentation for details.
* @return int|bool The number of bytes written to the file, otherwise FALSE if APC
* is not enabled, filename is an invalid file name, filename can't be opened,
* the file dump can't be completed (e.g., the hard drive is out of disk space),
* or an unknown error was encountered.
*/
function apc_bin_dumpfile($files, $user_vars, $filename, $flags = 0, $context = null){}
/**
* Load the given binary dump into the APC file/user cache
* @link https://php.net/manual/en/function.apc-bin-load.php
* @param string $data The binary dump being loaded, likely from apc_bin_dump().
* @param int $flags Either APC_BIN_VERIFY_CRC32, APC_BIN_VERIFY_MD5, or both.
* @return bool Returns TRUE if the binary dump data was loaded with success, otherwise FALSE is returned.
* FALSE is returned if APC is not enabled, or if the data is not a valid APC binary dump (e.g., unexpected size).
*/
function apc_bin_load($data, $flags = 0){}
/**
* Load the given binary dump from the named file into the APC file/user cache
* @link https://php.net/manual/en/function.apc-bin-loadfile.php
* @param string $filename The file name containing the dump, likely from apc_bin_dumpfile().
* @param resource $context The files context.
* @param int $flags Either APC_BIN_VERIFY_CRC32, APC_BIN_VERIFY_MD5, or both.
* @return bool Returns TRUE on success, otherwise FALSE Reasons it may return FALSE include APC
* is not enabled, filename is an invalid file name or empty, filename can't be opened,
* the file dump can't be completed, or if the data is not a valid APC binary dump (e.g., unexpected size).
*/
function apc_bin_loadfile($filename, $context = null, $flags = 0){}
/**
* The APCIterator class
*
* The APCIterator class makes it easier to iterate over large APC caches.
* This is helpful as it allows iterating over large caches in steps, while grabbing a defined number
* of entries per lock instance, so it frees the cache locks for other activities rather than hold up
* the entire cache to grab 100 (the default) entries. Also, using regular expression matching is more
* efficient as it's been moved to the C level.
*
* @link https://php.net/manual/en/class.apciterator.php
*/
class APCIterator implements Iterator
{
/**
* Constructs an APCIterator iterator object
* @link https://php.net/manual/en/apciterator.construct.php
* @param string $cache The cache type, which will be 'user' or 'file'.
* @param string|string[]|null $search A PCRE regular expression that matches against APC key names,
* either as a string for a single regular expression, or as an array of regular expressions.
* Or, optionally pass in NULL to skip the search.
* @param int $format The desired format, as configured with one ore more of the APC_ITER_* constants.
* @param int $chunk_size The chunk size. Must be a value greater than 0. The default value is 100.
* @param int $list The type to list. Either pass in APC_LIST_ACTIVE or APC_LIST_INACTIVE.
*/
public function __construct($cache, $search = null, $format = APC_ITER_ALL, $chunk_size = 100, $list = APC_LIST_ACTIVE){}
/**
* Rewinds back the iterator to the first element
* @link https://php.net/manual/en/apciterator.rewind.php
*/
public function rewind(){}
/**
* Checks if the current iterator position is valid
* @link https://php.net/manual/en/apciterator.valid.php
* @return bool Returns TRUE if the current iterator position is valid, otherwise FALSE.
*/
public function valid(){}
/**
* Gets the current item from the APCIterator stack
* @link https://php.net/manual/en/apciterator.current.php
* @return mixed Returns the current item on success, or FALSE if no more items or exist, or on failure.
*/
public function current(){}
/**
* Gets the current iterator key
* @link https://php.net/manual/en/apciterator.key.php
* @return string|int|bool Returns the key on success, or FALSE upon failure.
*/
public function key(){}
/**
* Moves the iterator pointer to the next element
* @link https://php.net/manual/en/apciterator.next.php
* @return bool Returns TRUE on success or FALSE on failure.
*/
public function next(){}
/**
* Gets the total number of cache hits
* @link https://php.net/manual/en/apciterator.gettotalhits.php
* @return int|bool The number of hits on success, or FALSE on failure.
*/
public function getTotalHits(){}
/**
* Gets the total cache size
* @link https://php.net/manual/en/apciterator.gettotalsize.php
* @return int|bool The total cache size.
*/
public function getTotalSize(){}
/**
* Get the total count
* @link https://php.net/manual/en/apciterator.gettotalcount.php
* @return int|bool The total count.
*/
public function getTotalCount(){}
}
/**
* Stubs for APCu 5.0.0
*/
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_LIST_ACTIVE', 1);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_LIST_DELETED', 2);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_TYPE', 1);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_KEY', 2);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_FILENAME', 4);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_DEVICE', 8);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_INODE', 16);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_VALUE', 32);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_MD5', 64);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_NUM_HITS', 128);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_MTIME', 256);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_CTIME', 512);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_DTIME', 1024);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_ATIME', 2048);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_REFCOUNT', 4096);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_MEM_SIZE', 8192);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_TTL', 16384);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_NONE', 0);
/**
* @link https://php.net/manual/en/apcu.constants.php
*/
define('APC_ITER_ALL', -1);
/**
* Clears the APCu cache
* @link https://php.net/manual/en/function.apcu-clear-cache.php
*
* @return bool Returns TRUE always.
*/
function apcu_clear_cache(){}
/**
* Retrieves APCu Shared Memory Allocation information
* @link https://php.net/manual/en/function.apcu-sma-info.php
* @param bool $limited When set to FALSE (default) apcu_sma_info() will
* return a detailed information about each segment.
*
* @return array|false Array of Shared Memory Allocation data; FALSE on failure.
*/
function apcu_sma_info($limited = false){}
/**
* Cache a variable in the data store
* @link https://php.net/manual/en/function.apcu-store.php
* @param string|array $key String: Store the variable using this name. Keys are cache-unique,
* so storing a second value with the same key will overwrite the original value.
* Array: Names in key, variables in value.
* @param mixed $var [optional] The variable to store
* @param int $ttl [optional] Time To Live; store var in the cache for ttl seconds. After the ttl has passed,
* the stored variable will be expunged from the cache (on the next request). If no ttl is supplied
* (or if the ttl is 0), the value will persist until it is removed from the cache manually,
* or otherwise fails to exist in the cache (clear, restart, etc.).
* @return bool|array Returns TRUE on success or FALSE on failure | array with error keys.
*/
function apcu_store($key, $var, $ttl = 0){}
/**
* Fetch a stored variable from the cache
* @link https://php.net/manual/en/function.apcu-fetch.php
* @param string|string[] $key The key used to store the value (with apcu_store()).
* If an array is passed then each element is fetched and returned.
* @param bool $success Set to TRUE in success and FALSE in failure.
* @return mixed The stored variable or array of variables on success; FALSE on failure.
*/
function apcu_fetch($key, &$success = null){}
/**
* Removes a stored variable from the cache
* @link https://php.net/manual/en/function.apcu-delete.php
* @param string|string[]|APCuIterator $key The key used to store the value (with apcu_store()).
* @return bool|string[] Returns TRUE on success or FALSE on failure. For array of keys returns list of failed keys.
*/
function apcu_delete($key){}
/**
* Caches a variable in the data store, only if it's not already stored
* @link https://php.net/manual/en/function.apcu-add.php
* @param string|array $key Store the variable using this name. Keys are cache-unique,
* so attempting to use apcu_add() to store data with a key that already exists will not
* overwrite the existing data, and will instead return FALSE. (This is the only difference
* between apcu_add() and apcu_store().)
* Array: Names in key, variables in value.
* @param mixed $var The variable to store
* @param int $ttl Time To Live; store var in the cache for ttl seconds. After the ttl has passed,
* the stored variable will be expunged from the cache (on the next request). If no ttl is supplied
* (or if the ttl is 0), the value will persist until it is removed from the cache manually,
* or otherwise fails to exist in the cache (clear, restart, etc.).
* @return bool|array Returns TRUE if something has effectively been added into the cache, FALSE otherwise.
* Second syntax returns array with error keys.
*/
function apcu_add($key, $var, $ttl = 0){}
/**
* Checks if APCu key exists
* @link https://php.net/manual/en/function.apcu-exists.php
* @param string|string[] $keys A string, or an array of strings, that contain keys.
* @return bool|string[] Returns TRUE if the key exists, otherwise FALSE
* Or if an array was passed to keys, then an array is returned that
* contains all existing keys, or an empty array if none exist.
*/
function apcu_exists($keys){}
/**
* Increase a stored number
* @link https://php.net/manual/en/function.apcu-inc.php
* @param string $key The key of the value being increased.
* @param int $step The step, or value to increase.
* @param int $ttl Time To Live; store var in the cache for ttl seconds. After the ttl has passed,
* the stored variable will be expunged from the cache (on the next request). If no ttl is supplied
* (or if the ttl is 0), the value will persist until it is removed from the cache manually,
* or otherwise fails to exist in the cache (clear, restart, etc.).
* @param bool $success Optionally pass the success or fail boolean value to this referenced variable.
* @return int|false Returns the current value of key's value on success, or FALSE on failure.
*/
function apcu_inc($key, $step = 1, &$success = null, $ttl = 0){}
/**
* Decrease a stored number
* @link https://php.net/manual/en/function.apcu-dec.php
* @param string $key The key of the value being decreased.
* @param int $step The step, or value to decrease.
* @param int $ttl Time To Live; store var in the cache for ttl seconds. After the ttl has passed,
* the stored variable will be expunged from the cache (on the next request). If no ttl is supplied
* (or if the ttl is 0), the value will persist until it is removed from the cache manually,
* or otherwise fails to exist in the cache (clear, restart, etc.).
* @param bool $success Optionally pass the success or fail boolean value to this referenced variable.
* @return int|false Returns the current value of key's value on success, or FALSE on failure.
*/
function apcu_dec($key, $step = 1, &$success = null, $ttl = 0){}
/**
* Updates an old value with a new value
*
* apcu_cas() updates an already existing integer value if the old parameter matches the currently stored value
* with the value of the new parameter.
*
* @link https://php.net/manual/en/function.apcu-cas.php
* @param string $key The key of the value being updated.
* @param int $old The old value (the value currently stored).
* @param int $new The new value to update to.
* @return bool Returns TRUE on success or FALSE on failure.
*/
function apcu_cas($key, $old, $new){}
/**
* Atomically fetch or generate a cache entry
*
* <p>Atomically attempts to find key in the cache, if it cannot be found generator is called,
* passing key as the only argument. The return value of the call is then cached with the optionally
* specified ttl, and returned.
* </p>
*
* <p>Note: When control enters <i>apcu_entry()</i> the lock for the cache is acquired exclusively, it is released when
* control leaves apcu_entry(): In effect, this turns the body of generator into a critical section,
* disallowing two processes from executing the same code paths concurrently.
* In addition, it prohibits the concurrent execution of any other APCu functions,
* since they will acquire the same lock.
* </p>
*
* @link https://php.net/manual/en/function.apcu-entry.php
*
* @param string $key Identity of cache entry
* @param callable $generator A callable that accepts key as the only argument and returns the value to cache.
* <p>Warning
* The only APCu function that can be called safely by generator is apcu_entry().</p>
* @param int $ttl [optional] Time To Live; store var in the cache for ttl seconds.
* After the ttl has passed, the stored variable will be expunged from the cache (on the next request).
* If no ttl is supplied (or if the ttl is 0), the value will persist until it is removed from the cache manually,
* or otherwise fails to exist in the cache (clear, restart, etc.).
* @return mixed Returns the cached value
* @since APCu 5.1.0
*/
function apcu_entry($key, callable $generator, $ttl = 0){}
/**
* Retrieves cached information from APCu's data store
*
* @link https://php.net/manual/en/function.apcu-cache-info.php
*
* @param bool $limited If limited is TRUE, the return value will exclude the individual list of cache entries.
* This is useful when trying to optimize calls for statistics gathering.
* @return array|false Array of cached data (and meta-data) or FALSE on failure
*/
function apcu_cache_info($limited = false){}
/**
* Whether APCu is usable in the current environment
*
* @link https://www.php.net/manual/en/function.apcu-enabled.php
*
* @return bool
*/
function apcu_enabled(){}
/**
* @param string $key
*/
function apcu_key_info($key){}
/**
* The APCuIterator class
*
* The APCuIterator class makes it easier to iterate over large APCu caches.
* This is helpful as it allows iterating over large caches in steps, while grabbing a defined number
* of entries per lock instance, so it frees the cache locks for other activities rather than hold up
* the entire cache to grab 100 (the default) entries. Also, using regular expression matching is more
* efficient as it's been moved to the C level.
*
* @link https://php.net/manual/en/class.apcuiterator.php
* @since APCu 5.0.0
*/
class APCuIterator implements Iterator
{
/**
* Constructs an APCuIterator iterator object
* @link https://php.net/manual/en/apcuiterator.construct.php
* @param string|string[]|null $search A PCRE regular expression that matches against APCu key names,
* either as a string for a single regular expression, or as an array of regular expressions.
* Or, optionally pass in NULL to skip the search.
* @param int $format The desired format, as configured with one ore more of the APC_ITER_* constants.
* @param int $chunk_size The chunk size. Must be a value greater than 0. The default value is 100.
* @param int $list The type to list. Either pass in APC_LIST_ACTIVE or APC_LIST_DELETED.
*/
public function __construct($search = null, $format = APC_ITER_ALL, $chunk_size = 100, $list = APC_LIST_ACTIVE){}
/**
* Rewinds back the iterator to the first element
* @link https://php.net/manual/en/apcuiterator.rewind.php
*/
public function rewind(){}
/**
* Checks if the current iterator position is valid
* @link https://php.net/manual/en/apcuiterator.valid.php
* @return bool Returns TRUE if the current iterator position is valid, otherwise FALSE.
*/
public function valid(){}
/**
* Gets the current item from the APCuIterator stack
* @link https://php.net/manual/en/apcuiterator.current.php
* @return mixed Returns the current item on success, or FALSE if no more items or exist, or on failure.
*/
public function current(){}
/**
* Gets the current iterator key
* @link https://php.net/manual/en/apcuiterator.key.php
* @return string|int|false Returns the key on success, or FALSE upon failure.
*/
public function key(){}
/**
* Moves the iterator pointer to the next element
* @link https://php.net/manual/en/apcuiterator.next.php
* @return bool Returns TRUE on success or FALSE on failure.
*/
public function next(){}
/**
* Gets the total number of cache hits
* @link https://php.net/manual/en/apcuiterator.gettotalhits.php
* @return int|false The number of hits on success, or FALSE on failure.
*/
public function getTotalHits(){}
/**
* Gets the total cache size
* @link https://php.net/manual/en/apcuiterator.gettotalsize.php
* @return int|false The total cache size.
*/
public function getTotalSize(){}
/**
* Get the total count
* @link https://php.net/manual/en/apcuiterator.gettotalcount.php
* @return int|false The total count.
*/
public function getTotalCount(){}
}

3015
build/stubs/gd.php Normal file

File diff suppressed because it is too large Load Diff

6744
build/stubs/imagick.php Normal file

File diff suppressed because it is too large Load Diff

6846
build/stubs/intl.php Normal file

File diff suppressed because it is too large Load Diff

1560
build/stubs/ldap.php Normal file

File diff suppressed because it is too large Load Diff

1528
build/stubs/memcached.php Normal file

File diff suppressed because it is too large Load Diff

5262
build/stubs/redis.php Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

83
build/stubs/sftp.php Normal file
View File

@ -0,0 +1,83 @@
<?php
define('NET_SFTP_INIT', 1);
define('NET_SFTP_VERSION', 2);
define('NET_SFTP_OPEN', 3);
define('NET_SFTP_CLOSE', 4);
define('NET_SFTP_READ', 5);
define('NET_SFTP_WRITE', 6);
define('NET_SFTP_LSTAT', 7);
define('NET_SFTP_SETSTAT', 9);
define('NET_SFTP_OPENDIR', 11);
define('NET_SFTP_READDIR', 12);
define('NET_SFTP_REMOVE', 13);
define('NET_SFTP_MKDIR', 14);
define('NET_SFTP_RMDIR', 15);
define('NET_SFTP_REALPATH', 16);
define('NET_SFTP_STAT', 17);
define('NET_SFTP_RENAME', 18);
define('NET_SFTP_READLINK', 19);
define('NET_SFTP_SYMLINK', 20);
define('NET_SFTP_STATUS', 101);
define('NET_SFTP_HANDLE', 102);
define('NET_SFTP_DATA', 103);
define('NET_SFTP_NAME', 104);
define('NET_SFTP_ATTRS', 105);
define('NET_SFTP_EXTENDED', 200);
define('NET_SFTP_STATUS_OK', 0);
define('NET_SFTP_STATUS_EOF', 1);
define('NET_SFTP_STATUS_NO_SUCH_FILE', 2);
define('NET_SFTP_STATUS_PERMISSION_DENIED', 3);
define('NET_SFTP_STATUS_FAILURE', 4);
define('NET_SFTP_STATUS_BAD_MESSAGE', 5);
define('NET_SFTP_STATUS_NO_CONNECTION', 6);
define('NET_SFTP_STATUS_CONNECTION_LOST', 7);
define('NET_SFTP_STATUS_OP_UNSUPPORTED', 8);
define('NET_SFTP_STATUS_INVALID_HANDLE', 9);
define('NET_SFTP_STATUS_NO_SUCH_PATH', 10);
define('NET_SFTP_STATUS_FILE_ALREADY_EXISTS', 11);
define('NET_SFTP_STATUS_WRITE_PROTECT', 12);
define('NET_SFTP_STATUS_NO_MEDIA', 13);
define('NET_SFTP_STATUS_NO_SPACE_ON_FILESYSTEM', 14);
define('NET_SFTP_STATUS_QUOTA_EXCEEDED', 15);
define('NET_SFTP_STATUS_UNKNOWN_PRINCIPAL', 16);
define('NET_SFTP_STATUS_LOCK_CONFLICT', 17);
define('NET_SFTP_STATUS_DIR_NOT_EMPTY', 18);
define('NET_SFTP_STATUS_NOT_A_DIRECTORY', 19);
define('NET_SFTP_STATUS_INVALID_FILENAME', 20);
define('NET_SFTP_STATUS_LINK_LOOP', 21);
define('NET_SFTP_STATUS_CANNOT_DELETE', 22);
define('NET_SFTP_STATUS_INVALID_PARAMETER', 23);
define('NET_SFTP_STATUS_FILE_IS_A_DIRECTORY', 24);
define('NET_SFTP_STATUS_BYTE_RANGE_LOCK_CONFLICT', 25);
define('NET_SFTP_STATUS_BYTE_RANGE_LOCK_REFUSED', 26);
define('NET_SFTP_STATUS_DELETE_PENDING', 27);
define('NET_SFTP_STATUS_FILE_CORRUPT', 28);
define('NET_SFTP_STATUS_OWNER_INVALID', 29);
define('NET_SFTP_STATUS_GROUP_INVALID', 30);
define('NET_SFTP_STATUS_NO_MATCHING_BYTE_RANGE_LOCK', 31);
define('NET_SFTP_ATTR_SIZE', 0x00000001);
define('NET_SFTP_ATTR_UIDGID', 0x00000002);
define('NET_SFTP_ATTR_PERMISSIONS', 0x00000004);
define('NET_SFTP_ATTR_ACCESSTIME', 0x00000008);
define('NET_SFTP_ATTR_EXTENDED', (-1 << 31) & 0xFFFFFFFF);
define('NET_SFTP_OPEN_READ', 0x00000001);
define('NET_SFTP_OPEN_WRITE', 0x00000002);
define('NET_SFTP_OPEN_APPEND', 0x00000004);
define('NET_SFTP_OPEN_CREATE', 0x00000008);
define('NET_SFTP_OPEN_TRUNCATE', 0x00000010);
define('NET_SFTP_OPEN_EXCL', 0x00000020);
define('NET_SFTP_TYPE_REGULAR', 1);
define('NET_SFTP_TYPE_DIRECTORY', 2);
define('NET_SFTP_TYPE_SYMLINK', 3);
define('NET_SFTP_TYPE_SPECIAL', 4);
define('NET_SFTP_TYPE_UNKNOWN', 5);
define('NET_SFTP_TYPE_SOCKET', 6);
define('NET_SFTP_TYPE_CHAR_DEVICE', 7);
define('NET_SFTP_TYPE_BLOCK_DEVICE', 8);
define('NET_SFTP_TYPE_FIFO', 9);

69
build/stubs/ssh2.php Normal file
View File

@ -0,0 +1,69 @@
<?php
define('NET_SSH2_MSG_DISCONNECT', 1);
define('NET_SSH2_MSG_IGNORE', 2);
define('NET_SSH2_MSG_UNIMPLEMENTED', 3);
define('NET_SSH2_MSG_DEBUG', 4);
define('NET_SSH2_MSG_SERVICE_REQUEST', 5);
define('NET_SSH2_MSG_SERVICE_ACCEPT', 6);
define('NET_SSH2_MSG_KEXINIT', 20);
define('NET_SSH2_MSG_NEWKEYS', 21);
define('NET_SSH2_MSG_KEXDH_INIT', 30);
define('NET_SSH2_MSG_KEXDH_REPLY', 31);
define('NET_SSH2_MSG_USERAUTH_REQUEST', 50);
define('NET_SSH2_MSG_USERAUTH_FAILURE', 51);
define('NET_SSH2_MSG_USERAUTH_SUCCESS', 52);
define('NET_SSH2_MSG_USERAUTH_BANNER', 53);
define('NET_SSH2_MSG_GLOBAL_REQUEST', 80);
define('NET_SSH2_MSG_REQUEST_SUCCESS', 81);
define('NET_SSH2_MSG_REQUEST_FAILURE', 82);
define('NET_SSH2_MSG_CHANNEL_OPEN', 90);
define('NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION', 91);
define('NET_SSH2_MSG_CHANNEL_OPEN_FAILURE', 92);
define('NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST', 93);
define('NET_SSH2_MSG_CHANNEL_DATA', 94);
define('NET_SSH2_MSG_CHANNEL_EXTENDED_DATA', 95);
define('NET_SSH2_MSG_CHANNEL_EOF', 96);
define('NET_SSH2_MSG_CHANNEL_CLOSE', 97);
define('NET_SSH2_MSG_CHANNEL_REQUEST', 98);
define('NET_SSH2_MSG_CHANNEL_SUCCESS', 99);
define('NET_SSH2_MSG_CHANNEL_FAILURE', 100);
define('NET_SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT', 1);
define('NET_SSH2_DISCONNECT_PROTOCOL_ERROR', 2);
define('NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED', 3);
define('NET_SSH2_DISCONNECT_RESERVED', 4);
define('NET_SSH2_DISCONNECT_MAC_ERROR', 5);
define('NET_SSH2_DISCONNECT_COMPRESSION_ERROR', 6);
define('NET_SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE', 7);
define('NET_SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED', 8);
define('NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE', 9);
define('NET_SSH2_DISCONNECT_CONNECTION_LOST', 10);
define('NET_SSH2_DISCONNECT_BY_APPLICATION', 11);
define('NET_SSH2_DISCONNECT_TOO_MANY_CONNECTIONS', 12);
define('NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER', 13);
define('NET_SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE', 14);
define('NET_SSH2_DISCONNECT_ILLEGAL_USER_NAME', 15);
define('NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED', 1);
define('NET_SSH2_TTY_OP_END', 0);
define('NET_SSH2_EXTENDED_DATA_STDERR', 1);
define('NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ', 60);
define('NET_SSH2_MSG_USERAUTH_PK_OK', 60);
define('NET_SSH2_MSG_USERAUTH_INFO_REQUEST', 60);
define('NET_SSH2_MSG_USERAUTH_INFO_RESPONSE', 61);
define('NET_SSH2_MSG_KEXDH_GEX_REQUEST_OLD', 30);
define('NET_SSH2_MSG_KEXDH_GEX_GROUP', 31);
define('NET_SSH2_MSG_KEXDH_GEX_INIT', 32);
define('NET_SSH2_MSG_KEXDH_GEX_REPLY', 33);
define('NET_SSH2_MSG_KEXDH_GEX_REQUEST', 34);
define('NET_SSH2_MSG_KEX_ECDH_INIT', 30);
define('NET_SSH2_MSG_KEX_ECDH_REPLY', 31);

192
build/stubs/xsl.php Normal file
View File

@ -0,0 +1,192 @@
<?php
// Start of xsl v.0.1
/**
* @link https://php.net/manual/en/class.xsltprocessor.php
*/
class XSLTProcessor {
/**
* Import stylesheet
* @link https://php.net/manual/en/xsltprocessor.importstylesheet.php
* @param object $stylesheet <p>
* The imported style sheet as a <b>DOMDocument</b> or
* <b>SimpleXMLElement</b> object.
* </p>
* @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
*/
public function importStylesheet ($stylesheet) {}
/**
* Transform to a DOMDocument
* @link https://php.net/manual/en/xsltprocessor.transformtodoc.php
* @param DOMNode $doc <p>
* The node to be transformed.
* </p>
* @return DOMDocument|false The resulting <b>DOMDocument</b> or <b>FALSE</b> on error.
*/
public function transformToDoc (DOMNode $doc) {}
/**
* Transform to URI
* @link https://php.net/manual/en/xsltprocessor.transformtouri.php
* @param DOMDocument|SimpleXMLElement $doc <p>
* The document to transform.
* </p>
* @param string $uri <p>
* The target URI for the transformation.
* </p>
* @return int|false the number of bytes written or <b>FALSE</b> if an error occurred.
*/
public function transformToUri ($doc, $uri) {}
/**
* Transform to XML
* @link https://php.net/manual/en/xsltprocessor.transformtoxml.php
* @param DOMDocument|SimpleXMLElement $doc <p>
* The transformed document.
* </p>
* @return string|false The result of the transformation as a string or <b>FALSE</b> on error.
*/
public function transformToXml ($doc) {}
/**
* Set value for a parameter
* @link https://php.net/manual/en/xsltprocessor.setparameter.php
* @param string $namespace <p>
* The namespace URI of the XSLT parameter.
* </p>
* @param string $name <p>
* The local name of the XSLT parameter.
* </p>
* @param string $value <p>
* The new value of the XSLT parameter.
* </p>
* @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
*/
public function setParameter ($namespace, $name, $value) {}
/**
* Get value of a parameter
* @link https://php.net/manual/en/xsltprocessor.getparameter.php
* @param string $namespaceURI <p>
* The namespace URI of the XSLT parameter.
* </p>
* @param string $localName <p>
* The local name of the XSLT parameter.
* </p>
* @return string|false The value of the parameter (as a string), or <b>FALSE</b> if it's not set.
*/
public function getParameter ($namespaceURI, $localName) {}
/**
* Remove parameter
* @link https://php.net/manual/en/xsltprocessor.removeparameter.php
* @param string $namespaceURI <p>
* The namespace URI of the XSLT parameter.
* </p>
* @param string $localName <p>
* The local name of the XSLT parameter.
* </p>
* @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
*/
public function removeParameter ($namespaceURI, $localName) {}
/**
* Determine if PHP has EXSLT support
* @link https://php.net/manual/en/xsltprocessor.hasexsltsupport.php
* @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
* @since 5.0.4
*/
public function hasExsltSupport () {}
/**
* Enables the ability to use PHP functions as XSLT functions
* @link https://php.net/manual/en/xsltprocessor.registerphpfunctions.php
* @param mixed $restrict [optional] <p>
* Use this parameter to only allow certain functions to be called from
* XSLT.
* </p>
* <p>
* This parameter can be either a string (a function name) or an array of
* functions.
* </p>
* @return void No value is returned.
* @since 5.0.4
*/
public function registerPHPFunctions ($restrict = null) {}
/**
* Sets profiling output file
* @link https://php.net/manual/en/xsltprocessor.setprofiling.php
* @param string $filename <p>
* Path to the file to dump profiling information.
* </p>
* @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
*/
public function setProfiling ($filename) {}
/**
* Set security preferences
* @link https://php.net/manual/en/xsltprocessor.setsecurityprefs.php
* @param int $securityPrefs
* @return int
* @since 5.4
*/
public function setSecurityPrefs ($securityPrefs) {}
/**
* Get security preferences
* @link https://php.net/manual/en/xsltprocessor.getsecurityprefs.php
* @return int
* @since 5.4
*/
public function getSecurityPrefs () {}
}
define ('XSL_CLONE_AUTO', 0);
define ('XSL_CLONE_NEVER', -1);
define ('XSL_CLONE_ALWAYS', 1);
/** @link https://php.net/manual/en/xsl.constants.php */
define ('XSL_SECPREF_NONE', 0);
/** @link https://php.net/manual/en/xsl.constants.php */
define ('XSL_SECPREF_READ_FILE', 2);
/** @link https://php.net/manual/en/xsl.constants.php */
define ('XSL_SECPREF_WRITE_FILE', 4);
/** @link https://php.net/manual/en/xsl.constants.php */
define ('XSL_SECPREF_CREATE_DIRECTORY', 8);
/** @link https://php.net/manual/en/xsl.constants.php */
define ('XSL_SECPREF_READ_NETWORK', 16);
/** @link https://php.net/manual/en/xsl.constants.php */
define ('XSL_SECPREF_WRITE_NETWORK', 32);
/** @link https://php.net/manual/en/xsl.constants.php */
define ('XSL_SECPREF_DEFAULT', 44);
/**
* libxslt version like 10117. Available as of PHP 5.1.2.
* @link https://php.net/manual/en/xsl.constants.php
*/
define ('LIBXSLT_VERSION', 10128);
/**
* libxslt version like 1.1.17. Available as of PHP 5.1.2.
* @link https://php.net/manual/en/xsl.constants.php
*/
define ('LIBXSLT_DOTTED_VERSION', "1.1.28");
/**
* libexslt version like 813. Available as of PHP 5.1.2.
* @link https://php.net/manual/en/xsl.constants.php
*/
define ('LIBEXSLT_VERSION', 817);
/**
* libexslt version like 1.1.17. Available as of PHP 5.1.2.
* @link https://php.net/manual/en/xsl.constants.php
*/
define ('LIBEXSLT_DOTTED_VERSION', "1.1.28");
// End of xsl v.0.1
?>

View File

@ -16,11 +16,12 @@
"ext-pdo": "*"
},
"require-dev": {
"nextcloud/coding-standard": "^0.3.0"
"nextcloud/coding-standard": "^0.3.0",
"psalm/phar": "^3.12"
},
"scripts": {
"cs:fix": "php-cs-fixer fix",
"cs:check": "php-cs-fixer fix --dry-run --diff",
"lint": "find . -name \\*.php -not -path './lib/composer/*' -not -path './build/.phan/*' -print0 | xargs -0 -n1 php -l"
"lint": "find . -name \\*.php -not -path './lib/composer/*' -not -path './build/.phan/*' -not -path './build/stubs/*' -print0 | xargs -0 -n1 php -l"
}
}

47
composer.lock generated
View File

@ -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": "0178ca2eb2f23b2588e729ff6a6f6c8f",
"content-hash": "e1676a14f39c8f5768692980f6e53dcb",
"packages": [],
"packages-dev": [
{
@ -501,6 +501,37 @@
],
"time": "2018-02-15T16:58:55+00:00"
},
{
"name": "psalm/phar",
"version": "3.12.2",
"source": {
"type": "git",
"url": "https://github.com/psalm/phar.git",
"reference": "19957cf3088ffc9d7c02f9e692f9c0a7522fe3ff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/psalm/phar/zipball/19957cf3088ffc9d7c02f9e692f9c0a7522fe3ff",
"reference": "19957cf3088ffc9d7c02f9e692f9c0a7522fe3ff",
"shasum": ""
},
"require": {
"php": "^7.1"
},
"conflict": {
"vimeo/psalm": "*"
},
"bin": [
"psalm.phar"
],
"type": "library",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Composer-based Psalm Phar",
"time": "2020-07-03T19:29:42+00:00"
},
{
"name": "psr/container",
"version": "1.0.0",
@ -1831,16 +1862,16 @@
},
{
"name": "symfony/service-contracts",
"version": "v2.1.2",
"version": "v2.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b"
"reference": "58c7475e5457c5492c26cc740cc0ad7464be9442"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/66a8f0957a3ca54e4f724e49028ab19d75a8918b",
"reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442",
"reference": "58c7475e5457c5492c26cc740cc0ad7464be9442",
"shasum": ""
},
"require": {
@ -1854,6 +1885,10 @@
"extra": {
"branch-alias": {
"dev-master": "2.1-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@ -1899,7 +1934,7 @@
"type": "tidelift"
}
],
"time": "2020-05-20T17:43:50+00:00"
"time": "2020-07-06T13:23:11+00:00"
},
{
"name": "symfony/stopwatch",

87
psalm.xml Normal file
View File

@ -0,0 +1,87 @@
<?xml version="1.0"?>
<psalm
errorLevel="4"
resolveFromConfigFile="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config"
errorBaseline="build/psalm-baseline.xml"
>
<projectFiles>
<directory name="apps"/>
<directory name="core"/>
<directory name="lib"/>
<directory name="ocm-provider"/>
<directory name="ocs"/>
<directory name="ocs-provider"/>
<file name="index.php"/>
<file name="public.php"/>
<file name="remote.php"/>
<file name="status.php"/>
<file name="version.php"/>
<ignoreFiles>
<directory name="apps/**/composer"/>
<directory name="apps/**/tests"/>
<directory name="apps/files_external/3rdparty"/>
<directory name="lib/composer"/>
<directory name="lib/l10n"/>
</ignoreFiles>
</projectFiles>
<extraFiles>
<directory name="3rdparty"/>
<directory name="apps/files_external/3rdparty"/>
</extraFiles>
<stubs>
<file name="build/stubs/apcu.php"/>
<file name="build/stubs/gd.php"/>
<file name="build/stubs/imagick.php"/>
<file name="build/stubs/intl.php"/>
<file name="build/stubs/IntlChar.php"/>
<file name="build/stubs/ldap.php"/>
<file name="build/stubs/memcached.php"/>
<file name="build/stubs/redis.php"/>
<file name="build/stubs/redis_cluster.php"/>
<file name="build/stubs/sftp.php"/>
<file name="build/stubs/ssh2.php"/>
<file name="build/stubs/xsl.php"/>
</stubs>
<issueHandlers>
<UndefinedFunction>
<errorLevel type="suppress">
<!-- template functions: https://github.com/nextcloud/server/blob/6e8e34fef920a073118c22111f0f31eb3b3a91dc/lib/private/legacy/template/functions.php -->
<referencedFunction name="p"/>
<referencedFunction name="emit_css_tag"/>
<referencedFunction name="emit_css_loading_tags"/>
<referencedFunction name="emit_script_tag"/>
<referencedFunction name="emit_script_loading_tags"/>
<referencedFunction name="print_unescaped"/>
<referencedFunction name="script"/>
<referencedFunction name="vendor_script"/>
<referencedFunction name="style"/>
<referencedFunction name="vendor_style"/>
<referencedFunction name="translation"/>
<referencedFunction name="component"/>
<referencedFunction name="link_to"/>
<referencedFunction name="link_to_docs"/>
<referencedFunction name="image_path"/>
<referencedFunction name="mimetype_icon"/>
<referencedFunction name="preview_icon"/>
<referencedFunction name="publicPreview_icon"/>
<referencedFunction name="human_file_size"/>
<referencedFunction name="strip_time"/>
<referencedFunction name="relative_modified_date"/>
<referencedFunction name="html_select_options"/>
</errorLevel>
</UndefinedFunction>
<UndefinedGlobalVariable>
<errorLevel type="suppress">
<referencedVariable name="$_"/>
<referencedVariable name="$l"/>
<referencedVariable name="$theme"/>
<!-- false positive: https://github.com/nextcloud/server/blob/cb057829f72c70e819f456edfadbb29d72dba832/lib/private/Console/Application.php#L92 -->
<file name="apps/*/appinfo/register_command.php" />
<file name="core/register_command.php" />
</errorLevel>
</UndefinedGlobalVariable>
</issueHandlers>
</psalm>