Find unused functions and methods
xunused is a tool to find unused C/C++ functions and methods across source files in the whole project. It is built upon clang to parse the source code.
Just pass the compilation database as an argument to xunused.
xunused compile_commands.json
[8/342] Processing file /Users/dennis/projects/neomutt/email/globals.c
[1/342] Processing file /Users/dennis/projects/neomutt/sidebar/sidebar.c
[3/342] Processing file /Users/dennis/projects/neomutt/conn/zstrm.c
[2/342] Processing file /Users/dennis/projects/neomutt/postpone/postpone.c
[...]
color/parse_ansi.c:75: warning: Function 'ansi_skip_sequence' is unused
mutt/buffer.c:701: warning: Function 'buf_lower' is unused
/Users/dennis/projects/neomutt/mutt/buffer.h:81: note: declared here
mutt/buffer.c:715: warning: Function 'buf_upper' is unused
/Users/dennis/projects/neomutt/mutt/buffer.h:82: note: declared here
config/set.c:1083: warning: Function 'cs_str_delete' is unused
/Users/dennis/projects/neomutt/config/set.h:291: note: declared here
config/set.c:885: warning: Function 'cs_str_native_get' is unused
/Users/dennis/projects/neomutt/config/set.h:284: note: declared here
config/set.c:706: warning: Function 'cs_str_string_get' is unused
[...]
Note: Some platforms may need an extra parameter to locate headers such as stdbool.h
xunused -extra-arg=-I/usr/lib/clang/17/include compile_commands.json
To find functions that are only used by tests but not any other code we need to exclude our test code.
In theory the -filter could be used for that. Unfortunately that only works
for including paths and not for excluding. And the underlying regular
expression engine doesn’t support negative lookahead so something
like -filter='.+^((?!test).)*$' also doesn’t help.
The easy brute force solution is to simply remove the test folder before running xunused.