Skip to content

Conversation

@MartinGC94
Copy link
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
@pull-request-quantifier-deprecated

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
Copy link
Collaborator

iSazonov commented Dec 8, 2023

@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

@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
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