Exakat\Tasks\Phploc::countLocInFile PHP Method

countLocInFile() private method

private countLocInFile ( $filename )
    private function countLocInFile($filename)
    {
        $return = array('comments' => 0, 'whitespace' => 0, 'tokens' => 0, 'total' => 0, 'code' => 0, 'files' => 1);
        $lines = array();
        $php = new Phpexec();
        $tokens = $php->getTokenFromFile($filename);
        if (empty($tokens)) {
            display("{$filename} is empty\n");
            $return['files'] = 0;
            $return['error'] = self::EMPTYFILE;
            return $return;
        }
        // One token if it fails compilation but we don't know the error
        if (count($tokens) == 1) {
            display("{$filename} doesn't compile\n");
            $return['files'] = 0;
            $return['error'] = self::INCOMPILABLE;
            return $return;
        }
        $line = 0;
        foreach ($tokens as $token) {
            if (is_array($token)) {
                $line = $token[2];
                $tokenName = token_name($token[0]);
                // counting comments
                if ($tokenName == 'T_DOC_COMMENT') {
                    $return['comments'] += substr_count($token[1], "\n") + 1;
                } elseif ($tokenName == 'T_COMMENT') {
                    ++$return['comments'];
                } elseif ($tokenName == 'T_WHITESPACE') {
                    ++$return['whitespace'];
                } else {
                    if (isset($lines[$line])) {
                        ++$lines[$line];
                    } else {
                        $lines[$line] = 1;
                    }
                    ++$return['tokens'];
                }
            } else {
                ++$return['tokens'];
                if (!in_array($token, array('{', '}'))) {
                    if (isset($lines[$line])) {
                        ++$lines[$line];
                    } else {
                        $lines[$line] = 1;
                    }
                }
            }
        }
        if (is_array($token) && $tokenName == 'T_CLOSE_TAG') {
            --$lines[$line];
            if ($lines[$line] == 0) {
                unset($lines[$line]);
                --$line;
            }
        }
        $return['total'] = $line;
        $return['code'] = count($lines);
        $return['error'] = self::OK;
        return $return;
    }