includes:
	- tests/phpstan/analyse-for-current-php-version.neon.php
	- tests/phpstan/configs/actual-problems.neon
	- tests/phpstan/configs/impossible-generics.neon
	- tests/phpstan/configs/php-bugs.neon
	- tests/phpstan/configs/phpstan-bugs.neon
	- tests/phpstan/configs/spl-fixed-array-sucks.neon
	- vendor/phpstan/phpstan-phpunit/extension.neon
	- vendor/phpstan/phpstan-phpunit/rules.neon
	- vendor/phpstan/phpstan-strict-rules/rules.neon

rules:
	- pocketmine\phpstan\rules\DeprecatedLegacyEnumAccessRule
	- pocketmine\phpstan\rules\DisallowDynamicNewRule
	- pocketmine\phpstan\rules\DisallowEnumComparisonRule
	- pocketmine\phpstan\rules\DisallowForeachByReferenceRule
	- pocketmine\phpstan\rules\ExplodeLimitRule
	- pocketmine\phpstan\rules\UnsafeForeachArrayWithStringKeysRule
#	- pocketmine\phpstan\rules\ThreadedSupportedTypesRule

parameters:
	level: 9
	checkMissingCallableSignature: true
	rememberPossiblyImpureFunctionValues: false #risky to remember these, better for performance to avoid repeated calls anyway
	treatPhpDocTypesAsCertain: false
	bootstrapFiles:
		- tests/phpstan/bootstrap.php
	scanDirectories:
		- build
		- tests/plugins/TesterPlugin
		- tools
	scanFiles:
		- src/PocketMine.php
	paths:
		- build
		- src
		- tests/phpstan/DummyPluginOwned.php
		- tests/phpstan/rules
		- tests/phpunit
		- tests/plugins/TesterPlugin
		- tools
	excludePaths:
		analyseAndScan:
			- build/php
	dynamicConstantNames:
		- pocketmine\VersionInfo::IS_DEVELOPMENT_BUILD
		- pocketmine\VersionInfo::BUILD_CHANNEL
		- pocketmine\DEBUG
		- pocketmine\IS_DEVELOPMENT_BUILD
	stubFiles:
		- tests/phpstan/stubs/chunkutils2.stub
		- tests/phpstan/stubs/JsonMapper.stub
		- tests/phpstan/stubs/leveldb.stub
		- tests/phpstan/stubs/pmmpthread.stub
	reportUnmatchedIgnoredErrors: false #no other way to silence platform-specific non-warnings
	typeAliases:
		#variadics don't work for this - mixed probably shouldn't work either, but for now it does
		#what we actually need is something that accepts an infinite number of parameters, but in the absence of that,
		#we'll just fill it with 10 - it's very unlikely to encounter a callable with 10 parameters anyway.
		anyCallable: 'callable(never, never, never, never, never, never, never, never, never, never) : mixed'
		anyClosure: '\Closure(never, never, never, never, never, never, never, never, never, never) : mixed'