[PATCH] D89579: [clangd][ObjC] Support nullability annotations

David Goldman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 19 09:01:31 PDT 2020


dgoldman added inline comments.


================
Comment at: clang-tools-extra/clangd/Selection.cpp:611
+      // robust.
+      return false;
     if (!SelChecker.mayHit(S)) {
----------------
sammccall wrote:
> I'm not sure we actually want to *do it* at this point, as you're seeing we may have some unintended consequences.
Ah, I think I found the cause: claimRange will claim tokens for the TypeLoc even if the TypeLoc is unselected. So the VarDecl later on appears to be completely selected since the `int` token has been claimed and `claimRange` doesn't check the status of the children.

Before:



> Built preamble of size 206192 for file /clangd-test/TestTU.cpp version null
> Computing selection for </clangd-test/TestTU.cpp:1:6, col:11>
>  push: VarDecl 
>   hit selection: </clangd-test/TestTU.cpp:1:6>
>   push: NestedNameSpecifierLoc 
>   pop: NestedNameSpecifierLoc  selected: 3
>   skip: BuiltinTypeLoc 
>    skipped range = </clangd-test/TestTU.cpp:1:2>
>   push: IntegerLiteral 
>    hit selection: </clangd-test/TestTU.cpp:1:10>
>   pop: IntegerLiteral  selected: 2
>   hit selection: </clangd-test/TestTU.cpp:1:2, col:10>
>  pop: VarDecl  selected: 1
> Built selection tree
>  TranslationUnitDecl 
>   .VarDecl int x = 0
>     *IntegerLiteral 0




After:


> Built preamble of size 206192 for file /clangd-test/TestTU.cpp version null
> Computing selection for </clangd-test/TestTU.cpp:1:6, col:11>
>  push: VarDecl
>   hit selection: </clangd-test/TestTU.cpp:1:6>
>   push: NestedNameSpecifierLoc
>   pop: NestedNameSpecifierLoc  selected: 3
>   push: BuiltinTypeLoc
>   pop: BuiltinTypeLoc  selected: 0
>   push: IntegerLiteral
>    hit selection: </clangd-test/TestTU.cpp:1:10>
>   pop: IntegerLiteral  selected: 2
>   hit selection: </clangd-test/TestTU.cpp:1:2, col:10>
>  pop: VarDecl  selected: 2
> Built selection tree
>  TranslationUnitDecl
>   *VarDecl int x = 0
>     *IntegerLiteral 0

Like you said probably worth fixing in a follow up, and I should revert to my previous code?




Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D89579



More information about the cfe-commits mailing list