Commit graph

49 commits

Author SHA1 Message Date
Alexandre Gomes Gaigalas
47f8f82d7f Remove mathematical, niche and deprecated validators
This commit removes validators described in #1642, refactoring
to clean up after their removal.

 - Url was refactored to use the function `filter_var` instead.
 - tests/bootstrap.php is no longer needed and was removed.
 - Updated migration guide with recommendations for replacements.
2026-01-30 16:08:27 +00:00
Henrique Moody
819d734a00
Check for mismatches in the mixin classes
When we change the contract of a validator, or create a new one, we need to
ensure that the mixin for the validator is present and matches the validator's
constructor.

This commit changes the current class that generates those mixin classes,
converting it into a linter so we can run it in the GitHub workflow to check for
missing changes.
2026-01-26 20:14:09 +01:00
Henrique Moody
140bd36aa3
Rename library/ to src/
We've always considered renaming this directory, as it's not a common
standard to name `library` the directory where the source code of a
library it. Having it as `src/` is a common pattern we find in several
PHP libraries these days.

Acked-by: Alexandre Gomes Gaigalas <alganet@gmail.com>
2026-01-22 13:13:15 +01:00
Henrique Moody
7892a7c902
Port Bash scripts to PHP
It makes more sense to use PHP to generate PHP code than to use Bash. I
love writing Bash scripts, but I know it's not for everyone, and they
can become quite complex. Porting them to PHP code also lowers the
barrier for people to change them.

While I was making those changes, I also noticed a problem with how we
save the domain suffixes. We're converting all of them to ASCII, so we
are not preserving languages such as Chinese, Thai, and Hebrew, which
use non-ASCII characters.
2026-01-06 10:06:22 +01:00
Henrique Moody
81310cc4d9
Rename namespace Rules to Validators
Since that namespace contains our “validators”, naming it as such makes
much more sense.
2026-01-05 17:36:35 +01:00
Henrique Moody
cfeb01e89e
Bump respect/coding-standard from 4 to 5 2025-12-18 19:03:39 +01:00
Henrique Moody
acf791cc9e
Remove "uopz" as a dependency to run tests
I'm creating a workaround here, which is not exactly happy with, but
adding "uopz" as a dependency to run the tests make it harder for
developers, including myself.
2025-12-18 14:13:09 +01:00
Henrique Moody
94daa8d669
Use Pest instead of PHPT files
Although I love PHPT files, and I've done my fair share of making it
easier to write them in this library, they're very slow, and running
them has become a hindrance.

I've been fidgeting with the idea of using Pest for a while, and I think
it's the right tool for the job. I had to create a couple of functions
to make it easier to run those tests, and now they're working really
alright.

I migrated all the PHPT files into Pest files -- I automated most of the
work with a little script using "nikic/php-parser"; this commit should
contain all the previous PHPT tests as Pest tests.

The previous integration tests would take sixteen seconds, and the Pest
tests take less than a second.
2024-12-16 17:07:47 +01:00
Henrique Moody
7cec227520
Create "Attribute" rule
With this change, any rule can be used as a PHP attribute. I have wanted
to implement this feature for a while, as it allows you to bind the
validation to a specific property and just validate the object
afterwards.
2024-12-13 03:49:29 +01:00
Henrique Moody
a974c0c834
Run PHPStan in PHPT files
We were not running PHPStan on those files because of the strict types
declaration. However, I decided it would be better not to have strict
types on those files than not to run PHPStan issues.

Not surprisingly, there were several issues. Some issues were impacting
how user-friendly the library is.
2024-11-29 01:39:41 +01:00
Henrique Moody
fefe905e0b
Include "__root__" when getting message as an array
When converting an object into an array, we exclude the message root
message from it. Since we're using a convention to template those
messages as an array, we could also use the same convention to return
those messages.

While working on it, I noticed that the name "__self__" wasn't
reflecting what that really meant, so I renamed it "__root__" because it
better reflects the meaning of those messages/templates.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2024-03-25 22:38:19 +01:00
Henrique Moody
9a13c9fb03
Update coding standards
This change will bring many breaking changes. The good thing is that we
can finally use more modern resources available in PHP.

I can imagine that's not a popular change since it will bring many
breaking changes to users, but we shouldn't be stuck in time because of
that. Using some of those features will make it easier to contribute to
the project. At least, I hope so.

There are still some useless doc-blocks, and we're not using "readonly"
properties when we could. I aim to send those changes soon.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2024-01-28 00:22:41 +01:00
Henrique Moody
177657d5f4
Upgrade Coding Standards
For now, I'm ignoring many rules because they'll make the changes that
would bring backward compatibility breaks, and I'm aiming to release a
minor version next.

However, upgrading "respect/coding-standard" is necessary because
version 4.0 no longer works.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2024-01-27 19:41:12 +01:00
Henrique Moody
16376306f8
Use "Respect" coding standard
There are too many PHP_CodeSniffer configurations in this repository.

