List of all kind symbols that can be extracted
$ ctags --list-kinds=C++
c classes
d macro definitions
e enumerators (values inside an enumeration)
f function definitions
g enumeration names
l local variables [off]
m class, struct, and union members
n namespaces
p function prototypes [off]
s structure names
t typedefs
u union names
v variable definitions
x external and forward variable declarations [off]
$
Create a classes_and_functions
file with all class and function symbols for all *.cpp files located in the current directory:
$ ctags --language-force=C++ --C++-kinds=cf -o classes_and_functions *.cpp
$ cat classes_and_functions
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR Darren Hiebert /[email protected]/
!_TAG_PROGRAM_NAME Exuberant Ctags //
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
!_TAG_PROGRAM_VERSION 5.9~svn20110310 //
main boost_multi_array_2D.cpp /^int main(void) {$/;" f
main boost_ublas_double.cpp /^int main(void) {$/;" f
main create_attribute_string_integer.cpp /^int main(void) {$/;" f
main create_dataset_double.cpp /^int main(void) {$/;" f
main parallel_hdf5_write_dataset.cpp /^int main(int argc, char** argv) {$/;"f
main read_write_dataset_string.cpp /^int main(void) {$/;" f
main read_write_single_scalar.cpp /^int main(void) {$/;" f
main read_write_vector_dataset.cpp /^int main(void) {$/;" f
main select_by_id_dataset_cpp11.cpp /^int main(void) {$/;" f
main select_partial_dataset_cpp11.cpp /^int main(void) {$/;" f
read_dataset read_write_vector_dataset.cpp /^void read_dataset() {$/;" f
write_dataset read_write_vector_dataset.cpp /^void write_dataset() {$/;" f
Note the kind of symbol at the end of each line.
def convert(name):
s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
Here is a Dockerfile
you can use to create a Docker image providing every tools required:
FROM ubuntu:16.04
RUN apt-get update \
&& apt-get install -y ctags wget xz-utils python \
&& wget http://releases.llvm.org/4.0.1/clang+llvm-4.0.1-x86_64-linux-gnu-debian8.tar.xz \
&& xz -d clang+llvm-4.0.1-x86_64-linux-gnu-debian8.tar.xz \
&& tar xf clang+llvm-4.0.1-x86_64-linux-gnu-debian8.tar
ENV PATH="${PWD}/clang+llvm-4.0.1-x86_64-linux-gnu-debian8/bin:${PATH}"