Skip to content

Commit

Permalink
#65 - purge mode
Browse files Browse the repository at this point in the history
  • Loading branch information
krzysztofrewak committed Dec 7, 2022
1 parent 82d5bc4 commit 6159cae
Show file tree
Hide file tree
Showing 8 changed files with 369 additions and 8 deletions.
12 changes: 11 additions & 1 deletion src/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
use Blumilk\Codestyle\Configuration\Defaults\LaravelPaths;
use Blumilk\Codestyle\Configuration\Paths;
use Blumilk\Codestyle\Configuration\Rules;
use Blumilk\Codestyle\Configuration\Utils\Rule;
use Blumilk\Codestyle\Fixers\DoubleQuoteFixer;
use Blumilk\Codestyle\Fixers\NoCommentFixer;
use Blumilk\Codestyle\Fixers\NoLaravelMigrationsGeneratedCommentFixer;
use JetBrains\PhpStorm\ArrayShape;
use PhpCsFixer\Config as PhpCsFixerConfig;
Expand Down Expand Up @@ -42,8 +44,8 @@ public function config(): PhpCsFixerConfig
}

$finder = Finder::create()->directories()->append($files);

$config = new PhpCsFixerConfig("Blumilk codestyle standard");

return $config->setFinder($finder)
->setUsingCache(false)
->registerCustomFixers(new PhpCsFixerCustomFixers())
Expand All @@ -61,6 +63,13 @@ public function options(): array
];
}

public function purgeMode(): static
{
$this->rules->add(new Rule(NoCommentFixer::class));

return $this;
}

protected function getAllFiles(array &$paths, string $path): void
{
if (is_file($path) || !is_dir($path)) {
Expand All @@ -83,6 +92,7 @@ protected function getCustomFixers(): array
return [
new DoubleQuoteFixer(),
new NoLaravelMigrationsGeneratedCommentFixer(),
new NoCommentFixer(),
];
}
}
2 changes: 0 additions & 2 deletions src/Configuration/Defaults/CommonRules.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
use Blumilk\Codestyle\Fixers\DoubleQuoteFixer;
use Blumilk\Codestyle\Fixers\NoLaravelMigrationsGeneratedCommentFixer;
use PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer;
use PhpCsFixer\Fixer\ArrayNotation\NoTrailingCommaInSinglelineArrayFixer;
use PhpCsFixer\Fixer\ArrayNotation\NoWhitespaceBeforeCommaInArrayFixer;
use PhpCsFixer\Fixer\ArrayNotation\TrimArraySpacesFixer;
use PhpCsFixer\Fixer\ArrayNotation\WhitespaceAfterCommaInArrayFixer;
Expand Down Expand Up @@ -113,7 +112,6 @@ class CommonRules extends Rules
ArrayIndentationFixer::class => true,
TrimArraySpacesFixer::class => true,
WhitespaceAfterCommaInArrayFixer::class => true,
NoTrailingCommaInSinglelineArrayFixer::class => true,
ArraySyntaxFixer::class => ["syntax" => "short"],
PhpUnitMethodCasingFixer::class => true,
FunctionToConstantFixer::class => true,
Expand Down
3 changes: 3 additions & 0 deletions src/Configuration/Utils/Rule.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@

