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

Haojian Wu via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 19 06:39:23 PDT 2018


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>
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
>> 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,
>>                                      OptionsSourceTypeCheckCommandL
>> ineOption);
>>     // 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.De
>> adStores\]$"
>> +
>> +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
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180419/b501e310/attachment-0001.html>


More information about the cfe-commits mailing list