https://github.com/juampi92/phecks
PHP Checks
https://github.com/juampi92/phecks
ci-cd laravel phecks php testing
Last synced: about 1 year ago
JSON representation
PHP Checks
- Host: GitHub
- URL: https://github.com/juampi92/phecks
- Owner: juampi92
- License: mit
- Created: 2022-06-26T13:51:06.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2025-02-12T15:20:00.000Z (over 1 year ago)
- Last Synced: 2025-04-10T17:24:54.786Z (about 1 year ago)
- Topics: ci-cd, laravel, phecks, php, testing
- Language: PHP
- Homepage: https://juampi92.gitbook.io/phecks/
- Size: 132 KB
- Stars: 4
- Watchers: 2
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
Phecks
---
Phecks (stands for PHP-Checks) is a custom Check Runner. It will run custom checks in your codebase and will make a report of violations that need fixing.
## What is it for?
- For big teams to align on a styleguide beyond linting.
- Used as an extra set of eyes during the Code Review.
- Teams make their own checks according to their architectural decisions and styleguides.
[See what checks are for](https://juanpablo2.gitbook.io/phecks/about-phecks/what-is-a-check).
On its own, Phecks doesn't contain any checks.
You and your team are responsible for defining and implementing these checks based on your architectural decisions.
Phecks will provide you with a structure to develop and run these checks easily.
## Installation
You can install the package via composer:
```bash
composer require juampi92/phecks --dev
```
Read the full installation instructions in the [documentation](https://juanpablo2.gitbook.io/phecks/).
## Usage
Create a Check to make sure your team's architectural decisions are respected:
```php
/**
* @implements Check
*/
class ConsoleClassesMustBeSuffixedWithCommandCheck implements Check
{
public function __construct(
private readonly ClassSource $source,
) {}
/**
* This method will get all the possible matches.
*/
public function getMatches(): MatchCollection
{
return $this->source
->directory('./app/Console')
->run()
->reject(fn (ReflectionClass $class): bool => $class->isAbstract())
->pipe(new WhereExtendsClassFilter(\Illuminate\Console\Command::class));
}
/**
* processMatch will check if the matches are
* actual violations, and format them properly.
*/
public function processMatch($match, FileMatch $file): array
{
if (Str::endsWith($match->getName(), 'Command')) {
return [];
}
return [
ViolationBuilder::make()->message('Command classes must be suffixed with \'Command\''),
];
}
}
```
Add the class in the config `phecks.checks`
And run the following:
```bash
php artisan phecks:run
```

## Testing
```bash
composer test
```
## Credits
- [juampi92](https://github.com/juampi92)
- [All Contributors](../../contributors)
## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.