src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php

Summary

Maintainability
D
3 days
Test Coverage

File UseReturnValueVisitor.php has 331 lines of code (exceeds 250 allowed). Consider refactoring.
Open

<?php

declare(strict_types=1);

namespace Phan\Plugin\Internal\UseReturnValuePlugin;

    The class UseReturnValueVisitor has an overall complexity of 92 which is very high. The configured complexity threshold is 50.
    Open

    class UseReturnValueVisitor extends PluginAwarePostAnalysisVisitor
    {
        /** @var list<Node> set by plugin framework */
        protected $parent_node_list;
    
    

    Function visitCall has a Cognitive Complexity of 19 (exceeds 5 allowed). Consider refactoring.
    Open

        public function visitCall(Node $node): void
        {
            [$parent, $used] = $this->findNonUnaryParentNode($node);
            if (!$parent) {
                //fwrite(STDERR, "No parent in " . __METHOD__ . "\n");

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Function findNonUnaryParentNode has a Cognitive Complexity of 15 (exceeds 5 allowed). Consider refactoring.
    Open

        private function findNonUnaryParentNode(Node $node): array
        {
            $parent = \end($this->parent_node_list);
            if (!$parent) {
                return [null, true];

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Method visitCall has 41 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

        public function visitCall(Node $node): void
        {
            [$parent, $used] = $this->findNonUnaryParentNode($node);
            if (!$parent) {
                //fwrite(STDERR, "No parent in " . __METHOD__ . "\n");

      Method visitStaticCall has 38 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          public function visitStaticCall(Node $node): void
          {
              [$parent, $used] = $this->findNonUnaryParentNode($node);
              if (!$parent) {
                  //fwrite(STDERR, "No parent in " . __METHOD__ . "\n");

        Method visitMethodCall has 36 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

            public function visitMethodCall(Node $node): void
            {
                [$parent, $used] = $this->findNonUnaryParentNode($node);
                if (!$parent) {
                    //fwrite(STDERR, "No parent in " . __METHOD__ . "\n");

          Function quickWarn has a Cognitive Complexity of 12 (exceeds 5 allowed). Consider refactoring.
          Open

              private function quickWarn(FunctionInterface $method, string $fqsen, Node $node): bool
              {
                  if (!$method->isPure()) {
                      $fqsen_key = \strtolower(\ltrim($fqsen, "\\"));
                      $result = UseReturnValuePlugin::HARDCODED_FQSENS[$fqsen_key] ?? null;

          Cognitive Complexity

          Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

          A method's cognitive complexity is based on a few simple rules:

          • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
          • Code is considered more complex for each "break in the linear flow of the code"
          • Code is considered more complex when "flow breaking structures are nested"

          Further reading

          Method findNonUnaryParentNode has 34 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

              private function findNonUnaryParentNode(Node $node): array
              {
                  $parent = \end($this->parent_node_list);
                  if (!$parent) {
                      return [null, true];

            Method quickWarn has 34 lines of code (exceeds 25 allowed). Consider refactoring.
            Open

                private function quickWarn(FunctionInterface $method, string $fqsen, Node $node): bool
                {
                    if (!$method->isPure()) {
                        $fqsen_key = \strtolower(\ltrim($fqsen, "\\"));
                        $result = UseReturnValuePlugin::HARDCODED_FQSENS[$fqsen_key] ?? null;

              Function visitStaticCall has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring.
              Open

                  public function visitStaticCall(Node $node): void
                  {
                      [$parent, $used] = $this->findNonUnaryParentNode($node);
                      if (!$parent) {
                          //fwrite(STDERR, "No parent in " . __METHOD__ . "\n");

              Cognitive Complexity

              Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

              A method's cognitive complexity is based on a few simple rules:

              • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
              • Code is considered more complex for each "break in the linear flow of the code"
              • Code is considered more complex when "flow breaking structures are nested"

              Further reading

              Function visitMethodCall has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
              Open

                  public function visitMethodCall(Node $node): void
                  {
                      [$parent, $used] = $this->findNonUnaryParentNode($node);
                      if (!$parent) {
                          //fwrite(STDERR, "No parent in " . __METHOD__ . "\n");
              Severity: Minor
              Found in src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php - About 55 mins to fix

              Cognitive Complexity

              Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

              A method's cognitive complexity is based on a few simple rules:

              • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
              • Code is considered more complex for each "break in the linear flow of the code"
              • Code is considered more complex when "flow breaking structures are nested"

              Further reading

              Function analyzeFunctionLike has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.
              Open

                  private function analyzeFunctionLike(Node $node): void
                  {
                      if (!$this->context->isInFunctionLikeScope()) {
                          return;
                      }
              Severity: Minor
              Found in src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php - About 45 mins to fix

              Cognitive Complexity

              Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

              A method's cognitive complexity is based on a few simple rules:

              • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
              • Code is considered more complex for each "break in the linear flow of the code"
              • Code is considered more complex when "flow breaking structures are nested"

              Further reading

              Avoid too many return statements within this method.
              Open

                      return [$parent, true];
              Severity: Major
              Found in src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php - About 30 mins to fix

                Avoid too many return statements within this method.
                Open

                                return [$parent, false];
                Severity: Major
                Found in src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php - About 30 mins to fix

                  Avoid too many return statements within this method.
                  Open

                                  return [$parent, $this->isUsedExpressionInExprList($node, $parent)];
                  Severity: Major
                  Found in src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php - About 30 mins to fix

                    Avoid too many return statements within this method.
                    Open

                                return;
                    Severity: Major
                    Found in src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php - About 30 mins to fix

                      Avoid too many return statements within this method.
                      Open

                              return \is_string($name) && \strcasecmp($name, $const_name) === 0;
                      Severity: Major
                      Found in src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php - About 30 mins to fix

                        Avoid too many return statements within this method.
                        Open

                                    return;
                        Severity: Major
                        Found in src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php - About 30 mins to fix

                          Avoid too many return statements within this method.
                          Open

                                      return;
                          Severity: Major
                          Found in src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php - About 30 mins to fix

                            Avoid too many return statements within this method.
                            Open

                                    return true;
                            Severity: Major
                            Found in src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php - About 30 mins to fix

                              Function isSecondArgumentEqualToConst has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
                              Open

                                  private static function isSecondArgumentEqualToConst(Node $node, string $const_name): bool
                                  {
                                      $args = $node->children['args']->children;
                                      $bool_node = $args[1] ?? null;
                                      if (!$bool_node instanceof Node) {
                              Severity: Minor
                              Found in src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php - About 25 mins to fix

                              Cognitive Complexity

                              Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

                              A method's cognitive complexity is based on a few simple rules:

                              • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
                              • Code is considered more complex for each "break in the linear flow of the code"
                              • Code is considered more complex when "flow breaking structures are nested"

                              Further reading

                              The method visitStaticCall() has an NPath complexity of 384. The configured NPath complexity threshold is 200.
                              Open

                                  public function visitStaticCall(Node $node): void
                                  {
                                      [$parent, $used] = $this->findNonUnaryParentNode($node);
                                      if (!$parent) {
                                          //fwrite(STDERR, "No parent in " . __METHOD__ . "\n");

                              NPathComplexity

                              Since: 0.1

                              The NPath complexity of a method is the number of acyclic execution paths through that method. A threshold of 200 is generally considered the point where measures should be taken to reduce complexity.

                              Example

                              class Foo {
                                  function bar() {
                                      // lots of complicated code
                                  }
                              }

                              Source https://phpmd.org/rules/codesize.html#npathcomplexity

                              The method visitCall() has an NPath complexity of 300. The configured NPath complexity threshold is 200.
                              Open

                                  public function visitCall(Node $node): void
                                  {
                                      [$parent, $used] = $this->findNonUnaryParentNode($node);
                                      if (!$parent) {
                                          //fwrite(STDERR, "No parent in " . __METHOD__ . "\n");

                              NPathComplexity

                              Since: 0.1

                              The NPath complexity of a method is the number of acyclic execution paths through that method. A threshold of 200 is generally considered the point where measures should be taken to reduce complexity.

                              Example

                              class Foo {
                                  function bar() {
                                      // lots of complicated code
                                  }
                              }

                              Source https://phpmd.org/rules/codesize.html#npathcomplexity

                              The method findNonUnaryParentNode() has a Cyclomatic Complexity of 12. The configured cyclomatic complexity threshold is 10.
                              Open

                                  private function findNonUnaryParentNode(Node $node): array
                                  {
                                      $parent = \end($this->parent_node_list);
                                      if (!$parent) {
                                          return [null, true];

                              CyclomaticComplexity

                              Since: 0.1

                              Complexity is determined by the number of decision points in a method plus one for the method entry. The decision points are 'if', 'while', 'for', and 'case labels'. Generally, 1-4 is low complexity, 5-7 indicates moderate complexity, 8-10 is high complexity, and 11+ is very high complexity.

                              Example

                              // Cyclomatic Complexity = 11
                              class Foo {
                              1   public function example() {
                              2       if ($a == $b) {
                              3           if ($a1 == $b1) {
                                              fiddle();
                              4           } elseif ($a2 == $b2) {
                                              fiddle();
                                          } else {
                                              fiddle();
                                          }
                              5       } elseif ($c == $d) {
                              6           while ($c == $d) {
                                              fiddle();
                                          }
                              7        } elseif ($e == $f) {
                              8           for ($n = 0; $n < $h; $n++) {
                                              fiddle();
                                          }
                                      } else {
                                          switch ($z) {
                              9               case 1:
                                                  fiddle();
                                                  break;
                              10              case 2:
                                                  fiddle();
                                                  break;
                              11              case 3:
                                                  fiddle();
                                                  break;
                                              default:
                                                  fiddle();
                                                  break;
                                          }
                                      }
                                  }
                              }

                              Source https://phpmd.org/rules/codesize.html#cyclomaticcomplexity

                              The method visitCall() has a Cyclomatic Complexity of 12. The configured cyclomatic complexity threshold is 10.
                              Open

                                  public function visitCall(Node $node): void
                                  {
                                      [$parent, $used] = $this->findNonUnaryParentNode($node);
                                      if (!$parent) {
                                          //fwrite(STDERR, "No parent in " . __METHOD__ . "\n");

                              CyclomaticComplexity

                              Since: 0.1

                              Complexity is determined by the number of decision points in a method plus one for the method entry. The decision points are 'if', 'while', 'for', and 'case labels'. Generally, 1-4 is low complexity, 5-7 indicates moderate complexity, 8-10 is high complexity, and 11+ is very high complexity.

                              Example

                              // Cyclomatic Complexity = 11
                              class Foo {
                              1   public function example() {
                              2       if ($a == $b) {
                              3           if ($a1 == $b1) {
                                              fiddle();
                              4           } elseif ($a2 == $b2) {
                                              fiddle();
                                          } else {
                                              fiddle();
                                          }
                              5       } elseif ($c == $d) {
                              6           while ($c == $d) {
                                              fiddle();
                                          }
                              7        } elseif ($e == $f) {
                              8           for ($n = 0; $n < $h; $n++) {
                                              fiddle();
                                          }
                                      } else {
                                          switch ($z) {
                              9               case 1:
                                                  fiddle();
                                                  break;
                              10              case 2:
                                                  fiddle();
                                                  break;
                              11              case 3:
                                                  fiddle();
                                                  break;
                                              default:
                                                  fiddle();
                                                  break;
                                          }
                                      }
                                  }
                              }

                              Source https://phpmd.org/rules/codesize.html#cyclomaticcomplexity

                              The method visitStaticCall() has a Cyclomatic Complexity of 10. The configured cyclomatic complexity threshold is 10.
                              Open

                                  public function visitStaticCall(Node $node): void
                                  {
                                      [$parent, $used] = $this->findNonUnaryParentNode($node);
                                      if (!$parent) {
                                          //fwrite(STDERR, "No parent in " . __METHOD__ . "\n");

                              CyclomaticComplexity

                              Since: 0.1

                              Complexity is determined by the number of decision points in a method plus one for the method entry. The decision points are 'if', 'while', 'for', and 'case labels'. Generally, 1-4 is low complexity, 5-7 indicates moderate complexity, 8-10 is high complexity, and 11+ is very high complexity.

                              Example

                              // Cyclomatic Complexity = 11
                              class Foo {
                              1   public function example() {
                              2       if ($a == $b) {
                              3           if ($a1 == $b1) {
                                              fiddle();
                              4           } elseif ($a2 == $b2) {
                                              fiddle();
                                          } else {
                                              fiddle();
                                          }
                              5       } elseif ($c == $d) {
                              6           while ($c == $d) {
                                              fiddle();
                                          }
                              7        } elseif ($e == $f) {
                              8           for ($n = 0; $n < $h; $n++) {
                                              fiddle();
                                          }
                                      } else {
                                          switch ($z) {
                              9               case 1:
                                                  fiddle();
                                                  break;
                              10              case 2:
                                                  fiddle();
                                                  break;
                              11              case 3:
                                                  fiddle();
                                                  break;
                                              default:
                                                  fiddle();
                                                  break;
                                          }
                                      }
                                  }
                              }

                              Source https://phpmd.org/rules/codesize.html#cyclomaticcomplexity

                              The method quickWarn() has a Cyclomatic Complexity of 11. The configured cyclomatic complexity threshold is 10.
                              Open

                                  private function quickWarn(FunctionInterface $method, string $fqsen, Node $node): bool
                                  {
                                      if (!$method->isPure()) {
                                          $fqsen_key = \strtolower(\ltrim($fqsen, "\\"));
                                          $result = UseReturnValuePlugin::HARDCODED_FQSENS[$fqsen_key] ?? null;

                              CyclomaticComplexity

                              Since: 0.1

                              Complexity is determined by the number of decision points in a method plus one for the method entry. The decision points are 'if', 'while', 'for', and 'case labels'. Generally, 1-4 is low complexity, 5-7 indicates moderate complexity, 8-10 is high complexity, and 11+ is very high complexity.

                              Example

                              // Cyclomatic Complexity = 11
                              class Foo {
                              1   public function example() {
                              2       if ($a == $b) {
                              3           if ($a1 == $b1) {
                                              fiddle();
                              4           } elseif ($a2 == $b2) {
                                              fiddle();
                                          } else {
                                              fiddle();
                                          }
                              5       } elseif ($c == $d) {
                              6           while ($c == $d) {
                                              fiddle();
                                          }
                              7        } elseif ($e == $f) {
                              8           for ($n = 0; $n < $h; $n++) {
                                              fiddle();
                                          }
                                      } else {
                                          switch ($z) {
                              9               case 1:
                                                  fiddle();
                                                  break;
                              10              case 2:
                                                  fiddle();
                                                  break;
                              11              case 3:
                                                  fiddle();
                                                  break;
                                              default:
                                                  fiddle();
                                                  break;
                                          }
                                      }
                                  }
                              }

                              Source https://phpmd.org/rules/codesize.html#cyclomaticcomplexity

                              Avoid using empty try-catch blocks in visitCall.
                              Open

                                      } catch (CodeBaseException $_) {
                                      }

                              EmptyCatchBlock

                              Since: 2.7.0

                              Usually empty try-catch is a bad idea because you are silently swallowing an error condition and then continuing execution. Occasionally this may be the right thing to do, but often it's a sign that a developer saw an exception, didn't know what to do about it, and so used an empty catch to silence the problem.

                              Example

                              class Foo {
                              
                                public function bar()
                                {
                                    try {
                                        // ...
                                    } catch (Exception $e) {} // empty catch block
                                }
                              }

                              Source https://phpmd.org/rules/design.html#emptycatchblock

                              There are no issues that match your filters.

                              Category
                              Status