[Extension] Support extension command prefix match for dynamic install #16254
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Previously we only match users' input command with a complete command (not including options), so command like
az blueprint -hwill not be matched with an extension command and dynamic install of the extension will not be triggered.This PR adds support for command prefix match so that commands like
az blueprint,az blueprint -hwill also trigger the dynamic install of theblueprintextension. It also handle cases when the command matches the prefix of multiple extensions. It will prompt to let users select an extension to install.This PR also fixes the false positive of misspelled commands by checking extension command match first. Previously, if a candidate of close match to core module command is found, the command is considered to be misspelled. It increased the preformance but have some false positves.
Testing Guide
az blueprint -hand CLI will prompt:{"fake-cmd": "fake-ext"}to some extension in the~/.azure/extensionCommandTree.json(or in yourenv/.azure/extensionCommandTree.json),for instance undervm aem. Then runaz vm aem -h, the output would be:azcopywas considered as a typo forcopywhich is in the main module command. With this PR if you runaz storage azcopy blob delete -c test1 -t a.txt --account-name mydefault, it should prompt you to installstorage-preview.History Notes
[Component Name 1] BREAKING CHANGE: az command a: Make some customer-facing breaking change.
[Component Name 2] az command b: Add some customer-facing feature.
This checklist is used to make sure that common guidelines for a pull request are followed.
The PR title and description has followed the guideline in Submitting Pull Requests.
I adhere to the Command Guidelines.
I adhere to the Error Handling Guidelines.