O plugin da lista de tags não mostra funções Javascript
-
27-10-2019 - |
Pergunta
Estou usando um plugin taglist
por alguns dias e agora tentei com Javascript, mas em Javascript ele mostra apenas informações parciais ou nenhuma informação.Parece que o problema pode ser com namespaces, porque as funções estão em
var namespace_name = {
f1: function() {
},
f2: function() {
},
.
.
.
};
ou este tipo de funções (anônimas)
var something = (function f() {
}
...
})();
Você sabe como corrigir este problema?
obrigado
Solução
Você tentou TagBar ? É uma abordagem mais moderna da mesma ideia, que funciona melhor com JavaScript e até suporta jsctags.
TagList à esquerda, TagBar à direita.
TagList não funciona porque exuberant ctags (o programa usado por TagList para indexar seu código) não é muito bom com JavaScript, especialmente as coisas modernas com callbacks, encerramentos e funções autoexecutáveis.
Por outro lado, TagBar usa jsctags para JavaScript, se estiver disponível. Jsctags é feito com o JavaScript moderno em mente e, como tal, funciona muito melhor.
Compare esses arquivos de tag gerados com o código a seguir (com base em seus exemplos):
var namespace_name = {
f1: function() {
window.alert("f1");
},
f2: function() {
window.alert("f2");
}
};
var something = (function f() {
window.alert("something");
})();
Saída de $ ctags .
:
// empty file expect for the header
Saída de $ jsctags .
:
// skipped header
namespace_name test.js /^var namespace_name = {$/;" v lineno:1 type:Object
f1 test.js /^\tf1: function() {$/;" f lineno:3 type:void function()
f2 test.js /^\tf2: function() {$/;" f lineno:6 type:void function()
f test.js /^var something = (function f() {$/;" f lineno:11 type:void function()
something test.js /^var something = (function f() {$/;" v lineno:11 type:undefined
Há um monte de perguntas no SO sobre a personalização de ctags exuberantes para fazê-lo funcionar melhor com JavaScript: aqui e aqui .
Então, basicamente, existem duas maneiras de resolver seu problema: personalize ctags ou use tagbar + jsctags.