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 class or struct consistently; struct only for all-public data.
  • When then same class is declared or defined multiple times, make sure it's consistently done using either class or struct.

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 else after return, continue, break, or goto.
  • 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_ and m_ prefixes respectively.

General Guidelines

  • Use assert liberally; prefer llvm_unreachable for 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’s raw_ostream instead.
  • Don’t use inline when 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, or public keyword as appropriate to restrict class member visibility.
  • Omit braces for single-statement if, else, while, for unless 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.