[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