forked from OSchip/llvm-project
[AST] Attach comment in `/** doc */ typedef struct A {} B` to B as well as A.
Summary: Semantically they're the same thing, and it's important when the underlying struct is anonymous. There doesn't seem to be a problem attaching the same comment to multiple things as it already happens with `/** doc */ int a, b;` This affects an Index test but the results look better (name present, USR points to the typedef). Fixes https://github.com/clangd/clangd/issues/189 Reviewers: kadircet, lh123 Subscribers: ilya-biryukov, jkorous, arphaman, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D70203
This commit is contained in:
parent
2d739f98d8
commit
a433e7141f
|
@ -1299,6 +1299,19 @@ TEST(Hover, All) {
|
|||
"]\n"
|
||||
"text[Typedef]",
|
||||
},
|
||||
{
|
||||
R"cpp(// Typedef with embedded definition
|
||||
typedef struct Bar {} Foo;
|
||||
int main() {
|
||||
^Foo bar;
|
||||
}
|
||||
)cpp",
|
||||
"text[Declared in]code[global namespace]\n"
|
||||
"codeblock(cpp) [\n"
|
||||
"typedef struct Bar Foo\n"
|
||||
"]\n"
|
||||
"text[Typedef with embedded definition]",
|
||||
},
|
||||
{
|
||||
R"cpp(// Namespace
|
||||
namespace ns {
|
||||
|
|
|
@ -163,7 +163,9 @@ static SourceLocation getDeclLocForCommentSearch(const Decl *D,
|
|||
if (isa<ObjCMethodDecl>(D) || isa<ObjCContainerDecl>(D) ||
|
||||
isa<ObjCPropertyDecl>(D) ||
|
||||
isa<RedeclarableTemplateDecl>(D) ||
|
||||
isa<ClassTemplateSpecializationDecl>(D))
|
||||
isa<ClassTemplateSpecializationDecl>(D) ||
|
||||
// Allow association with Y across {} in `typedef struct X {} Y`.
|
||||
isa<TypedefDecl>(D))
|
||||
return D->getBeginLoc();
|
||||
else {
|
||||
const SourceLocation DeclLoc = D->getLocation();
|
||||
|
|
|
@ -17,7 +17,7 @@ typedef enum : NSUInteger {
|
|||
MyEnumBar, /**< value Bar */
|
||||
MyEnumBaz, /**< value Baz */
|
||||
} MyEnum;
|
||||
// CHECK: TypedefDecl=MyEnum:[[@LINE-1]]:3 (Definition) FullCommentAsHTML=[<p class="para-brief"> Documentation for MyEnum </p>] FullCommentAsXML=[<Typedef file="{{[^"]+}}annotate-comments-typedef.m" line="[[@LINE-1]]" column="3"><Name><anonymous></Name><USR>c:@EA@MyEnum</USR><Declaration>typedef enum MyEnum MyEnum</Declaration><Abstract><Para> Documentation for MyEnum </Para></Abstract></Typedef>]
|
||||
// CHECK: TypedefDecl=MyEnum:[[@LINE-1]]:3 (Definition) {{.*}} FullCommentAsHTML=[<p class="para-brief"> Documentation for MyEnum </p>] FullCommentAsXML=[<Typedef file="{{[^"]+}}annotate-comments-typedef.m" line="[[@LINE-1]]" column="3"><Name>MyEnum</Name><USR>c:@T@MyEnum</USR><Declaration>typedef enum MyEnum MyEnum</Declaration><Abstract><Para> Documentation for MyEnum </Para></Abstract></Typedef>]
|
||||
|
||||
|
||||
/** Documentation for E */
|
||||
|
@ -35,7 +35,7 @@ typedef enum E E_T;
|
|||
typedef struct {
|
||||
int iii;
|
||||
} Foo;
|
||||
// CHECK: TypedefDecl=Foo:[[@LINE-1]]:11 (Definition) FullCommentAsHTML=[<p class="para-brief"> Comment about Foo </p>] FullCommentAsXML=[<Typedef file="{{[^"]+}}annotate-comments-typedef.m" line="[[@LINE-1]]" column="11"><Name><anonymous></Name><USR>c:@SA@Foo</USR><Declaration>typedef struct Foo Foo</Declaration><Abstract><Para> Comment about Foo </Para></Abstract></Typedef>]
|
||||
// CHECK: TypedefDecl=Foo:[[@LINE-1]]:11 (Definition) {{.*}} FullCommentAsHTML=[<p class="para-brief"> Comment about Foo </p>] FullCommentAsXML=[<Typedef file="{{[^"]+}}annotate-comments-typedef.m" line="[[@LINE-1]]" column="11"><Name>Foo</Name><USR>c:@T@Foo</USR><Declaration>typedef struct Foo Foo</Declaration><Abstract><Para> Comment about Foo </Para></Abstract></Typedef>]
|
||||
// CHECK: StructDecl=:[[@LINE-4]]:9 (Definition) {{.*}} BriefComment=[Comment about Foo] FullCommentAsHTML=[<p class="para-brief"> Comment about Foo </p>] FullCommentAsXML=[<Class file="{{[^"]+}}annotate-comments-typedef.m" line="[[@LINE-4]]" column="9"><Name><anonymous></Name><USR>c:@SA@Foo</USR><Declaration>struct {}</Declaration><Abstract><Para> Comment about Foo </Para></Abstract></Class>]
|
||||
|
||||
|
||||
|
|
|
@ -868,7 +868,7 @@ struct test_noattach12 *test_attach13;
|
|||
/// \brief\author Aaa
|
||||
typedef struct test_noattach14 *test_attach15;
|
||||
|
||||
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
||||
// expected-warning@+1 + {{empty paragraph passed to '\brief' command}}
|
||||
/// \brief\author Aaa
|
||||
typedef struct test_attach16 { int a; } test_attach17;
|
||||
|
||||
|
@ -886,7 +886,7 @@ typedef struct S *test_attach19;
|
|||
/// \brief\author Aaa
|
||||
struct test_attach20;
|
||||
|
||||
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
||||
// expected-warning@+1 + {{empty paragraph passed to '\brief' command}}
|
||||
/// \brief\author Aaa
|
||||
typedef struct test_attach21 {
|
||||
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
||||
|
|
Loading…
Reference in New Issue