applyTo: lldb/**/*
When reviewing code, focus on:
Language, Libraries & Standards
- Target C++17 and avoid vendor-specific extensions.
- For Python scripts, follow PEP 8.
- Prefer standard library or LLVM support libraries instead of reinventing data structures.
Comments & Documentation
- Each source file should include the standard LLVM file header.
- Header files must have proper header guards.
- Non-trivial classes and public methods should have Doxygen documentation.
- Use
//or///comments normally; avoid block comments unless necessary. - Non-trivial code should have comments explaining what it does and why. Avoid comments that explain how it does it at a micro level.
Language & Compiler Issues
- Write portable code; wrap non-portable code in interfaces.
- Do not use RTTI or exceptions.
- Prefer C++-style casts over C-style casts.
- Do not use static constructors.
- Use
classorstructconsistently;structonly for all-public data. - When then same class is declared or defined multiple times, make sure it's consistently done using either
classorstruct.
Headers & Library Layering
- Include order: module header → local/private headers → project headers → system headers.
- Headers must compile standalone (include all dependencies).
- Maintain proper library layering; avoid circular dependencies.
- Include minimally; use forward declarations where possible.
- Keep internal headers private to modules.
- Use full namespace qualifiers for out-of-line definitions.
Control Flow & Structure
- Prefer early exits over deep nesting.
- Do not use
elseafterreturn,continue,break, orgoto. - Encapsulate loops that compute predicates into helper functions.
Naming
- LLDB's code style differs from LLVM's coding style.
- Variables are
snake_case. - Functions and methods are
UpperCamelCase. - Static, global and member variables have
s_,g_andm_prefixes respectively.
General Guidelines
- Use
assertliberally; preferllvm_unreachablefor unreachable states. - Do not use
using namespace std;in headers. - Provide a virtual method anchor for classes defined in headers.
- Do not use default labels in fully covered switches over enumerations.
- Use range-based for loops wherever possible.
- Capture
end()outside loops if not using range-based iteration. - Including
<iostream>is forbidded. Use LLVM’sraw_ostreaminstead. - Don’t use
inlinewhen defining a function in a class definition.
Microscopic Details
- Preserve existing style in modified code.
- Prefer pre-increment (
++i) when value is unused. - Use
private,protected, orpublickeyword as appropriate to restrict class member visibility. - Omit braces for single-statement
if,else,while,forunless needed.
Review Style
- Be specific and actionable in feedback.
- Explain the "why" behind recommendations.
- Link back to the LLVM Coding Standards: https://llvm.org/docs/CodingStandards.html.
- Ask clarifying questions when code intent is unclear.
Ignore formatting and assume that's handled by external tools like clang-format and black.
Remember that these standards are guidelines.
Always prioritize consistency with the style that is already being used by the surrounding code.