Analyzer Execution Inventory
This reference lists each built-in analyzer and the place where it runs. It is mainly for contributors deciding where a new analyzer belongs.
| Execution path | Count | Contract |
|---|---|---|
| Runtime profiler | 40 | AnalyzerInterface without a static marker |
| Code and mapping checks | 52 | StaticAnalyzerInterface (including MetadataAnalyzerInterface) |
| Optional database audits | 8 | DatabaseAuditAnalyzerInterface |
The bundle keeps doctrine_doctor.analyzer as the service registration tag. During container compilation, services marked static are sent to the CI command; other analyzer services are sent to the profiler. Database audits also implement the static contract, and the command skips them unless --with-database is set.
The lists below reflect the interfaces implemented by the current built-in analyzer classes. Parser helpers and configuration objects are excluded.
Runtime profiler (40)
These checks need SQL or other context captured while a request runs.
BulkInsertAnalyzerBulkOperationAnalyzerCartesianProductAnalyzerDQLInjectionAnalyzerDTOHydrationAnalyzerDeepOffsetPaginationAnalyzerDivisionByZeroAnalyzerEagerLoadingAnalyzerEntityManagerClearAnalyzerFindAllAnalyzerFlushInLoopAnalyzerFunctionOnPredicateColumnAnalyzerGetReferenceAnalyzerHydrationAnalyzerImplicitTypeConversionAnalyzerIneffectiveLikeAnalyzerJoinOptimizationAnalyzerJoinTypeConsistencyAnalyzerLazyLoadingAnalyzerMissingIndexAnalyzerMissingTransactionOnBatchAnalyzerMissingVersionFieldForConcurrencyAnalyzerNPlusOneAnalyzerNPlusOneSqlAnalyzerNestedRelationshipN1AnalyzerNotInSubqueryAnalyzerNullComparisonAnalyzerOrderByNullableLeadingColumnAnalyzerOrderByWithoutLimitAnalyzerPaginationWithoutOrderByAnalyzerPartialObjectAnalyzerQueryBuilderBestPracticesAnalyzerQueryCachingOpportunityAnalyzerSQLInjectionInRawQueriesAnalyzerSetMaxResultsWithCollectionJoinAnalyzerSlowQueryAnalyzerStructuralMissingIndexAnalyzerTransactionBoundaryAnalyzerUnusedEagerLoadAnalyzerYearFunctionOptimizationAnalyzer
Code and mapping checks (52)
These checks can run without SQL from the current web request.
BidirectionalConsistencyAnalyzerBlameableTraitAnalyzerCascadeAllAnalyzerCascadeConfigurationAnalyzerCascadePersistOnIndependentEntityAnalyzerCascadeRemoveOnIndependentEntityAnalyzerClassTableInheritanceDepthAnalyzerClassTableInheritanceThinSubclassAnalyzerCollectionInitializationAnalyzerCompositeKeyComplexityAnalyzerDecimalPrecisionAnalyzerDenormalizedAggregateWithoutLockingAnalyzerDiscriminatorColumnAnalyzerDoctrineCacheAnalyzerDuplicatePrivateFieldInHierarchyAnalyzerEagerLoadingMappingAnalyzerEmbeddableMutabilityAnalyzerEmbeddableWithoutValueObjectAnalyzerEntityManagerInEntityAnalyzerEntityStateConsistencyAnalyzerFinalEntityAnalyzerFloatForMoneyAnalyzerFloatInMoneyEmbeddableAnalyzerFlushInEventListenerAnalyzerForeignKeyMappingAnalyzerGedmoExtensionPerformanceAnalyzerHardcodedDatabaseCredentialsAnalyzerInheritanceTypeOnNonRootEntityAnalyzerInsecureRandomAnalyzerJoinColumnNonPrimaryKeyAnalyzerLazyGhostObjectsDisabledAnalyzerMappedSuperclassAsTargetEntityAnalyzerMappedSuperclassOneToManyAnalyzerMissingEmbeddableOpportunityAnalyzerMissingOrphanRemovalOnCompositionAnalyzerNamingConventionAnalyzerNullablePrimaryKeyAnalyzerOnDeleteCascadeMismatchAnalyzerOneToOneInverseSideAnalyzerOrphanRemovalWithoutCascadeRemoveAnalyzerOverprivilegedDatabaseUserAnalyzerPrimaryKeyStrategyAnalyzerPropertyTypeMismatchAnalyzerSQLInjectionInRawQueriesSourceAnalyzerSensitiveDataExposureAnalyzerSingleTableInheritanceNullableColumnAnalyzerSingleTableInheritanceSparseTableAnalyzerSoftDeleteableTraitAnalyzerStringDefaultExpressionAnalyzerTimestampableTraitAnalyzerTypeHintMismatchAnalyzerUniqueEntityWithoutDatabaseIndexAnalyzer
Optional database audits (8)
The command includes these only when run with --with-database.
CharsetAnalyzerCollationAnalyzerColumnTypeAnalyzerConnectionPoolingAnalyzerInnoDBEngineAnalyzerManyToManyWithExtraColumnsAnalyzerStrictModeAnalyzerTimeZoneAnalyzer