eduucaldas added inline comments.

================
Comment at: clang-tools-extra/clangd/SemanticSelection.cpp:52-55
+    const syntax::Token *FirstToken = Tree->findFirstLeaf()->getToken(),
+                        *LastToken = Tree->findLastLeaf()->getToken();
+    assert(FirstToken->kind() == tok::TokenKind::l_brace);
+    assert(LastToken->kind() == tok::TokenKind::r_brace);
----------------
sammccall wrote:
> kbobyrev wrote:
> > sammccall wrote:
> > > eduucaldas wrote:
> > > > Take a look at `clang/include/clang/Tooling/Syntax/Nodes.h`, syntax 
> > > > constructs usually have nice classes with accessors.
> > > > 
> > > > For instance `CompoundStatement` has the accessors `getLbrace` and 
> > > > `getRbrace` that seem to be exactly what you want.
> > > > 
> > > > However these might not give exactly the first leaf and last leaf in 
> > > > the case of syntactically incorrect code.
> > > I think we should treat all bracket-like things generically. Today this 
> > > is just CompoundStmt, but we want to handle init lists, function calls, 
> > > parens around for-loop conditions, template parameter and arg lists etc 
> > > in the same way.
> > > 
> > > This sort of use is why the `OpenParen`/`CloseParen` NodeRoles are 
> > > generic - we can have one set of logic to handle all of these. (No 
> > > opinion on whether that should live here or in the syntax trees library, 
> > > but putting it here for now seems fine).
> > > 
> > > So in the end I think checking the class name and then grabbing the 
> > > braces by role (not kind) is the right thing here.
> > > We definitely want to avoid asserting that the code looks the way we 
> > > expect though.
> > > So in the end I think checking the class name and then grabbing the 
> > > braces by role (not kind) is the right thing here.
> > > We definitely want to avoid asserting that the code looks the way we 
> > > expect though.
> > 
> > Can you elaborate a bit on how this would work? Is your proposal to iterate 
> > through `CompoundStatement` first-level children and grab the `OpenParen` + 
> > `CloseParen` roles?
> Exactly. And bail out if both don't exist.
> 
> And this can be done on Tree, so it's trivial to add support for function 
> calls etc (but feel free to keep the scope small)
I very much agree on all the points you made Sam.

I think the logic to get ranges from node roles should eventually live in the 
syntax trees library. We might want to hide some of these lower-level functions 
in the future, so it would be better to not rely on them. But it's no harm for 
now :).


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D88553

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

Reply via email to