Плагин taglist не показывает функции Javascript - PullRequest
2 голосов
/ 20 октября 2011

Я использую плагин taglist в течение нескольких дней, и теперь я попробовал его с Javascript, но в Javascript он показывает только частичную информацию или никакой информации.Кажется, что проблема может быть с пространствами имен, потому что функции находятся в

var namespace_name = {

f1: function() {
},
f2: function() {
},
.
.
.

};

или такого рода функции (анонимные)

var something = (function f() {
   }
   ...
})();

Знаете ли вы, как исправить эту проблему?

спасибо

1 Ответ

5 голосов
/ 20 октября 2011

Вы пробовали TagBar ? Это более современный подход к той же идее, который лучше работает с JavaScript и даже поддерживает jsctags.

taglist on the left, tagbar on the right

TagList слева, TagBar справа.

TagList не работает, потому что Exuberant ctags (программа, используемая TagList для индексации вашего кода) не очень хорошо работает с JavaScript, особенно современные вещи с обратными вызовами, замыканиями и самовыполняющимися функциями.

С другой стороны, TagBar использует jsctags для JavaScript, если он доступен. Jsctags создан с учетом современного JavaScript и поэтому работает намного лучше.

Сравните эти файлы тегов, сгенерированные со следующим кодом (на основе ваших примеров):

var namespace_name = {

    f1: function() {
        window.alert("f1");
    },
    f2: function() {
        window.alert("f2");
    }
};
var something = (function f() {
    window.alert("something");
})();

Выход $ ctags .:

// empty file expect for the header

Выход $ 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

В SO есть несколько вопросов о настройке exuberant ctags для улучшения работы с JavaScript: здесь и здесь .

Итак, в принципе, есть два способа решения вашей проблемы: настроить ctags или использовать tagbar + jsctags.

...