[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