diff --git a/clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp b/clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp --- a/clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp +++ b/clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp @@ -62,6 +62,27 @@ EXPECT_EQ("", CI.mapHeader(File)); } +TEST(CanonicalIncludesTest, CXXStandardLibraryExperimentalFilesystem) { + CanonicalIncludes CI; + auto Language = LangOptions(); + Language.CPlusPlus = true; + CI.addSystemHeadersMapping(Language); + + EXPECT_EQ("", + CI.mapSymbol("std::experimental::filesystem::path")); + EXPECT_EQ("", + CI.mapSymbol("std::experimental::filesystem::directory_iterator")); + // system_complete is replaced by std::filesystem::absolute + EXPECT_EQ("", + 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(); FileManager Files(FileSystemOptions(), InMemFS); diff --git a/clang/include/clang/Tooling/Inclusions/StdSymbolMap.inc b/clang/include/clang/Tooling/Inclusions/StdSymbolMap.inc --- a/clang/include/clang/Tooling/Inclusions/StdSymbolMap.inc +++ b/clang/include/clang/Tooling/Inclusions/StdSymbolMap.inc @@ -1465,6 +1465,63 @@ SYMBOL(temp_directory_path, std::filesystem::, ) SYMBOL(u8path, std::filesystem::, ) SYMBOL(weakly_canonical, std::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::, ) +SYMBOL(canonical, std::experimental::filesystem::, ) +SYMBOL(copy, std::experimental::filesystem::, ) +SYMBOL(copy_file, std::experimental::filesystem::, ) +SYMBOL(copy_options, std::experimental::filesystem::, ) +SYMBOL(copy_symlink, std::experimental::filesystem::, ) +SYMBOL(create_directories, std::experimental::filesystem::, ) +SYMBOL(create_directory, std::experimental::filesystem::, ) +SYMBOL(create_directory_symlink, std::experimental::filesystem::, ) +SYMBOL(create_hard_link, std::experimental::filesystem::, ) +SYMBOL(create_symlink, std::experimental::filesystem::, ) +SYMBOL(current_path, std::experimental::filesystem::, ) +SYMBOL(directory_entry, std::experimental::filesystem::, ) +SYMBOL(directory_iterator, std::experimental::filesystem::, ) +SYMBOL(directory_options, std::experimental::filesystem::, ) +SYMBOL(equivalent, std::experimental::filesystem::, ) +SYMBOL(exists, std::experimental::filesystem::, ) +SYMBOL(file_size, std::experimental::filesystem::, ) +SYMBOL(file_status, std::experimental::filesystem::, ) +SYMBOL(file_time_type, std::experimental::filesystem::, ) +SYMBOL(file_type, std::experimental::filesystem::, ) +SYMBOL(filesystem_error, std::experimental::filesystem::, ) +SYMBOL(hard_link_count, std::experimental::filesystem::, ) +SYMBOL(is_block_file, std::experimental::filesystem::, ) +SYMBOL(is_character_file, std::experimental::filesystem::, ) +SYMBOL(is_directory, std::experimental::filesystem::, ) +SYMBOL(is_empty, std::experimental::filesystem::, ) +SYMBOL(is_fifo, std::experimental::filesystem::, ) +SYMBOL(is_other, std::experimental::filesystem::, ) +SYMBOL(is_regular_file, std::experimental::filesystem::, ) +SYMBOL(is_socket, std::experimental::filesystem::, ) +SYMBOL(is_symlink, std::experimental::filesystem::, ) +SYMBOL(last_write_time, std::experimental::filesystem::, ) +SYMBOL(path, std::experimental::filesystem::, ) +SYMBOL(permissions, std::experimental::filesystem::, ) +SYMBOL(perms, std::experimental::filesystem::, ) +SYMBOL(read_symlink, std::experimental::filesystem::, ) +SYMBOL(recursive_directory_iterator, std::experimental::filesystem::, ) +SYMBOL(remove, std::experimental::filesystem::, ) +SYMBOL(remove_all, std::experimental::filesystem::, ) +SYMBOL(rename, std::experimental::filesystem::, ) +SYMBOL(resize_file, std::experimental::filesystem::, ) +SYMBOL(space, std::experimental::filesystem::, ) +SYMBOL(space_info, std::experimental::filesystem::, ) +SYMBOL(status, std::experimental::filesystem::, ) +SYMBOL(status_known, std::experimental::filesystem::, ) +SYMBOL(symlink_status, std::experimental::filesystem::, ) +SYMBOL(system_complete, std::experimental::filesystem::, ) +SYMBOL(temp_directory_path, std::experimental::filesystem::, ) +SYMBOL(u8path, std::experimental::filesystem::, ) +// clang-format on SYMBOL(basic_string, std::pmr::, ) SYMBOL(deque, std::pmr::, ) SYMBOL(forward_list, std::pmr::, )