Pergunta

Estou editando pacotes que usam o Moose e queria saber se existe um plugin para fazer os atributos do Moose aparecerem na lista de tags.

Por exemplo, no código a seguir, o atributo options não aparece em Tag_List, mas print_out_site faz:

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");
}
Foi útil?

Solução

Adicione a linha

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

para ~/.ctags e deve aparecer. Pode ser necessário ajustar a expressão regular para evitar correspondências espúrias em outros arquivos ou para acomodar uma formatação diferente para as declarações de atributo em outros arquivos.

Isso estende o CTAGS para detectar outro tipo de tag com base na expressão regular ao analisar arquivos Perl.

Então você precisa informar o plug -in taglist sobre o novo tipo de tag, adicionando isso ao seu arquivo VIMRC:

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

Outras dicas

Geoff, tentei seu código, mas não funcionou para mim com a sintaxe que você usa.Isso poderia ser um problema de versão?Estou usando o exuberante ctags versão 5.8.
Também modifiquei um pouco o regex porque as aspas são opcionais e você pode querer permitir espaços (mas nada mais) precedendo a palavra-chave 'has'.
Aqui está o que funcionou para mim.Criei um arquivo $HOME/.ctags (ainda não tinha, caso contrário, basta adicioná-lo) com a seguinte linha:

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

Em seguida, adicionei a linha em .vimrc como você sugeriu

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

Agora ele lista meus atributos nos módulos Moose.

Além disso, acho útil também ter informações sobre a classe pai, funções e módulos usados ​​exibidos na lista de tags, então aqui está meu arquivo $HOME/.ctags completo:

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

e é isso que tenho em .vimrc (você pode alterar a ordem das tags na taglist simplesmente alterando a ordem em 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

Devido ao conteúdo adicional, acho útil usar a opção Tlist_Show_One_File, que força o taglist a mostrar apenas as tags do arquivo atualmente selecionado.
Para ocultar temporariamente algumas das tags você pode mover o cursor até o nome da tag e clicar em "zc" (e "zo" para reabrir) a dobra.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top