== Why is this an issue?

There are situations where ``++super()++`` must be invoked and situations where ``++super()++`` cannot be invoked.


The basic rule is: a constructor in a non-derived class cannot invoke ``++super()++``; a constructor in a derived class must invoke ``++super()++``.


Furthermore:

* ``++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.

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 for this rule.


=== Noncompliant code example

[source,javascript]
----
class Dog extends Animal {
  constructor(name) {
    super();
    this.name = name;
    super();         // Noncompliant
    super.doSomething();
  }
}
----


=== Compliant solution

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



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[]
