Y a-t-il un plugin VIM qui fait que les attributs d'orignal apparaissent dans tag_list?
Question
Je modifie des packages qui utilisent Moose, et je me demandais s'il y avait un plugin pour faire apparaître les attributs d'orignal dans la liste des balises.
Par exemple, dans le code suivant, l'attribut options
n'apparaît pas dans tag_list, mais print_out_site
Est-ce que:
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");
}
La solution
Ajouter la ligne
--regex-perl=/has '(.*)' => \(/\1/a,attribute,moose attributes/
à ~ / .ctags et il devrait apparaître. Vous devrez peut-être modifier l'expression régulière pour éviter les correspondances parasites dans d'autres fichiers ou pour tenir compte du formatage différent pour les déclarations d'attribut dans d'autres fichiers.
Cela étend CTAGS de sorte qu'il détecte un autre type de balise basé sur l'expression régulière lors de l'analyse des fichiers Perl.
Ensuite, vous devez parler du plugin TagList sur le nouveau type de balise en l'ajoutant à votre fichier VIMRC:
let tlist_perl_settings='perl;c:constant;l:label;p:package;s:subroutine;a:attribute'
Autres conseils
Geoff, j'ai essayé votre code mais cela n'a pas fonctionné pour moi avec la syntaxe que vous utilisez. Serait-ce un problème de version? J'utilise des CTAGS exubérants version 5.8.
J'ai également modifié un peu le regex parce que les citations sont facultatives et vous voudrez peut-être permettre aux espaces (mais rien d'autre) précédant le mot clé «Has».
Voici ce qui a fonctionné pour moi. J'ai créé un fichier $ home / .ctags (je n'en avais pas encore, sinon il suffit d'y ajouter) avec la ligne suivante:
--regex-perl=/^\s*has\s+['"]?([0-9a-zA-Z_]+)/\1/a,attribute/
Puis a ajouté la ligne dans .vimrc comme vous l'avez suggéré
let tlist_perl_settings='perl;c:constant;l:label;p:package;s:subroutine;a:attribute'
Maintenant, il répertorie mes attributs dans les modules Moose.
De plus, je trouve utile d'avoir également des informations sur la classe parent, les rôles et les modules d'occasion apparaissent dans la liste de tags, alors voici mon fichier complet $ 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/
Et c'est ce que j'ai dans .vimrc (vous pouvez modifier l'ordre des balises dans la liste de tags simplement en modifiant l'ordre dans le 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
En raison du contenu supplémentaire, je trouve utile d'utiliser l'option tlist_show_one_file, qui force la taglist pour afficher uniquement les balises du fichier actuellement sélectionné.
Pour masquer temporairement certaines des balises, vous pouvez toujours déplacer le curseur vers le nom de la balise et frapper "ZC" (et "zo" pour rouvrir) le pli.