Есть ли плагин vim, который позволяет атрибутам Moose отображаться в Tag_List? - PullRequest
6 голосов
/ 02 февраля 2010

Я редактирую пакеты, использующие Moose, и мне было интересно, есть ли плагин для отображения атрибутов 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");
}

Ответы [ 2 ]

5 голосов
/ 24 августа 2010

Джефф, я попробовал ваш код, но он не работал для меня с синтаксисом, который вы используете. Может ли это быть проблемой версии? Я использую exuberant ctags версии 5.8.
Я также немного изменил регулярное выражение, потому что кавычки являются необязательными, и вы можете захотеть разрешить пробелы (но не более) перед ключевым словом has.
Вот что сработало для меня. Я создал файл $ HOME / .ctags (его еще не было, в противном случае просто добавьте к нему) со следующей строкой:

--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'

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

Кроме того, я считаю полезным также иметь информацию о родительском классе, ролях и используемых модулях, отображаемую в списке тегов, поэтому вот мой полный файл $ 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 (вы можете изменить порядок тегов в списке тегов, просто изменив порядок в 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, которая заставляет тэглист отображать только тэги текущего выбранного файла.
Чтобы временно скрыть некоторые теги, вы всегда можете переместить курсор к имени тега и нажать «zc» (и «zo», чтобы открыть снова).

5 голосов
/ 02 февраля 2010

Добавить строку

--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'
...