class Rule
{
/**
* @param class-string $fixer
*/
public function __construct(
protected string $fixer,
protected ?array $options = null,
Expand Down
80 changes: 80 additions & 0 deletions src/Fixers/NoCommentFixer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?php

declare(strict_types=1);

namespace Blumilk\Codestyle\Fixers;

use PhpCsFixer\Fixer\FixerInterface;
use PhpCsFixer\Fixer\Whitespace\NoExtraBlankLinesFixer;
use PhpCsFixer\FixerDefinition\CodeSample;
use PhpCsFixer\FixerDefinition\FixerDefinition;
use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
use PhpCsFixer\Tokenizer\Tokens;
use PhpCsFixerCustomFixers\TokenRemover;
use SplFileInfo;

final class NoCommentFixer implements FixerInterface
{
public function getDefinition(): FixerDefinitionInterface
{
$codeSample = <<<'EOF'
<?php
class Migration
{
public function up()
{
Schema::create("sessions", function (Blueprint $table) {
// test
$table->string("id")->primary();
$table->text("payload");
});
}
};
EOF;

return new FixerDefinition(
"There can be no comments.",
[
new CodeSample($codeSample),
],
);
}

public function getName(): string
{
return "Blumilk/no_comments";
}

public function getPriority(): int
{
$fixer = new NoExtraBlankLinesFixer();
return $fixer->getPriority() + 1;
}

public function supports(SplFileInfo $file): bool
{
return true;
}

public function isCandidate(Tokens $tokens): bool
{
return $tokens->isAnyTokenKindsFound([T_COMMENT, T_DOC_COMMENT]);
}

public function isRisky(): bool
{
return true;
}

public function fix(SplFileInfo $file, Tokens $tokens): void
{
for ($index = $tokens->count() - 1; $index > 0; $index--) {
if (!$tokens[$index]->isGivenKind([T_COMMENT])) {
continue;
}

TokenRemover::removeWithLinesIfPossible($tokens, $index);
}
}
}
25 changes: 20 additions & 5 deletions tests/codestyle/CodestyleTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,33 +68,48 @@ public function testPhp81Fixtures(): void
/**
* @throws Exception
*/
protected function runFixer(bool $fix = false): bool
public function testPurgeFixtures(): void
{
$fixtures = [
"noComments",
];

foreach ($fixtures as $fixture) {
$this->testFixture($fixture, purge: true);
}
}

/**
* @throws Exception
*/
protected function runFixer(bool $fix = false, bool $purge = false): bool
{
$dryRun = $fix ? "" : "--dry-run";

$application = new Application();
$application->setAutoExit(false);

$output = new BufferedOutput();
$result = $application->run(new StringInput("fix {$dryRun} --diff --config ./tests/codestyle/config.php"), $output);
$configFileName = !$purge ? "config.php" : "config.purge.php";
$result = $application->run(new StringInput("fix {$dryRun} --diff --config ./tests/codestyle/$configFileName"), $output);

return $result === 0;
}

/**
* @throws Exception
*/
protected function testFixture(string $name): void
protected function testFixture(string $name, bool $purge = false): void
{
copy(__DIR__ . "/fixtures/{$name}/actual.php", __DIR__ . "/tmp/{$name}.php");

$this->assertFalse(
$this->runFixer(),
$this->runFixer(purge: $purge),
"Fixture fixtures/{$name} returned invalid true result.",
);

$this->assertTrue(
$this->runFixer(fix: true),
$this->runFixer(fix: true, purge: $purge),
"Fixture fixtures/{$name} was not proceeded properly.",
);

Expand Down
12 changes: 12 additions & 0 deletions tests/codestyle/config.purge.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

declare(strict_types=1);

use Blumilk\Codestyle\Config;
use Blumilk\Codestyle\Configuration\Defaults\Paths;

$config = new Config(
paths: new Paths("tests/codestyle/tmp"),
);

return $config->purgeMode()->config();
147 changes: 147 additions & 0 deletions tests/codestyle/fixtures/noComments/actual.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
<?php

declare(strict_types=1);

use Illuminate\Support\Str;

return [
/*
|--------------------------------------------------------------------------
| Default Database Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the database connections below you wish
| to use as your default connection for all database work. Of course
| you may use many connections at once using the Database library.
|
*/

"default" => env("DB_CONNECTION", "mysql"),

/*
|--------------------------------------------------------------------------
| Database Connections
|--------------------------------------------------------------------------
|
| Here are each of the database connections setup for your application.
| Of course, examples of configuring each database platform that is
| supported by Laravel is shown below to make development simple.
|
|
| All database work in Laravel is done through the PHP PDO facilities
| so make sure you have the driver for your particular database of
| choice installed on your machine before you begin development.
|
*/

"connections" => [
"sqlite" => [
"driver" => "sqlite",
"url" => env("DATABASE_URL"),
"database" => env("DB_DATABASE", database_path("database.sqlite")),
"prefix" => "",
"foreign_key_constraints" => env("DB_FOREIGN_KEYS", true),
],

"mysql" => [
"driver" => "mysql",
"url" => env("DATABASE_URL"),
"host" => env("DB_HOST", "127.0.0.1"),
"port" => env("DB_PORT", "3306"),
"database" => env("DB_DATABASE", "forge"),
"username" => env("DB_USERNAME", "forge"),
"password" => env("DB_PASSWORD", ""),
"unix_socket" => env("DB_SOCKET", ""),
"charset" => "utf8mb4",
"collation" => "utf8mb4_unicode_ci",
"prefix" => "",
"prefix_indexes" => true,
"strict" => true,
"engine" => null,
"options" => extension_loaded("pdo_mysql") ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env("MYSQL_ATTR_SSL_CA"),
]) : [],
],

"pgsql" => [
"driver" => "pgsql",
"url" => env("DATABASE_URL"),
"host" => env("DB_HOST", "127.0.0.1"),
"port" => env("DB_PORT", "5432"),
"database" => env("DB_DATABASE", "forge"),
"username" => env("DB_USERNAME", "forge"),
"password" => env("DB_PASSWORD", ""),
"charset" => "utf8",
"prefix" => "",
"prefix_indexes" => true,
"search_path" => "public",
"sslmode" => "prefer",
],

"sqlsrv" => [
"driver" => "sqlsrv",
"url" => env("DATABASE_URL"),
"host" => env("DB_HOST", "localhost"),
"port" => env("DB_PORT", "1433"),
"database" => env("DB_DATABASE", "forge"),
"username" => env("DB_USERNAME", "forge"),
"password" => env("DB_PASSWORD", ""),
"charset" => "utf8",
"prefix" => "",
"prefix_indexes" => true,
// 'encrypt' => env('DB_ENCRYPT', 'yes'),
// 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
],
],

/*
|--------------------------------------------------------------------------
| Migration Repository Table
|--------------------------------------------------------------------------
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
| the migrations on disk haven't actually been run in the database.
|
*/

"migrations" => "migrations",

/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer body of commands than a typical key-value system
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/

"redis" => [
"client" => env("REDIS_CLIENT", "phpredis"),

"options" => [
"cluster" => env("REDIS_CLUSTER", "redis"),
"prefix" => env("REDIS_PREFIX", Str::slug(env("APP_NAME", "laravel"), "_") . "_database_"),
],

"default" => [
"url" => env("REDIS_URL"),
"host" => env("REDIS_HOST", "127.0.0.1"),
"username" => env("REDIS_USERNAME"),
"password" => env("REDIS_PASSWORD"),
"port" => env("REDIS_PORT", "6379"),
"database" => env("REDIS_DB", "0"),
],

"cache" => [
"url" => env("REDIS_URL"),
"host" => env("REDIS_HOST", "127.0.0.1"),
"username" => env("REDIS_USERNAME"),
"password" => env("REDIS_PASSWORD"),
"port" => env("REDIS_PORT", "6379"),
"database" => env("REDIS_CACHE_DB", "1"),
],
],
];
Loading

0 comments on commit 6159cae

Please sign in to comment.