brokencube/automatorm

View on GitHub
src/DataLayer/Fake/SchemaGenerator.php

Summary

Maintainability
D
2 days
Test Coverage

Function generate has a Cognitive Complexity of 62 (exceeds 5 allowed). Consider refactoring.
Open

    public function generate()
    {
        $data = $this->connection->data;
        $database = $this->connection->schemaName;
        
Severity: Minor
Found in src/DataLayer/Fake/SchemaGenerator.php - About 1 day 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 generate has 99 lines of code (exceeds 25 allowed). Consider refactoring.
Open

    public function generate()
    {
        $data = $this->connection->data;
        $database = $this->connection->schemaName;
        
Severity: Major
Found in src/DataLayer/Fake/SchemaGenerator.php - About 3 hrs to fix

    Function generateTableList has a Cognitive Complexity of 17 (exceeds 5 allowed). Consider refactoring.
    Open

        protected function generateTableList(Data $datastore)
        {
            $data = $datastore->data;
            foreach(preg_split('~[\r\n]+~', $data) as $line) {
                if (empty($line) or ctype_space($line)) {
    Severity: Minor
    Found in src/DataLayer/Fake/SchemaGenerator.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

    Function generateForeignKeys has a Cognitive Complexity of 17 (exceeds 5 allowed). Consider refactoring.
    Open

        protected function generateForeignKeys(Data $datastore)
        {
            $data = $datastore->data;
            $tableName = null;
            $keys = [];
    Severity: Minor
    Found in src/DataLayer/Fake/SchemaGenerator.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 generateTableList has 35 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

        protected function generateTableList(Data $datastore)
        {
            $data = $datastore->data;
            foreach(preg_split('~[\r\n]+~', $data) as $line) {
                if (empty($line) or ctype_space($line)) {
    Severity: Minor
    Found in src/DataLayer/Fake/SchemaGenerator.php - About 1 hr to fix

      Method generateForeignKeys has 26 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          protected function generateForeignKeys(Data $datastore)
          {
              $data = $datastore->data;
              $tableName = null;
              $keys = [];
      Severity: Minor
      Found in src/DataLayer/Fake/SchemaGenerator.php - About 1 hr to fix

        The method generate() has 136 lines of code. Current threshold is set to 100. Avoid really long methods.
        Open

            public function generate()
            {
                $data = $this->connection->data;
                $database = $this->connection->schemaName;
                

        The method generate() has an NPath complexity of 2550. The configured NPath complexity threshold is 200.
        Open

            public function generate()
            {
                $data = $this->connection->data;
                $database = $this->connection->schemaName;
                

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

            protected function generateTableList(Data $datastore)
            {
                $data = $datastore->data;
                foreach(preg_split('~[\r\n]+~', $data) as $line) {
                    if (empty($line) or ctype_space($line)) {

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

            public function generate()
            {
                $data = $this->connection->data;
                $database = $this->connection->schemaName;
                

        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 unused local variables such as '$i'.
        Open

                        foreach ($tableinfo as $i => $table) {

        UnusedLocalVariable

        Since: 0.2

        Detects when a local variable is declared and/or assigned, but not used.

        Example

        class Foo {
            public function doSomething()
            {
                $i = 5; // Unused
            }
        }

        Source https://phpmd.org/rules/unusedcode.html#unusedlocalvariable

        Avoid unused local variables such as '$key'.
        Open

                            foreach (array_slice($columnDefinition, 1) as $key => $value) {

        UnusedLocalVariable

        Since: 0.2

        Detects when a local variable is declared and/or assigned, but not used.

        Example

        class Foo {
            public function doSomething()
            {
                $i = 5; // Unused
            }
        }

        Source https://phpmd.org/rules/unusedcode.html#unusedlocalvariable

        Reference to undeclared property \Automatorm\Interfaces\Connection->schemaName
        Open

                $database = $this->connection->schemaName;
        Severity: Minor
        Found in src/DataLayer/Fake/SchemaGenerator.php by phan

        Variable $model was undeclared, but array fields are being added to it.
        Open

                    $model[$normalised] = [

        Call to undeclared method \Automatorm\Interfaces\Connection::getDataStore
        Open

                                    $this->connection->getDataStore()->getData($key['schema'])->addCrossSchemaForeignKey($refTableName, 'one-to-many', $propertyName, $value);
        Severity: Critical
        Found in src/DataLayer/Fake/SchemaGenerator.php by phan

        Reference to undeclared property \Automatorm\Interfaces\Connection->data (Did you mean $data)
        Open

                    $keys = $this->connection->data->getCrossSchemaForeignKeys();
        Severity: Minor
        Found in src/DataLayer/Fake/SchemaGenerator.php by phan

        Reference to undeclared property \Automatorm\Interfaces\Connection->data
        Open

                $data = $this->connection->data;
        Severity: Minor
        Found in src/DataLayer/Fake/SchemaGenerator.php by phan

        Possibly zero references to use statement for classlike/namespace Exception (\Automatorm\Exception)
        Open

        use Automatorm\Exception;
        Severity: Minor
        Found in src/DataLayer/Fake/SchemaGenerator.php by phan

        Line exceeds 120 characters; contains 134 characters
        Open

                            // If the column name is named based on the foreign table name, then use the pivot table name as the property name

        Line exceeds 120 characters; contains 166 characters
        Open

                                    $this->connection->getDataStore()->getData($key['schema'])->addCrossSchemaForeignKey($refTableName, 'one-to-many', $propertyName, $value);

        Line exceeds 120 characters; contains 125 characters
        Open

                                // needs to have a unique name for at least one of the columns (which is not based on the table name)

        Inline control structures are not allowed
        Open

                        if ($tableName) yield $tableName => $keys;

        Line exceeds 120 characters; contains 124 characters
        Open

                            // Outersect of tables to create an array of all OTHER foreign keys in this table, for this foreign key.

        Line exceeds 120 characters; contains 123 characters
        Open

                    if (preg_match('/^\s*([a-z_]+)\s*->\s*([a-z_]+)(?:\.([a-z_]+)\s*|\s*)\|\s*([a-z_]+)\s*$/', $clean, $matches)) {

        Line exceeds 120 characters; contains 147 characters
        Open

                        // For each foreign key, store details in the table it point to on how to get to the OTHER table in the "Many to Many" relationship

        Line exceeds 120 characters; contains 121 characters
        Open

                            $keys[$matches[1]] = ['table' => $matches[3], 'schema' => $matches[2], 'column_name' => $matches[4]];

        Line exceeds 120 characters; contains 132 characters
        Open

                            $keys[$matches[1]] = ['table' => $matches[2], 'schema' => $datastore->schemaName, 'column_name' => $matches[4]];

        Expected 1 newline at end of file; 0 found
        Open

         */

        Expected 1 space after FOREACH keyword; 0 found
        Open

                foreach(preg_split('~[\r\n]+~', $data) as $line) {

        Expected 1 space after SWITCH keyword; 0 found
        Open

                                switch(trim($value)) {

        Expected 1 space after FOREACH keyword; 0 found
        Open

                foreach(preg_split('~[\r\n]+~', $data) as $line) {

        There are no issues that match your filters.

        Category
        Status