ctags следуют обычаю Шебанг - PullRequest
0 голосов
/ 30 апреля 2019

Я написал сценарий оболочки, который использует пользовательский шебанг.

#!/usr/bin/env my_custom_shebang

bash_function() {

}

Я хочу, чтобы ctags генерировал для него файл тегов для языкового bash.

Я пытался ctags -R my-custom-script --force-language=sh безуспех.

если я изменю #!/usr/bin/env my_custom_shebang на #!/usr/bin/env bash ctags, то все в порядке.

Но мне нужны ctags для генерации тегов, в первой строке будет мой вместо bash shebang.

Может ли кто-нибудь помочь мне здесь?

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

В моем ответе предполагается, что вы используете универсальные ctags (https://ctags.io).

Я покажу два разных решения.

A. Изменение порядка опций

Попробуйте

ctags --force-language=sh -R my-custom-script 

вместо

ctags -R my-custom-script --force-language=sh 

.

B. Используйте --alias - = + option

Попробуйте

ctags --alias-sh=my-custom-script -R my-custom-script

.

0 голосов
/ 30 апреля 2019

У вас есть несколько вариантов.

--language-force=sh самый простой. Тот, который вы пробовали, --force-language=sh, не существует.

Другой вариант будет использовать пользовательское расширение (скажем, .cst) и параметр --langmap=sh:+.cst.

Если вы видите +wildcards в выводе ctags --version, вы также можете использовать шаблоны имен файлов, заключенные в скобки, вместо пользовательского расширения, т. Е. Вы вызываете все ваши my_custom_shebang сценарии с именем, начинающимся с cst_ и вы можете использовать --langmap='sh:+(cst_*)'.

В качестве заключительного замечания, я понимаю, что жаргонный термин шебанг относится к двум символам #!, и, как следствие, к целой строке, начинающейся с них, а не к конкретному интерпретатору команд будучи призванным. Поэтому я бы перефразировал ваш пример нестандартного шебанга как

#!/usr/bin/env my_custom_interpreter

но это действительно педантичное замечание.

...