Konfigurowanie LSP za pomocą clangd
Tło
Edytory takie jak Emacs, Vim czy VS Code obsługują funkcje takie jak nawigacja po kodzie, uzupełnianie kodu, wbudowane komunikaty o błędach kompilatora i inne dzięki LSP, czyli protokołowi serwera językowego. Popularnym serwerem języka z obsługą LSP jest clangd, który wymaga obecności pliku compile_commands.json w formacie JSON z zapisem poleceń kompilacji dla każdego pliku w projekcie.
Jak wygenerować compile_commands.json dla kodu źródłowego XLA?
Użyj skryptu build_tools/lint/generate_compile_commands.py. Poniższe wywołanie z katalogu głównego repozytorium XLA generuje plik compile_commands.json w miejscu: bazel aquery "mnemonic(CppCompile,
//xla/...)" --output=jsonproto | python3
build_tools/lint/generate_compile_commands.py
Build Cleaner
XLA CI w Google przeprowadza dodatkowe testy, aby sprawdzić, czy wszystkie cele prawidłowo wymieniają wszystkie zależności w plikach BUILD, które nie są domyślnie włączone w OSS Bazel CI. Uruchomienie poniższych poleceń przed wysłaniem prośby o scalenie do zespołu XLA znacznie przyspieszy scalanie, ponieważ w przeciwnym razie konieczne będzie wprowadzenie poprawek przez pracownika Google lub kilka rund sprawdzania prośby o scalenie w celu wprowadzenia poprawek na podstawie opinii pracowników Google.
Sprawdzanie warstw
Korzystanie z --features=layering_check zapobiega przypadkowemu uwzględnieniu pliku nagłówkowego za pomocą zależności przechodniej bez umieszczania go na liście zależności docelowych.
Usuwanie nieużywanych zależności z plików BUILD
Zainstaluj narzędzie Buildozer:
sudo curl -fsSL -o /usr/bin/buildozer https://github.com/bazelbuild/buildtools/releases/download/6.0.0/buildozer-linux-amd64
sudo chmod 755 /usr/bin/buildozer
Zainstaluj narzędzie Bant:
# To some writable directory that does not require root access
bazel build -c opt //bant && install -D --strip bazel-bin/bant/bant ~/bin/bant
# For a system directory that requires root-access
sudo install -D --strip bazel-bin/bant/bant /usr/local/bin/bant
Użyj bant, aby wygenerować polecenia buildozer do usunięcia nieużywanych zależności:
bant dwyu //xla/core/collectives:symmetric_memory
Jeśli masz szczęście, możesz wykonać je bezpośrednio:
. <(bant dwyu //xla/core/collectives:symmetric_memory)