Repository navigation
Refactor libcudacxx-style skill by moving CCCL wide style guidelines to a specific file #9405
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
Merged
NaderAlAwar
merged 8 commits into
NVIDIA:main
from
NaderAlAwar:coderabbit-fix-bad-comments
Jun 15, 2026
Merged
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
4069b94
Refactor style skill
NaderAlAwar 4fe965c
address review
NaderAlAwar 579f0ca
Merge upstream/main into coderabbit-fix-bad-comments
NaderAlAwar 889d954
Fix .claude skills
NaderAlAwar e1e3986
Address comments
NaderAlAwar 64ffdc7
address comments
NaderAlAwar f4f0f74
Address comments
NaderAlAwar 2ad49f7
Fix grammar issue
NaderAlAwar File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| --- | ||
| name: cccl-style | ||
| description: Use when editing or reviewing CCCL code for style conventions; read common CCCL guidance and the path-specific references named by this skill. | ||
| --- | ||
|
|
||
| # CCCL Style | ||
|
|
||
| ## Workflow | ||
|
|
||
| 1. Read `references/common.md` for guidance that applies across CCCL. | ||
| 2. For `libcudacxx/include/**/*`, also read `references/libcudacxx.md`. | ||
| 3. For `cudax/include/**/*`, also read `references/libcudacxx.md`. | ||
| 4. If no path-specific reference exists, follow nearby code and repository docs. Do not import rules from another subproject. | ||
| 5. Apply each reference only to its stated scope. Rules for one CCCL subproject do not automatically apply to another. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,70 @@ | ||
| # Common CCCL Style Guidance | ||
|
|
||
| Apply this guidance across CCCL unless a path-specific style reference says otherwise. | ||
|
|
||
| ## Naming Style | ||
|
|
||
| - Macros: macro style, e.g. `MY_MACRO`. | ||
| - Template parameters: PascalCase, e.g. `MyParameter`. | ||
| - All other symbols: snake style, e.g. `my_variable`. The one exception is the CUB public API, which uses PascalCase. | ||
|
|
||
| ## Variables | ||
|
|
||
| - All variables that are not modified must use `const`. This includes variables initialized by casts (`static_cast`, `reinterpret_cast`, `bit_cast`), function return values, and loop-invariant computations. | ||
| - All variables that can be evaluated at compile-time must use `constexpr`. | ||
| - All `constexpr` variables at namespace/global scope must use `inline`, including variable templates. | ||
| - Consider using plural names for array, span, list, e.g. `int values[4]` instead of `int value[4]`. | ||
| - Use uniform initialization for class constructors (not enforced to builtin types) and compile-time conversions, e.g. `constexpr auto x = int{sizeof(float)};`. | ||
|
|
||
| ## Headers | ||
|
|
||
| - Files must include all headers related to the symbols that they are using. | ||
| - Relying on transitive header inclusion is not allowed. | ||
| - Unneeded headers must be removed. | ||
| - All headers must have the correct license. This also applies to source files. | ||
| - All header inclusions must use the syntax `<header>`. | ||
| - Use forward declaration, namely `__fwd/header.h` or direct type declaration, when possible instead of including the implementation header. | ||
| - Headers should be the most precise available, e.g. `#include <cuda/std/__type_traits/is_array.h>`. | ||
| - Do not include headers in `cuda/std/__cccl/` directly; they are provided by `__config` or the prologue/epilogue mechanism. | ||
|
|
||
| ## Functions | ||
|
|
||
| - Functions must be marked `_CCCL_HOST_API`, `_CCCL_DEVICE_API`, `_CCCL_HOST_DEVICE_API`, `_CCCL_TILE_API`, or `_CCCL_API`. | ||
| - Non-template, non-`constexpr` functions must use `inline`. | ||
| - Most functions with a non-void return type should use `[[nodiscard]]`; functions with known side effects may be exceptions. | ||
| - Functions that do not throw exceptions must use `noexcept`. | ||
| - Use `_CCCL_CONSTEVAL` when the function can only be evaluated at compile time. | ||
| - Use C++20 concept macros instead of SFINAE, e.g. `_CCCL_TEMPLATE(...)` and `_CCCL_REQUIRES(...)`. | ||
|
|
||
| ## Function Calls And Types | ||
|
|
||
| - In headers, apply global qualification where the subproject requires it: | ||
| - libcudacxx and cudax require free function calls to be fully qualified from the global namespace, e.g. `::cuda::ceil_div(...)`. | ||
| - CUB applies this rule only to calls to symbols under the `::cuda` namespace hierarchy; otherwise follow existing CUB qualification style. | ||
| - Thrust uses leading `::` for many symbols under the `::cuda` namespace hierarchy, but relies on ADL in many places and the blanket free-function qualification rule does not apply to those calls. | ||
| - For covered calls, this includes calls to functions defined in the same namespace, e.g. inside `cuda::`, call `::cuda::ceil_div(...)`, not `ceil_div(...)`. This does not apply to (static) member functions of classes. The only exceptions for covered calls are functions that are supposed to be found through argument-dependent lookup (ADL), such as `::cuda::std::swap` and `::cuda::std::get`. Those functions can be called unqualified with a preceding `using ::cuda::std::get;`. | ||
| - This global-qualification rule does not apply to source files such as tests and benchmarks. | ||
| - In headers, apply type-name qualification where the subproject requires it: | ||
| - libcudacxx and cudax require type names to be fully qualified except when they are already declared in the current namespace or an enclosing one. Outside those namespaces, fully qualify `cuda::std` and standard integer type aliases such as `::cuda::std::size_t`. | ||
| - CUB applies this rule only to type names under the `::cuda` namespace hierarchy. Do not apply the libcudacxx/cudax blanket type-qualification rule to CUB namespaces or `detail` namespaces. | ||
| - Thrust does not apply the libcudacxx/cudax blanket type-qualification rule. It uses leading `::` for many `::cuda` and `::cuda::std` type names, but also uses Thrust namespace patterns; follow neighboring Thrust code. | ||
| - A local `using` declaration, e.g. `using ::cuda::std::size_t;`, is acceptable to avoid repetition within a function body. | ||
| - Static member functions of a class template inherit the class's namespace. | ||
|
|
||
| ## Comments | ||
|
|
||
| - Commented code without a description is not allowed. | ||
|
|
||
| ## General Guidelines | ||
|
|
||
| - The code must reuse `cuda/` or `cuda/std` functionalities as much as possible, including macros. | ||
| - Try to use modern C++ as much as possible. The repository supports C++17 but many more recent functionalities have been backported with functions and macros. | ||
|
|
||
| ## Prevent Compiler Errors And Improve Compatibility | ||
|
|
||
| - Remove unused code, variables, functions, types, template parameters, headers, etc. | ||
| - Variables that are unsigned, or that can become unsigned after template instantiation, must not check for negative values directly. Use `cuda::std::is_unsigned_v<T> ? false : (var < 0)` instead. | ||
|
|
||
| ## Compiler Compatibility | ||
|
|
||
| - Protect host-only code with `#if !_CCCL_COMPILER(NVRTC)`. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,54 @@ | ||
| # libcudacxx Style Guidance | ||
|
|
||
| Use this reference for `libcudacxx/include/**/*` and `cudax/include/**/*`. | ||
|
|
||
| ## Naming Style | ||
|
|
||
| All non-public symbols must be C++ reserved identifiers: | ||
|
|
||
| - `_` for macros and template parameters, e.g. `_MY_MACRO`, `_MyParameter`. | ||
| - `__` for all other symbols, e.g. `__my_variable`. | ||
| - Avoid single-letter template parameter names. Wrong: `_T`; correct: `_Tp`. | ||
|
|
||
| ## Class / Struct | ||
|
|
||
| - Data member names have postfix `_`, e.g. `class __myclass { int __data_; };`. | ||
| - Constructor parameter names should match class/struct data member names without the postfix `_`, e.g. `class __myclass { __myclass(int __data) : __data_(__data) {} };`. | ||
|
|
||
| ## Functions | ||
|
|
||
| - Use `constexpr` for functions that do not depend on run-time features, such as pointers. | ||
| - If the return type is not explicit (`auto`), then a trailing return type is strongly preferred. | ||
|
|
||
| ## Headers | ||
|
|
||
| - Use the correct license: | ||
| - `libcudacxx/include/cuda/std` files ported from LLVM libc++ use the LLVM license. | ||
| - `libcudacxx/include/cuda/` files use Apache License v2.0 with LLVM Exceptions. | ||
| - Headers use include guards with names derived from the uppercase full path and closing `#endif` comments repeating the guard name. | ||
|
fbusato marked this conversation as resolved.
Resolved
|
||
| - Right after the include guard, include: | ||
|
|
||
| ```cpp | ||
| #include <cuda/std/detail/__config> | ||
|
|
||
| #if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC) | ||
| # pragma GCC system_header | ||
| #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG) | ||
| # pragma clang system_header | ||
| #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC) | ||
| # pragma system_header | ||
| #endif // no system header | ||
| ``` | ||
|
|
||
| - The last included header before code must be `<cuda/std/__cccl/prologue.h>`, and `<cuda/std/__cccl/epilogue.h>` must appear at the end of the file. | ||
|
|
||
| ## Comments | ||
|
|
||
| - Use Doxygen-style `//! @brief` comments. | ||
| - Documented functions must include `//! @brief`, `//! @param[in/out/in,out]` for every parameter, and `//! @return` for non-void functions. | ||
| - The `@brief/@param/@return` description must accurately reflect the current functionality of the function. | ||
|
|
||
| ## Compiler Compatibility | ||
|
|
||
| - Do not use lambda expressions in device-only or host-device code. | ||
|
coderabbitai[bot] marked this conversation as resolved.
Resolved
|
||
| - Do not rely on deduction guides for initialization; use explicit template arguments instead. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| --- | ||
| name: cccl-test | ||
| description: Use when writing, updating, reviewing, or validating CCCL tests; read common CCCL test guidance and the path-specific references named by this skill. | ||
| --- | ||
|
|
||
| # CCCL Test | ||
|
|
||
| ## Workflow | ||
|
|
||
| 1. Read `references/common.md` for guidance that applies across CCCL tests. | ||
| 2. For `libcudacxx/test/**/*`, also read `references/libcudacxx.md`. | ||
| 3. If no path-specific reference exists, follow nearby tests and repository docs. Do not import test rules from another subproject. | ||
| 4. Apply each reference only to its stated scope. Rules for one CCCL subproject do not automatically apply to another. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| # Common CCCL Test Guidance | ||
|
|
||
| Apply this guidance across CCCL tests unless a path-specific test reference says otherwise. | ||
|
|
||
| ## Local Consistency | ||
|
|
||
| - Read nearby tests first and mirror their directory layout, file names, helper types, includes, assertion style, and local gating or skip mechanisms. | ||
|
|
||
| ## Coverage | ||
|
|
||
| - Cover relevant edge cases. | ||
| - Cover relevant input and output types. | ||
| - Cover error behavior when applicable. | ||
| - Cover runtime and compile-time behavior when applicable. | ||
| - Cover device and host behavior when applicable. | ||
|
|
||
| ## Test Structure | ||
|
|
||
| - All tests must have the correct license banner. | ||
| - Use the local test harness assertions and helpers. | ||
| - Use compile-time checks for compile-time guarantees and constexpr coverage when relevant. | ||
| - Negative tests should check the intended diagnostic or failure mode when the local harness supports it. | ||
|
|
||
| ## Portability | ||
|
|
||
| - Prefer project test macros and helpers for compiler, dialect, exception, host/device, and platform probes instead of spelling ad hoc checks directly. | ||
| - If a test is unsupported, expected to fail, disabled, or skipped on a platform, motivate it with a comment. | ||
|
|
||
| ## Validation | ||
|
|
||
| - Use targeted test runs for the project and files being changed. |
5 changes: 0 additions & 5 deletions
5
.agent/skills/libcudacxx-test/SKILL.md → ...skills/cccl-test/references/libcudacxx.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| --- | ||
| name: cccl-style | ||
| description: Use when editing or reviewing CCCL code for style conventions; read common CCCL guidance and the path-specific references named by this skill. | ||
| --- | ||
|
|
||
| The skill content is in .agent/skills/cccl-style/SKILL.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| --- | ||
| name: cccl-test | ||
| description: Use when writing, updating, reviewing, or validating CCCL tests; read common CCCL test guidance and the path-specific references named by this skill. | ||
| --- | ||
|
|
||
| The skill content is in .agent/skills/cccl-test/SKILL.md |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's actually more complex than this, because Thrust uses ADL also for backend system selection, but this should definitely go to a Thrust skill eventually.
The details are provided here: https://nvidia.github.io/cccl/unstable/thrust/developer/systems.html#algorithm-dispatch
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Created #9466 to look into the interaction between developer documentation and internal code writing + reviewing skills