Skip to content

[libc++] Start tracking Github issues in status pages #149833

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

ldionne
Copy link
Member

@ldionne ldionne commented Jul 21, 2025

This patch adds another row to the Status pages that cross-references the Github issue. It also ensures that the synchronization script takes that new row into account.

This should make it easier to find out about the detailed status of a paper from the status pages by clicking on the link and being taken directly to its associated Github issue. I expect that this should remove the need for many "Notes" which simply duplicate the information of which parts of a paper are implemented: instead we can list that the implementation is partial and users can click on the Github issue to see what's implemented.

This patch adds another row to the Status pages that cross-references
the Github issue. It also ensures that the synchronization script takes
that new row into account.

This should make it easier to find out about the detailed status of a
paper from the status pages by clicking on the link and being taken
directly to its associated Github issue. I expect that this should
remove the need for many "Notes" which simply duplicate the information
of which parts of a paper are implemented: instead we can list that the
implementation is partial and users can click on the Github issue to see
what's implemented.
@ldionne ldionne requested a review from a team as a code owner July 21, 2025 15:10
@llvmbot llvmbot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Jul 21, 2025
@ldionne
Copy link
Member Author

ldionne commented Jul 21, 2025

@llvmbot
Copy link
Member

llvmbot commented Jul 21, 2025

@llvm/pr-subscribers-libcxx

Author: Louis Dionne (ldionne)

Changes

This patch adds another row to the Status pages that cross-references the Github issue. It also ensures that the synchronization script takes that new row into account.

This should make it easier to find out about the detailed status of a paper from the status pages by clicking on the link and being taken directly to its associated Github issue. I expect that this should remove the need for many "Notes" which simply duplicate the information of which parts of a paper are implemented: instead we can list that the implementation is partial and users can click on the Github issue to see what's implemented.


Patch is 560.40 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/149833.diff

9 Files Affected:

  • (modified) libcxx/docs/Status/Cxx17Issues.csv (+315-315)
  • (modified) libcxx/docs/Status/Cxx17Papers.csv (+113-113)
  • (modified) libcxx/docs/Status/Cxx20Issues.csv (+302-302)
  • (modified) libcxx/docs/Status/Cxx20Papers.csv (+206-206)
  • (modified) libcxx/docs/Status/Cxx23Issues.csv (+308-308)
  • (modified) libcxx/docs/Status/Cxx23Papers.csv (+122-122)
  • (modified) libcxx/docs/Status/Cxx2cIssues.csv (+152-152)
  • (modified) libcxx/docs/Status/Cxx2cPapers.csv (+159-159)
  • (modified) libcxx/utils/synchronize_csv_status_files.py (+39-5)
