Skip to content

feat: polish repo #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
custom: https://bit.ly/CodelyTvPro
33 changes: 33 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: CI

on:
push:
branches:
- main
pull_request:

jobs:
build:

runs-on: ubuntu-latest

strategy:
matrix:
php-versions: ['8.0', '8.1', '8.2']

name: PHP ${{ matrix.php-versions }}

steps:
- uses: actions/checkout@v4

- name: 🐘 Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
tools: composer:v2

- name: ⬇️ Install dependencies
run: composer install

- name: 🏮 Lint
run: ./vendor/bin/ecs check
60 changes: 60 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<p align="center">
<a href="https://codely.com">
<img src="https://user-images.githubusercontent.com/10558907/170513882-a09eee57-7765-4ca4-b2dd-3c2e061fdad0.png" width="300px" height="92px"/>
</a>
</p>

<h1 align="center">
✍️ Codely's Easy Coding Standards configuration
</h1>

<p align="center">
<a href="https://github.com/CodelyTV"><img src="https://img.shields.io/badge/CodelyTV-OS-green.svg?style=flat-square" alt="Codely Open Source"/></a>
<a href="https://pro.codely.com"><img src="https://img.shields.io/badge/CodelyTV-PRO-black.svg?style=flat-square" alt="CodelyTV Courses"/></a>
</p>

<p align="center">
Opinionated linting configuration considering modern PHP best practices and providing consistency. 👌
<br />
<br />
Take a look, play and have fun with this.
<a href="https://github.com/CodelyTV/php-coding_style-codely/stargazers">Stars are welcome 😊</a>
</p>

## 👀 How to use

1. Install the dependency
```sh
composer require --dev codelytv/coding-style
```
2. Add it to your `ecs.php` file:
```php
use Codelytv\CodingStyle\CodelyRules;
use Symplify\EasyCodingStandard\Config\ECSConfig;

return function (ECSConfig $ecsConfig): void {
$ecsConfig->paths([__DIR__ . '/src',]);

$ecsConfig->sets([CodelyRules::CODING_STYLE]);
};
```
3. Execute it:
```sh
./vendor/bin/ecs check
```

## 🤔 What it does

