<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/106663>106663</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang-query] Tab autocompletion misses matchers like hasUnqualifiedDesugaredType()
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          MichelleCDjunaidi
      </td>
    </tr>
</table>

<pre>
    The following is a valid clang-query command:
`match declaratorDecl(hasType(hasUnqualifiedDesugaredType(recordType(hasDeclaration(namedDecl(hasName("::std::thread")))))))`

However, when tabbing on the open brace of
`match declaratorDecl(hasType())`,
only the following options are provided:

```
Matcher<Decl> accessSpecDecl(Matcher<AccessSpecDecl>...)
Matcher<QualType|Decl> anything()
Matcher<QualType> asString(string)
Matcher<Decl> bindingDecl(Matcher<BindingDecl>...)
Matcher<Decl> blockDecl(Matcher<BlockDecl>...)
Matcher<Decl> classTemplateDecl(Matcher<ClassTemplateDecl>...)
Matcher<Decl> classTemplatePartialSpecializationDecl(Matcher<ClassTemplatePartialSpecializationDecl>...)
Matcher<Decl> classTemplateSpecializationDecl(Matcher<ClassTemplateSpecializationDecl>...)
Matcher<Decl> conceptDecl(Matcher<ConceptDecl>...)
Matcher<Decl> cxxConstructorDecl(Matcher<CXXConstructorDecl>...)
Matcher<Decl> cxxConversionDecl(Matcher<CXXConversionDecl>...)
Matcher<Decl> cxxDeductionGuideDecl(Matcher<CXXDeductionGuideDecl>...)
Matcher<Decl> cxxDestructorDecl(Matcher<CXXDestructorDecl>...)
Matcher<Decl> cxxMethodDecl(Matcher<CXXMethodDecl>...)
Matcher<Decl> cxxRecordDecl(Matcher<CXXRecordDecl>...)
Matcher<Decl> decl(Matcher<Decl>...)
Matcher<Decl> declaratorDecl(Matcher<DeclaratorDecl>...)
Matcher<Decl> decompositionDecl(Matcher<DecompositionDecl>...)
Matcher<Decl> enumConstantDecl(Matcher<EnumConstantDecl>...)
Matcher<Decl> enumDecl(Matcher<EnumDecl>...)
Matcher<QualType|Decl> equalsBoundNode(string|string)
Matcher<Decl> fieldDecl(Matcher<FieldDecl>...)
Matcher<QualType|Decl> forEach(Matcher<NestedNameSpecifierLoc|QualType|TypeLoc|...>)
Matcher<QualType|Decl> forEachDescendant(Matcher<NestedNameSpecifierLoc|QualType|TypeLoc|...>)
Matcher<Decl> friendDecl(Matcher<FriendDecl>...)
Matcher<Decl> functionDecl(Matcher<FunctionDecl>...)
Matcher<Decl> functionTemplateDecl(Matcher<FunctionTemplateDecl>...)
Matcher<QualType|Decl> has(Matcher<NestedNameSpecifierLoc|QualType|TypeLoc|...>)
Matcher<Decl> hasAncestor(Matcher<NestedNameSpecifierLoc|TypeLoc|Decl|...>)
Matcher<Decl> hasAttr(string)
Matcher<QualType> hasCanonicalType(Matcher<QualType>)
Matcher<Decl> hasDeclContext(Matcher<Decl>)
Matcher<QualType> hasDeclaration(Matcher<Decl>)
Matcher<QualType|Decl> hasDescendant(Matcher<NestedNameSpecifierLoc|QualType|TypeLoc|...>)
Matcher<QualType> hasLocalQualifiers()
Matcher<Decl> hasParent(Matcher<NestedNameSpecifierLoc|TypeLoc|Decl|...>)
Matcher<QualType> ignoringParens(Matcher<QualType>)
Matcher<Decl> indirectFieldDecl(Matcher<IndirectFieldDecl>...)
Matcher<QualType> isAnyCharacter()
Matcher<QualType> isAnyPointer()
Matcher<QualType> isConstQualified()
Matcher<Decl> isExpandedFromMacro(string)
Matcher<Decl> isExpansionInFileMatching(string...)
Matcher<Decl> isExpansionInMainFile()
Matcher<Decl> isExpansionInSystemHeader()
Matcher<Decl> isImplicit()
Matcher<Decl> isInAnonymousNamespace()
Matcher<Decl> isInStdNamespace()
Matcher<Decl> isInstantiated()
Matcher<QualType> isInteger()
Matcher<Decl> isPrivate()
Matcher<Decl> isProtected()
Matcher<Decl> isPublic()
Matcher<QualType> isSignedInteger()
Matcher<QualType> isUnsignedInteger()
Matcher<QualType> isVolatileQualified()
Matcher<Decl> labelDecl(Matcher<LabelDecl>...)
Matcher<Decl> linkageSpecDecl(Matcher<LinkageSpecDecl>...)
Matcher<Decl> namedDecl(Matcher<NamedDecl>...)
Matcher<Decl> namespaceAliasDecl(Matcher<NamespaceAliasDecl>...)
Matcher<Decl> namespaceDecl(Matcher<NamespaceDecl>...)
Matcher<Decl> nonTypeTemplateParmDecl(Matcher<NonTypeTemplateParmDecl>...)
Matcher<Decl> objcCategoryDecl(Matcher<ObjCCategoryDecl>...)
Matcher<Decl> objcCategoryImplDecl(Matcher<ObjCCategoryImplDecl>...)
Matcher<Decl> objcImplementationDecl(Matcher<ObjCImplementationDecl>...)
Matcher<Decl> objcInterfaceDecl(Matcher<ObjCInterfaceDecl>...)
Matcher<Decl> objcIvarDecl(Matcher<ObjCIvarDecl>...)
Matcher<Decl> objcMethodDecl(Matcher<ObjCMethodDecl>...)
Matcher<Decl> objcPropertyDecl(Matcher<ObjCPropertyDecl>...)
Matcher<Decl> objcProtocolDecl(Matcher<ObjCProtocolDecl>...)
Matcher<Decl> parmVarDecl(Matcher<ParmVarDecl>...)
Matcher<QualType> pointsTo(Matcher<QualType|Decl>)
Matcher<QualType> qualType(Matcher<QualType>...)
Matcher<Decl> recordDecl(Matcher<RecordDecl>...)
Matcher<QualType> references(Matcher<QualType|Decl>)
Matcher<Decl> staticAssertDecl(Matcher<StaticAssertDecl>...)
Matcher<Decl> tagDecl(Matcher<TagDecl>...)
Matcher<Decl> templateTemplateParmDecl(Matcher<TemplateTemplateParmDecl>...)
Matcher<Decl> templateTypeParmDecl(Matcher<TemplateTypeParmDecl>...)
Matcher<Decl> translationUnitDecl(Matcher<TranslationUnitDecl>...)
Matcher<Decl> typeAliasDecl(Matcher<TypeAliasDecl>...)
Matcher<Decl> typeAliasTemplateDecl(Matcher<TypeAliasTemplateDecl>...)
Matcher<Decl> typedefDecl(Matcher<TypedefDecl>...)
Matcher<Decl> typedefNameDecl(Matcher<TypedefNameDecl>...)
Matcher<Decl> unresolvedUsingTypenameDecl(Matcher<UnresolvedUsingTypenameDecl>...)
Matcher<Decl> unresolvedUsingValueDecl(Matcher<UnresolvedUsingValueDecl>...)
Matcher<Decl> usingDecl(Matcher<UsingDecl>...)
Matcher<Decl> usingDirectiveDecl(Matcher<UsingDirectiveDecl>...)
Matcher<Decl> usingEnumDecl(Matcher<UsingEnumDecl>...)
Matcher<Decl> valueDecl(Matcher<ValueDecl>...)
Matcher<Decl> varDecl(Matcher<VarDecl>...)
Matcher<T> allOf(Matcher<T>...)
Matcher<T> anyOf(Matcher<T>...)
Matcher<Stmt> binaryOperation(Matcher<QualType|Decl>...)
Matcher<T> eachOf(Matcher<T>...)
Matcher<Stmt> invocation(Matcher<QualType|Decl>...)
Matcher<QualType|Decl> mapAnyOf(QualType|Decl...)
Matcher<T> optionally(Matcher<T>...)
Matcher<T> unless(Matcher<T>...)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0md9u4rwSwJ8m3ERbhUBLueCChXK-Sm233yld9XawB-KuY2dth5bz9EcOFBJiEmellaqF9cz8ZvyH8dgGrdlGIE6C6-_B9bwHuUmkmjwykiDnOJu_5wIYZb2VpLvJMsFwLTmXH0xsQqZDCLfAGQ0JB7H59jtHtQuJTFMQNBhMg2geRNPgJkrBkCSkSDgoMFLNkfAgvk1AL3cZ7r-9it85cLZmSOeo8w0opAepQiIVPanODyAmRRDfCkityRfxCVKrFsSxjWAw1Ybuv5hEIVDbHo8dfzfRIdzi33_kB25RBfEs_EhQhAZWK9tnKUKTYCgzFOFKAcFQrv27eXIVz_ZWUvBdQTwNq8xsx3QICsNMyS2jWBrML1-Hv-K_j9YvqmAwKzwO7kIgBLV-yZAcYjipTKuiwd3V1ZUN6oz0bw68iHp0goqdSZjYHDpyycBq6hej9pr68KWm_0VdMUGZ2NTi_F5qvxTkkcEl-VUnHFvb7AkHrZeYZhwM1jizmrQT7xmUYcDtiDPg7H_Fum12ctmkk-cuLv_ElxQEM1PnltpbGZ-fMym0UTk5_WBKqLe3c7EfcYtKO_tcAMtSD94caU7ssPwnZ9SxPt7eHBpe3KaOn0k9eI9oEkldrJLEg_PfIt-6OCVJG4eem3tbVZJnVaUk8iDJNJOaOdf-vCZt46HI02Itgqgv-btzoQ_NSemalNHumvq7zAV9khRPGXc0a029a4a8Ps2LY2uHMNZS3QFJKqAn1Aap3Y-L5LJmqB4kCUZle_uxb7SuBnedvM1RExQUhPkbfo_OFEPhGKZTc9tkr3NBnKtwURb4Ui7uUwuXQoc5TED_zXFMQE8FQW2k8nNzYhcITxfGqKayo1ymJKBnIKRg5NBWDquk2OzRfp1JYfDTuPJdewzVcrYTYFQN5G_-HM6CfpAE-L-Hil1pd01YCu4ZFPoG5j_x5aDYRkg76YUn_QdzaQtOhcQsnGnxviZt_WlZpp6K3SwBBcTY40Rb5VzoP0smPLWLTedrGmjzLDB995mBoEgXSqaPQJT0KdAPZrZguhcLxrFQKVf3zXmrYv8IrGB4Rbo3edlpg-k_CPTSkJzM7tOMM8JMq56YCil2qcyL86LOgLSGdC9eDO2gXRQDDMylaalO5L0wuGnv4LNiWzCt3p-VNEguui4p5ivOiE-AL2wjkDaGWTV4FbqryU_JwTCOnguawwp57Yf6cGxt21E5E79gg85j8sOZrI1VvoUopbhjq499sbCmnO23hBroTOxNvAzz40hhZ6h0Nq1Xrk8XdNrYcvVOZmBwI9WuBv2xep9VhF1oNhM0Eo8KPlSrjCkK4z5JW65DxYtsM_3aNUsFtCL14m2hfnQqUF8CH8qFk6TldDhKWtKzkhkq457ditCTZiSR7pmtCNtoGaj0p2OonkvtPht8ZvdqvZTuemPkWQX-zpsr0Oa-KPd53eOwXo5B4RoV2gq9e1--ItF29ZOp1qjqh-SXc2FbvwzUrwWX4HclaA6pqDFtLS8pedN3WQu5rNBKVSA0L_LHq2D1AVw65K3MXXZhS1lWJN6ci8fPpVPDh0tx7aR9tXsy7LZ2iXOUtbFyoVBLvkX6qpnYWHPh4r426HX08RN43urgpNRK167r9Ffte5m-ty_OOmzriKsu9iLeuW68XiuSNs7WOVD-I-PaGtty_bJ4z-D8x7q6rFoMxM7b4MWk5vAQAmr3I0PHVUA9CTc4RyBJZ-9MbCX5c8eOG4kUsulhGM6kDbHvH7-A812X4c4FR60bLY5PZj06GdDxYAw9nPRH8XA8vh4No14yuSbD2_5wuB7heDgar-I-jUgMI4AhoXgLox6bxFE8jG4HUXQdj6PoaoX9fnRLb0i_P4r6iMEwwhQYv-J8m15JtekxrXOc9KObm5tBrziu6OKlNY4FfoSFNIjj4HreUxNr9G2Vb3QwjDjTRp8whhlePNGW3lmD63m4hFUIuS16bPFpRy5Mmdaow3Q_EDrk7BeGzc-rQTzu5YpPEmMyHQymQbwI4sWGmSRfXRGZBvHCRnL4-JYp-Y7EBPGiiF8H8eLQwe0k_n8AAAD__za7p3c">