Commit 89b6f78
Recommend the VS Code extension in aspire doctor (#18624)
* Add doctor check recommending the VS Code extension
`aspire doctor` now detects when VS Code is present but the Aspire VS Code
extension (microsoft-aspire.aspire-vscode) is not installed, and surfaces a
warning recommending installation under a new "Development tools" category.
- Add VsCodeExtensionCheck that reuses existing VS Code presence signals
(TERM_PROGRAM + code/code-insiders on PATH) and scans the extension
directories for the installed extension folder.
- Add "devtools" category with rendering/order wiring and resource strings.
- Expose vsCodeInstalled/extensionInstalled/extensionId in JSON metadata.
- Add unit tests and update cli-output-formats spec.
Fixes #18300
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Address PR review: ignore inaccessible extension dirs and add default-home test
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Address code-review findings for VS Code extension doctor check
- Inject command resolver into Detect so the PATH-based VS Code detection fallback is deterministically testable.
- Make VSCODE_EXTENSIONS override exclusive (yield break) to avoid a false 'installed' result from default roots.
- Reset EnumerationOptions.AttributesToSkip to None so extension folders with unexpected attributes are not skipped.
- Require a digit after the '<id>-' prefix so a different extension whose id starts with ours is not matched.
- Fix doctor JSON sample warnings count (1 -> 2) in cli-output-formats.md.
- Add tests: per-root detection, override exclusivity, PATH-fallback, not-installed, prefix-boundary, and extensionId metadata assertion.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Refactor VsCodeExtensionCheck to sibling commandResolver DI pattern
Replace the Func<VsCodeExtensionDetection> factory testing seam with the
commandResolver-injection convention used by the sibling environment checks
(e.g. TypeScriptAppHostToolingCheck). Real dependencies are now stored as
fields and the CheckAsync tests flow through the real detection wiring instead
of injecting canned detection results. Also extract IsVersionedExtensionFolder
as a named predicate.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Add test for non-existent extensions directory resilience
Covers the DirectoryContainsExtension Directory.Exists guard: when
VSCODE_EXTENSIONS points at a path that does not exist, detection must report
the extension missing without throwing.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Address PR review: aka.ms link, two return paths, TemporaryWorkspace, whitespace
- Switch MarketplaceUrl to https://aka.ms/aspire/vscode-extension redirect (and docs spec)
- Refactor CheckAsync into distinct pass/warning return paths
- Use shared TemporaryWorkspace helper in tests instead of a private temp-dir class
- Strip trailing whitespace on added Designer.cs separator lines
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Title-case Development Tools category header for consistency
Match the title-cased sibling category headers (.NET SDK, Container Runtime, Environment). Regenerated xlf files via UpdateXlf.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>1 parent 74130cb commit 89b6f78
21 files changed
Lines changed: 827 additions & 1 deletion
File tree
- docs/specs
- src/Aspire.Cli
- Commands
- Resources
- xlf
- Utils/EnvironmentChecker
- tests/Aspire.Cli.Tests/Commands
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
451 | 451 | | |
452 | 452 | | |
453 | 453 | | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
454 | 467 | | |
455 | 468 | | |
456 | 469 | | |
457 | 470 | | |
458 | | - | |
| 471 | + | |
459 | 472 | | |
460 | 473 | | |
461 | 474 | | |
462 | 475 | | |
463 | 476 | | |
464 | 477 | | |
465 | 478 | | |
| 479 | + | |
| 480 | + | |
466 | 481 | | |
467 | 482 | | |
468 | 483 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
228 | 228 | | |
229 | 229 | | |
230 | 230 | | |
| 231 | + | |
231 | 232 | | |
232 | 233 | | |
233 | 234 | | |
| |||
241 | 242 | | |
242 | 243 | | |
243 | 244 | | |
| 245 | + | |
244 | 246 | | |
245 | 247 | | |
246 | 248 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
592 | 592 | | |
593 | 593 | | |
594 | 594 | | |
| 595 | + | |
595 | 596 | | |
596 | 597 | | |
597 | 598 | | |
| |||
Lines changed: 36 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
82 | 82 | | |
83 | 83 | | |
84 | 84 | | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
85 | 97 | | |
86 | 98 | | |
87 | 99 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
0 commit comments