用C ++解析繁琐的Ctags

时间:2011-10-26 08:29:33

标签: c++ ctags exuberant-ctags

我需要使用Symbol Browser制作一个编辑器,我说我会用ctags玩。好吧,我读了ctags格式并尝试了谷歌,并在这里搜索SO。我发现的只是关于ctags和vim的问题,而我在vim是零。所以我决定自己一起玩。 所以我拿了一个标签文件,我完全糊涂了!

这里我已经放了PHP文件及其相应的标签,我需要你的帮助,我怎么知道这行是代表类属性还是方法?另外我怎么知道PHP函数/方法的返回值?

我没有找到任何关于在vi / vim连接以外的ctags中处理PHP(或任何其他语言)标签的好教程! 感谢

PHP文件

<?php

$teachers = array("standard one"=>"Celina Stephen", "Standard Two"=>"Emanyor Dickson");

function set_teachers($teacher_array){
    $teachers = $teacher_array;
    return $teacher_array;
}

class School{
    $teachers;
    $students;

    public function __construct(){

    }

    public function get_all(){
        return array($this->teachers,$this->students);
    }
}

class ManySchools extends School{
    public __construct(){
        parent::construct();
    }

    private do_selection($teacher, $student=null){
        return false;
    }

}

标记文件

!_TAG_FILE_FORMAT   2   /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED   1   /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME  Exuberant Ctags //
!_TAG_PROGRAM_URL   http://ctags.sourceforge.net    /official site/
!_TAG_PROGRAM_VERSION   5.9~svn20110310 //
ManySchools test.php    /^class ManySchools extends School{$/;" c
School  test.php    /^class School{$/;" c
__construct test.php    /^    public function __construct(){$/;"    f
get_all test.php    /^    public function get_all(){$/;"    f
set_teachers    test.php    /^function set_teachers($teacher_array){$/;"    f
teachers    test.php    /^    $teachers = $teacher_array;$/;"   v
teachers    test.php    /^$teachers = array("standard one"=>"Celina Stephen", "Standard Two"=>"Emanyor Dickson");$/;"   v

2 个答案:

答案 0 :(得分:3)

每行;"之后的第一项描述了标记的kind,即它是否是类,函数等。在您的示例中c代表类, f用于功能等。您可以使用ctags --list-kinds=php获取完整列表。

(遗憾的是)ctags没有报告返回类型。

你一定要看看ctags手册页,那里的所有内容都说得很清楚,例如,除了默认报告的信息之外,还可以报告其他信息。

答案 1 :(得分:0)

  

我读过ctags格式

Exuberant Ctags文件格式已有详细记录。