sammccall added a comment.

Can live with `applyTweak` etc, though it makes me sad.



================
Comment at: clangd/refactor/Tweak.h:40
+  struct Selection {
+    static llvm::Optional<Selection> create(llvm::StringRef File,
+                                            llvm::StringRef Code,
----------------
ilya-biryukov wrote:
> sammccall wrote:
> > sammccall wrote:
> > > Not convinced about this helper function.
> > >  - much of it is just a passthrough to struct initialization. I think the 
> > > code calling it would be clearer if it was initialising the fields one-by 
> > > one
> > >  - the only part that's not passthrough is already a function call with a 
> > > clear name, calling it seems reasonable
> > >  - I'm not sure it makes sense to have the Range -> SourceLocation 
> > > conversion in this file, but the Tweak -> CodeAction conversion outside 
> > > this file (and not unit-testable). There's an argument to be make to keep 
> > > this file independent of LSP protocol structs, but I think that argument 
> > > applies equally to this function.
> > Expected<Selection>? Passing an invalid range is always an error I guess.
> The reason I added it is to avoid duplication between in the test code and 
> `ClangdServer`, which are the only two clients we have.
> I expect this to be more useful when we add a way to traverse the subset of 
> the AST in the checks
I understand. I think as things stand both callers would be clearer (if a 
couple of lines longer) without this helper.

What the API should be in the future - happy to talk about that then.


================
Comment at: clangd/refactor/Tweak.h:59
+  /// A unique id of the action. The convention is to
+  /// lower-case-with-dashes for the identifier.
+  virtual TweakID id() const = 0;
----------------
ilya-biryukov wrote:
> sammccall wrote:
> > nit: one of my lessons from clang-tidy is that mapping between IDs and 
> > implementations is annoying.
> > Since IDs are 1:1 with classes, can we just require this to be the class 
> > name?
> > 
> > (If you wanted, I think you could adapt REGISTER_TWEAK so that it goes 
> > inside the class defn, and then it could provide the override of id() 
> > itself)
> That would mean no two tweaks are allowed to have the same class name. This 
> is probably fine, but somewhat contradicts C++, which would solve it with 
> namespaces.
> To be fair, there's a simple trick to grep for the id to find its class, so 
> I'd keep as is.
> 
> If we choose to adapt `REGISTER_TWEAK`, that would mean we force everyone to 
> put their tweaks **only** in `.cpp` files. That creates arbitrary 
> restrictions on how one should write a check and I'm somewhat opposed to 
> this. But happy to reconsider if you feel strongly about this.
I don't care about the details (e.g. whether `REGISTER_TWEAK` sets the name, 
asserts the name, or none of the above).

I do care that we don't add a second ID for a class that's not equal to the 
class name. This is both a bad idea from first principles and from experience 
with clang-tidy.
If this were ever to become a real problem, I'm happy to include the namespace 
name in the ID.


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

https://reviews.llvm.org/D56267



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

Reply via email to