mapbox / mapbox/cpp

clang-tidy v. -Weffc++

Aperta
#54 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Nessun dato sulla lingua
Stelle
110
Fork
17
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

## Context

Recent versions of clang-tidy added `readability-redundant-member-init`: https://clang.llvm.org/extra/clang-tidy/checks/readability-redundant-member-init.html

This is handy! When a class member has a default initializer it is redundent to initialize it in the member list.

But, because some types don't have default initializers, forgetting to initialize them in the member list (or using [c++11 initialization in the class definition](https://arne-mertz.de/2015/08/new-c-features-default-initializers-for-member-variables/)) can lead to serious trouble like mapbox/wagyu#69 - refs mapbox/wagyu#70.

So, this is the reason, at https://github.com/mapbox/cpp/issues/37#issuecomment-336200744, that we recommend using g++ and the `-Weffc++` flag because it can catch this (note, clang++ plus `-Weffc++` cannot):

> -Weffc++ - useful when building with g++ (does not do much with clang++). With g++ it can catch uninitialized class members and prevent crashes like mapbox/wagyu#69 - refs mapbox/wagyu#70

## Problem

- `-Weffc++` will warn on all class members not explicitly initialized in the initializer list
- `clang-tidy` will automatically remove variables from the initializer list that have default constructors

So, the two will fight: causing each other warnings. For this reason I think we should likely:

- let clang-tidy win
- recommend no longer using g++ with `-Weffc++`
- figure out what alternative way we can catch when members, without default initializers, are uninitialized (without needing to use `-Weffc++`). Maybe another `clang-tidy` check?

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Iniziare dalla documentazione di clang-tidy's readability-redundant-member-init e dalle discussioni collegate mapbox/cpp#37, wagyu#69 e wagyu#70; non sono identificati file o test del repository. Determinare un approccio condiviso per -Weffc++, le indicazioni di clang-tidy e il rilevamento dei membri non inizializzati; il lavoro è completo quando sono disponibili una raccomandazione e una configurazione documentate.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
cpp
Ambito
tooling
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
30/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.