Есть ли плагин VIM, который заставляет атрибуты Moose отображаются в Tag_List?

StackOverflow https://stackoverflow.com/questions/2182164

  •  24-09-2019
  •  | 
  •  

Вопрос

Я редактирую пакеты, которые используют лоси, и мне было интересно, если бы был плагин для создания атрибутов Moose, отображаются в списке тегов.

Например, в следующем коде атрибут options не отображается в Tag_List, но print_out_site делает:

use Moose;
use MooseX::AttributeHelpers;

...

has 'options' => (
    metaclass => 'Collection::Hash',
    isa       => 'HashRef[Str]',
    is        => 'ro',
    provides  => {
        exists => 'exists',
        get    => 'get',
        set    => 'set',
    },
);

...

sub print_out_site {
    my $self = shift;
    my $key  = shift;
    $self->fasta_out_fh->print(">", $key, "\n");
    $self->fasta_out_fh->print($self->sites->{$key}, "\n");
}
Это было полезно?

Решение

Добавьте линию

--regex-perl=/has '(.*)' => \(/\1/a,attribute,moose attributes/

до ~ / .CTAGS, и он должен появиться. Вам может потребоваться настроить регулярное выражение, чтобы избежать ложных матчей в других файлах или для размещения различных форматировку для объявлений атрибутов в других файлах.

Это расширяет CTAGS так, чтобы он обнаружил другой тип тега на основе регулярного выражения при анализе файлов PERL.

Затем вам нужно сказать плагин Taglist о новом типе тегов, добавив это в свой файл VIMRC:

let tlist_perl_settings='perl;c:constant;l:label;p:package;s:subroutine;a:attribute'

Другие советы

Джефф, я попробовал ваш код, но это не сработало для меня с помощью синтаксиса, который вы используете. Может ли это быть задачей версии? Я использую Exuberant CTAGS версию 5.8.
Я также немного модифицировал Regeex, потому что цитаты являются необязательными, и вы, возможно, захотите разрешить пробелы (но больше ничего) предшествуют ключевое слово «имеет».
Вот что сработало для меня. Я создал файл HOME / ACTAGS (еще не было, иначе просто добавить к нему) со следующей строкой:

--regex-perl=/^\s*has\s+['"]?([0-9a-zA-Z_]+)/\1/a,attribute/

Затем добавил строку в .VIMRC, как вы предложили

let tlist_perl_settings='perl;c:constant;l:label;p:package;s:subroutine;a:attribute'

Теперь он перечисляет мои атрибуты в мосельных модулях.

Кроме того, мне полезно также иметь информацию о родительском классе, ролях и использованных модулях, отображаются в TAGLIST, поэтому вот мой полный файл Home / .Ctags

--regex-perl=/^\s*has\s+['"]?([0-9a-zA-Z_]+)/\1/a,attribute/
--regex-perl=/^\s*with\s+(['"])(.+)\1/\2/r,role/
--regex-perl=/^\s*extends\s+(['"])(.+)\1/\2/e,extends/
--regex-perl=/^\s*use\s+([^ ;]+)/\1/u,use/

И это то, что у меня есть в .VIMRC (вы можете изменить порядок тегов в Taglist, просто изменив заказ в TLIST_PAR_SETTINGS):

let tlist_perl_settings='perl;u:use;p:package;r:role;e:extends;c:constant;a:attribute;s:subroutine;l:label'
let Tlist_Show_One_File = 1

Из-за дополнительного контента мне полезно использовать опцию TLIST_SHOW_ONE_FILE, которая заставляет TAGLIST показывать только теги текущего выбранного файла.
Чтобы временно скрыть некоторые теги, которые вы всегда можете переместить курсор на имя тега и нажмите «ZC» (и «ZO», чтобы открыть).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top