Пример #1
0
        // luckily, PHP doesn't allow those
        list($class, $class_name) = $scope;
        $consts = $class->selectDescendantsOfType('n_CLASS_CONSTANT_DECLARATION_LIST');
        foreach ($consts as $const_list) {
            foreach ($const_list->getChildren() as $const) {
                $const_name = $const->getChildByIndex(0);
                print_symbol($file, 'class_const', $const_name, $class_name);
            }
        }
        $members = $class->selectDescendantsOfType('n_CLASS_MEMBER_DECLARATION_LIST');
        foreach ($members as $member_list) {
            foreach ($member_list->getChildren() as $member) {
                if ($member->getTypeName() == 'n_CLASS_MEMBER_MODIFIER_LIST') {
                    continue;
                }
                $member_name = $member->getChildByIndex(0);
                print_symbol($file, 'member', $member_name, $class_name);
            }
        }
        $methods = $class->selectDescendantsOfType('n_METHOD_DECLARATION');
        foreach ($methods as $method) {
            $method_name = $method->getChildByIndex(2);
            print_symbol($file, 'method', $method_name, $class_name);
        }
    }
}
function print_symbol($file, $type, $token, $context = null)
{
    $parts = array($context ? $context->getConcreteString() : '', ltrim($token->getConcreteString(), '$'), $type, 'php', $token->getLineNumber(), '/' . ltrim($file, './'));
    echo implode(' ', $parts) . "\n";
}
Пример #2
0
        list($token, $file_path, $line_num) = $tag_info;
        list($type, $language) = $extension_fields;
        // strip "language:"
        $language = substr($language, 9);
        // To keep consistent with "Separate with commas, for example: php, py"
        // in Arcanist Project edit form.
        $language = str_ireplace("python", "py", $language);
        // also, "normalize" c++ and c#
        $language = str_ireplace("c++", "cpp", $language);
        $language = str_ireplace("c#", "csharp", $language);
        switch ($type) {
            case 'class':
                print_symbol($file_path, $line_num, 'class', $token, $language);
                break;
            case 'function':
                print_symbol($file_path, $line_num, 'function', $token, $language);
                break;
            default:
        }
    }
}
function ctags_get_parser_future($file_path)
{
    $future = new ExecFuture('ctags -n --fields=Kl -o - %s', $file_path);
    return $future;
}
function ctags_check_executable()
{
    $future = new ExecFuture('ctags --version');
    $result = $future->resolve();
    if (empty($result[1])) {
Пример #3
0
$data = array();
$futures = array();
foreach ($input as $file) {
    $file = Filesystem::readablePath($file);
    $data[$file] = Filesystem::readFile($file);
    $futures[$file] = xhpast_get_parser_future($data[$file]);
}
foreach (Futures($futures)->limit(8) as $file => $future) {
    $tree = XHPASTTree::newFromDataAndResolvedExecFuture($data[$file], $future->resolve());
    $root = $tree->getRootNode();
    $functions = $root->selectDescendantsOfType('n_FUNCTION_DECLARATION');
    foreach ($functions as $function) {
        $name = $function->getChildByIndex(2);
        print_symbol($file, 'function', $name);
    }
    $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION');
    foreach ($classes as $class) {
        $class_name = $class->getChildByIndex(1);
        print_symbol($file, 'class', $class_name);
    }
    $interfaces = $root->selectDescendantsOfType('n_INTERFACE_DECLARATION');
    foreach ($interfaces as $interface) {
        $interface_name = $interface->getChildByIndex(1);
        print_symbol($file, 'interface', $interface_name);
    }
}
function print_symbol($file, $type, $token)
{
    $parts = array($token->getConcreteString(), $type, 'php', $token->getLineNumber(), '/' . ltrim($file, './'));
    echo implode(' ', $parts) . "\n";
}
        }
        // Strip "language:"
        $language = substr($language, 9);
        // To keep consistent with "Separate with commas, for example: php, py"
        // in Arcanist Project edit form.
        $language = str_ireplace('python', 'py', $language);
        // Also, "normalize" C++ and C#.
        $language = str_ireplace('c++', 'cpp', $language);
        $language = str_ireplace('c#', 'cs', $language);
        // Ruby has "singleton method", for example.
        $type = substr(str_replace(' ', '_', $type), 0, 12);
        // class:foo, struct:foo, union:foo, enum:foo, ...
        $context = last(explode(':', $context, 2));
        $ignore = array('variable' => true);
        if (empty($ignore[$type])) {
            print_symbol($file_path, $line_num, $type, $token, $context, $language);
        }
    }
}
function ctags_get_parser_future($path)
{
    $future = new ExecFuture('ctags -n --fields=Kls -o - %s', $path);
    return $future;
}
function ctags_check_executable()
{
    $result = exec_manual('ctags --version');
    return !empty($result[1]);
}
function print_symbol($file, $line_num, $type, $token, $context, $language)
{