[clang-tools-extra] r330245 - [clang-tidy] Fix clang-tidy doesn't read .clangtidy configuration file.

Mikael Holmén via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 19 21:54:51 PDT 2018


Thanks!

On 04/19/2018 03:39 PM, Haojian Wu wrote:
> Thanks! I didn't see this warning when running check-clang-tools on my 
> machine. Fixed in r330327.
> 
> On Thu, Apr 19, 2018 at 7:39 AM, Mikael Holmén 
> <mikael.holmen at ericsson.com <mailto:mikael.holmen at ericsson.com>> wrote:
> 
>     Hi,
> 
> 
>     On 04/18/2018 10:54 AM, Haojian Wu via cfe-commits wrote:
> 
>         Author: hokein
>         Date: Wed Apr 18 01:54:28 2018
>         New Revision: 330245
> 
>         URL: http://llvm.org/viewvc/llvm-project?rev=330245&view=rev
>         <http://llvm.org/viewvc/llvm-project?rev=330245&view=rev>
>         Log:
>         [clang-tidy] Fix clang-tidy doesn't read .clangtidy
>         configuration file.
> 
>         Summary: Fix https://bugs.llvm.org/show_bug.cgi?id=34900
>         <https://bugs.llvm.org/show_bug.cgi?id=34900>.
> 
>         Reviewers: alexfh
> 
>         Reviewed By: alexfh
> 
>         Subscribers: JonasToth, klimek, xazax.hun, cfe-commits
> 
>         Differential Revision: https://reviews.llvm.org/D45697
>         <https://reviews.llvm.org/D45697>
> 
>         Added:
>               clang-tools-extra/trunk/test/clang-tidy/read_file_config.cpp
>         Modified:
>               clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.cpp
>               clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.h
>               clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp
> 
>         Modified: clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.cpp
>         URL:
>         http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.cpp?rev=330245&r1=330244&r2=330245&view=diff
>         <http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.cpp?rev=330245&r1=330244&r2=330245&view=diff>
>         ==============================================================================
>         --- clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.cpp
>         (original)
>         +++ clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.cpp Wed
>         Apr 18 01:54:28 2018
>         @@ -204,9 +204,12 @@ ConfigOptionsProvider::getRawOptions(llv
>            FileOptionsProvider::FileOptionsProvider(
>                const ClangTidyGlobalOptions &GlobalOptions,
>                const ClangTidyOptions &DefaultOptions,
>         -    const ClangTidyOptions &OverrideOptions)
>         +    const ClangTidyOptions &OverrideOptions,
>         +    llvm::IntrusiveRefCntPtr<vfs::FileSystem> VFS)
>                : DefaultOptionsProvider(GlobalOptions, DefaultOptions),
>         -      OverrideOptions(OverrideOptions) {
>         +      OverrideOptions(OverrideOptions), FS(std::move(VFS)) {
>         +  if (!FS)
>         +    FS = vfs::getRealFileSystem();
>              ConfigHandlers.emplace_back(".clang-tidy", parseConfiguration);
>            }
>            @@ -224,14 +227,19 @@ FileOptionsProvider::FileOptionsProvider
>            std::vector<OptionsSource>
>            FileOptionsProvider::getRawOptions(StringRef FileName) {
>              DEBUG(llvm::dbgs() << "Getting options for file " <<
>         FileName << "...\n");
>         +  assert(FS && "FS must be set.");
>         +
>         +  llvm::SmallString<128> AbsoluteFilePath(FileName);
>         +  if (std::error_code ec = FS->makeAbsolute(AbsoluteFilePath))
>         +    return {};
> 
> 
>     This causes a compilation warning:
> 
>     ../tools/clang/tools/extra/clang-tidy/ClangTidyOptions.cpp:233:23:
>     error: unused variable 'ec' [-Werror,-Wunused-variable]
>        if (std::error_code ec = FS->makeAbsolute(AbsoluteFilePath))
>                            ^
>     1 error generated.
> 
>     Regards,
>     Mikael
> 
> 
> 
>              std::vector<OptionsSource> RawOptions =
>         -      DefaultOptionsProvider::getRawOptions(FileName);
>         +     
>         DefaultOptionsProvider::getRawOptions(AbsoluteFilePath.str());
>              OptionsSource CommandLineOptions(OverrideOptions,
>         OptionsSourceTypeCheckCommandLineOption);
>              // Look for a suitable configuration file in all parent
>         directories of the
>              // file. Start with the immediate parent directory and move up.
>         -  StringRef Path = llvm::sys::path::parent_path(FileName);
>         +  StringRef Path =
>         llvm::sys::path::parent_path(AbsoluteFilePath.str());
>              for (StringRef CurrentPath = Path; !CurrentPath.empty();
>                   CurrentPath = llvm::sys::path::parent_path(CurrentPath)) {
>                llvm::Optional<OptionsSource> Result;
> 
>         Modified: clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.h
>         URL:
>         http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.h?rev=330245&r1=330244&r2=330245&view=diff
>         <http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.h?rev=330245&r1=330244&r2=330245&view=diff>
>         ==============================================================================
>         --- clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.h (original)
>         +++ clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.h Wed
>         Apr 18 01:54:28 2018
>         @@ -13,7 +13,9 @@
>            #include "llvm/ADT/Optional.h"
>            #include "llvm/ADT/StringMap.h"
>            #include "llvm/ADT/StringRef.h"
>         +#include "llvm/ADT/IntrusiveRefCntPtr.h"
>            #include "llvm/Support/ErrorOr.h"
>         +#include "clang/Basic/VirtualFileSystem.h"
>            #include <functional>
>            #include <map>
>            #include <string>
>         @@ -221,7 +223,8 @@ public:
>              /// whatever options are read from the configuration file.
>              FileOptionsProvider(const ClangTidyGlobalOptions
>         &GlobalOptions,
>                                  const ClangTidyOptions &DefaultOptions,
>         -                      const ClangTidyOptions &OverrideOptions);
>         +                      const ClangTidyOptions &OverrideOptions,
>         +                      llvm::IntrusiveRefCntPtr<vfs::FileSystem>
>         FS = nullptr);
>                /// \brief Initializes the \c FileOptionsProvider
>         instance with a custom set
>              /// of configuration file handlers.
>         @@ -255,6 +258,7 @@ protected:
>              llvm::StringMap<OptionsSource> CachedOptions;
>              ClangTidyOptions OverrideOptions;
>              ConfigFileHandlers ConfigHandlers;
>         +  llvm::IntrusiveRefCntPtr<vfs::FileSystem> FS;
>            };
>              /// \brief Parses LineFilter from JSON and stores it to the
>         \p Options.
> 
>         Modified: clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp
>         URL:
>         http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp?rev=330245&r1=330244&r2=330245&view=diff
>         <http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp?rev=330245&r1=330244&r2=330245&view=diff>
>         ==============================================================================
>         --- clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp
>         (original)
>         +++ clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp
>         Wed Apr 18 01:54:28 2018
>         @@ -286,7 +286,8 @@ static void printProfileData(const Profi
>              OS.flush();
>            }
>            -static std::unique_ptr<ClangTidyOptionsProvider>
>         createOptionsProvider() {
>         +static std::unique_ptr<ClangTidyOptionsProvider>
>         createOptionsProvider(
>         +   llvm::IntrusiveRefCntPtr<vfs::FileSystem> FS) {
>              ClangTidyGlobalOptions GlobalOptions;
>              if (std::error_code Err = parseLineFilter(LineFilter,
>         GlobalOptions)) {
>                llvm::errs() << "Invalid LineFilter: " << Err.message()
>         << "\n\nUsage:\n";
>         @@ -334,7 +335,7 @@ static std::unique_ptr<ClangTidyOptionsP
>                }
>              }
>              return
>         llvm::make_unique<FileOptionsProvider>(GlobalOptions,
>         DefaultOptions,
>         -                                                OverrideOptions);
>         +                                               
>         OverrideOptions, std::move(FS));
>            }
>              llvm::IntrusiveRefCntPtr<vfs::FileSystem>
>         @@ -364,8 +365,13 @@ getVfsOverlayFromFile(const std::string
>            static int clangTidyMain(int argc, const char **argv) {
>              CommonOptionsParser OptionsParser(argc, argv,
>         ClangTidyCategory,
>                                                cl::ZeroOrMore);
>         +  llvm::IntrusiveRefCntPtr<vfs::FileSystem> BaseFS(
>         +      VfsOverlay.empty() ? vfs::getRealFileSystem()
>         +                         : getVfsOverlayFromFile(VfsOverlay));
>         +  if (!BaseFS)
>         +    return 1;
>            -  auto OwningOptionsProvider = createOptionsProvider();
>         +  auto OwningOptionsProvider = createOptionsProvider(BaseFS);
>              auto *OptionsProvider = OwningOptionsProvider.get();
>              if (!OptionsProvider)
>                return 1;
>         @@ -432,12 +438,6 @@ static int clangTidyMain(int argc, const
>                llvm::cl::PrintHelpMessage(/*Hidden=*/false,
>         /*Categorized=*/true);
>                return 1;
>              }
>         -  llvm::IntrusiveRefCntPtr<vfs::FileSystem> BaseFS(
>         -      VfsOverlay.empty() ? vfs::getRealFileSystem()
>         -                         : getVfsOverlayFromFile(VfsOverlay));
>         -  if (!BaseFS)
>         -    return 1;
>         -
>              ProfileData Profile;
>                llvm::InitializeAllTargetInfos();
> 
>         Added: clang-tools-extra/trunk/test/clang-tidy/read_file_config.cpp
>         URL:
>         http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/read_file_config.cpp?rev=330245&view=auto
>         <http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/read_file_config.cpp?rev=330245&view=auto>
>         ==============================================================================
>         --- clang-tools-extra/trunk/test/clang-tidy/read_file_config.cpp
>         (added)
>         +++ clang-tools-extra/trunk/test/clang-tidy/read_file_config.cpp
>         Wed Apr 18 01:54:28 2018
>         @@ -0,0 +1,12 @@
>         +// RUN: mkdir -p %T/read-file-config/
>         +// RUN: cp %s %T/read-file-config/test.cpp
>         +// RUN: echo 'Checks: "-*,modernize-use-nullptr"' >
>         %T/read-file-config/.clang-tidy
>         +// RUN: echo '[{"command": "cc -c -o test.o test.cpp",
>         "directory": "%T/read-file-config", "file":
>         "%T/read-file-config/test.cpp"}]' >
>         %T/read-file-config/compile_commands.json
>         +// RUN: clang-tidy %T/read-file-config/test.cpp | not grep
>         "warning: .*\[clang-analyzer-deadcode.DeadStores\]$"
>         +// RUN: clang-tidy -checks="-*,clang-analyzer-*"
>         %T/read-file-config/test.cpp | grep "warning:
>         .*\[clang-analyzer-deadcode.DeadStores\]$"
>         +
>         +void f() {
>         +  int x;
>         +  x = 1;
>         +  x = 2;
>         +}
> 
> 
>         _______________________________________________
>         cfe-commits mailing list
>         cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>
>         http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>         <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits>
> 
> 



More information about the cfe-commits mailing list