diff --git a/libcxx/docs/Status/Cxx17Issues.csv b/libcxx/docs/Status/Cxx17Issues.csv
index 15f4b28575b6a..b01f11b9ca551 100644
--- a/libcxx/docs/Status/Cxx17Issues.csv
+++ b/libcxx/docs/Status/Cxx17Issues.csv
@@ -1,315 +1,315 @@
-"Issue #","Issue Name","Meeting","Status","First released version","Notes"
-"`LWG2016 <https://wg21.link/LWG2016>`__","Allocators must be no-throw swappable","2014-11 (Urbana)","|Complete|","",""
-"`LWG2118 <https://wg21.link/LWG2118>`__","``unique_ptr``\  for array does not support cv qualification conversion of actual argument","2014-11 (Urbana)","|Complete|","",""
-"`LWG2170 <https://wg21.link/LWG2170>`__","Aggregates cannot be ``DefaultConstructible``\ ","2014-11 (Urbana)","|Complete|","",""
-"`LWG2340 <https://wg21.link/LWG2340>`__","Replacement allocation functions declared as inline","2014-11 (Urbana)","|Complete|","",""
-"`LWG2354 <https://wg21.link/LWG2354>`__","Unnecessary copying when inserting into maps with braced-init syntax","2014-11 (Urbana)","|Complete|","",""
-"`LWG2377 <https://wg21.link/LWG2377>`__","``std::align``\  requirements overly strict","2014-11 (Urbana)","|Complete|","",""
-"`LWG2396 <https://wg21.link/LWG2396>`__","``underlying_type``\  doesn't say what to do for an incomplete enumeration type","2014-11 (Urbana)","|Complete|","",""
-"`LWG2399 <https://wg21.link/LWG2399>`__","``shared_ptr``\ 's constructor from ``unique_ptr``\  should be constrained","2014-11 (Urbana)","|Complete|","",""
-"`LWG2400 <https://wg21.link/LWG2400>`__","``shared_ptr``\ 's ``get_deleter()``\  should use ``addressof()``\ ","2014-11 (Urbana)","|Complete|","",""
-"`LWG2401 <https://wg21.link/LWG2401>`__","``std::function``\  needs more noexcept","2014-11 (Urbana)","|Complete|","",""
-"`LWG2404 <https://wg21.link/LWG2404>`__","``mismatch()``\ 's complexity needs to be updated","2014-11 (Urbana)","|Complete|","",""
-"`LWG2408 <https://wg21.link/LWG2408>`__","SFINAE-friendly ``common_type``\  / ``iterator_traits``\  is missing in C++14","2014-11 (Urbana)","|Complete|","",""
-"`LWG2106 <https://wg21.link/LWG2106>`__","``move_iterator``\  wrapping iterators returning prvalues","2014-11 (Urbana)","|Complete|","",""
-"`LWG2129 <https://wg21.link/LWG2129>`__","User specializations of ``std::initializer_list``\ ","2014-11 (Urbana)","|Complete|","21",""
-"`LWG2212 <https://wg21.link/LWG2212>`__","``tuple_size``\  for ``const pair``\  request <tuple> header","2014-11 (Urbana)","|Complete|","",""
-"`LWG2217 <https://wg21.link/LWG2217>`__","``operator==(sub_match, string)``\  slices on embedded '\0's","2014-11 (Urbana)","|Complete|","",""
-"`LWG2230 <https://wg21.link/LWG2230>`__","""see below"" for ``initializer_list``\  constructors of unordered containers","2014-11 (Urbana)","|Complete|","",""
-"`LWG2233 <https://wg21.link/LWG2233>`__","``bad_function_call::what()``\  unhelpful","2014-11 (Urbana)","|Complete|","",""
-"`LWG2266 <https://wg21.link/LWG2266>`__","``vector``\  and ``deque``\  have incorrect insert requirements","2014-11 (Urbana)","|Complete|","",""
-"`LWG2325 <https://wg21.link/LWG2325>`__","``minmax_element()``\ 's behavior differing from ``max_element()``\ 's should be noted","2014-11 (Urbana)","|Complete|","",""
-"`LWG2361 <https://wg21.link/LWG2361>`__","Apply 2299 resolution throughout library","2014-11 (Urbana)","|Complete|","",""
-"`LWG2365 <https://wg21.link/LWG2365>`__","Missing noexcept in ``shared_ptr::shared_ptr(nullptr_t)``\ ","2014-11 (Urbana)","|Complete|","",""
-"`LWG2376 <https://wg21.link/LWG2376>`__","``bad_weak_ptr::what()``\  overspecified","2014-11 (Urbana)","|Complete|","",""
-"`LWG2387 <https://wg21.link/LWG2387>`__","More nested types that must be accessible and unambiguous","2014-11 (Urbana)","|Complete|","",""
-"","","","","",""
-"`LWG2059 <https://wg21.link/LWG2059>`__","C++0x ambiguity problem with map::erase","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2063 <https://wg21.link/LWG2063>`__","Contradictory requirements for string move assignment","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2076 <https://wg21.link/LWG2076>`__","Bad CopyConstructible requirement in set constructors","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2160 <https://wg21.link/LWG2160>`__","Unintended destruction ordering-specification of resize","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2168 <https://wg21.link/LWG2168>`__","Inconsistent specification of uniform_real_distribution constructor","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2239 <https://wg21.link/LWG2239>`__","min/max/minmax requirements","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2364 <https://wg21.link/LWG2364>`__","deque and vector pop_back don't specify iterator invalidation requirements","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2369 <https://wg21.link/LWG2369>`__","constexpr max(initializer_list) vs max_element","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2378 <https://wg21.link/LWG2378>`__","Behaviour of standard exception types","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2403 <https://wg21.link/LWG2403>`__","stof() should call strtof() and wcstof()","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2406 <https://wg21.link/LWG2406>`__","negative_binomial_distribution should reject p == 1","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2407 <https://wg21.link/LWG2407>`__","packaged_task(allocator_arg_t, const Allocator&, F&&) should neither be constrained nor explicit","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2411 <https://wg21.link/LWG2411>`__","shared_ptr is only contextually convertible to bool","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2415 <https://wg21.link/LWG2415>`__","Inconsistency between unique_ptr and shared_ptr","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2420 <https://wg21.link/LWG2420>`__","function<void(ArgTypes...)> does not discard the return value of the target object","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2425 <https://wg21.link/LWG2425>`__","``operator delete(void*, size_t)``\  doesn't invalidate pointers sufficiently","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2427 <https://wg21.link/LWG2427>`__","Container adaptors as sequence containers, redux","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2428 <https://wg21.link/LWG2428>`__","""External declaration"" used without being defined","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2433 <https://wg21.link/LWG2433>`__","``uninitialized_copy()``\ /etc. should tolerate overloaded operator&","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2434 <https://wg21.link/LWG2434>`__","``shared_ptr::use_count()``\  is efficient","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2437 <https://wg21.link/LWG2437>`__","``iterator_traits::reference``\  can and can't be void","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2438 <https://wg21.link/LWG2438>`__","``std::iterator``\  inheritance shouldn't be mandated","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2439 <https://wg21.link/LWG2439>`__","``unique_copy()``\  sometimes can't fall back to reading its output","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2440 <https://wg21.link/LWG2440>`__","``seed_seq::size()``\  should be noexcept","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2442 <https://wg21.link/LWG2442>`__","``call_once()``\  shouldn't DECAY_COPY()","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2448 <https://wg21.link/LWG2448>`__","Non-normative Container destructor specification","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2454 <https://wg21.link/LWG2454>`__","Add ``raw_storage_iterator::base()``\  member","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2455 <https://wg21.link/LWG2455>`__","Allocator default construction should be allowed to throw","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2458 <https://wg21.link/LWG2458>`__","N3778 and new library deallocation signatures","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2459 <https://wg21.link/LWG2459>`__","``std::polar``\  should require a non-negative rho","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2464 <https://wg21.link/LWG2464>`__","``try_emplace``\  and ``insert_or_assign``\  misspecified","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2467 <https://wg21.link/LWG2467>`__","``is_always_equal``\  has slightly inconsistent default","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2470 <https://wg21.link/LWG2470>`__","Allocator's destroy function should be allowed to fail to instantiate","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2482 <https://wg21.link/LWG2482>`__","[c.strings] Table 73 mentions nonexistent functions","2015-05 (Lenexa)","|Complete|","",""
-"`LWG2488 <https://wg21.link/LWG2488>`__","Placeholders should be allowed and encouraged to be constexpr","2015-05 (Lenexa)","|Complete|","",""
-"","","","","",""
-"`LWG1169 <https://wg21.link/LWG1169>`__","``num_get``\  not fully compatible with ``strto*``\ ","2015-10 (Kona)","|Complete|","",""
-"`LWG2072 <https://wg21.link/LWG2072>`__","Unclear wording about capacity of temporary buffers","2015-10 (Kona)","|Complete|","",""
-"`LWG2101 <https://wg21.link/LWG2101>`__","Some transformation types can produce impossible types","2015-10 (Kona)","|Complete|","",""
-"`LWG2111 <https://wg21.link/LWG2111>`__","Which ``unexpected``\ &#47;``terminate``\  handler is called from the exception handling runtime?","2015-10 (Kona)","|Complete|","",""
-"`LWG2119 <https://wg21.link/LWG2119>`__","Missing ``hash``\  specializations for extended integer types","2015-10 (Kona)","|Complete|","",""
-"`LWG2127 <https://wg21.link/LWG2127>`__","Move-construction with ``raw_storage_iterator``\ ","2015-10 (Kona)","|Complete|","",""
-"`LWG2133 <https://wg21.link/LWG2133>`__","Attitude to overloaded comma for iterators","2015-10 (Kona)","|Complete|","",""
-"`LWG2156 <https://wg21.link/LWG2156>`__","Unordered containers' ``reserve(n)``\  reserves for ``n-1``\  elements","2015-10 (Kona)","|Complete|","",""
-"`LWG2218 <https://wg21.link/LWG2218>`__","Unclear how containers use ``allocator_traits::construct()``\ ","2015-10 (Kona)","|Complete|","",""
-"`LWG2219 <https://wg21.link/LWG2219>`__","``*INVOKE*``\ -ing a pointer to member with a ``reference_wrapper``\  as the object expression","2015-10 (Kona)","|Complete|","",""
-"`LWG2224 <https://wg21.link/LWG2224>`__","Ambiguous status of access to non-live objects","2015-10 (Kona)","|Complete|","",""
-"`LWG2234 <https://wg21.link/LWG2234>`__","``assert()``\  should allow usage in constant expressions","2015-10 (Kona)","|Complete|","",""
-"`LWG2244 <https://wg21.link/LWG2244>`__","Issue on ``basic_istream::seekg``\ ","2015-10 (Kona)","|Complete|","",""
-"`LWG2250 <https://wg21.link/LWG2250>`__","Follow-up On Library Issue 2207","2015-10 (Kona)","|Complete|","",""
-"`LWG2259 <https://wg21.link/LWG2259>`__","Issues in 17.6.5.5 rules for member functions","2015-10 (Kona)","|Complete|","",""
-"`LWG2273 <https://wg21.link/LWG2273>`__","``regex_match``\  ambiguity","2015-10 (Kona)","|Complete|","",""
-"`LWG2336 <https://wg21.link/LWG2336>`__","``is_trivially_constructible``\ /``is_trivially_assignable``\  traits are always false","2015-10 (Kona)","|Complete|","",""
-"`LWG2353 <https://wg21.link/LWG2353>`__","``std::next``\  is over-constrained","2015-10 (Kona)","|Complete|","",""
-"`LWG2367 <https://wg21.link/LWG2367>`__","``pair``\  and ``tuple``\  are not correctly implemented for ``is_constructible``\  with no args","2015-10 (Kona)","|Complete|","",""
-"`LWG2380 <https://wg21.link/LWG2380>`__","May ``<cstdlib>``\  provide ``long ::abs(long)``\  and ``long long ::abs(long long)``\ ?","2015-10 (Kona)","|Complete|","",""
-"`LWG2384 <https://wg21.link/LWG2384>`__","Allocator's ``deallocate``\  function needs better specification","2015-10 (Kona)","|Complete|","",""
-"`LWG2385 <https://wg21.link/LWG2385>`__","``function::assign``\  allocator argument doesn't make sense","2015-10 (Kona)","|Complete|","",""
-"`LWG2435 <https://wg21.link/LWG2435>`__","``reference_wrapper::operator()``\ 's Remark should be deleted","2015-10 (Kona)","|Complete|","",""
-"`LWG2447 <https://wg21.link/LWG2447>`__","Allocators and ``volatile``\ -qualified value types","2015-10 (Kona)","|Complete|","",""
-"`LWG2462 <https://wg21.link/LWG2462>`__","``std::ios_base::failure``\  is overspecified","2015-10 (Kona)","|Complete|","",""
-"`LWG2466 <https://wg21.link/LWG2466>`__","``allocator_traits::max_size()``\  default behavior is incorrect","2015-10 (Kona)","|Complete|","",""
-"`LWG2469 <https://wg21.link/LWG2469>`__","Wrong specification of Requires clause of ``operator[]``\  for ``map``\  and ``unordered_map``\ ","2015-10 (Kona)","|Complete|","",""
-"`LWG2473 <https://wg21.link/LWG2473>`__","``basic_filebuf``\ 's relation to C ``FILE``\  semantics","2015-10 (Kona)","|Complete|","",""
-"`LWG2476 <https://wg21.link/LWG2476>`__","``scoped_allocator_adaptor``\  is not assignable","2015-10 (Kona)","|Complete|","",""
-"`LWG2477 <https://wg21.link/LWG2477>`__","Inconsistency of wordings in ``std::vector::erase()``\  and ``std::deque::erase()``\ ","2015-10 (Kona)","|Complete|","",""
-"`LWG2483 <https://wg21.link/LWG2483>`__","``throw_with_nested()``\  should use ``is_final``\ ","2015-10 (Kona)","|Complete|","",""
-"`LWG2484 <https://wg21.link/LWG2484>`__","``rethrow_if_nested()``\  is doubly unimplementable","2015-10 (Kona)","|Complete|","",""
-"`LWG2485 <https://wg21.link/LWG2485>`__","``get()``\  should be overloaded for ``const tuple&&``\ ","2015-10 (Kona)","|Complete|","",""
-"`LWG2486 <https://wg21.link/LWG2486>`__","``mem_fn()``\  should be required to use perfect forwarding","2015-10 (Kona)","|Complete|","",""
-"`LWG2487 <https://wg21.link/LWG2487>`__","``bind()``\  should be ``const``\ -overloaded, not *cv*-overloaded","2015-10 (Kona)","|Complete|","",""
-"`LWG2489 <https://wg21.link/LWG2489>`__","``mem_fn()``\  should be ``noexcept``\ ","2015-10 (Kona)","|Complete|","",""
-"`LWG2492 <https://wg21.link/LWG2492>`__","Clarify requirements for ``comp``\ ","2015-10 (Kona)","|Complete|","",""
-"`LWG2495 <https://wg21.link/LWG2495>`__","There is no such thing as an Exception Safety element","2015-10 (Kona)","|Complete|","",""
-"","","","","",""
-"`LWG2192 <https://wg21.link/LWG2192>`__","Validity and return type of ``std::abs(0u)``\  is unclear","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2276 <https://wg21.link/LWG2276>`__","Missing requirement on ``std::promise::set_exception``\ ","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2296 <https://wg21.link/LWG2296>`__","``std::addressof``\  should be ``constexpr``\ ","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2450 <https://wg21.link/LWG2450>`__","``(greater|less|greater_equal|less_equal)<void>``\  do not yield a total order for pointers","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2520 <https://wg21.link/LWG2520>`__","N4089 broke initializing ``unique_ptr<T[]>``\  from a ``nullptr``\ ","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2522 <https://wg21.link/LWG2522>`__","[fund.ts.v2] Contradiction in ``set_default_resource``\  specification","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2523 <https://wg21.link/LWG2523>`__","``std::promise``\  synopsis shows two ``set_value_at_thread_exit()``\ 's for no apparent reason","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2537 <https://wg21.link/LWG2537>`__","Constructors for ``priority_queue``\  taking allocators should call ``make_heap``\ ","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2539 <https://wg21.link/LWG2539>`__","[fund.ts.v2] ``invocation_trait``\  definition definition doesn't work for surrogate call functions","2016-02 (Jacksonville)","","",""
-"`LWG2545 <https://wg21.link/LWG2545>`__","Simplify wording for ``bind``\  without explicitly specified return type","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2557 <https://wg21.link/LWG2557>`__","Logical operator traits are broken in the zero-argument case","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2558 <https://wg21.link/LWG2558>`__","[fund.ts.v2] Logical operator traits are broken in the zero-argument case","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2559 <https://wg21.link/LWG2559>`__","Error in LWG 2234's resolution","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2560 <https://wg21.link/LWG2560>`__","``is_constructible``\  underspecified when applied to a function type","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2565 <https://wg21.link/LWG2565>`__","``std::function``\ 's move constructor should guarantee nothrow for ``reference_wrapper``\ s and function pointers","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2566 <https://wg21.link/LWG2566>`__","Requirements on the first template parameter of container adaptors","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2571 <https://wg21.link/LWG2571>`__","|sect|\ [map.modifiers]/2 imposes nonsensical requirement on ``insert(InputIterator, InputIterator)``\ ","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2572 <https://wg21.link/LWG2572>`__","The remarks for ``shared_ptr::operator*``\  should apply to *cv*-qualified ``void``\  as well","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2574 <https://wg21.link/LWG2574>`__","[fund.ts.v2] ``std::experimental::function::operator=(F&&)``\  should be constrained","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2575 <https://wg21.link/LWG2575>`__","[fund.ts.v2] ``experimental::function::assign``\  should be removed","2016-02 (Jacksonville)","","",""
-"`LWG2576 <https://wg21.link/LWG2576>`__","``istream_iterator``\  and ``ostream_iterator``\  should use ``std::addressof``\ ","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2577 <https://wg21.link/LWG2577>`__","``{shared,unique}_lock``\  should use ``std::addressof``\ ","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2579 <https://wg21.link/LWG2579>`__","Inconsistency wrt Allocators in ``basic_string``\  assignment vs. ``basic_string::assign``\ ","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2581 <https://wg21.link/LWG2581>`__","Specialization of ``<type_traits>``\  variable templates should be prohibited","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2582 <https://wg21.link/LWG2582>`__","|sect|\ [res.on.functions]/2's prohibition against incomplete types shouldn't apply to type traits","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2583 <https://wg21.link/LWG2583>`__","There is no way to supply an allocator for ``basic_string(str, pos)``\ ","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2585 <https://wg21.link/LWG2585>`__","``forward_list::resize(size_type, const value_type&)``\  effects incorrect","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2586 <https://wg21.link/LWG2586>`__","Wrong value category used in ``scoped_allocator_adaptor::construct()``\ ","2016-02 (Jacksonville)","|Complete|","",""
-"`LWG2590 <https://wg21.link/LWG2590>`__","Aggregate initialization for ``std::array``\ ","2016-02 (Jacksonville)","|Complete|","",""
-"","","","","",""
-"`LWG2181 <https://wg21.link/LWG2181>`__","Exceptions from seed sequence operations","2016-06 (Oulu)","|Complete|","",""
-"`LWG2309 <https://wg21.link/LWG2309>`__","mutex::lock() should not throw device_or_resource_busy","2016-06 (Oulu)","|Complete|","",""
-"`LWG2310 <https://wg21.link/LWG2310>`__","Public exposition only member in std::array","2016-06 (Oulu)","|Complete|","",""
-"`LWG2312 <https://wg21.link/LWG2312>`__","tuple's constructor constraints need to be phrased more precisely","2016-06 (Oulu)","|Complete|","",""
-"`LWG2328 <https://wg21.link/LWG2328>`__","Rvalue stream extraction should use perfect forwarding","2016-06 (Oulu)","|Complete|","",""
-"`LWG2393 <https://wg21.link/LWG2393>`__","std::function's Callable definition is broken","2016-06 (Oulu)","|Complete|","",""
-"`LWG2422 <https://wg21.link/LWG2422>`__","``std::numeric_limits<T>::is_modulo``\  description: ""most machines"" errata","2016-06 (Oulu)","|Complete|","",""
-"`LWG2426 <https://wg21.link/LWG2426>`__","Issue about compare_exchange","2016-06 (Oulu)","|Complete|","",""
-"`LWG2436 <https://wg21.link/LWG2436>`__","Comparators for associative containers should always be CopyConstructible","2016-06 (Oulu)","|Complete|","",""
-"`LWG2441 <https://wg21.link/LWG2441>`__","Exact-width atomic typedefs should be provided","2016-06 (Oulu)","|Complete|","",""
-"`LWG2451 <https://wg21.link/LWG2451>`__","[fund.ts.v2] optional should 'forward' T's implicit conversions","2016-06 (Oulu)","|Nothing To Do|","",""
-"`LWG2509 <https://wg21.link/LWG2509>`__","[fund.ts.v2] any_cast doesn't work with rvalue reference targets and cannot move with a value target","2016-06 (Oulu)","|Complete|","",""
-"`LWG2516 <https://wg21.link/LWG2516>`__","[fund.ts.v2] Public ""e...
[truncated]

