Pavel Mikula 563d745a80
Modify rule S3928: Update exceptions (#3500)
Modify S3928: Update exceptions
2023-12-14 15:13:03 +01:00

77 lines
2.4 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

== Why is this an issue?
Some constructors of the ``++ArgumentException++``, ``++ArgumentNullException++``, ``++ArgumentOutOfRangeException++`` and ``++DuplicateWaitObjectException++`` classes must be fed with a valid parameter name. This rule raises an issue in two cases:
* When this parameter name doesn't match any existing ones.
* When a call is made to the default (parameterless) constructor
=== Noncompliant code example
[source,csharp]
----
public void Foo(Bar a, int[] b)
{
throw new ArgumentException(); // Noncompliant
throw new ArgumentException("My error message", "c"); // Noncompliant
throw new ArgumentException("My error message", "c", innerException); // Noncompliant
throw new ArgumentNullException("c"); // Noncompliant
throw new ArgumentNullException(nameof(c)); // Noncompliant
throw new ArgumentNullException("My error message","a"); // Noncompliant
throw new ArgumentOutOfRangeException("c"); // Noncompliant
throw new ArgumentOutOfRangeException("c", "My error message"); // Noncompliant
throw new ArgumentOutOfRangeException("c",b,"My error message"); // Noncompliant
throw new DuplicateWaitObjectException("c", "My error message"); // Noncompliant
}
----
=== Compliant solution
[source,csharp]
----
public void Foo(Bar a, int[] b)
{
throw new ArgumentException("My error message", "a");
throw new ArgumentException("My error message", "b", innerException);
throw new ArgumentNullException("a");
throw new ArgumentNullException(nameof(a));
throw new ArgumentNullException("a", "My error message");
throw new ArgumentOutOfRangeException("b");
throw new ArgumentOutOfRangeException("b", "My error message");
throw new ArgumentOutOfRangeException("b",b,"My error message");
throw new DuplicateWaitObjectException("b", "My error message");
}
----
=== Exceptions
The rule won't raise an issue if the parameter name is not a constant value.
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
* Use a constructor overload that allows a more meaningful exception message to be provided.
* The parameter name '{0}' is not declared in the argument list.
* ArgumentException constructor arguments have been inverted.
=== Highlighting
The string literal supposed to be the parameter name
endif::env-github,rspecator-view[]