src/Phan/LanguageServer/CompletionResolver.php

Summary

Maintainability
F
3 days
Test Coverage

File CompletionResolver.php has 400 lines of code (exceeds 250 allowed). Consider refactoring.
Open

<?php

declare(strict_types=1);

namespace Phan\LanguageServer;
Severity: Minor
Found in src/Phan/LanguageServer/CompletionResolver.php - About 5 hrs to fix

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

    class CompletionResolver
    {
        /**
         * @return Closure(Context,Node, list<Node>):void
         * NOTE: The helper methods distinguish between "Go to definition"

    Method createCompletionClosure has 64 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

        public static function createCompletionClosure(CompletionRequest $request, CodeBase $code_base): Closure
        {
            /**
             * @param list<Node> $parent_node_list
             */
    Severity: Major
    Found in src/Phan/LanguageServer/CompletionResolver.php - About 2 hrs to fix

      Function locateMiscellaneousTokenCompletion has a Cognitive Complexity of 18 (exceeds 5 allowed). Consider refactoring.
      Open

          private static function locateMiscellaneousTokenCompletion(
              CompletionRequest $request,
              CodeBase $code_base,
              Context $context,
              Node $node,
      Severity: Minor
      Found in src/Phan/LanguageServer/CompletionResolver.php - About 2 hrs 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

      Method locateMiscellaneousTokenCompletion has 37 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          private static function locateMiscellaneousTokenCompletion(
              CompletionRequest $request,
              CodeBase $code_base,
              Context $context,
              Node $node,
      Severity: Minor
      Found in src/Phan/LanguageServer/CompletionResolver.php - About 1 hr to fix

        Function locateGlobalConstantCompletion has a Cognitive Complexity of 11 (exceeds 5 allowed). Consider refactoring.
        Open

            private static function locateGlobalConstantCompletion(
                CompletionRequest $request,
                CodeBase $code_base,
                Context $context,
                Node $node,
        Severity: Minor
        Found in src/Phan/LanguageServer/CompletionResolver.php - About 1 hr 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 locateGlobalFunctionCompletion has a Cognitive Complexity of 11 (exceeds 5 allowed). Consider refactoring.
        Open

            private static function locateGlobalFunctionCompletion(
                CompletionRequest $request,
                CodeBase $code_base,
                Context $context,
                Node $node,
        Severity: Minor
        Found in src/Phan/LanguageServer/CompletionResolver.php - About 1 hr 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

        Method locateClassConstantCompletion has 29 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

            private static function locateClassConstantCompletion(
                CompletionRequest $request,
                CodeBase $code_base,
                Context $context,
                Node $node,
        Severity: Minor
        Found in src/Phan/LanguageServer/CompletionResolver.php - About 1 hr to fix

          Method locateVariableCompletion has 29 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

              private static function locateVariableCompletion(
                  CompletionRequest $request,
                  CodeBase $code_base,
                  Context $context,
                  string $incomplete_variable_name
          Severity: Minor
          Found in src/Phan/LanguageServer/CompletionResolver.php - About 1 hr to fix

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

                private static function locateClassConstantCompletion(
                    CompletionRequest $request,
                    CodeBase $code_base,
                    Context $context,
                    Node $node,
            Severity: Minor
            Found in src/Phan/LanguageServer/CompletionResolver.php - About 1 hr 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 locateMethodCompletion has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
            Open

                private static function locateMethodCompletion(
                    CompletionRequest $request,
                    CodeBase $code_base,
                    Context $context,
                    Node $node,
            Severity: Minor
            Found in src/Phan/LanguageServer/CompletionResolver.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 locatePropertyCompletion has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
            Open

                public static function locatePropertyCompletion(
                    CompletionRequest $request,
                    CodeBase $code_base,
                    Context $context,
                    Node $node,
            Severity: Minor
            Found in src/Phan/LanguageServer/CompletionResolver.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 locateVariableCompletion has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
            Open

                private static function locateVariableCompletion(
                    CompletionRequest $request,
                    CodeBase $code_base,
                    Context $context,
                    string $incomplete_variable_name
            Severity: Minor
            Found in src/Phan/LanguageServer/CompletionResolver.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

            Method locatePropertyCompletion has 6 arguments (exceeds 4 allowed). Consider refactoring.
            Open

                    CompletionRequest $request,
                    CodeBase $code_base,
                    Context $context,
                    Node $node,
                    bool $is_static,
            Severity: Minor
            Found in src/Phan/LanguageServer/CompletionResolver.php - About 45 mins to fix

              Method locateMethodCompletion has 6 arguments (exceeds 4 allowed). Consider refactoring.
              Open

                      CompletionRequest $request,
                      CodeBase $code_base,
                      Context $context,
                      Node $node,
                      bool $is_static,
              Severity: Minor
              Found in src/Phan/LanguageServer/CompletionResolver.php - About 45 mins to fix

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

                    public static function createCompletionClosure(CompletionRequest $request, CodeBase $code_base): Closure
                    {
                        /**
                         * @param list<Node> $parent_node_list
                         */
                Severity: Minor
                Found in src/Phan/LanguageServer/CompletionResolver.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

                Method locateMiscellaneousTokenCompletion has 6 arguments (exceeds 4 allowed). Consider refactoring.
                Open

                        CompletionRequest $request,
                        CodeBase $code_base,
                        Context $context,
                        Node $node,
                        string $incomplete_constant_name,
                Severity: Minor
                Found in src/Phan/LanguageServer/CompletionResolver.php - About 45 mins to fix

                  Method locateGlobalConstantCompletion has 5 arguments (exceeds 4 allowed). Consider refactoring.
                  Open

                          CompletionRequest $request,
                          CodeBase $code_base,
                          Context $context,
                          Node $node,
                          string $incomplete_constant_name
                  Severity: Minor
                  Found in src/Phan/LanguageServer/CompletionResolver.php - About 35 mins to fix

                    Method locateClassConstantCompletion has 5 arguments (exceeds 4 allowed). Consider refactoring.
                    Open

                            CompletionRequest $request,
                            CodeBase $code_base,
                            Context $context,
                            Node $node,
                            $constant_name
                    Severity: Minor
                    Found in src/Phan/LanguageServer/CompletionResolver.php - About 35 mins to fix

                      Method locateClassCompletion has 5 arguments (exceeds 4 allowed). Consider refactoring.
                      Open

                              CompletionRequest $request,
                              CodeBase $code_base,
                              Context $context,
                              Node $node,
                              string $incomplete_class_name
                      Severity: Minor
                      Found in src/Phan/LanguageServer/CompletionResolver.php - About 35 mins to fix

                        Method locateGlobalFunctionCompletion has 5 arguments (exceeds 4 allowed). Consider refactoring.
                        Open

                                CompletionRequest $request,
                                CodeBase $code_base,
                                Context $context,
                                Node $node,
                                string $incomplete_function_name
                        Severity: Minor
                        Found in src/Phan/LanguageServer/CompletionResolver.php - About 35 mins to fix

                          Function locateClassCompletion has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring.
                          Open

                              private static function locateClassCompletion(
                                  CompletionRequest $request,
                                  CodeBase $code_base,
                                  Context $context,
                                  Node $node,
                          Severity: Minor
                          Found in src/Phan/LanguageServer/CompletionResolver.php - About 35 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 locateMiscellaneousTokenCompletion() has an NPath complexity of 264. The configured NPath complexity threshold is 200.
                          Open

                              private static function locateMiscellaneousTokenCompletion(
                                  CompletionRequest $request,
                                  CodeBase $code_base,
                                  Context $context,
                                  Node $node,

                          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 createCompletionClosure() has a Cyclomatic Complexity of 13. The configured cyclomatic complexity threshold is 10.
                          Open

                              public static function createCompletionClosure(CompletionRequest $request, CodeBase $code_base): Closure
                              {
                                  /**
                                   * @param list<Node> $parent_node_list
                                   */

                          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 locateMiscellaneousTokenCompletion() has a Cyclomatic Complexity of 13. The configured cyclomatic complexity threshold is 10.
                          Open

                              private static function locateMiscellaneousTokenCompletion(
                                  CompletionRequest $request,
                                  CodeBase $code_base,
                                  Context $context,
                                  Node $node,

                          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 class CompletionResolver has a coupling between objects value of 17. Consider to reduce the number of dependencies under 13.
                          Open

                          class CompletionResolver
                          {
                              /**
                               * @return Closure(Context,Node, list<Node>):void
                               * NOTE: The helper methods distinguish between "Go to definition"

                          CouplingBetweenObjects

                          Since: 1.1.0

                          A class with too many dependencies has negative impacts on several quality aspects of a class. This includes quality criteria like stability, maintainability and understandability

                          Example

                          class Foo {
                              /**
                               * @var \foo\bar\X
                               */
                              private $x = null;
                          
                              /**
                               * @var \foo\bar\Y
                               */
                              private $y = null;
                          
                              /**
                               * @var \foo\bar\Z
                               */
                              private $z = null;
                          
                              public function setFoo(\Foo $foo) {}
                              public function setBar(\Bar $bar) {}
                              public function setBaz(\Baz $baz) {}
                          
                              /**
                               * @return \SplObjectStorage
                               * @throws \OutOfRangeException
                               * @throws \InvalidArgumentException
                               * @throws \ErrorException
                               */
                              public function process(\Iterator $it) {}
                          
                              // ...
                          }

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

                          There are no issues that match your filters.

                          Category
                          Status