Skip to content

Commit d35ba13

Browse files
committed
Sorts the preset patterns alphabetically
1 parent added0f commit d35ba13

5 files changed

Lines changed: 72 additions & 148 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p
77

88
## [Unreleased]
99

10+
### Fixed
11+
- The preset glob patterns are sorted alphabetically to improve readability.
12+
1013
## [v5.7.2] - 2026-05-01
1114

1215
### Added

src/Presets/Finder.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public function getPresetGlobByLanguageName(string $name): array
5252
{
5353
$preset = $this->getPresetByLanguageName($name);
5454

55-
return $preset->getPresetGlob();
55+
return $this->sortPresetGlob($preset->getPresetGlob());
5656
}
5757

5858
/**
@@ -81,6 +81,17 @@ public function getPresetByLanguageName(string $name): Preset
8181
*/
8282
public function getDefaultPreset(): array
8383
{
84-
return $this->defaultPreset->getPresetGlob();
84+
return $this->sortPresetGlob($this->defaultPreset->getPresetGlob());
85+
}
86+
87+
/**
88+
* @param array $presetGlob
89+
* @return array
90+
*/
91+
private function sortPresetGlob(array $presetGlob): array
92+
{
93+
\sort($presetGlob, SORT_STRING | SORT_FLAG_CASE);
94+
95+
return $presetGlob;
8596
}
8697
}

tests/Commands/InitCommandTest.php

Lines changed: 8 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use PHPUnit\Framework\Attributes\Test;
1111
use Stolt\LeanPackage\Analyser;
1212
use Stolt\LeanPackage\Commands\InitCommand;
13+
use Stolt\LeanPackage\Exceptions\PresetNotAvailable;
1314
use Stolt\LeanPackage\Presets\Finder;
1415
use Stolt\LeanPackage\Presets\PhpPreset;
1516
use Stolt\LeanPackage\Tests\CommandTester;
@@ -63,6 +64,9 @@ public function printsContentWithoutWritingAFile(): void
6364
$this->assertFileDoesNotExist($this->temporaryDirectory.DIRECTORY_SEPARATOR.'.lpv');
6465
}
6566

67+
/**
68+
* @throws PresetNotAvailable
69+
*/
6670
#[Test]
6771
#[RunInSeparateProcess]
6872
public function createsExpectedDefaultLpvFile(): void
@@ -82,77 +86,10 @@ public function createsExpectedDefaultLpvFile(): void
8286
8387
CONTENT;
8488

85-
$expectedDefaultLpvFileContent = <<<CONTENT
86-
AGENT.md
87-
AGENTS.md
88-
CLAUDE.md
89-
GEMINI.md
90-
AI.md
91-
AIDER.md
92-
CURSOR.md
93-
COPILOT.md
94-
CODEX.md
95-
QWEN.md
96-
WINDSURF.md
97-
.aiassistant
98-
.aider*
99-
.cursor
100-
.cursor/**
101-
.github/copilot-instructions.md
102-
.windsurf
103-
.windsurf/**
104-
.claude
105-
.claude/**
106-
.gemini
107-
.gemini/**
108-
.codex
109-
.codex/**
110-
llms.txt
111-
llms-full.txt
112-
.*
113-
*.txt
114-
*.{md,MD}
115-
*.rst
116-
*.toml
117-
*.xml
118-
*.yml
119-
*.dist.*
120-
.githooks
121-
*.dist
122-
{B,b}uild*
123-
{D,d}ist
124-
{D,d}oc*
125-
{A,a}rt*
126-
{A,a}sset*
127-
{T,t}ool*
128-
{T,t}est*
129-
{S,s}pec*
130-
{E,e}xample*
131-
LICENSE
132-
{M,m}ake
133-
*.{png,gif,jpeg,jpg,webp}
134-
*.lock
135-
phpunit*
136-
appveyor.yml
137-
box.json
138-
composer-dependency-analyser*
139-
collision-detector*
140-
captainhook.json
141-
peck.json
142-
infection*
143-
phpstan*
144-
sonar*
145-
rector*
146-
phpkg.con*
147-
package*
148-
pint.{json,php}
149-
renovate.json
150-
*debugbar.json
151-
phpinsights*
152-
ecs*
153-
RMT
154-
{{M,m}ake,{B,b}ox,{V,v}agrant,{P,p}hulp}file
155-
CONTENT;
89+
$expectedDefaultLpvFileContent = \implode(
90+
PHP_EOL,
91+
(new Finder(new PhpPreset()))->getPresetGlobByLanguageName('PHP')
92+
);
15693

15794
$this->assertSame($expectedDisplay, $commandTester->getDisplay());
15895
$commandTester->assertCommandIsSuccessful();

tests/Commands/RefreshCommandTest.php

Lines changed: 23 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PHPUnit\Framework\Attributes\Test;
88
use Stolt\LeanPackage\Analyser;
99
use Stolt\LeanPackage\Commands\RefreshCommand;
10+
use Stolt\LeanPackage\Exceptions\PresetNotAvailable;
1011
use Stolt\LeanPackage\Presets\Finder;
1112
use Stolt\LeanPackage\Presets\PhpPreset;
1213
use Stolt\LeanPackage\Tests\TestCase;
@@ -35,6 +36,9 @@ protected function tearDown(): void
3536
}
3637
}
3738

39+
/**
40+
* @throws PresetNotAvailable
41+
*/
3842
#[Test]
3943
public function printsMergedContentWithoutWritingAFile(): void
4044
{
@@ -56,84 +60,28 @@ public function printsMergedContentWithoutWritingAFile(): void
5660
'--dry-run' => true,
5761
]);
5862