Copy link

⚠️ Python code formatter, darker found issues in your code. ⚠️

You can test this locally with the following command:
darker --check --diff -r HEAD~1...HEAD libcxx/utils/synchronize_csv_status_files.py
View the diff from darker here.
--- synchronize_csv_status_files.py	2025-07-21 15:07:42.000000 +0000
+++ synchronize_csv_status_files.py	2025-07-21 15:13:47.859824 +0000
@@ -170,17 +170,21 @@
     """
     Object from which this PaperInfo originated. This is used to track the CSV row or Github issue that
     was used to generate this PaperInfo and is useful for error reporting purposes.
     """
 
-    def __init__(self, paper_number: str, paper_name: str,
-                       status: PaperStatus,
-                       meeting: Optional[str] = None,
-                       first_released_version: Optional[str] = None,
-                       github_issue: Optional[str] = None,
-                       notes: Optional[str] = None,
-                       original: Optional[object] = None):
+    def __init__(
+        self,
+        paper_number: str,
+        paper_name: str,
+        status: PaperStatus,
+        meeting: Optional[str] = None,
+        first_released_version: Optional[str] = None,
+        github_issue: Optional[str] = None,
+        notes: Optional[str] = None,
+        original: Optional[object] = None,
+    ):
         self.paper_number = paper_number
         self.paper_name = paper_name
         self.status = status
         self.meeting = meeting
         self.first_released_version = first_released_version
