Skip to content

Commit 79c8ec3

Browse files
committed
fix: correct spelling of CodeEnvironments in InstallCommand and update related methods; add CodeEnvironmentsDetector class with detection logic and tests
1 parent 62c79f1 commit 79c8ec3

File tree

4 files changed

+48
-64
lines changed

4 files changed

+48
-64
lines changed

src/Console/InstallCommand.php

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
use Illuminate\Support\Facades\Artisan;
1111
use Illuminate\Support\Str;
1212
use Laravel\Boost\Install\Cli\DisplayHelper;
13-
use Laravel\Boost\Install\CodeEnvironementsDetector;
13+
use Laravel\Boost\Install\CodeEnvironmentsDetector;
1414
use Laravel\Boost\Install\GuidelineComposer;
1515
use Laravel\Boost\Install\GuidelineConfig;
1616
use Laravel\Boost\Install\GuidelineWriter;
@@ -32,7 +32,7 @@ class InstallCommand extends Command
3232
{
3333
use Colors;
3434

35-
private CodeEnvironementsDetector $codeEnvironmentsDetector;
35+
private CodeEnvironmentsDetector $codeEnvironmentsDetector;
3636

3737
private Herd $herd;
3838

@@ -53,7 +53,7 @@ class InstallCommand extends Command
5353
private string $projectPurpose = '';
5454

5555
/** @var array<non-empty-string> */
56-
private array $systemInstalledCodeEnvironemnts = [];
56+
private array $systemInstalledCodeEnvironments = [];
5757

5858
private array $projectInstalledCodeEnvironments = [];
5959

@@ -67,7 +67,7 @@ class InstallCommand extends Command
6767

6868
private string $redCross;
6969

70-
public function handle(CodeEnvironementsDetector $codeEnvironmentsDetector, Herd $herd, Roster $roster, Terminal $terminal): void
70+
public function handle(CodeEnvironmentsDetector $codeEnvironmentsDetector, Herd $herd, Roster $roster, Terminal $terminal): void
7171
{
7272
$this->bootstrapBoost($codeEnvironmentsDetector, $herd, $roster, $terminal);
7373

@@ -78,7 +78,7 @@ public function handle(CodeEnvironementsDetector $codeEnvironmentsDetector, Herd
7878
$this->outro();
7979
}
8080

81-
private function bootstrapBoost(CodeEnvironementsDetector $codeEnvironmentsDetector, Herd $herd, Roster $roster, Terminal $terminal): void
81+
private function bootstrapBoost(CodeEnvironmentsDetector $codeEnvironmentsDetector, Herd $herd, Roster $roster, Terminal $terminal): void
8282
{
8383
$this->codeEnvironmentsDetector = $codeEnvironmentsDetector;
8484
$this->herd = $herd;
@@ -114,9 +114,10 @@ private function boostLogo(): string
114114

115115
private function discoverEnvironment(): void
116116
{
117-
$this->systemInstalledCodeEnvironemnts = $this->discoverSystemInstalledCodeEnvironments();
118-
$this->projectInstalledCodeEnvironments = $this->discoverProjectInstalledCodeEnvironemnts();
119-
$this->projectInstalledAgents = $this->discoverProjectAgents();
117+
118+
$this->systemInstalledCodeEnvironments = $this->codeEnvironmentsDetector->discoverSystemInstalledCodeEnvironments();
119+
$this->projectInstalledCodeEnvironments = $this->codeEnvironmentsDetector->discoverProjectInstalledCodeEnvironments(base_path());
120+
$this->projectInstalledAgents = $this->codeEnvironmentsDetector->discoverProjectInstalledCodeEnvironments(base_path());
120121
}
121122

122123
private function query()
@@ -145,23 +146,6 @@ private function enact(): void
145146
}
146147
}
147148

148-
/**
149-
* Which IDEs are installed on this developer's machine?
150-
*/
151-
private function discoverSystemInstalledCodeEnvironments(): array
152-
{
153-
return $this->codeEnvironmentsDetector->discoverSystemInstalledCodeEnvironements();
154-
}
155-
156-
/**
157-
* Specifically want to detect what's in use in _this_ project.
158-
* Just because they have claude code installed doesn't mean they're using it.
159-
*/
160-
private function discoverProjectInstalledCodeEnvironemnts(): array
161-
{
162-
return $this->codeEnvironmentsDetector->discoverProjectInstalledCodeEnvironements(base_path());
163-
}
164-
165149
private function discoverTools(): array
166150
{
167151
$tools = [];
@@ -303,7 +287,7 @@ protected function boostToolsToDisable(): array
303287
private function discoverProjectAgents(): array
304288
{
305289
$agents = [];
306-
$projectAgents = $this->codeEnvironmentsDetector->discoverProjectInstalledCodeEnvironements(base_path());
290+
$projectAgents = $this->codeEnvironmentsDetector->discoverProjectInstalledCodeEnvironments(base_path());
307291

308292
// Map IDE detections to their corresponding agents
309293
$ideToAgentMap = [
@@ -321,7 +305,7 @@ private function discoverProjectAgents(): array
321305
}
322306

323307
// Also check installed IDEs that might not have project files yet
324-
foreach ($this->systemInstalledCodeEnvironemnts as $ide) {
308+
foreach ($this->systemInstalledCodeEnvironments as $ide) {
325309
if (isset($ideToAgentMap[$ide]) && ! in_array($ideToAgentMap[$ide], $agents)) {
326310
$agents[] = $ideToAgentMap[$ide];
327311
}
@@ -417,7 +401,7 @@ private function agentsToInstallTo(): Collection
417401

418402
// Filter agents to only show those that are installed (for Windsurf)
419403
$filteredAgents = $agents;
420-
if (! in_array('windsurf', $this->systemInstalledCodeEnvironemnts) && ! in_array('windsurf', $this->projectInstalledAgents)) {
404+
if (! in_array('windsurf', $this->systemInstalledCodeEnvironments) && ! in_array('windsurf', $this->projectInstalledAgents)) {
421405
unset($filteredAgents['Laravel\\Boost\\Install\\Agents\\Windsurf']);
422406
}
423407

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
use Laravel\Boost\Install\CodeEnvironment\Zed;
1717
use Laravel\Boost\Install\Enums\Platform;
1818

19-
class CodeEnvironementsDetector
19+
class CodeEnvironmentsDetector
2020
{
2121
/** @var array<string, class-string<CodeEnvironment>> */
2222
private array $programs = [
@@ -39,7 +39,7 @@ public function __construct(
3939
*
4040
* @return array<string>
4141
*/
42-
public function discoverSystemInstalledCodeEnvironements(): array
42+
public function discoverSystemInstalledCodeEnvironments(): array
4343
{
4444
$platform = Platform::current();
4545

@@ -55,7 +55,7 @@ public function discoverSystemInstalledCodeEnvironements(): array
5555
*
5656
* @return array<string>
5757
*/
58-
public function discoverProjectInstalledCodeEnvironements(string $basePath): array
58+
public function discoverProjectInstalledCodeEnvironments(string $basePath): array
5959
{
6060
return $this->getAllPrograms()
6161
->filter(fn ($program) => $program->detectInProject($basePath))

src/Install/Contracts/DetectionStrategy.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ interface DetectionStrategy
1111
/**
1212
* Detect if the application is installed on the machine.
1313
*
14-
* @param array $config
14+
* @param array{command:string, ?files:array<string>, ?paths:array<string>} $config
1515
* @param ?Platform $platform
1616
* @return bool
1717
*/

tests/Unit/Install/CodeEnvironmentDetectorTest.php renamed to tests/Unit/Install/CodeEnvironmentsDetectorTest.php

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22

33
declare(strict_types=1);
44

5-
use Laravel\Boost\Install\CodeEnvironementsDetector;
65
use Laravel\Boost\Install\CodeEnvironment\CodeEnvironment;
6+
use Laravel\Boost\Install\CodeEnvironmentsDetector;
77
use Laravel\Boost\Install\Enums\Platform;
88

99
beforeEach(function () {
1010
$this->container = new \Illuminate\Container\Container();
11-
$this->detector = new CodeEnvironementsDetector($this->container);
11+
$this->detector = new CodeEnvironmentsDetector($this->container);
1212
});
1313

1414
afterEach(function () {
1515
Mockery::close();
1616
});
1717

18-
test('discoverSystemInstalledCodeEnvironements returns detected programs', function () {
18+
test('discoverSystemInstalledCodeEnvironments returns detected programs', function () {
1919
// Create mock programs
2020
$program1 = Mockery::mock(CodeEnvironment::class);
2121
$program1->shouldReceive('detectOnSystem')->with(Mockery::type(Platform::class))->andReturn(true);
@@ -44,13 +44,13 @@
4444
$container->bind(\Laravel\Boost\Install\CodeEnvironment\Zed::class, fn () => $otherProgram);
4545
$container->bind(\Laravel\Boost\Install\CodeEnvironment\Copilot::class, fn () => $otherProgram);
4646

47-
$detector = new CodeEnvironementsDetector($container);
48-
$detected = $detector->discoverSystemInstalledCodeEnvironements();
47+
$detector = new CodeEnvironmentsDetector($container);
48+
$detected = $detector->discoverSystemInstalledCodeEnvironments();
4949

5050
expect($detected)->toBe(['phpstorm', 'cursor']);
5151
});
5252

53-
test('discoverSystemInstalledCodeEnvironements returns empty array when no programs detected', function () {
53+
test('discoverSystemInstalledCodeEnvironments returns empty array when no programs detected', function () {
5454
$program1 = Mockery::mock(CodeEnvironment::class);
5555
$program1->shouldReceive('detectOnSystem')->with(Mockery::type(Platform::class))->andReturn(false);
5656
$program1->shouldReceive('name')->andReturn('phpstorm');
@@ -70,13 +70,13 @@
7070
$container->bind(\Laravel\Boost\Install\CodeEnvironment\Zed::class, fn () => $otherProgram);
7171
$container->bind(\Laravel\Boost\Install\CodeEnvironment\Copilot::class, fn () => $otherProgram);
7272

73-
$detector = new CodeEnvironementsDetector($container);
74-
$detected = $detector->discoverSystemInstalledCodeEnvironements();
73+
$detector = new CodeEnvironmentsDetector($container);
74+
$detected = $detector->discoverSystemInstalledCodeEnvironments();
7575

7676
expect($detected)->toBeEmpty();
7777
});
7878

79-
test('discoverProjectInstalledCodeEnvironements detects programs in project', function () {
79+
test('discoverProjectInstalledCodeEnvironments detects programs in project', function () {
8080
$basePath = '/path/to/project';
8181

8282
$program1 = Mockery::mock(CodeEnvironment::class);
@@ -97,13 +97,13 @@
9797
$container->bind(\Laravel\Boost\Install\CodeEnvironment\PhpStorm::class, fn () => $program2);
9898
$container->bind(\Laravel\Boost\Install\CodeEnvironment\ClaudeCode::class, fn () => $program3);
9999

100-
$detector = new CodeEnvironementsDetector($container);
101-
$detected = $detector->discoverProjectInstalledCodeEnvironements($basePath);
100+
$detector = new CodeEnvironmentsDetector($container);
101+
$detected = $detector->discoverProjectInstalledCodeEnvironments($basePath);
102102

103103
expect($detected)->toBe(['vscode', 'claudecode']);
104104
});
105105

106-
test('discoverProjectInstalledCodeEnvironements returns empty array when no programs detected in project', function () {
106+
test('discoverProjectInstalledCodeEnvironments returns empty array when no programs detected in project', function () {
107107
$basePath = '/path/to/project';
108108

109109
$program1 = Mockery::mock(CodeEnvironment::class);
@@ -114,18 +114,18 @@
114114
$container = new \Illuminate\Container\Container();
115115
$container->bind(\Laravel\Boost\Install\CodeEnvironment\VSCode::class, fn () => $program1);
116116

117-
$detector = new CodeEnvironementsDetector($container);
118-
$detected = $detector->discoverProjectInstalledCodeEnvironements($basePath);
117+
$detector = new CodeEnvironmentsDetector($container);
118+
$detected = $detector->discoverProjectInstalledCodeEnvironments($basePath);
119119

120120
expect($detected)->toBeEmpty();
121121
});
122122

123-
test('discoverProjectInstalledCodeEnvironements detects applications by directory', function () {
123+
test('discoverProjectInstalledCodeEnvironments detects applications by directory', function () {
124124
$tempDir = sys_get_temp_dir().'/boost_test_'.uniqid();
125125
mkdir($tempDir);
126126
mkdir($tempDir.'/.vscode');
127127

128-
$detected = $this->detector->discoverProjectInstalledCodeEnvironements($tempDir);
128+
$detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir);
129129

130130
expect($detected)->toContain('vscode');
131131

@@ -134,12 +134,12 @@
134134
rmdir($tempDir);
135135
});
136136

137-
test('discoverProjectInstalledCodeEnvironements detects applications by file', function () {
137+
test('discoverProjectInstalledCodeEnvironments detects applications by file', function () {
138138
$tempDir = sys_get_temp_dir().'/boost_test_'.uniqid();
139139
mkdir($tempDir);
140140
file_put_contents($tempDir.'/.windsurfrules.md', 'test');
141141

142-
$detected = $this->detector->discoverProjectInstalledCodeEnvironements($tempDir);
142+
$detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir);
143143

144144
expect($detected)->toContain('windsurf');
145145

@@ -148,12 +148,12 @@
148148
rmdir($tempDir);
149149
});
150150

151-
test('discoverProjectInstalledCodeEnvironements detects applications with mixed type', function () {
151+
test('discoverProjectInstalledCodeEnvironments detects applications with mixed type', function () {
152152
$tempDir = sys_get_temp_dir().'/boost_test_'.uniqid();
153153
mkdir($tempDir);
154154
file_put_contents($tempDir.'/CLAUDE.md', 'test');
155155

156-
$detected = $this->detector->discoverProjectInstalledCodeEnvironements($tempDir);
156+
$detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir);
157157

158158
expect($detected)->toContain('claudecode');
159159

@@ -162,13 +162,13 @@
162162
rmdir($tempDir);
163163
});
164164

165-
test('discoverProjectInstalledCodeEnvironements detects copilot with nested file path', function () {
165+
test('discoverProjectInstalledCodeEnvironments detects copilot with nested file path', function () {
166166
$tempDir = sys_get_temp_dir().'/boost_test_'.uniqid();
167167
mkdir($tempDir);
168168
mkdir($tempDir.'/.github');
169169
file_put_contents($tempDir.'/.github/copilot-instructions.md', 'test');
170170

171-
$detected = $this->detector->discoverProjectInstalledCodeEnvironements($tempDir);
171+
$detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir);
172172

173173
expect($detected)->toContain('copilot');
174174

@@ -178,12 +178,12 @@
178178
rmdir($tempDir);
179179
});
180180

181-
test('discoverProjectInstalledCodeEnvironements detects claude code with directory', function () {
181+
test('discoverProjectInstalledCodeEnvironments detects claude code with directory', function () {
182182
$tempDir = sys_get_temp_dir().'/boost_test_'.uniqid();
183183
mkdir($tempDir);
184184
mkdir($tempDir.'/.claude');
185185

186-
$detected = $this->detector->discoverProjectInstalledCodeEnvironements($tempDir);
186+
$detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir);
187187

188188
expect($detected)->toContain('claudecode');
189189

@@ -192,12 +192,12 @@
192192
rmdir($tempDir);
193193
});
194194

195-
test('discoverProjectInstalledCodeEnvironements detects phpstorm with idea directory', function () {
195+
test('discoverProjectInstalledCodeEnvironments detects phpstorm with idea directory', function () {
196196
$tempDir = sys_get_temp_dir().'/boost_test_'.uniqid();
197197
mkdir($tempDir);
198198
mkdir($tempDir.'/.idea');
199199

200-
$detected = $this->detector->discoverProjectInstalledCodeEnvironements($tempDir);
200+
$detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir);
201201

202202
expect($detected)->toContain('phpstorm');
203203

@@ -206,12 +206,12 @@
206206
rmdir($tempDir);
207207
});
208208

209-
test('discoverProjectInstalledCodeEnvironements detects phpstorm with junie directory', function () {
209+
test('discoverProjectInstalledCodeEnvironments detects phpstorm with junie directory', function () {
210210
$tempDir = sys_get_temp_dir().'/boost_test_'.uniqid();
211211
mkdir($tempDir);
212212
mkdir($tempDir.'/.junie');
213213

214-
$detected = $this->detector->discoverProjectInstalledCodeEnvironements($tempDir);
214+
$detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir);
215215

216216
expect($detected)->toContain('phpstorm');
217217

@@ -220,12 +220,12 @@
220220
rmdir($tempDir);
221221
});
222222

223-
test('discoverProjectInstalledCodeEnvironements detects cursor with cursor directory', function () {
223+
test('discoverProjectInstalledCodeEnvironments detects cursor with cursor directory', function () {
224224
$tempDir = sys_get_temp_dir().'/boost_test_'.uniqid();
225225
mkdir($tempDir);
226226
mkdir($tempDir.'/.cursor');
227227

228-
$detected = $this->detector->discoverProjectInstalledCodeEnvironements($tempDir);
228+
$detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir);
229229

230230
expect($detected)->toContain('cursor');
231231

@@ -234,14 +234,14 @@
234234
rmdir($tempDir);
235235
});
236236

237-
test('discoverProjectInstalledCodeEnvironements handles multiple detections', function () {
237+
test('discoverProjectInstalledCodeEnvironments handles multiple detections', function () {
238238
$tempDir = sys_get_temp_dir().'/boost_test_'.uniqid();
239239
mkdir($tempDir);
240240
mkdir($tempDir.'/.vscode');
241241
mkdir($tempDir.'/.cursor');
242242
file_put_contents($tempDir.'/CLAUDE.md', 'test');
243243

244-
$detected = $this->detector->discoverProjectInstalledCodeEnvironements($tempDir);
244+
$detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir);
245245

246246
expect($detected)->toContain('vscode');
247247
expect($detected)->toContain('cursor');

0 commit comments

Comments
 (0)