59-
$this->assertSame(0, $exitCode);
63+
$this->assertSame(Command::SUCCESS, $exitCode);
6064
$this->assertStringContainsString('phpunit*', $tester->getDisplay());
6165
$this->assertFileExists($this->temporaryDirectory . DIRECTORY_SEPARATOR . '.lpv');
6266

63-
$expectedContent = <<<CONTENT
64-
.*
65-
*.txt
66-
*.lock
67-
SOME_FILE
68-
.SOME_DIRECTORY/
69-
AGENT.md
70-
AGENTS.md
71-
CLAUDE.md
72-
GEMINI.md
73-
AI.md
74-
AIDER.md
75-
CURSOR.md
76-
COPILOT.md
77-
CODEX.md
78-
QWEN.md
79-
WINDSURF.md
80-
.aiassistant
81-
.aider*
82-
.cursor
83-
.cursor/**
84-
.github/copilot-instructions.md
85-
.windsurf
86-
.windsurf/**
87-
.claude
88-
.claude/**
89-
.gemini
90-
.gemini/**
91-
.codex
92-
.codex/**
93-
llms.txt
94-
llms-full.txt
95-
*.{md,MD}
96-
*.rst
97-
*.toml
98-
*.xml
99-
*.yml
100-
*.dist.*
101-
.githooks
102-
*.dist
103-
{B,b}uild*
104-
{D,d}ist
105-
{D,d}oc*
106-
{A,a}rt*
107-
{A,a}sset*
108-
{T,t}ool*
109-
{T,t}est*
110-
{S,s}pec*
111-
{E,e}xample*
112-
LICENSE
113-
{M,m}ake
114-
*.{png,gif,jpeg,jpg,webp}
115-
phpunit*
116-
appveyor.yml
117-
box.json
118-
composer-dependency-analyser*
119-
collision-detector*
120-
captainhook.json
121-
peck.json
122-
infection*
123-
phpstan*
124-
sonar*
125-
rector*
126-
phpkg.con*
127-
package*
128-
pint.{json,php}
129-
renovate.json
130-
*debugbar.json
131-
phpinsights*
132-
ecs*
133-
RMT
134-
{{M,m}ake,{B,b}ox,{V,v}agrant,{P,p}hulp}file
135-
136-
CONTENT;
67+
$existingLines = [
68+
'.*',
69+
'*.txt',
70+
'*.lock',
71+
'SOME_FILE',
72+
'.SOME_DIRECTORY/',
73+
];
74+
75+
$presetLines = (new Finder(new PhpPreset()))->getPresetGlobByLanguageName('PHP');
76+
77+
$expectedLines = $existingLines;
78+
foreach ($presetLines as $presetLine) {
79+
if (\in_array($presetLine, $expectedLines, true)) { continue; }
80+
81+
$expectedLines[] = $presetLine;
82+
}
83+
84+
$expectedContent = \implode(PHP_EOL, $expectedLines) . PHP_EOL;
13785

13886
$this->assertSame($expectedContent, $tester->getDisplay());
13987
}

tests/Presets/FinderTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,31 @@ public function findsExpectedPresetGlobByLanguageNames(string $languageName): vo
3737
$this->assertIsArray($presetGlob);
3838
}
3939

40+
#[Test]
41+
#[DataProvider('languageProvider')]
42+
public function findsAlphabeticallySortedPresetGlobByLanguageNames(string $languageName): void
43+
{
44+
$finder = new Finder(new PhpPreset());
45+
46+
$presetGlob = $finder->getPresetGlobByLanguageName($languageName);
47+
$sortedPresetGlob = $presetGlob;
48+
\sort($sortedPresetGlob, SORT_STRING | SORT_FLAG_CASE);
49+
50+
$this->assertSame($sortedPresetGlob, $presetGlob);
51+
}
52+
53+
#[Test]
54+
public function findsAlphabeticallySortedDefaultPresetGlob(): void
55+
{
56+
$finder = new Finder(new PhpPreset());
57+
58+
$presetGlob = $finder->getDefaultPreset();
59+
$sortedPresetGlob = $presetGlob;
60+
\sort($sortedPresetGlob, SORT_STRING | SORT_FLAG_CASE);
61+
62+
$this->assertSame($sortedPresetGlob, $presetGlob);
63+
}
64+
4065
#[Test]
4166
public function forNonAvailableLanguagePresetItThrowsExpectedException(): void
4267
{

0 commit comments

Comments
 (0)