I have created "respect/coding-standard" to deal with all the
configuration so in this repository we only need to add "Respect" as our
PHP_CodeSniffer rule.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-11 20:51:39 +02:00
Henrique Moody
272f18dcf5
Apply "Symfony.Functions.ScopeOrder"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-05-11 20:00:19 +02:00
Henrique Moody
c60ca7937b
Update the Coding Standards
This commit will add a couple of rules that we already use but also
introduce new ones and make sure all the code is in accordance with the
new coding standards.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-17 19:52:26 +01:00
Henrique Moody
4ab037ed87
Apply "SlevomatCodingStandard.ControlStructures.UselessIfConditionWithReturn"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:24:08 +01:00
Henrique Moody
85e6af6fcd
Apply "SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:23:09 +01:00
Henrique Moody
81a77ae125
Apply "SlevomatCodingStandard.TypeHints.NullableTypeForNullDefaultValue"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:22:31 +01:00
Henrique Moody
454096c459
Apply "SlevomatCodingStandard.PHP.ShortList"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:21:23 +01:00
Henrique Moody
8f41ebec8d
Apply "SlevomatCodingStandard.Namespaces.UseSpacing"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:21:04 +01:00
Henrique Moody
e8a50ea31b
Apply "SlevomatCodingStandard.Namespaces.AlphabeticallySortedUses"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:20:47 +01:00
Henrique Moody
99b912ff87
Apply "SlevomatCodingStandard.ControlStructures.DisallowYodaComparison"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:19:22 +01:00
Henrique Moody
3abf64f496
Apply "SlevomatCodingStandard.ControlStructures.RequireTernaryOperator"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:18:59 +01:00
Henrique Moody
e500222f5b
Apply "SlevomatCodingStandard.ControlStructures.LanguageConstructWithParentheses"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:18:30 +01:00
Henrique Moody
750cfa217a
Apply "SlevomatCodingStandard.ControlStructures.ControlStructureSpacing"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:18:01 +01:00
Henrique Moody
3920f5a0e6
Apply "SlevomatCodingStandard.Classes.TraitUseDeclaration"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:17:35 +01:00
Henrique Moody
6efb9db429
Apply "SlevomatCodingStandard.Arrays.TrailingArrayComma"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:17:09 +01:00
Henrique Moody
147804287b
Apply "SlevomatCodingStandard.Variables.UnusedVariable"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:16:01 +01:00
Henrique Moody
e89b32270b
Apply "SlevomatCodingStandard.PHP.OptimizedFunctionsWithoutUnpacking"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:15:39 +01:00
Henrique Moody
44f4d65a3d
Apply "SlevomatCodingStandard.PHP.UselessParentheses"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:15:06 +01:00
Henrique Moody
751e08c9f0
Apply "SlevomatCodingStandard.Namespaces.UnusedUses"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:14:28 +01:00
Henrique Moody
880103c55f
Apply "SlevomatCodingStandard.Functions.StaticClosure"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:13:35 +01:00
Henrique Moody
d72d247ddc
Apply "SlevomatCodingStandard.ControlStructures.EarlyExit"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:13:06 +01:00
Henrique Moody
7e3bf36f8d
Apply "SlevomatCodingStandard.ControlStructures.AssignmentInCondition"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:12:38 +01:00
Henrique Moody
cb24cc97d2
Apply "SlevomatCodingStandard.Classes.DisallowLateStaticBindingForConstants"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:12:05 +01:00
Henrique Moody
cc20a442a1
Apply "SlevomatCodingStandard.TypeHints.DeclareStrictTypes"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:11:12 +01:00
Henrique Moody
cbe484a4d3
Apply "SlevomatCodingStandard.Exceptions.ReferenceThrowableOnly"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:10:01 +01:00
Henrique Moody
7e884cc0f4
Apply "SlevomatCodingStandard.TypeHints.UselessConstantTypeHint"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:09:29 +01:00
Henrique Moody
c30603759e
Apply "SlevomatCodingStandard.TypeHints.TypeHintDeclaration"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:09:28 +01:00
Henrique Moody
7e11cc0027
Apply "Squiz.Strings.ConcatenationSpacing"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:08:43 +01:00
Henrique Moody
0e0581a9da
Apply "Squiz.WhiteSpace.OperatorSpacing"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:08:43 +01:00
Henrique Moody
8e59ec5d4a
Apply "Squiz.WhiteSpace.MemberVarSpacing"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:08:43 +01:00
Henrique Moody
ee1d49a2cf
Apply "Squiz.PHP.CommentedOutCode"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:08:41 +01:00
Henrique Moody
111b3de436
Apply "PEAR.WhiteSpace.ObjectOperatorIndent"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:08:23 +01:00
Henrique Moody
1cccfd00a0
Apply "Generic.NamingConventions.CamelCapsFunctionName"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:07:52 +01:00
Henrique Moody
5bdffaa51b
Apply "Generic.Arrays.ArrayIndent"
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:07:52 +01:00
Henrique Moody
0c4a278709
Add some code sniffs that we already use
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:07:47 +01:00
Henrique Moody
b7043b2652
Set up "squizlabs/php_codesniffer"
The tool we used to verify whether the code base has the correct coding
standard was removed [1].

This commit will set up one that works best for us and will also make
sure we have fully compliant to PS1 and PSR2.

[1]: ffec95acda

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-03 19:39:14 +01:00