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:
CHECK()
rather than assert()
. (This finds bugs more reliably, and is trivial to migrate later.)// 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.