'.phan/internal_stubs/dom.phan_php', 'imagick' => '.phan/internal_stubs/imagick.phan_php', 'intl' => '.phan/internal_stubs/intl.phan_php', 'memcached' => '.phan/internal_stubs/memcached.phan_php', 'oci8' => '.phan/internal_stubs/oci8.phan_php', 'pcntl' => '.phan/internal_stubs/pcntl.phan_php', 'pgsql' => '.phan/internal_stubs/pgsql.phan_php', 'redis' => '.phan/internal_stubs/redis.phan_php', 'sockets' => '.phan/internal_stubs/sockets.phan_php', 'sqlsrv' => '.phan/internal_stubs/sqlsrv.phan_php', 'tideways' => '.phan/internal_stubs/tideways.phan_php', ]; $cfg['directory_list'] = [ 'includes/', 'languages/', 'maintenance/', 'mw-config/', 'resources/', 'vendor/', '.phan/stubs/', ]; $cfg['exclude_analysis_directory_list'] = [ 'vendor/', '.phan/', // The referenced classes are not available in vendor, only when // included from composer. 'includes/composer/', // Directly references classes that only exist in Translate extension 'maintenance/language/', // External class 'includes/libs/jsminplus.php', // External class 'includes/libs/objectcache/utils/MemcachedClient.php', ]; // NOTE: If you're facing an issue which you cannot easily fix, DO NOT add it here. Suppress it // either in-line with @phan-suppress-next-line and similar, at block-level (via @suppress), or at // file-level (with @phan-file-suppress), so that it stays enabled for the rest of the codebase. $cfg['suppress_issue_types'] = array_merge( $cfg['suppress_issue_types'], [ // approximate error count: 19 "PhanParamReqAfterOpt", // False positives with nullables (phan issue #3159). Use real nullables //after dropping HHVM // approximate error count: 110 "PhanParamTooMany", // False positives with variargs. Unsuppress after dropping HHVM ] ); // This helps a lot in discovering bad code, but unfortunately it will always fail for // hooks + pass by reference, see phan issue #2943. // @todo Enable when the issue above is resolved and we update our config! $cfg['redundant_condition_detection'] = false; // Do not use aliases in core. // Use the correct name, because we don't need backward compatibility $cfg['enable_class_alias_support'] = false; $cfg['ignore_undeclared_variables_in_global_scope'] = true; // @todo It'd be great if we could just make phan read these from DefaultSettings, to avoid // duplicating the types. $cfg['globals_type_map'] = array_merge( $cfg['globals_type_map'], [ 'IP' => 'string', 'wgGalleryOptions' => 'array', 'wgDummyLanguageCodes' => 'string[]', 'wgNamespaceProtection' => 'array', 'wgNamespaceAliases' => 'array', 'wgLockManagers' => 'array[]', 'wgForeignFileRepos' => 'array[]', 'wgDefaultUserOptions' => 'array', 'wgSkipSkins' => 'string[]', 'wgLogTypes' => 'string[]', 'wgLogNames' => 'array', 'wgLogHeaders' => 'array', 'wgLogActionsHandlers' => 'array', 'wgPasswordPolicy' => 'array>', 'wgVirtualRestConfig' => 'array', 'wgWANObjectCaches' => 'array[]', 'wgLocalInterwikis' => 'string[]', 'wgDebugLogGroups' => 'string|false|array{destination:string,sample?:int,level:int}', 'wgCookiePrefix' => 'string|false', 'wgOut' => 'OutputPage', 'wgExtraNamespaces' => 'string[]', ] ); return $cfg;