-- Leo's gemini proxy

-- Connecting to rkta.srht.site:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

Rene Kita's weblog


Blog[0] About[1] RSS[2] Links[3]


Effortless ctags with git and submodules


2019-08-09


Using Tim Popes Effortless ctags with Git [4] I had the problem that tags for definitions in submodules where missing.


As I usually don't make changes in submodules and these submodules are quite big I don't want to run ctags on them every time I commit, I choose a manually approach to get tags inside submodules.


*UPDATE* Tim Pope removed the feature to add .git to the tags path in recent versions of vim-fugitive. We need to set it manually.


Add


	set tags^=.git/sub.tags
	set tags^=.git/tags

to your vimrc. Then use


	ctags --tag-relative -f .git/sub.tags -R $submodule-dirs

where $submodule-dirs are your directories containing submodules to create a separate tags file.


If you want to run ctags every time on the submodules use the following approach:


After digging a little bit I saw that he is using git ls-files to find files to pass to ctags. A quick study of man git-ls-files showed that you need to pass --recurse-submodules to git ls-files in order to get all files included in the submodules.


Change the ctags-script to be


	#!/bin/sh
	set -e
	PATH="/usr/local/bin:$PATH"
	dir="git rev-parse --git-dir`"
	trap 'rm -f "$dir/$$.tags" EXIT
	git ls-files --recurse-submodules | \
		ctags --extra=+f --tag-relative -L - -f"$dir/$$.tags" --languages=-javascript,sql
	mv "$dir/$$.tags" "$dir/tags"

Note the extra --recurse-submodules behind git ls-files.


This will give you all definitions from submodules in your tags file. Note though, that this will take very long in large projects with many/big submodules. Especially when doing quick commits. A ctags process will be spawned every time you commit, even if there is already one running. This may result in heavy loads.


Last modified: 2019-08-09T00:00:00Z


E-mail: mail@rkta.de[5] IRC: #rkta[6] on Libera.Chat[7]

Copyright (c) 2017-2024 Rene Kita


[0] Blog

[1] About

[2] RSS

[3] Links

[4] Effortless ctags with Git

[5] mail@rkta.de

[6] #rkta

[7] Libera.Chat

-- Response ended

-- Page fetched on Thu May 9 22:18:56 2024