[include-cleaner][NFC] expose and test normalizePath helper (#189364)
Also fix a bug where the root `/` path would become an empty string.
This commit is contained in:
@@ -100,14 +100,12 @@ std::string Include::quote() const {
|
|||||||
.str();
|
.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
static llvm::SmallString<128> normalizePath(llvm::StringRef Path) {
|
llvm::SmallString<128> normalizePath(llvm::StringRef Path) {
|
||||||
namespace path = llvm::sys::path;
|
namespace path = llvm::sys::path;
|
||||||
|
|
||||||
llvm::SmallString<128> P = Path;
|
llvm::SmallString<128> P = Path;
|
||||||
path::remove_dots(P, /*remove_dot_dot=*/true);
|
path::remove_dots(P, /*remove_dot_dot=*/true);
|
||||||
path::native(P, path::Style::posix);
|
path::native(P, path::Style::posix);
|
||||||
while (!P.empty() && P.back() == '/')
|
|
||||||
P.pop_back();
|
|
||||||
return P;
|
return P;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -96,6 +96,8 @@ template <typename T> struct Hinted : public T {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
llvm::SmallString<128> normalizePath(llvm::StringRef Path);
|
||||||
|
|
||||||
} // namespace clang::include_cleaner
|
} // namespace clang::include_cleaner
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
//===-- RecordTest.cpp ----------------------------------------------------===//
|
//===-- TypesTest.cpp -----------------------------------------------------===//
|
||||||
//
|
//
|
||||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||||
// See https://llvm.org/LICENSE.txt for license information.
|
// See https://llvm.org/LICENSE.txt for license information.
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "clang-include-cleaner/Types.h"
|
#include "clang-include-cleaner/Types.h"
|
||||||
|
#include "TypesInternal.h"
|
||||||
#include "clang/Basic/FileManager.h"
|
#include "clang/Basic/FileManager.h"
|
||||||
#include "clang/Basic/FileSystemOptions.h"
|
#include "clang/Basic/FileSystemOptions.h"
|
||||||
#include "clang/Tooling/Inclusions/StandardLibrary.h"
|
#include "clang/Tooling/Inclusions/StandardLibrary.h"
|
||||||
@@ -98,5 +99,20 @@ TEST(RecordedIncludesTest, MatchVerbatimMixedAbsoluteRelative) {
|
|||||||
EXPECT_THAT(Inc.match(Header("<bar.h>")), IsEmpty());
|
EXPECT_THAT(Inc.match(Header("<bar.h>")), IsEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(NormalizePathTest, RemovesDotSegments) {
|
||||||
|
EXPECT_EQ(normalizePath("foo/./bar/../baz").str(), "foo/baz");
|
||||||
|
EXPECT_EQ(normalizePath("/foo/./bar").str(), "/foo/bar");
|
||||||
|
EXPECT_EQ(normalizePath("/foo/../bar").str(), "/bar");
|
||||||
|
EXPECT_EQ(normalizePath("foo/bar/").str(), "foo/bar");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(NormalizePathTest, CanonicalizesSeparators) {
|
||||||
|
EXPECT_EQ(normalizePath("foo\\bar").str(), "foo/bar");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(NormalizePathTest, PreservesRootPath) {
|
||||||
|
EXPECT_EQ(normalizePath("/").str(), "/");
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace clang::include_cleaner
|
} // namespace clang::include_cleaner
|
||||||
|
|||||||
Reference in New Issue
Block a user