sammccall accepted this revision.
sammccall added a comment.

Fantastic, thanks!

Still LG, comments optional.



================
Comment at: clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp:61
 private:
+  class EnumAndCovered {
+  public:
----------------
for this kind of purpose, we'd typically just use `struct EnumAndCovered { 
const ECD *Enumerator; bool Covered; }` without encapsulation. But this is fine.

I think a name like `ExpectedCase` might hint a little more at the purpose. Up 
to you.


================
Comment at: clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp:165
+    auto Iter = EnumConstants.find(Val);
+    if (Iter == EnumConstants.end())
+      return false;
----------------
njames93 wrote:
> sammccall wrote:
> > this says if you ever have a case statement that doesn't match an enum 
> > value, then we don't offer the tweak. Why?
> If the user puts in a case statement that doesn't directly match a value, 
> chances are they are doing something funky. In which case the tweak is likely 
> not going to help. WDYT?
I agree it signals that exhaustively enumerating the cases *might* not be 
useful. (It still could be though, e.g. imagine an enum that can't easily be 
extended where someone's added a sentinel value).

Since this is a code action rather than a diagnostic, I'd lean towards still 
offering the action, but either seems reasonable.
If you're going to bail out in this case, it definitely deserves a comment.


================
Comment at: clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp:170
+    // we encounter it.
+    if (IsCovered)
+      return false;
----------------
njames93 wrote:
> sammccall wrote:
> > Do we really need to specially detect or handle this?
> > 
> > Seems like a blind
> > ```
> > if (Iter != EnumConstants.end())
> >   Iter->second.second = true; // mark as covered
> > ```
> > would be enough here
> What are the rules for clangd tweaks on ill-formed code.  I'll remove this 
> anyhow.
Basically, don't crash on ill-formed code, try not to produce wildly invalid 
syntax.
Beyond that, we only really care about problems that come up a lot in practice.

(That said, if there are duplicated cases, I'm not sure that should stop us 
applying this tweak)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90555/new/

https://reviews.llvm.org/D90555

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to