Синтаксический анализ избыточных Ctags с помощью C

#c #ctags #exuberant-ctags

#c #ctags #буйный-ctags

Вопрос:

Мне нужно создать редактор с помощью браузера символов, и я сказал, что буду играть с ctags. Ну, я прочитал формат ctags и попытался погуглить и выполнить поиск здесь по адресу SO. Все, что я нашел, это вопросы о ctags и vim, а я ноль в vim. Поэтому я решил, что буду играть сам. Итак, я взял файл тегов и был совершенно сбит с толку!

Здесь я поместил PHP-файл и соответствующий ему тег, и мне нужна ваша помощь в том, как мне узнать, представляет ли строка атрибут класса или метод? Также, как я могу узнать возвращаемое значение функции / метода PHP?

Я не нашел ни одного хорошего руководства по работе с тегами PHP (или любого другого языка) в ctags, кроме vi / vim connected! Спасибо

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
 

Ответ №1:

Первый элемент после ;" в каждой строке описывает kind тег, то есть является ли он классом, функцией и т. Д. В вашем примере c обозначает класс, f функцию и так далее. Вы можете получить полный список с ctags --list-kinds=php помощью .

Возвращаемые типы (к сожалению) не сообщаются ctags.

Вам обязательно следует взглянуть на справочную страницу ctags, там все достаточно хорошо объяснено, например, какую другую информацию он может сообщать в дополнение к информации, которую он сообщает по умолчанию.

Комментарии:

1. Правильно ли говорить, что формат: Имя файла / ^ подпись; вид ?

2. Почти, это tagname filename /searchpattern/;" kind . Как я уже сказал, взгляните на справочную страницу, там все объяснено (ниже TAG FILE FORMAT ).

Ответ №2:

Ну, я читаю формат ctags

Формат файла Exuberant Ctags хорошо документирован.