NagyDonat wrote:

> I'm somewhat unsatisfied, but it's not because of this PR. This is an 
> excellent way forward, I just wish we had a better abstraction.

I agree that the architecture that's being formalized by this commit is not 
perfect.

If I would be reimplementing a static analyzer from zero, I would probably 
separate:
- small "Reporter" classes which
  - have a user-facing name,
  - can be enabled/disabled by the user,
  - have `reportBug(...)` methods that produce a bug report if the Reporter is 
enabled;
  - implement unique logic (e.g. message formatting) that is only relevant for 
one sub-checker;
- big "Modeler" classes which
  - own one or several (or perhaps zero) Reporters,
  - are active if any of their Reporters is enabled (or if some other Modeler 
depends on them),
  - implement various callbacks (`check::XXX`, `eval::Call` etc.) and update 
the `State` and call `MyReporter::reportBug(...)` methods from these callbacks;
  - implement the shared logic of a group of related Reporters (i.e. what is 
currently represented by a single multipart checker class).

However, given the existing codebase I don't think that it's feasible to 
suddenly switch to an architecture like this. However, we could gradually 
approach this transition, e.g. if we gradually replace `CheckerNameRef` with a 
richer and more complex class that can become our `Reporter`.

https://github.com/llvm/llvm-project/pull/130985
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to