Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Fix completion crash for certain providers#20815

Merged
daxian-dbw merged 3 commits into
PowerShell:masterPowerShell/PowerShell:masterfrom
MartinGC94:Fix3rdPartyProviderCrashMartinGC94/PowerShell:Fix3rdPartyProviderCrashCopy head branch name to clipboard
Dec 8, 2023
Merged

Fix completion crash for certain providers#20815
daxian-dbw merged 3 commits into
PowerShell:masterPowerShell/PowerShell:masterfrom
MartinGC94:Fix3rdPartyProviderCrashMartinGC94/PowerShell:Fix3rdPartyProviderCrashCopy head branch name to clipboard

Conversation

@MartinGC94

Copy link
Copy Markdown
Contributor

PR Summary

Fixes issue where incorrectly implemented providers that return multiple items with the same PSPath would crash the completion due to a duplicate key.
Not sure how to add a test for this since none of the built-in providers have this issue (only provider I know of with this issue is the SCCM provider).

PR Context

Fixes: #20803

PR Checklist

@daxian-dbw daxian-dbw closed this Dec 6, 2023
@daxian-dbw daxian-dbw reopened this Dec 6, 2023
@daxian-dbw daxian-dbw added the CL-General Indicates that a PR should be marked as a general cmdlet change in the Change Log label Dec 6, 2023
…letionCompleters.cs

Co-authored-by: Ilya <darpa@yandex.ru>
@pull-request-quantifier-deprecated

Copy link
Copy Markdown

This PR has 14 quantified lines of changes. In general, a change size of upto 200 lines is ideal for the best PR experience!


Quantification details

Label      : Extra Small
Size       : +8 -6
Percentile : 5.6%

Total files changed: 1

Change summary by file extension:
.cs : +8 -6

Change counts above are quantified counts, based on the PullRequestQuantifier customizations.

Why proper sizing of changes matters

Optimal pull request sizes drive a better predictable PR flow as they strike a
balance between between PR complexity and PR review overhead. PRs within the
optimal size (typical small, or medium sized PRs) mean:

  • Fast and predictable releases to production:
    • Optimal size changes are more likely to be reviewed faster with fewer
      iterations.
    • Similarity in low PR complexity drives similar review times.
  • Review quality is likely higher as complexity is lower:
    • Bugs are more likely to be detected.
    • Code inconsistencies are more likely to be detected.
  • Knowledge sharing is improved within the participants:
    • Small portions can be assimilated better.
  • Better engineering practices are exercised:
    • Solving big problems by dividing them in well contained, smaller problems.
    • Exercising separation of concerns within the code changes.

