Skip to content

Conversation

@CarloToso
Copy link
Contributor

PR Summary

Use ArgumentException.ThrowIfNullOrEmpty(); where possible

PR Context

Contributes to #19212

PR Checklist

@CarloToso CarloToso marked this pull request as ready for review February 24, 2023 18:43
@iSazonov iSazonov added CL-BreakingChange Indicates that a PR should be marked as a breaking change in the Change Log CL-CodeCleanup Indicates that a PR should be marked as a Code Cleanup change in the Change Log labels Feb 24, 2023
@xtqqczze
Copy link
Contributor

xtqqczze commented Feb 24, 2023

@CarloToso Please rebase to remove changes in:

I would also suggest in future making changes on a module-by module basis as this makes life easier for code reviewers.

@xtqqczze
Copy link
Contributor

@daxian-dbw Can we make changes to Microsoft.Management.UI.Internal. Notably, #18784 made changes there.

Previous guidance has been the module is frozen, but we have not documented this in the repository.

@daxian-dbw
Copy link
Member

daxian-dbw commented Feb 24, 2023

For Microsoft.Management.UI.Internal, we ship it and own the code, so I think it's OK to make changes to it. But

  • for code that we don't build/ship (e.g. ScheduledJob, LocalAccounts), we should avoid changing it.
  • for the code that came from .NET (e.g. ComInterop), we should avoid changing it unless the original code in dotnet/runtime was also updated to use ArgumentException.ThrowIfNullOrEmpty.

@xtqqczze
Copy link
Contributor

@CarloToso I see you have a few pull requests that have been open for some time. In the case of this PR, although it is marked as Small , the changes cover multiple modules, so it may take reviewers some time to review and approve the changes. If you would like, I can use git cherry-pick to split your contribution (preserving attribution).

@xtqqczze
Copy link
Contributor

@CarloToso I could also document which changes are affected by the PowerShell breaking changes contract.

@CarloToso
Copy link
Contributor Author

@xtqqczze Thank you very much, I'll gladly accept your help 😄

@iSazonov
Copy link
Collaborator

For Microsoft.Management.UI.Internal, we ship it and own the code, so I think it's OK to make changes to it. But

  • for code that we don't build/ship (e.g. ScheduledJob, LocalAccounts), we should avoid changing it.
  • for the code that came from .NET (e.g. ComInterop), we should avoid changing it unless the original code in dotnet/runtime was also updated to use ArgumentException.ThrowIfNullOrEmpty.

Also WinRM code. Very sensitive.

@iSazonov iSazonov changed the title ArgumentException.ThrowIfNullOrEmpty(); Use ArgumentException.ThrowIfNullOrEmpty() in more places Feb 26, 2023
Copy link
Member

@daxian-dbw daxian-dbw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@daxian-dbw
Copy link
Member

daxian-dbw commented Feb 27, 2023

@CarloToso There is a legit test failure resulted by changing the exception type to be thrown, can you please update that test?

PSTests.Parallel.FileSystemProviderTests.TestCreateJunctionFails
Assert.Throws() Failure
Expected: typeof(System.ArgumentNullException)
Actual:   typeof(System.ArgumentException): The value cannot be an empty string. (Parameter 'path')
---- System.ArgumentException : The value cannot be an empty string. (Parameter 'path')

@pull-request-quantifier-deprecated

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


Quantification details

Label      : Small
Size       : +32 -61
Percentile : 37.2%

Total files changed: 21

Change summary by file extension:
.cs : +32 -61

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.

@daxian-dbw daxian-dbw merged commit c48e5cb into PowerShell:master Feb 27, 2023
@daxian-dbw daxian-dbw removed the CL-BreakingChange Indicates that a PR should be marked as a breaking change in the Change Log label Feb 27, 2023
@CarloToso CarloToso deleted the ArgumentException.ThrowIfNullOrEmpty() branch February 27, 2023 22:48
{
throw new ArgumentNullException("childName");
}
ArgumentException.ThrowIfNullOrEmpty(childName);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extra blank line 😄

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@CarloToso you and I both missed this one ...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😅 (I fixed it in #19241)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you! 😄

@CarloToso CarloToso mentioned this pull request Feb 28, 2023
22 tasks
@ghost
Copy link

ghost commented Mar 14, 2023

🎉v7.4.0-preview.2 has been released which incorporates this pull request.:tada:

Handy links:

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

Labels

CL-CodeCleanup Indicates that a PR should be marked as a Code Cleanup change in the Change Log Small

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants