-
Notifications
You must be signed in to change notification settings - Fork 7.6k
Adding IArgumentCompleterFactory for parameterized ArgumentCompleters #12605
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adding IArgumentCompleterFactory for parameterized ArgumentCompleters #12605
Conversation
src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs
Outdated
Show resolved
Hide resolved
src/System.Management.Automation/engine/CommandCompletion/ExtensibleCompletion.cs
Outdated
Show resolved
Hide resolved
src/System.Management.Automation/engine/CommandCompletion/ExtensibleCompletion.cs
Outdated
Show resolved
Hide resolved
src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs
Show resolved
Hide resolved
The CI errors seem unrelated to my commits |
src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs
Show resolved
Hide resolved
src/System.Management.Automation/engine/CommandCompletion/ExtensibleCompletion.cs
Outdated
Show resolved
Hide resolved
src/System.Management.Automation/engine/CommandCompletion/ExtensibleCompletion.cs
Outdated
Show resolved
Hide resolved
Yet again an unrelated CI failure |
Add PowerShell Committee to approve new public API. |
Do you think about IArgumentCompleter vs IArgumentCompleterFactory? |
src/System.Management.Automation/engine/CommandCompletion/ExtensibleCompletion.cs
Outdated
Show resolved
Hide resolved
@PowerShell/powershell-committee discussed this and we all think it's super interesting, and, at least in our initial look, a well thought out feature. However, given it's scope, it'd be really nice to see an RFC (or even an issue) where the problem statement and any alternative solutions are discussed and other contributors have a chance to give feedback on the proposal. @JamesWTruher also suggested that it might be useful to see a real-world example of how this could be used to refactor PowerShell built-in completers, or to make them more intelligent. E.g. |
Convert to Draft until RFC or issue discussion is finished. |
I like the idea, very interesting, allowing people to have reusable argument completer attributes. About the implementation, why not have an abstract attribute class that defines an abstract method which returns an [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
public abstract class ReusableArgumentCompletionAttribute : Attribute
{
protected ReusableArgumentCompletionAttribute() {}
public abstract IArgumentCompleter NewArgumentCompleter(/* EngineIntrinsics engineIntrinsics ?? */);
} This seems more succinct than |
a307843
to
792209e
Compare
The @PowerShell/powershell-committee discussed this. In general, we all agree this capability would be useful so thanks for that! However, we're trying to update our RFC process to make it lighter-weight and would like to try it out with this feature if you're ok with this. Basically, we'd like to have an issue opened that describes the problem to be solved and/or value to the user and also some example code showing its use (which you have in this PR description already) and expected results. Based on the amount and quality of discussion, it will help inform if an RFC is needed. |
@SteveL-MSFT in case y'all missed it. 🙂 |
@vexx32 yes, we missed that. Thanks! I linked it to this PR. |
This pull request has been automatically marked as Review Needed because it has been there has not been any activity for 7 days. |
This pull request has been automatically marked as Review Needed because it has been there has not been any activity for 7 days. |
Open PRs should not be assigned to milestone, so they are not assigned to the wrong milestone after they are merged. For backport consideration, use a |
@SteveL-MSFT This PR is in a |
@adityapatwardhan It's been 8 months since you last touched this. Can you act on it or maybe reassign it if you don't have the bandwidth to process it? |
@iSazonov I'm suspecting that this is in limbo as there is 1 change requested, but it is requested on a commit that isn't available anymore, and hence cannot be fixed. The requested change is already in a different, force-pushed commit. What do you think is the right way to move this forward? This is actually a very nice feature to have, that opens up new possibilities, both for the team and for regular users, and it's a shame that it's just stuck here. |
Sorry for the delay. I have reviewed this and looks good. Since it has been a while since we ran the CI tests for this PR. I am restarting all the tests. I will merge as soon as the tests pass. |
Closing and re-opening to re-trigger all CI tests |
@PoshChan please remind me in 1 hour |
@adityapatwardhan, this is the reminder you requested 1 hour ago |
@powercode Thank you for your contribution and patience! |
@powercode Please open new documentation issue. /cc @sdwheeler |
@powercode @iSazonov The scripting example can be added to the docs. The C# usage needs to be added in ///-comments in the source code. Please open the appropriate |
🎉 Handy links: |
[7.2.0-preview.5] - 2021-04-14 * Breaking Changes - Make PowerShell Linux deb and RPM packages universal (#15109) - Enforce AppLocker Deny configuration before Execution Policy Bypass configuration (#15035) - Disallow mixed dash and slash in command line parameter prefix (#15142) (Thanks @davidBar-On!) * Experimental Features - `PSNativeCommandArgumentPassing`: Use `ArgumentList` for native executable invocation (breaking change) (#14692) * Engine Updates and Fixes - Add `IArgumentCompleterFactory` for parameterized `ArgumentCompleters` (#12605) (Thanks @powercode!) * General Cmdlet Updates and Fixes - Fix SSH remoting connection never finishing with misconfigured endpoint (#15175) - Respect `TERM` and `NO_COLOR` environment variables for `$PSStyle` rendering (#14969) - Use `ProgressView.Classic` when Virtual Terminal is not supported (#15048) - Fix `Get-Counter` issue with `-Computer` parameter (#15166) (Thanks @krishnayalavarthi!) - Fix redundant iteration while splitting lines (#14851) (Thanks @hez2010!) - Enhance `Remove-Item -Recurse` to work with OneDrive (#14902) (Thanks @iSazonov!) - Change minimum depth to 0 for `ConvertTo-Json` (#14830) (Thanks @kvprasoon!) - Allow `Set-Clipboard` to accept empty string (#14579) - Turn on and off `DECCKM` to modify keyboard mode for Unix native commands to work correctly (#14943) - Fall back to `CopyAndDelete()` when `MoveTo()` fails due to an `IOException` (#15077) * Code Cleanup <details> <summary> <p>We thank the following contributors!</p> <p>@xtqqczze, @iSazonov, @ZhiZe-ZG</p> </summary> <ul> <li>Update .NET to <code>6.0.0-preview.3</code> (#15221)</li> <li>Add space before comma to hosting test to fix error reported by <code>SA1001</code> (#15224)</li> <li>Add <code>SecureStringHelper.FromPlainTextString</code> helper method for efficient secure string creation (#14124) (Thanks @xtqqczze!)</li> <li>Use static lambda keyword (#15154) (Thanks @iSazonov!)</li> <li>Remo D8DD ve unnecessary <code>Array</code> -> <code>List</code> -> <code>Array</code> conversion in <code>ProcessBaseCommand.AllProcesses</code> (#15052) (Thanks @xtqqczze!)</li> <li>Standardize grammar comments in Parser.cs (#15114) (Thanks @ZhiZe-ZG!)</li> <li>Enable <code>SA1001</code>: Commas should be spaced correctly (#14171) (Thanks @xtqqczze!)</li> <li>Refactor <code>MultipleServiceCommandBase.AllServices</code> (#15053) (Thanks @xtqqczze!)</li> </ul> </details> * Tools - Use Unix line endings for shell scripts (#15180) (Thanks @xtqqczze!) * Tests - Add the missing tag in Host Utilities tests (#14983) - Update `copy-props` version in `package.json` (#15124) * Build and Packaging Improvements <details> <summary> <p>We thank the following contributors!</p> <p>@JustinGrote</p> </summary> <ul> <li>Fix <code>yarn-lock</code> for <code>copy-props</code> (#15225)</li> <li>Make package validation regex accept universal Linux packages (#15226)</li> <li>Bump NJsonSchema from 10.4.0 to 10.4.1 (#15190)</li> <li>Make MSI and EXE signing always copy to fix daily build (#15191)</li> <li>Sign internals of EXE package so that it works correctly when signed (#15132)</li> <li>Bump Microsoft.NET.Test.Sdk from 16.9.1 to 16.9.4 (#15141)</li> <li>Update daily release tag format to work with new Microsoft Update work (#15164)</li> <li>Feature: Add Ubuntu 20.04 Support to install-powershell.sh (#15095) (Thanks @JustinGrote!)</li> <li>Treat rebuild branches like release branches (#15099)</li> <li>Update WiX to 3.11.2 (#15097)</li> <li>Bump NJsonSchema from 10.3.11 to 10.4.0 (#15092)</li> <li>Allow patching of preview releases (#15074)</li> <li>Bump Newtonsoft.Json from 12.0.3 to 13.0.1 (#15084, #15085)</li> <li>Update the <code>minSize</code> build package filter to be explicit (#15055)</li> <li>Bump NJsonSchema from 10.3.10 to 10.3.11 (#14965)</li> </ul> </details> * Documentation and Help Content - Merge `7.2.0-preview.4` changes to master (#15056) - Update `README` and `metadata.json` (#15046) - Fix broken links for `dotnet` CLI (#14937) [7.2.0-preview.5]: v7.2.0-preview.4...v7.2.0-preview.5
PR Summary
Adding support for derived, parameterized, ArgumentCompleterAttributes. This makes it possible to create more generic completers, either in libraries or shipping with the product.
This allows for parameterized ArgumentCompleters.
Deriving from
ArgumentCompleterAttribute
makes it possible to create generic completers, likeThe derived attributes implement the
IArgumentCompleterFactory
interface and use property values to create a specialized completer.PR Context
It is difficult (if even possible) to write generic completers. This PR would allow for the following:
or in PowerShell:
Usage from PowerShell would then be:
Fix #12708
PR Checklist
.h
,.cpp
,.cs
,.ps1
and.psm1
files have the correct copyright headerWIP:
or[ WIP ]
to the beginning of the title (theWIP
bot will keep its status check atPending
while the prefix is present) and remove the prefix when the PR is ready.