@@ -192,13 +196,17 @@
         return (
             f'`{self.paper_number} <https://wg21.link/{self.paper_number}>`__',
             self.paper_name,
             self.meeting if self.meeting is not None else '',
             self.status.to_csv_entry(),
-            self.first_released_version if self.first_released_version is not None else '',
-            f'`#{self.github_issue} <https://github.com/llvm/llvm-project/issues/{self.github_issue}>`__' if self.github_issue is not None else '',
-            self.notes if self.notes is not None else '',
+            self.first_released_version
+            if self.first_released_version is not None
+            else "",
+            f"`#{self.github_issue} <https://github.com/llvm/llvm-project/issues/{self.github_issue}>`__"
+            if self.github_issue is not None
+            else "",
+            self.notes if self.notes is not None else "",
         )
 
     def __repr__(self) -> str:
         return repr(self.original) if self.original is not None else repr(self.for_printing())
 
@@ -211,11 +219,11 @@
         match = re.search(r"((P[0-9R]+)|(LWG[0-9]+)|(N[0-9]+))\s+", row[0])
         if match is None:
             raise RuntimeError(f"Can't parse paper/issue number out of row: {row}")
 
         # Match the issue number if present
-        github_issue = re.search(r'#([0-9]+)', row[5])
+        github_issue = re.search(r"#([0-9]+)", row[5])
         if github_issue:
             github_issue = github_issue.group(1)
 
         return PaperInfo(
             paper_number=match.group(1),
@@ -246,13 +254,13 @@
 
         return PaperInfo(
             paper_number=paper,
             paper_name=issue['title'].removeprefix(paper + ': '),
             status=PaperStatus.from_github_issue(issue),
-            meeting=issue.get('meeting Voted', None),
-            first_released_version=None, # TODO
-            github_issue=str(issue['content']['number']),
+            meeting=issue.get("meeting Voted", None),
+            first_released_version=None,  # TODO
+            github_issue=str(issue["content"]["number"]),
             notes=notes,
             original=issue,
         )
 
 def merge(paper: PaperInfo, gh: PaperInfo) -> PaperInfo:
@@ -268,12 +276,16 @@
     is not useful.
 
     In case we don't update the CSV row's status, we still take any updated notes coming
     from the Github issue and we add a link to the Github issue if it was previously missing.
     """
-    took_gh_in_full = False # Whether we updated the entire PaperInfo from the Github version
-    if paper.status == PaperStatus(PaperStatus.TODO) and gh.status == PaperStatus(PaperStatus.IN_PROGRESS):
+    took_gh_in_full = (
+        False  # Whether we updated the entire PaperInfo from the Github version
+    )
+    if paper.status == PaperStatus(PaperStatus.TODO) and gh.status == PaperStatus(
+        PaperStatus.IN_PROGRESS
+    ):
         result = copy.deepcopy(paper)
     elif paper.status < gh.status:
         result = copy.deepcopy(gh)
         took_gh_in_full = True
     elif paper.status == gh.status:
@@ -304,11 +316,13 @@
 
 def create_github_issue(paper: PaperInfo, labels: List[str]) -> None:
     """
     Create a new Github issue representing the given PaperInfo.
     """
-    assert paper.github_issue is None, "Trying to create a Github issue for a paper that is already tracked"
+    assert (
+        paper.github_issue is None
+    ), "Trying to create a Github issue for a paper that is already tracked"
 
     paper_name = paper.paper_name.replace('``', '`').replace('\\', '')
 
     create_cli = ['gh', 'issue', 'create', '--repo', 'llvm/llvm-project',
                     '--title', f'{paper.paper_number}: {paper_name}',
@@ -387,15 +401,19 @@
             continue
 
         # Validate the Github issue associated to the CSV row, if any
         if paper.github_issue is not None:
             if len(tracking) == 0:
-                print(f"Found row claiming to have a tracking issue, but failed to find a tracking issue on Github: {row}")
+                print(
+                    f"Found row claiming to have a tracking issue, but failed to find a tracking issue on Github: {row}"
+                )
                 results.append(row)
                 continue
             if len(tracking) == 1 and paper.github_issue != tracking[0].github_issue:
-                print(f"Found row with incorrect tracking issue: {row}\ntracked by: {tracking[0]}")
+                print(
+                    f"Found row with incorrect tracking issue: {row}\ntracked by: {tracking[0]}"
+                )
                 results.append(row)
                 continue
 
         # If there is no tracking issue for that row and we are creating new issues, do that.
         # Otherwise just log that we're missing an issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants