Uploaded image for project: 'Rules Repository'
  1. Rules Repository
  2. RSPEC-3800

Functions should always return the same type

    XMLWordPrintable

    Details

    • Type: Code Smell Detection
    • Status: Active
    • Resolution: Unresolved
    • Labels:
    • Message:
      Refactor this function to always return the same type.
    • Highlighting:
      Hide

      Primary: function name/declaration
      Secondary: Return statements

      Show
      Primary: function name/declaration Secondary: Return statements
    • Default Severity:
      Major
    • Impact:
      Low
    • Likelihood:
      High
    • Default Quality Profiles:
      Sonar way, Sonar way recommended
    • Covered Languages:
      JavaScript
    • Remediation Function:
      Constant/Issue
    • Constant Cost:
      20min
    • Analysis Scope:
      Main Sources, Test Sources

      Description

      Unlike strongly typed languages, JavaScript does not enforce a return type on a function. This means that different paths through a function can return different types of values, which can be very confusing to the user and significantly harder to maintain.

      Noncompliant Code Example

      function foo(a) {  // Noncompliant
        if (a === 1) {
          return true;
        }
        return 3;
      }
      

      Compliant Solution

      function foo(a) {
        if (a === 1) {
          return true;
        }
        return false;
      }
      

      Exceptions

      Functions returning this are ignored.

      function foo() {
        // ...
        return this;
      }
      

      Functions returning expressions having type any are ignored.

        Attachments

          Activity

            People

            Assignee:
            Unassigned Unassigned
            Reporter:
            jeanchristophe.collet Jean-Christophe Collet (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Dates

              Created:
              Updated: