Page MenuHomePhabricator

Script to find redundant includes.
Needs ReviewPublic

Authored by mzolotukhin on Jun 20 2018, 6:22 PM.
This revision needs review, but there are no reviewers specified.



How to use:

Edit script - it has a bunch of parameters (which I was too lazy to make command line arguments), and you'll need to specify your paths there. Namely, you'll need to change values of the following variables:

  • repo_folders - it should be an array of paths to the repos. If the project has only one repo (unlike LLVM/clang) then the array would have only one element.
  • build_folder - build folder. This is where compile_commands.json is expected to be and this is where the script would run build/tests.
  • compile_db_file - if compile_commands.json is in a different folder, it can be specified here.
  • processed_files - this is a path to a temporary file, it's used to record which files have been processed. It's useful to resume the script's work after interrupting it.
  • files_list_name - (optional) list of files to process in json format. Can be omitted.
  • do_tests - control variable specifying whether the script will run build+tests after processing a file or not.
  • tests_command - command that would run build+tests (basically it's a command used for verifying our change, we just expect its return code to be 0).

After editing is done, we need to go to our repo and create a temporary branch. The script will go to the repo and commit changes, so it's better to be on a separate branch.

cd /path/to/repo
git checkout -b temp_branch

Now go back to the scripts repo and start the script:

cd /path/to/redundant-headers

The output should look like this (with colors!):

[1/3] /a.cpp
Trying to remove "c.h"...  Required!
Trying to remove "b.h"...  Redundant!
Trying to remove "a.h"...  Redundant!
This one we'll remove:  "b.h"
This one we'll remove:  "a.h"
Preprocessed size change: 27 -> 13
diff --git a/a.cpp b/a.cpp
index c51cc72..47f5f6c 100644
--- a/a.cpp
+++ b/a.cpp
@@ -1,2 +0,0 @@
-#include "a.h"
-#include "b.h"
[2/3] /b.cpp

When the script finishes, the changes would be in the output and committed to the repo (that's why we created a separate branch).

Diff Detail

Event Timeline

mzolotukhin created this revision.Jun 20 2018, 6:22 PM
mzolotukhin edited the summary of this revision. (Show Details)Jun 20 2018, 6:23 PM
mzolotukhin edited subscribers, added: thakis; removed: llvm-commits.