Пример #1
0
 public function __construct()
 {
     parent::__construct("lint-uninitialized-vars", "Lint (use of uninitialized vars)");
     // super global variables
     $superGlobals = array('$GLOBALS', '$_REQUEST', '$_GET', '$_POST', '$_FILES', '$_ENV', '$_SERVER', '$_COOKIE', '$_SESSION', '$HTTP_RAW_POST_DATA', '$http_response_header', '$php_errormsg', '$this');
     self::$knownSuperglobals = array_fill_keys($superGlobals, true);
     // global variables
     self::$knownGlobals = array_merge(array('$argv', '$argc'), XRef::getConfigValue("lint.add-global-var", array()));
     //  some functions take pass-by-reference params but they don't initialize them,
     //  the params must already exist, e.g. bool sort ( array &$array [, int $sort_flags] )
     $exceptions = array('array_multisort', 'array_pop', 'array_push', 'array_shift', 'array_splice', 'array_unshift', 'array_walk', 'array_walk_recursive', 'arsort', 'asort', 'call_user_method', 'call_user_method_array', 'current', 'each', 'end', 'extract', 'key', 'krsort', 'ksort', 'mb_convert_variables', 'natcasesort', 'natsort', 'next', 'openssl_csr_new', 'pos', 'prev', 'reset', 'rsort', 'settype', 'shuffle', 'sort', 'uasort', 'uksort', 'usort', 'xml_set_object');
     self::$internalFunctionsThatDoesntInitializePassedByReferenceParams = array_fill_keys($exceptions, true);
     $this->projectDatabase = new XRef_ProjectDatabase();
     $this->projectDatabase->finalize();
 }
Пример #2
0
    public function testParseDocComments()
    {
        //
        $doc_comment = '/** @var SimpleClass $simple_test */';
        $var_list = XRef_Lint_UninitializedVars::parseDocComment($doc_comment);
        $this->assertEquals(count($var_list), 1);
        $this->assertEquals($var_list['$simple_test'], 'SimpleClass');
        // multi-lint doc comment
        $doc_comment = '/**
 * @var SimpleClass $simple_test
 */';
        $var_list = XRef_Lint_UninitializedVars::parseDocComment($doc_comment);
        $this->assertEquals(count($var_list), 1);
        $this->assertEquals($var_list['$simple_test'], 'SimpleClass');
        // property-like annotation (not a variable annotation)
        $doc_comment = '/** @var SimpleClass */';
        $var_list = XRef_Lint_UninitializedVars::parseDocComment($doc_comment);
        $this->assertEquals(count($var_list), 0);
        // long doc comment
        $doc_comment = '/**
Some introductory text
 * @var $just_var_without_class
 * @var SimpleClass $simple_test
 * @var AnotherClass $foo , $bar
 * @var YetAnotherClass $a,$b,$c

 */';
        $var_list = XRef_Lint_UninitializedVars::parseDocComment($doc_comment);
        $this->assertEquals(count($var_list), 7);
        $this->assertEquals($var_list['$simple_test'], 'SimpleClass');
        $this->assertEquals($var_list['$foo'], 'AnotherClass');
        $this->assertEquals($var_list['$bar'], 'AnotherClass');
        $this->assertEquals($var_list['$a'], 'YetAnotherClass');
        $this->assertEquals($var_list['$b'], 'YetAnotherClass');
        $this->assertEquals($var_list['$c'], 'YetAnotherClass');
        $this->assertTrue(array_key_exists('$just_var_without_class', $var_list));
        $this->assertTrue(is_null($var_list['$just_var_without_class']));
        // namespaced class names
        $doc_comment = '/**
 * @var  \\Foo\\Bar $foo_bar
 * @var Baz\\Quxx $baz, $quxx,
 */';
        $var_list = XRef_Lint_UninitializedVars::parseDocComment($doc_comment);
        $this->assertEquals(count($var_list), 3);
        $this->assertEquals($var_list['$foo_bar'], '\\Foo\\Bar');
        $this->assertEquals($var_list['$baz'], 'Baz\\Quxx');
        $this->assertEquals($var_list['$quxx'], 'Baz\\Quxx');
    }