[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
Wed Apr 18 22:39:42 PDT 2018


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
> Log:
> [clang-tidy] Fix clang-tidy doesn't read .clangtidy configuration file.
> 
> Summary: Fix 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
> 
> 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
> ==============================================================================
> --- 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
> ==============================================================================
> --- 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
> ==============================================================================
> --- 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
> ==============================================================================
> --- 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
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
> 


More information about the cfe-commits mailing list