- Lints PHP using PSR-12
- Extends some config (you can see all the rules [here](src/coding_style.php))
- Use tabs to indent ([reason](https://www.youtube.com/watch?v=yD2T42zsP7c))

## 👌 Codely Code Quality Standards

Publishing this package we are committing ourselves to the following code quality standards:

- 🤝 Respect **Semantic Versioning**: No breaking changes in patch or minor versions
- 🤏 No surprises in transitive dependencies: Use the **bare minimum dependencies** needed to meet the purpose
- 🎯 **One specific purpose** to meet without having to carry a bunch of unnecessary other utilities
- 📖 **Well documented Readme** showing how to install and use
- ⚖️ **License favoring Open Source** and collaboration
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"description": "PHP Coding Style rules we use in Codely",
"type": "library",
"keywords": ["static analysis", "code style"],
"license": "AGPL-3.0-or-later",
"autoload": {
"psr-4": {
"Codelytv\\CodingStyle\\": "src/"
Expand Down
12 changes: 12 additions & 0 deletions ecs.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

declare(strict_types=1);

use Codelytv\CodingStyle\CodelyRules;
use Symplify\EasyCodingStandard\Config\ECSConfig;

return function (ECSConfig $ecsConfig): void {
$ecsConfig->paths([__DIR__ . '/src',]);

$ecsConfig->sets([CodelyRules::CODING_STYLE]);
};
4 changes: 3 additions & 1 deletion src/CodelyRules.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
<?php

declare(strict_types=1);

namespace Codelytv\CodingStyle;

final class CodelyRules
{
public const CODING_STYLE = __DIR__ . '/coding_style.php';
public const CODING_STYLE = __DIR__ . '/coding_style.php';
}
132 changes: 69 additions & 63 deletions src/coding_style.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<?php

declare(strict_types=1);

use PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer;
use PhpCsFixer\Fixer\ArrayNotation\TrimArraySpacesFixer;
use PhpCsFixer\Fixer\Basic\SingleLineEmptyBodyFixer;
Expand Down Expand Up @@ -52,70 +54,74 @@
use Symplify\EasyCodingStandard\Config\ECSConfig;
use Symplify\EasyCodingStandard\ValueObject\Set\SetList;

return static function (ECSConfig $ecsConfig): void {
$ecsConfig->sets([SetList::PSR_12]);

return static function (ECSConfig $ecsConfig) : void {
$ecsConfig->sets([SetList::PSR_12]);
$ecsConfig->rules([
// Imports
NoUnusedImportsFixer::class,
FullyQualifiedStrictTypesFixer::class,
GlobalNamespaceImportFixer::class,
NoLeadingImportSlashFixer::class,
// Arrays
TrimArraySpacesFixer::class,
// Blank lines
BlankLineAfterStrictTypesFixer::class,
NoBlankLinesAfterClassOpeningFixer::class,
// Spacing
SingleLineEmptyBodyFixer::class,
CastSpacesFixer::class,
TypeDeclarationSpacesFixer::class,
TypesSpacesFixer::class,
// Casing
ClassReferenceNameCasingFixer::class,
LowercaseStaticReferenceFixer::class,
MagicMethodCasingFixer::class,
NativeFunctionCasingFixer::class,
NativeFunctionTypeDeclarationCasingFixer::class,
// Architecture
FinalClassFixer::class,
FinalPublicMethodForAbstractClassFixer::class,
ProtectedToPrivateFixer::class,
VisibilityRequiredFixer::class,
DateTimeImmutableFixer::class,
NoUselessElseFixer::class,
// Operator
AssignNullCoalescingToCoalesceEqualFixer::class,
NoUselessConcatOperatorFixer::class,
NoUselessNullsafeOperatorFixer::class,
ObjectOperatorWithoutWhitespaceFixer::class,
TernaryToElvisOperatorFixer::class,
TernaryToNullCoalescingFixer::class,
// Testing
PhpUnitConstructFixer::class,
PhpUnitDedicateAssertFixer::class,
PhpUnitDedicateAssertInternalTypeFixer::class,
PhpUnitExpectationFixer::class,
// Other
LineLengthFixer::class,
NoNullPropertyInitializationFixer::class,
NoUnneededFinalMethodFixer::class,
SelfAccessorFixer::class,
SelfStaticAccessorFixer::class,
NoUnneededControlParenthesesFixer::class,
NoUnneededCurlyBracesFixer::class,
SimplifiedIfReturnFixer::class,
TrailingCommaInMultilineFixer::class,
DeclareStrictTypesFixer::class,
StrictComparisonFixer::class,
SingleQuoteFixer::class,
StatementIndentationFixer::class,
]);

$ecsConfig->rules([
// Imports
NoUnusedImportsFixer::class,
FullyQualifiedStrictTypesFixer::class,
GlobalNamespaceImportFixer::class,
NoLeadingImportSlashFixer::class,
// Arrays
TrimArraySpacesFixer::class,
// Blank lines
BlankLineAfterStrictTypesFixer::class,
NoBlankLinesAfterClassOpeningFixer::class,
// Spacing
SingleLineEmptyBodyFixer::class,
CastSpacesFixer::class,
TypeDeclarationSpacesFixer::class,
TypesSpacesFixer::class,
// Casing
ClassReferenceNameCasingFixer::class,
LowercaseStaticReferenceFixer::class,
MagicMethodCasingFixer::class,
NativeFunctionCasingFixer::class,
NativeFunctionTypeDeclarationCasingFixer::class,
// Architecture
FinalClassFixer::class,
FinalPublicMethodForAbstractClassFixer::class,
ProtectedToPrivateFixer::class,
VisibilityRequiredFixer::class,
DateTimeImmutableFixer::class,
NoUselessElseFixer::class,
// Operator
AssignNullCoalescingToCoalesceEqualFixer::class,
NoUselessConcatOperatorFixer::class,
NoUselessNullsafeOperatorFixer::class,
ObjectOperatorWithoutWhitespaceFixer::class,
TernaryToElvisOperatorFixer::class,
TernaryToNullCoalescingFixer::class,
// Testing
PhpUnitConstructFixer::class,
PhpUnitDedicateAssertFixer::class,
PhpUnitDedicateAssertInternalTypeFixer::class,
PhpUnitExpectationFixer::class,
// Other
LineLengthFixer::class,
NoNullPropertyInitializationFixer::class,
NoUnneededFinalMethodFixer::class,
SelfAccessorFixer::class,
SelfStaticAccessorFixer::class,
NoUnneededControlParenthesesFixer::class,
NoUnneededCurlyBracesFixer::class,
SimplifiedIfReturnFixer::class,
TrailingCommaInMultilineFixer::class,
DeclareStrictTypesFixer::class,
StrictComparisonFixer::class,
SingleQuoteFixer::class,
StatementIndentationFixer::class,
]);
$ecsConfig->ruleWithConfiguration(ArraySyntaxFixer::class, ['syntax' => 'short']);
$ecsConfig->ruleWithConfiguration(LineLengthFixer::class, [LineLengthFixer::LINE_LENGTH => 120]);
$ecsConfig->ruleWithConfiguration(
YodaStyleFixer::class,
['equal' => false, 'identical' => false, 'less_and_greater' => false]
);
$ecsConfig->ruleWithConfiguration(PhpUnitMethodCasingFixer::class, ['case' => PhpUnitMethodCasingFixer::SNAKE_CASE]);
$ecsConfig->ruleWithConfiguration(OrderedTypesFixer::class, ['null_adjustment' => 'always_last']);

$ecsConfig->ruleWithConfiguration(ArraySyntaxFixer::class, ['syntax' => 'short']);
$ecsConfig->ruleWithConfiguration(LineLengthFixer::class, [LineLengthFixer::LINE_LENGTH => 120]);
$ecsConfig->ruleWithConfiguration(YodaStyleFixer::class, ['equal' => false, 'identical' => false, 'less_and_greater' => false]);
$ecsConfig->ruleWithConfiguration(PhpUnitMethodCasingFixer::class, ['case' => PhpUnitMethodCasingFixer::SNAKE_CASE]);
$ecsConfig->ruleWithConfiguration(OrderedTypesFixer::class, ['null_adjustment' => 'always_last']);
$ecsConfig->indentation('tab');
};