Annotating C++ API boundaries with nullability information can improve their
Rust bindings (e.g. binding non-null pointers as T&
rather than Option<T&>
).
This directory has tools for C++ codebases that use such annotations:
-
Nullability inference suggests annotations to add to APIs, by analyzing the code that implements and uses them.
-
Nullability verification verifies that annotated APIs are used and implemented safely, e.g. checking nullable pointers before dereferencing them. This is a local analysis suitable for use in a clang-tidy check.
They use Clang, its dataflow framework, and its nullability annotations.
This directory mostly uses LLVM-style C++, rather than Google-style C++ used
in the rest of crubit/
. The goal is to make it easy to upstream into
clang-tidy once mature.
Specifically:
- We follow the LLVM coding standards, with the exceptions listed here.
- We use absl
CHECK()
rather thanassert()
. (This finds bugs more reliably, and is trivial to migrate later.) - We otherwise avoid relying on absl, using llvm's Support libraries instead.
- We write
// TODO
instead of// FIXME
.
This list isn't set in stone: we can choose to diverge further from LLVM style, if it's worth more cost of upstreaming later.