On Jul 11, 2012, at 2:38 PM, Dmitri Gribenko <[email protected]> wrote:
> Author: gribozavr > Date: Wed Jul 11 16:38:39 2012 > New Revision: 160078 > > URL: http://llvm.org/viewvc/llvm-project?rev=160078&view=rev > Log: > Enable comment parsing and semantic analysis to emit diagnostics. A few > diagnostics implemented -- see testcases. > > I created a new TableGen file for comment diagnostics, > DiagnosticCommentKinds.td, because comment diagnostics don't logically > fit into AST diagnostics file. But I don't feel strongly about it. > > This also implements support for self-closing HTML tags in comment > lexer and parser (for example, <br />). > > In order to issue precise diagnostics CommentSema needs to know the > declaration the comment is attached to. There is no easy way to find a decl > by > comment, so we match comments and decls in lockstep: after parsing one > declgroup we check if we have any new, not yet attached comments. If we do -- > then we do the usual comment-finding process. > > It is interesting that this automatically handles trailing comments. > We pick up not only comments that precede the declaration, but also > comments that *follow* the declaration -- thanks to the lookahead in > the lexer: after parsing the declgroup we've consumed the semicolon > and looked ahead through comments. > > Added -Wdocumentation-html flag for semantic HTML errors to allow the user to > disable only HTML warnings (but not HTML parse errors, which we emit as > warnings in -Wdocumentation). Awesome! > Added: cfe/trunk/test/Sema/warn-documentation.m > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-documentation.m?rev=160078&view=auto > ============================================================================== > --- cfe/trunk/test/Sema/warn-documentation.m (added) > +++ cfe/trunk/test/Sema/warn-documentation.m Wed Jul 11 16:38:39 2012 > @@ -0,0 +1,24 @@ > +// RUN: %clang_cc1 -fsyntax-only -Wdocumentation -Wdocumentation-pedantic > -verify %s > + > +@class NSString; > + > +// expected-warning@+2 {{empty paragraph passed to '\brief' command}} > +/** > + * \brief\brief Aaa > + */ > +@interface A > +// expected-warning@+2 {{empty paragraph passed to '\brief' command}} > +/** > + * \brief\brief Aaa > + * \param aaa Aaa > + * \param bbb Bbb > + */ > ++ (NSString *)test1:(NSString *)aaa suffix:(NSString *)bbb; > + > +// expected-warning@+2 {{parameter 'aab' not found in the function > declaration}} expected-note@+2 {{did you mean 'aaa'?}} > +/** > + * \param aab Aaa > + */ > ++ (NSString *)test2:(NSString *)aaa; > +@end > + There are a bunch of Objective-C things that may need special handling, because they won't go through DeclGroups. Here they are: @interface A(Category) // a category: ObjCCategoryDecl @property id foo; // a property: ObjCPropertyDecl @end @interface A() // a class extension: ObjCCategoryDecl @end @implementation A // a class implementation : ObjCImplementationDecl @synthesize foo; // a property implementation: ObjCPropertyImplDecl @dynamic foo; // a property implementation: ObjCPropertyImplDecl @end @implementation A(Category) // a category implementation: ObjCCategoryImplDecl @end @protocol P // a protocol: ObjCProtocolDecl @end - Doug _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
