== Why is this an issue?

In JavaScript, a setter is a special type of function that is used to set the value of a property on an object. Setters are defined using the ``++set++`` keyword followed by the name of the property that the setter is associated with.

To set the property, we simply assign a value to it as if it were a regular property. The setter function is automatically called with the value that we assign to the property.

Functions declared with the ``++set++`` keyword will automatically return the values they were passed. Thus any value explicitly returned from a setter will be ignored, and explicitly returning a value is a mistake.

[source,javascript,diff-id=1,diff-type=noncompliant]
----
let person = {
  // ...
  set firstname(first) {
    this.first = first;
    return 42;  // Noncompliant: The return value 42 will be ignored
  }
};
console.log(person.firstname = 'bob'); // Prints 'bob'
----

Since return values in setters are ignored, you should remove return statements altogether.

[source,javascript,diff-id=1,diff-type=compliant]
----
let person = {
  // ...
  set firstname(first) {
    this.first = first;
  }
};
console.log(person.firstname = 'bob'); // Prints 'bob'
----

== Resources
=== Documentation

* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set[set]

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Consider removing this return statement; it will be ignored.


'''
== Comments And Links
(visible only on this page)

=== on 21 Apr 2017, 14:41:26 Elena Vilchik wrote:
\[~jeanchristophe.collet] Could you please update message of this rule so that it is a bit softer and gives some details of the problem? (issue \https://github.com/SonarSource/sonar-javascript/issues/572)

endif::env-github,rspecator-view[]
