Commit Graph

6 Commits

Author SHA1 Message Date
Marco Pivetta dee551deb1 Removed use function imports for mocked/stubbed functions, disabling phpcs import rule
While the rule is now disabled, it still is very much valuable to import most pure functions from the core
PHP scope, allowing us some marginal gains on anything that can be inlined by the engine (now or in future).

The rule does not allow selective exclusions, so we will need to keep it off for now.
2020-02-03 13:15:35 -06:00
Marco Pivetta a252f29847 Import used functions and constants via use statement to disallow ambiguity for compiler/static-analysis
As documented in https://wiki.php.net/rfc/use_global_elements, the engine (by default) does a local namespace
lookup, then falls back to global namespace when first calling a global function referenced in namespaced code,
unless that function is referenced via fully qualified name (FQN).

By using the FQN, the actual symbol can be looked up at compile-time, both by the PHP engine and by static analysis
tooling, allowing for compiler (in particular) optimizations to replace known hot-path functions with specialized opcodes.

Sadly, no actual benchmark at hand: the improvements can be minimal or massive, depending on where this library is
used (tight loops being most relevant).
2020-02-03 13:15:35 -06:00
Ben Ramsey 5d7c0f2210 Move files to clean up project root directory 2020-01-19 23:48:55 -06:00
Marco Pivetta c935fbb0d9 Added minimal static analysis test suite to ensure purity/immutability of UUID API
This covers most of the commonly used `Uuid` and `UuidInterface` API, and allows us
to pass around `UuidInterface` references as if they were pure.

Note that this only verifies the *contract* of a `UuidInterface`: it is still very
much possible to write mutable `UuidInterface` implementations (and `Uuid` itself
has such an edge-case, allowing for replacement of the static `UuidFactory` reference),
but if you really do mutate UUIDs at runtime, then your code is very much hurting your
project, and you should get rid of that detail.
2020-01-18 12:13:55 -06:00
Marco Pivetta 17b390cc9c Disabled CS rule enforcing native type declarations where @param or @return are used instead
We can't use this rule for now, since changing interface type declarations is a major
BC break that is not worth introducing for now.
2020-01-18 12:13:55 -06:00
Ben Ramsey 0d7b8c2b7a Update coding style to include PSR-12, among other options
This also includes heavy use of slevomat/coding-standard to apply
various checks to the code, based on maintainer (me) preference.
2020-01-18 12:13:55 -06:00