classRegistry
final class Registry
@visibility public.Registered interpretations of PHP function calls, from evaluated arguments to values.
$models = \SqlCatalog\Core\Analysis\FunctionModel\Registry::withBuiltins();
$models->register('App\table', static fn (array $arguments) => \SqlCatalog\Core\Evaluation\Domain::literal('users'));
$models->evaluate('App\table', [])?->soleLiteral()?->value // => 'users'
$models->evaluate('strtoupper', [\SqlCatalog\Core\Evaluation\Domain::literal('users')])?->soleLiteral()?->value // => 'USERS'Methods§
public static function withBuiltins(): selfThe standard models, which may be extended or overridden through register().
Returns
selfTest cases 33
CallEvaluatorTest::testApplyEffectsKeepsKnownByValueArgumentsAndOpensReferencescallsCallEvaluatorTest::testApplySinkHandsBackAHandleNamingThePreparingCallcallsCallEvaluatorTest::testApplySinkHandsBackWhatEachKindOfDatabaseCallHandsBackcallsCallEvaluatorTest::testArgumentsIsCalledWithTheCallItselfcallsCallEvaluatorTest::testCallKeyOfTellsOneCallApartFromEveryOthercallsCallEvaluatorTest::testDispatchReadsTheImplementationsTheSourceDeclarescallsCallEvaluatorTest::testEvaluateAppliesOnlyPossibleCallWritescallsCallEvaluatorTest::testEvaluateFunctionGivesUpOnAFunctionWhoseNameIsNotWrittencallsCallEvaluatorTest::testEvaluateFunctionHandsBackWhatADatabaseCallHandsBackcallsCallEvaluatorTest::testEvaluateFunctionNamesTheExternalInputItReadscallsCallEvaluatorTest::testEvaluateInstantiationNamesTheClassItCreatescallsCallEvaluatorTest::testEvaluateMethodFollowsAMethodDeclaredWithoutABodycallsCallEvaluatorTest::testEvaluateMethodFollowsIntoAClassNoExtensionModelscallsCallEvaluatorTest::testEvaluateMethodFollowsIntoAModelledClassOnlyFromItsOwnBodycallsCallEvaluatorTest::testEvaluateMethodGivesUpOnAMethodWhoseNameIsNotWrittencallsCallEvaluatorTest::testEvaluateOfAFirstClassCallableIsAClosurecallsCallEvaluatorTest::testEvaluateRetainsReferenceWritesForAModeledNamespacedFunctioncallsCallEvaluatorTest::testEvaluateStaticGivesUpWhenTheClassOrTheNameIsNotWrittencallsCallEvaluatorTest::testEvaluateStaticHandsBackWhatADatabaseCallHandsBackcallsCallEvaluatorTest::testEvaluateStaticResolvesTheSelfKeywordsToTheEnclosingClasscallsCallEvaluatorTest::testFollowWithoutReturnsToReadNamesTheCalleecallsCallEvaluatorTest::testFunctionNameUsesRegisteredNamespaceBeforeGlobalFallbackcallsCallEvaluatorTest::testInvalidateEscapesOpensAliasedObjectStatecallsCallEvaluatorTest::testIsOwnReceiverTellsACallOnItselfApartFromOneOnSomethingElsecallsCallEvaluatorTest::testSiteKeyOfNamesTheCallAndTheDatabaseCallcallsCallEvaluatorTest::testTheCallMethodsAreReachedDirectlycallsRegistryTest::testRegisterCallKeepsNamedFunctionModelsAvailablecallsRegistryTest::testRegisterOverridesAndCanDeferToEarlierModelscallsRegistryTest::testRegisterOverridesTheBuiltinArrayFillcallsRegistryTest::testWithBuiltinsRetainsStandardModelscallsAnalyzerTest::testAnalyzeSourceAppliesRegisteredFunctionsAndFallsBackToSourcecallsAnalyzerTest::testAnalyzeSourceCombinesNamedFunctionModelsWithLaravelRegistrationscallsConfigurationTest::testApplyPreservesTheOriginalRegistryAndOverridesTheBuiltincalls
Called from 4
- static-call SqlCatalog\Core\Analysis\BuiltinCallModel::supports() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:72
- static-call SqlCatalog\Core\Analysis\BuiltinCallModel::evaluate() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:82
- static-call SqlCatalog\Core\Analysis\Interpreter::__construct() packages/sql-catalog/src/Core/Analysis/Interpreter.php:92
- static-call SqlCatalog\Facade\Analyzer::__construct() packages/sql-catalog/src/Facade/Analyzer.php:64
Calls 3
- new
selfline 38 - method-call BuiltinCallModel::register() line 39
- new BuiltinCallModel line 39
Adds a model tried before earlier models of the same function. Return null to defer to earlier models, then ordinary source analysis.
Parameters
Test cases 2
Called from 11
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:48
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:49
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:50
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:51
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:52
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:53
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:54
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:55
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:57
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:60
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:63
Calls 1
- method-call Registry::normalize() line 52
public function supports(string $name): boolWhether at least one model is registered for this fully qualified name.
Parameters
$name | string |
Returns
boolTest cases 2
Called from 2
Calls 1
- method-call Registry::normalize() line 60
The first model that accepts the arguments, or null to use source analysis.
Parameters
$name | string | |
$arguments | list<Domain> |
Returns
Test cases 2
Called from 1
Calls 2
- function-call
array_reverseline 70 - method-call Registry::normalize() line 70
public function registerCall(callable(CallContext): ?Domain $model): voidAdds a context-aware model for PHP calls, including methods and constructors.
Parameters
$model | callable(CallContext): ?Domain | The AST, evaluated values and shared object state. |
public function evaluateCall(CallContext $context): ?DomainTries newer context-aware models first, preserving ordinary function models as a fallback.
Parameters
$context | CallContext |
Returns
Called from 4
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluate() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:88
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateMethod() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:196
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateStatic() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:283
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateFunction() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:323
Calls 1
- function-call
array_reverseline 95
public function normalize(string $name): stringA case-insensitive function name retaining its namespace.
Parameters
$name | string |
Returns
stringTest cases 1
Called from 5
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::normalize() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:91
- method-call SqlCatalog\Core\Analysis\CallEvaluator::applyEffects() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:121
- method-call SqlCatalog\Core\Analysis\FunctionModel\Registry::register() packages/sql-catalog/src/Core/Analysis/FunctionModel/Registry.php:52
- method-call SqlCatalog\Core\Analysis\FunctionModel\Registry::supports() packages/sql-catalog/src/Core/Analysis/FunctionModel/Registry.php:60
- method-call SqlCatalog\Core\Analysis\FunctionModel\Registry::evaluate() packages/sql-catalog/src/Core/Analysis/FunctionModel/Registry.php:70
Private surface 2§
Implementation details, listed for orientation only.
private array<string, list<callable(list<Domain>): ?Domain>> $models = []private list<callable(CallContext): ?Domain> $calls = []Test cases 60§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 8
RegistryTest::testEvaluateCallUsesTheNewestHandlingFunctionAndPreservesItsDomaincallsRegistryTest::testEvaluateReturnsNullWhenEveryModelDeclinescallsRegistryTest::testNormalizeKeepsTheNamespacecallsRegistryTest::testRegisterCallKeepsNamedFunctionModelsAvailablecallsRegistryTest::testRegisterOverridesAndCanDeferToEarlierModelscallsRegistryTest::testRegisterOverridesTheBuiltinArrayFillcallsRegistryTest::testSupportsKeepsNamespacedFunctionsSeparatecallsRegistryTest::testWithBuiltinsRetainsStandardModelscalls
Other tests reaching this symbol 52
CatalogCommandTestcallsBuiltinCallModelTest::testRegisterInstallsModelsIntoAnEmptyRegistrycallsCallEvaluatorTest::testApplyEffectsKeepsKnownByValueArgumentsAndOpensReferencescallsCallEvaluatorTest::testApplySinkHandsBackAHandleNamingThePreparingCallcallsCallEvaluatorTest::testApplySinkHandsBackWhatEachKindOfDatabaseCallHandsBackcallsCallEvaluatorTest::testArgumentsIsCalledWithTheCallItselfcallsCallEvaluatorTest::testCallKeyOfTellsOneCallApartFromEveryOthercallsCallEvaluatorTest::testDispatchReadsTheImplementationsTheSourceDeclarescallsCallEvaluatorTest::testEvaluateAppliesOnlyPossibleCallWritescallsCallEvaluatorTest::testEvaluateFunctionGivesUpOnAFunctionWhoseNameIsNotWrittencallsCallEvaluatorTest::testEvaluateFunctionHandsBackWhatADatabaseCallHandsBackcallsCallEvaluatorTest::testEvaluateFunctionNamesTheExternalInputItReadscallsCallEvaluatorTest::testEvaluateInstantiationNamesTheClassItCreatescallsCallEvaluatorTest::testEvaluateMethodFollowsAMethodDeclaredWithoutABodycallsCallEvaluatorTest::testEvaluateMethodFollowsIntoAClassNoExtensionModelscallsCallEvaluatorTest::testEvaluateMethodFollowsIntoAModelledClassOnlyFromItsOwnBodycallsCallEvaluatorTest::testEvaluateMethodGivesUpOnAMethodWhoseNameIsNotWrittencallsCallEvaluatorTest::testEvaluateOfAFirstClassCallableIsAClosurecallsCallEvaluatorTest::testEvaluateRetainsReferenceWritesForAModeledNamespacedFunctioncallsCallEvaluatorTest::testEvaluateStaticGivesUpWhenTheClassOrTheNameIsNotWrittencallsCallEvaluatorTest::testEvaluateStaticHandsBackWhatADatabaseCallHandsBackcallsCallEvaluatorTest::testEvaluateStaticResolvesTheSelfKeywordsToTheEnclosingClasscallsCallEvaluatorTest::testFollowWithoutReturnsToReadNamesTheCalleecallsCallEvaluatorTest::testFunctionNameUsesRegisteredNamespaceBeforeGlobalFallbackcallsCallEvaluatorTest::testInvalidateEscapesOpensAliasedObjectStatecallsCallEvaluatorTest::testIsOwnReceiverTellsACallOnItselfApartFromOneOnSomethingElsecallsCallEvaluatorTest::testSiteKeyOfNamesTheCallAndTheDatabaseCallcallsCallEvaluatorTest::testTheCallMethodsAreReachedDirectlycallsConstantReaderTestcallsCalleeReturnsTestcallsCallersTestcallsDeriverTestcallsEntryBinderTestcallsCallbackEffectsTestcallsPropertyWritesTestcallsSliceExecutorTestcallsExpressionEvaluatorTestcallsInterpreterTestcallsModelQueriesTestcallsReferenceEvaluatorTestcallsCatalogTestcallsCallContextTestcallsQueryModelInterfaceTestcallsBuilderCallsTestcallsBuilderQueriesTestcallsCallbackModelTestcallsCallModelTestcallsAnalyzerTest::testAnalyzeSourceAppliesRegisteredFunctionsAndFallsBackToSourcecallsAnalyzerTest::testAnalyzeSourceCombinesNamedFunctionModelsWithLaravelRegistrationscallsConfigurationTest::testApplyPreservesTheOriginalRegistryAndOverridesTheBuiltincallsJsonReporterTestcallsTextReporterTestcalls
Relations§
Instantiated in 1
Static calls 4
- static-call SqlCatalog\Core\Analysis\BuiltinCallModel::supports() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:72
- static-call SqlCatalog\Core\Analysis\BuiltinCallModel::evaluate() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:82
- static-call SqlCatalog\Core\Analysis\Interpreter::__construct() packages/sql-catalog/src/Core/Analysis/Interpreter.php:92
- static-call SqlCatalog\Facade\Analyzer::__construct() packages/sql-catalog/src/Facade/Analyzer.php:64
Method calls 20
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:48
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:49
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:50
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:51
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:52
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:53
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:54
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:55
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:57
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:60
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::register() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:63
- method-call SqlCatalog\Core\Analysis\BuiltinCallModel::normalize() packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:91
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluate() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:88
- method-call SqlCatalog\Core\Analysis\CallEvaluator::applyEffects() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:119
- method-call SqlCatalog\Core\Analysis\CallEvaluator::applyEffects() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:121
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateMethod() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:196
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateStatic() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:283
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateFunction() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:323
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateFunction() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:331
- method-call SqlCatalog\Core\Analysis\CallEvaluator::functionName() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:366
Type declarations 8
- type SqlCatalog\Core\Analysis\BuiltinCallModel packages/sql-catalog/src/Core/Analysis/BuiltinCallModel.php:46
- type SqlCatalog\Core\Analysis\CallEvaluator packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:43
- type SqlCatalog\Core\Analysis\CallEvaluator packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:59
- type SqlCatalog\Core\Analysis\Interpreter packages/sql-catalog/src/Core/Analysis/Interpreter.php:56
- type SqlCatalog\Core\Analysis\Interpreter packages/sql-catalog/src/Core/Analysis/Interpreter.php:88
- type SqlCatalog\Facade\Analyzer packages/sql-catalog/src/Facade/Analyzer.php:48
- type SqlCatalog\Facade\Analyzer packages/sql-catalog/src/Facade/Analyzer.php:62
- type SqlCatalog\Facade\Configuration packages/sql-catalog/src/Facade/Configuration.php:69