== Why is this an issue?

In JavaScript, the `super` keyword is used to call the constructor and methods of an object's parent class, and to access its properties.

The expression ``++super(...args)++`` is used to call the parent's constructor. It must be used carefully and correctly to avoid errors. 

[source,javascript,diff-id=1,diff-type=noncompliant]
----
class Dog extends Animal {
  constructor(name) {
    super();
    this.name = name;
    super(); // Noncompliant: constructor is called twice.
    super.doSomething();
  }
}
----

Follow these instructions when invoking the parent's constructor:

* ``++super()++`` cannot be invoked in the constructor of a non-derived class.
* ``++super()++`` must be invoked in the constructor of a derived class.
* ``++super()++`` must be invoked before the ``++this++`` and ``++super++`` keywords can be used.
* ``++super()++`` must be invoked with the same number of arguments as the base class' constructor.
* ``++super()++`` can only be invoked in a constructor - not in any other method.
* ``++super()++`` cannot be invoked multiple times in the same constructor.

[source,javascript,diff-id=1,diff-type=compliant]
----
class Dog extends Animal {
  constructor(name) {
    super();
    this.name = name;
    super.doSomething();
  }
}
----

Some issues are not raised if the base class is not defined in the same file as the current class. This is a known limitation of this rule.

== Resources
=== Documentation
* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/super[`super`]
* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes[Classes]
* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain[Inheritance and the prototype chain]

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

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

=== Message

Lacked a call of 'super()' in some code paths.

Expected to call 'super()'.

Unexpected duplicate 'super()'.

Unexpected 'super()' because 'super' is not a constructor.

Unexpected 'super()'.

'super'|'this' is not allowed before 'super()'.


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

=== supercedes: S3833

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