[PATCH] D142836: [clangd] Add symbol mappings for `std::experimental::filesystem`
Younan Zhang via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 13 01:56:36 PST 2023
zyounan updated this revision to Diff 496875.
zyounan added a comment.
Revise symbols from N4100
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D142836/new/
https://reviews.llvm.org/D142836
Files:
clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp
clang/include/clang/Tooling/Inclusions/StdSymbolMap.inc
Index: clang/include/clang/Tooling/Inclusions/StdSymbolMap.inc
===================================================================
--- clang/include/clang/Tooling/Inclusions/StdSymbolMap.inc
+++ clang/include/clang/Tooling/Inclusions/StdSymbolMap.inc
@@ -1465,6 +1465,63 @@
SYMBOL(temp_directory_path, std::filesystem::, <filesystem>)
SYMBOL(u8path, std::filesystem::, <filesystem>)
SYMBOL(weakly_canonical, std::filesystem::, <filesystem>)
+// These symbols are exported from N4100[fs.filesystem.synopsis], the final
+// draft for experimental filesystem. Note that not all of these symbols were
+// merged into C++17 (See P0492 and related proposals for details). But the
+// cornerstone for mainstream Stdlib TS filesystem implementation is N4100,
+// whatever.
+// clang-format off
+SYMBOL(absolute, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(canonical, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(copy, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(copy_file, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(copy_options, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(copy_symlink, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(create_directories, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(create_directory, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(create_directory_symlink, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(create_hard_link, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(create_symlink, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(current_path, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(directory_entry, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(directory_iterator, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(directory_options, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(equivalent, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(exists, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(file_size, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(file_status, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(file_time_type, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(file_type, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(filesystem_error, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(hard_link_count, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(is_block_file, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(is_character_file, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(is_directory, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(is_empty, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(is_fifo, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(is_other, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(is_regular_file, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(is_socket, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(is_symlink, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(last_write_time, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(path, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(permissions, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(perms, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(read_symlink, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(recursive_directory_iterator, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(remove, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(remove_all, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(rename, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(resize_file, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(space, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(space_info, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(status, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(status_known, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(symlink_status, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(system_complete, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(temp_directory_path, std::experimental::filesystem::, <experimental/filesystem>)
+SYMBOL(u8path, std::experimental::filesystem::, <experimental/filesystem>)
+// clang-format on
SYMBOL(basic_string, std::pmr::, <string>)
SYMBOL(deque, std::pmr::, <deque>)
SYMBOL(forward_list, std::pmr::, <forward_list>)
Index: clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp
+++ clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp
@@ -62,6 +62,27 @@
EXPECT_EQ("<iosfwd>", CI.mapHeader(File));
}
+TEST(CanonicalIncludesTest, CXXStandardLibraryExperimentalFilesystem) {
+ CanonicalIncludes CI;
+ auto Language = LangOptions();
+ Language.CPlusPlus = true;
+ CI.addSystemHeadersMapping(Language);
+
+ EXPECT_EQ("<experimental/filesystem>",
+ CI.mapSymbol("std::experimental::filesystem::path"));
+ EXPECT_EQ("<experimental/filesystem>",
+ CI.mapSymbol("std::experimental::filesystem::directory_iterator"));
+ // system_complete is replaced by std::filesystem::absolute
+ EXPECT_EQ("<experimental/filesystem>",
+ CI.mapSymbol("std::experimental::filesystem::system_complete"));
+ EXPECT_EQ("", CI.mapSymbol("std::filesystem::system_complete"));
+ // relative-related operation is introduced by P0219
+ EXPECT_EQ("", CI.mapSymbol("std::experimental::filesystem::relative"));
+ EXPECT_EQ("", CI.mapSymbol("std::experimental::filesystem::proximate"));
+ EXPECT_EQ("",
+ CI.mapSymbol("std::experimental::filesystem::weakly_canonical"));
+}
+
TEST(CanonicalIncludesTest, PathMapping) {
auto InMemFS = llvm::makeIntrusiveRefCnt<llvm::vfs::InMemoryFileSystem>();
FileManager Files(FileSystemOptions(), InMemFS);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D142836.496875.patch
Type: text/x-patch
Size: 6536 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230213/9c766323/attachment.bin>
More information about the cfe-commits
mailing list