From b2a22cf20a542170db544c17b3198d2b72a954ea Mon Sep 17 00:00:00 2001 From: Tyler Veness Date: Sat, 24 Nov 2018 22:30:33 -0800 Subject: [PATCH] Make includeorder.py handle #ifndef --- wpiformat/wpiformat/includeorder.py | 8 +- wpiformat/wpiformat/test/test_includeorder.py | 79 +++++++++++++++++++ 2 files changed, 84 insertions(+), 3 deletions(-) diff --git a/wpiformat/wpiformat/includeorder.py b/wpiformat/wpiformat/includeorder.py index 7c0fb48..f1af44c 100644 --- a/wpiformat/wpiformat/includeorder.py +++ b/wpiformat/wpiformat/includeorder.py @@ -263,10 +263,10 @@ def header_sort(self, config_file, lines_list, file_name, start, end, ifdef_leve i = start while i < end: - if "#ifdef" in lines_list[i]: + if "#ifdef" in lines_list[i] or "#ifndef" in lines_list[i]: ifdef_count = 1 for j in range(i + 1, end): - if "#ifdef" in lines_list[j]: + if "#ifdef" in lines_list[j] or "#ifndef" in lines_list[j]: ifdef_count += 1 elif "#endif" in lines_list[j]: ifdef_count -= 1 @@ -420,7 +420,9 @@ def run_pipeline(self, config_file, name, lines): # Write lines from beginning of file to headers i = 0 while i < len(lines_list) and ( - "#ifdef" not in lines_list[i] and "#include" not in lines_list[i] + "#ifdef" not in lines_list[i] + and "#ifndef" not in lines_list[i] + and "#include" not in lines_list[i] ): i += 1 output_list = lines_list[0:i] diff --git a/wpiformat/wpiformat/test/test_includeorder.py b/wpiformat/wpiformat/test/test_includeorder.py index ebec039..8cae81f 100644 --- a/wpiformat/wpiformat/test/test_includeorder.py +++ b/wpiformat/wpiformat/test/test_includeorder.py @@ -950,4 +950,83 @@ def test_includeorder(): ) test.add_latest_input_as_output(True) + # Ensure #ifndef is handled properly + test.add_input( + "./Test.h", + "#ifndef __APPLE__" + + os.linesep + + "#include " + + os.linesep + + "#elif !defined(_WIN32)" + + os.linesep + + "#include " + + os.linesep + + "#endif" + + os.linesep, + ) + test.add_latest_input_as_output(True) + + # Ensure #ifndef is handled properly + test.add_input( + "./Test.h", + "#ifndef _WIN32" + + os.linesep + + "#include " + + os.linesep + + "#endif" + + os.linesep, + ) + test.add_latest_input_as_output(True) + + # Ensure include guards are handled properly + test.add_input( + "./Test.h", + "#ifndef CSCORE_CONFIGURABLESOURCEIMPL_H_" + + os.linesep + + "#define CSCORE_CONFIGURABLESOURCEIMPL_H_" + + os.linesep + + os.linesep + + "#include " + + os.linesep + + "#include " + + os.linesep + + "#include " + + os.linesep + + "#include " + + os.linesep + + "#include " + + os.linesep + + "#include " + + os.linesep + + os.linesep + + "#include " + + os.linesep + + os.linesep + + '#include "SourceImpl.h"' + + os.linesep + + os.linesep + + "namespace cs {" + + os.linesep + + os.linesep + + "class ConfigurableSourceImpl : public SourceImpl {" + + os.linesep + + " protected:" + + os.linesep + + " ConfigurableSourceImpl(std::string_view name, wpi::Logger& logger," + + os.linesep + + " Notifier& notifier, Telemetry& telemetry," + + os.linesep + + " const VideoMode& mode);" + + os.linesep + + "};" + + os.linesep + + os.linesep + + "} // namespace cs" + + os.linesep + + os.linesep + + "#endif // CSCORE_CONFIGURABLESOURCEIMPL_H_" + + os.linesep, + ) + test.add_latest_input_as_output(True) + test.run(OutputType.FILE)