What can I do to optimize my changes

  • Use the PullRequestQuantifier to quantify your PR accurately
    • Create a context profile for your repo using the context generator
    • Exclude files that are not necessary to be reviewed or do not increase the review complexity. Example: Autogenerated code, docs, project IDE setting files, binaries, etc. Check out the Excluded section from your prquantifier.yaml context profile.
    • Understand your typical change complexity, drive towards the desired complexity by adjusting the label mapping in your prquantifier.yaml context profile.
    • Only use the labels that matter to you, see context specification to customize your prquantifier.yaml context profile.
  • Change your engineering behaviors
    • For PRs that fall outside of the desired spectrum, review the details and check if:
      • Your PR could be split in smaller, self-contained PRs instead
      • Your PR only solves one particular issue. (For example, don't refactor and code new features in the same PR).

How to interpret the change counts in git diff output

  • One line was added: +1 -0
  • One line was deleted: +0 -1
  • One line was modified: +1 -1 (git diff doesn't know about modified, it will
    interpret that line like one addition plus one deletion)
  • Change percentiles: Change characteristics (addition, deletion, modification)
    of this PR in relation to all other PRs within the repository.


Was this comment helpful? 👍  :ok_hand:  :thumbsdown: (Email)
Customize PullRequestQuantifier for this repository.

@iSazonov

iSazonov commented Dec 8, 2023

Copy link
Copy Markdown
Collaborator

@alexlarner Could you please download the build artifact and check the fix?

@daxian-dbw daxian-dbw merged commit 09509d2 into PowerShell:master Dec 8, 2023
@alexlarner

Copy link
Copy Markdown

@alexlarner Could you please download the build artifact and check the fix?

Sorry, for the late response, but that didn't seem to fix it.

And now when I try to run TabExpansion2 -inputScript Get-, I get this error instead.

ErrorRecord                 : Exception calling "CompleteInput" with "3" argument(s): "StartIndex cannot be less than zero. (Parameter 'startIndex')"
WasThrownFromThrowStatement : False
TargetSite                  : Void ConvertToMethodInvocationException(System.Exception, System.Type, System.String, Int32, System.Reflection.MemberInfo)
Message                     : Exception calling "CompleteInput" with "3" argument(s): "StartIndex cannot be less than zero. (Parameter 'startIndex')"
Data                        : {}
InnerException              : System.ArgumentOutOfRangeException: StartIndex cannot be less than zero. (Parameter 'startIndex')
                                 at System.String.Remove(Int32 startIndex)
                                 at System.Management.Automation.CompletionCompleters.GetDefaultProviderResults(CompletionContext context, ProviderInfo provider, Collection`1 resolvedPaths, String filterText, Boolean containersOnly,
                              Boolean relativePaths, Boolean literalPaths, Boolean inputUsedHome, String providerPrefix, StringConstantType stringType) in
                              D:\a\1\s\src\System.Management.Automation\engine\CommandCompletion\CompletionCompleters.cs:line 4820
                                 at System.Management.Automation.CompletionCompleters.CompleteFilename(CompletionContext context, Boolean containerOnly, HashSet`1 extension) in
                              D:\a\1\s\src\System.Management.Automation\engine\CommandCompletion\CompletionCompleters.cs:line 4560
                                 at System.Management.Automation.CompletionAnalysis.CompleteFileNameAsCommand(CompletionContext completionContext) in
                              D:\a\1\s\src\System.Management.Automation\engine\CommandCompletion\CompletionAnalysis.cs:line 2398
                                 at System.Management.Automation.CompletionAnalysis.GetResultForIdentifier(CompletionContext completionContext, Int32& replacementIndex, Int32& replacementLength) in
                              D:\a\1\s\src\System.Management.Automation\engine\CommandCompletion\CompletionAnalysis.cs:line 2121
                                 at System.Management.Automation.CompletionAnalysis.GetResultHelper(CompletionContext completionContext, Int32& replacementIndex, Int32& replacementLength) in
                              D:\a\1\s\src\System.Management.Automation\engine\CommandCompletion\CompletionAnalysis.cs:line 437
                                 at System.Management.Automation.CompletionAnalysis.GetResults(PowerShell powerShell, Int32& replacementIndex, Int32& replacementLength) in
                              D:\a\1\s\src\System.Management.Automation\engine\CommandCompletion\CompletionAnalysis.cs:line 390
                                 at System.Management.Automation.CommandCompletion.CompleteInputImpl(Ast ast, Token[] tokens, IScriptPosition positionOfCursor, Hashtable options) in
                              D:\a\1\s\src\System.Management.Automation\engine\CommandCompletion\CommandCompletion.cs:line 535
                                 at CallSite.Target(Closure, CallSite, Type, String, Int32, Hashtable)
HelpLink                    :
Source                      : System.Management.Automation
HResult                     : -2146233087
StackTrace                  :    at System.Management.Automation.ExceptionHandlingOps.ConvertToMethodInvocationException(Exception exception, Type typeToThrow, String methodName, Int32 numArgs, MemberInfo memberInfo) in
                              D:\a\1\s\src\System.Management.Automation\engine\runtime\Operations\MiscOps.cs:line 2111
                                 at CallSite.Target(Closure, CallSite, Type, String, Int32, Hashtable)
                                 at <ScriptBlock><End>(Closure, FunctionContext)

I believe I downloaded the right build. I downloaded this.

@iSazonov

Copy link
Copy Markdown
Collaborator

@alexlarner You can download daily build from home page of the repository and if you still see the issue please report in #20803

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CL-General Indicates that a PR should be marked as a general cmdlet change in the Change Log Extra Small

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Function & Cmdlet Name Tab Completion Broken in the ConfigManager (CMSITE) Provider

4 participants

Morty Proxy This is a proxified and sanitized view of the page, visit original site.