Filtering overview
Retina supports three types of filtering:Categories
Exclude specific issue types
Analyzers
Disable entire analyzers
Severities
Hide severity levels
Category filtering
Exclude specific issue categories from your analysis results.Using command-line options
Using configuration file
retina.yml
Available categories
See the complete list of categories in the Issue categories documentation. PHP standard categories:- undefined_variable, undefined_method, undefined_class, undefined_constant, undefined_function, undefined_property
- type_mismatch, return_type, parameter_type
- unused_variable, unused_parameter, unused_import
- dead_code, syntax_error
- missing_return, invalid_inheritance, interface_violation, abstract_violation, visibility_violation
- static_call_error, instantiation_error, array_access_error, null_safety
- invalid_event_handler, unregistered_listener, invalid_plugin_yml, main_class_mismatch, invalid_api_version
- deprecated_api, async_task_misuse, scheduler_misuse, config_misuse
- permission_mismatch, command_mismatch, resource_missing
- invalid_event_priority, cancelled_event_access, thread_safety
Category presets
Presets allow you to exclude multiple related categories at once.Available presets
unused preset
unused preset
Excludes all unused code issues:
- unused_variable
- unused_parameter
- unused_import
undefined preset
undefined preset
Excludes all undefined reference issues:
- undefined_variable
- undefined_method
- undefined_class
- undefined_constant
- undefined_function
- undefined_property
pocketmine preset
pocketmine preset
Excludes all PocketMine-MP specific issues:
- invalid_event_handler
- unregistered_listener
- invalid_plugin_yml
- main_class_mismatch
- invalid_api_version
- deprecated_api
- async_task_misuse
- scheduler_misuse
- config_misuse
- permission_mismatch
- command_mismatch
- resource_missing
- invalid_event_priority
- cancelled_event_access
- thread_safety
Combining presets and categories
You can mix presets with specific categories:retina.yml
Presets are expanded before validation, so
unused becomes unused_variable, unused_parameter, and unused_import.- Preset expansion: src/Filter/FilterConfig.php:102
- Preset definitions: FilterConfig::getUnusedCategories(), getUndefinedCategories(), getPocketMineCategories()
Analyzer filtering
Disable entire analyzers to skip specific types of analysis.Using command-line options
Using configuration file
retina.yml
Available analyzers
- PluginYml
- MainClass
- PhpFile
- EventHandler
- Listener
- Command
- Permission
- AsyncTask
- Scheduler
- Config
- Resource
- DeprecatedApi
- ThreadSafety
- PHPStan
Analyzer name flexibility
Retina normalizes analyzer names, so these are all equivalent:Analyzer names are case-insensitive and the “Analyzer” suffix is optional.
- Name normalization: src/Filter/FilterConfig.php:231
Common use cases
Legacy codebase:Severity filtering
Exclude specific severity levels to focus on critical issues.Using command-line options
Using configuration file
retina.yml
Available severity levels
- error - Critical issues that will cause crashes
- warning - Problems that should be fixed
- info - Suggestions for improvement
- hint - Minor style or optimization suggestions
Common filtering strategies
Production deployments:Filter validation
Retina validates all filter configurations and provides helpful error messages.Invalid category example
Invalid analyzer example
Invalid severity example
- Validation logic: src/Filter/FilterConfig.php:95
- Category validation with suggestions: FilterConfig::validateCategories() (uses Levenshtein distance)
Configuration precedence
When using both command-line options and configuration files, command-line options take precedence.Example scenario
retina.yml
Command-line options completely override configuration file settings - they don’t merge.
- Configuration merging: src/Command/RunCommand.php:240
Combining multiple filters
You can use all three filter types together for precise control.Command-line example
Configuration file example
retina.yml
Filtering workflow examples
Initial scan: Focus on critical issues
Pre-production scan: Everything except hints
Migration scan: Skip deprecated API temporarily
Quick validation: Structure only
Simple reports
Simple reports show minimal information (file, line, category, severity, message) without code snippets or suggestions.Enable simple reports
retina.yml
- Simple report configuration: src/Filter/FilterConfig.php:75
- Simple formatters: src/Report/Format/Simple/