r179180 - Add an option to parse all comments as documentation comments
jahanian
fjahanian at apple.com
Wed Apr 10 09:24:34 PDT 2013
A test case please.
- Thanks, Fariborz
On Apr 10, 2013, at 8:35 AM, Dmitri Gribenko <gribozavr at gmail.com> wrote:
> Author: gribozavr
> Date: Wed Apr 10 10:35:17 2013
> New Revision: 179180
>
> URL: http://llvm.org/viewvc/llvm-project?rev=179180&view=rev
> Log:
> Add an option to parse all comments as documentation comments
>
> Patch by Amin Shali.
>
> Modified:
> cfe/trunk/docs/UsersManual.rst
> cfe/trunk/include/clang/AST/RawCommentList.h
> cfe/trunk/include/clang/Basic/CommentOptions.h
> cfe/trunk/include/clang/Driver/Options.td
> cfe/trunk/lib/AST/ASTContext.cpp
> cfe/trunk/lib/AST/RawCommentList.cpp
> cfe/trunk/lib/Driver/Tools.cpp
> cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> cfe/trunk/lib/Sema/Sema.cpp
> cfe/trunk/lib/Serialization/ASTReader.cpp
> cfe/trunk/lib/Serialization/ASTWriter.cpp
>
> Modified: cfe/trunk/docs/UsersManual.rst
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/UsersManual.rst?rev=179180&r1=179179&r2=179180&view=diff
> ==============================================================================
> --- cfe/trunk/docs/UsersManual.rst (original)
> +++ cfe/trunk/docs/UsersManual.rst Wed Apr 10 10:35:17 2013
> @@ -1005,6 +1005,19 @@ below. If multiple flags are present, th
>
> Generate complete debug info.
>
> +Comment Parsing Options
> +--------------------------
> +
> +Clang parses Doxygen and non-Doxygen style documentation comments and attaches
> +them to the appropriate declaration nodes. By default, it only parses
> +Doxygen-style comments and ignores ordinary comments starting with ``//`` and
> +``/*``.
> +
> +.. option:: -fparse-all-comments
> +
> + Parse all comments as documentation comments (including ordinary comments
> + starting with ``//`` and ``/*``).
> +
> .. _c:
>
> C Language Features
>
> Modified: cfe/trunk/include/clang/AST/RawCommentList.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RawCommentList.h?rev=179180&r1=179179&r2=179180&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/AST/RawCommentList.h (original)
> +++ cfe/trunk/include/clang/AST/RawCommentList.h Wed Apr 10 10:35:17 2013
> @@ -10,6 +10,7 @@
> #ifndef LLVM_CLANG_AST_RAW_COMMENT_LIST_H
> #define LLVM_CLANG_AST_RAW_COMMENT_LIST_H
>
> +#include "clang/Basic/CommentOptions.h"
> #include "clang/Basic/SourceManager.h"
> #include "llvm/ADT/ArrayRef.h"
>
> @@ -40,7 +41,7 @@ public:
> RawComment() : Kind(RCK_Invalid), IsAlmostTrailingComment(false) { }
>
> RawComment(const SourceManager &SourceMgr, SourceRange SR,
> - bool Merged = false);
> + bool Merged, bool ParseAllComments);
>
> CommentKind getKind() const LLVM_READONLY {
> return (CommentKind) Kind;
> @@ -82,12 +83,18 @@ public:
>
> /// Returns true if this comment is not a documentation comment.
> bool isOrdinary() const LLVM_READONLY {
> - return (Kind == RCK_OrdinaryBCPL) || (Kind == RCK_OrdinaryC);
> + return ((Kind == RCK_OrdinaryBCPL) || (Kind == RCK_OrdinaryC)) &&
> + !ParseAllComments;
> }
>
> /// Returns true if this comment any kind of a documentation comment.
> bool isDocumentation() const LLVM_READONLY {
> - return !isInvalid() && !isOrdinary();
> + return !isInvalid() && (!isOrdinary() || ParseAllComments);
> + }
> +
> + /// Returns whether we are parsing all comments.
> + bool isParseAllComments() const LLVM_READONLY {
> + return ParseAllComments;
> }
>
> /// Returns raw comment text with comment markers.
> @@ -135,6 +142,10 @@ private:
> bool IsTrailingComment : 1;
> bool IsAlmostTrailingComment : 1;
>
> + /// When true, ordinary comments starting with "//" and "/*" will be
> + /// considered as documentation comments.
> + bool ParseAllComments : 1;
> +
> mutable bool BeginLineValid : 1; ///< True if BeginLine is valid
> mutable bool EndLineValid : 1; ///< True if EndLine is valid
> mutable unsigned BeginLine; ///< Cached line number
> @@ -142,10 +153,12 @@ private:
>
> /// \brief Constructor for AST deserialization.
> RawComment(SourceRange SR, CommentKind K, bool IsTrailingComment,
> - bool IsAlmostTrailingComment) :
> + bool IsAlmostTrailingComment,
> + bool ParseAllComments) :
> Range(SR), RawTextValid(false), BriefTextValid(false), Kind(K),
> IsAttached(false), IsTrailingComment(IsTrailingComment),
> IsAlmostTrailingComment(IsAlmostTrailingComment),
> + ParseAllComments(ParseAllComments),
> BeginLineValid(false), EndLineValid(false)
> { }
>
> @@ -207,4 +220,3 @@ private:
> } // end namespace clang
>
> #endif
> -
>
> Modified: cfe/trunk/include/clang/Basic/CommentOptions.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/CommentOptions.h?rev=179180&r1=179179&r2=179180&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/CommentOptions.h (original)
> +++ cfe/trunk/include/clang/Basic/CommentOptions.h Wed Apr 10 10:35:17 2013
> @@ -27,6 +27,11 @@ struct CommentOptions {
> /// \brief Command names to treat as block commands in comments.
> /// Should not include the leading backslash.
> BlockCommandNamesTy BlockCommandNames;
> +
> + /// \brief Treat ordinary comments as documentation comments.
> + bool ParseAllComments;
> +
> + CommentOptions() : ParseAllComments(false) { }
> };
>
> } // end namespace clang
>
> Modified: cfe/trunk/include/clang/Driver/Options.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=179180&r1=179179&r2=179180&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Driver/Options.td (original)
> +++ cfe/trunk/include/clang/Driver/Options.td Wed Apr 10 10:35:17 2013
> @@ -330,6 +330,7 @@ def fcolor_diagnostics : Flag<["-"], "fc
> def fcomment_block_commands : CommaJoined<["-"], "fcomment-block-commands=">, Group<f_clang_Group>, Flags<[CC1Option]>,
> HelpText<"Treat each comma separated argument in <arg> as a documentation comment block command">,
> MetaVarName<"<arg>">;
> +def fparse_all_comments : Flag<["-"], "fparse-all-comments">, Group<f_clang_Group>, Flags<[CC1Option]>;
> def fcommon : Flag<["-"], "fcommon">, Group<f_Group>;
> def fcompile_resource_EQ : Joined<["-"], "fcompile-resource=">, Group<f_Group>;
> def fconstant_cfstrings : Flag<["-"], "fconstant-cfstrings">, Group<f_Group>;
>
> Modified: cfe/trunk/lib/AST/ASTContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=179180&r1=179179&r2=179180&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/ASTContext.cpp (original)
> +++ cfe/trunk/lib/AST/ASTContext.cpp Wed Apr 10 10:35:17 2013
> @@ -141,7 +141,9 @@ RawComment *ASTContext::getRawCommentFor
> // When searching for comments during parsing, the comment we are looking
> // for is usually among the last two comments we parsed -- check them
> // first.
> - RawComment CommentAtDeclLoc(SourceMgr, SourceRange(DeclLoc));
> + RawComment CommentAtDeclLoc(
> + SourceMgr, SourceRange(DeclLoc), false,
> + LangOpts.CommentOpts.ParseAllComments);
> BeforeThanCompare<RawComment> Compare(SourceMgr);
> ArrayRef<RawComment *>::iterator MaybeBeforeDecl = RawComments.end() - 1;
> bool Found = Compare(*MaybeBeforeDecl, &CommentAtDeclLoc);
>
> Modified: cfe/trunk/lib/AST/RawCommentList.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/RawCommentList.cpp?rev=179180&r1=179179&r2=179180&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/RawCommentList.cpp (original)
> +++ cfe/trunk/lib/AST/RawCommentList.cpp Wed Apr 10 10:35:17 2013
> @@ -63,9 +63,10 @@ bool mergedCommentIsTrailingComment(Stri
> } // unnamed namespace
>
> RawComment::RawComment(const SourceManager &SourceMgr, SourceRange SR,
> - bool Merged) :
> + bool Merged, bool ParseAllComments) :
> Range(SR), RawTextValid(false), BriefTextValid(false),
> IsAttached(false), IsAlmostTrailingComment(false),
> + ParseAllComments(ParseAllComments),
> BeginLineValid(false), EndLineValid(false) {
> // Extract raw comment text, if possible.
> if (SR.getBegin() == SR.getEnd() || getRawText(SourceMgr).empty()) {
> @@ -253,7 +254,8 @@ void RawCommentList::addComment(const Ra
> if (C1EndLine + 1 == C2BeginLine || C1EndLine == C2BeginLine) {
> SourceRange MergedRange(C1.getSourceRange().getBegin(),
> C2.getSourceRange().getEnd());
> - *Comments.back() = RawComment(SourceMgr, MergedRange, true);
> + *Comments.back() = RawComment(SourceMgr, MergedRange, true,
> + RC.isParseAllComments());
> Merged = true;
> }
> }
> @@ -262,4 +264,3 @@ void RawCommentList::addComment(const Ra
>
> OnlyWhitespaceSeen = true;
> }
> -
>
> Modified: cfe/trunk/lib/Driver/Tools.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=179180&r1=179179&r2=179180&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Driver/Tools.cpp (original)
> +++ cfe/trunk/lib/Driver/Tools.cpp Wed Apr 10 10:35:17 2013
> @@ -3294,6 +3294,8 @@ void Clang::ConstructJob(Compilation &C,
>
> // Forward -fcomment-block-commands to -cc1.
> Args.AddAllArgs(CmdArgs, options::OPT_fcomment_block_commands);
> + // Forward -fparse-all-comments to -cc1.
> + Args.AddAllArgs(CmdArgs, options::OPT_fparse_all_comments);
>
> // Forward -Xclang arguments to -cc1, and -mllvm arguments to the LLVM option
> // parser.
>
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=179180&r1=179179&r2=179180&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Wed Apr 10 10:35:17 2013
> @@ -281,6 +281,7 @@ static bool ParseMigratorArgs(MigratorOp
>
> static void ParseCommentArgs(CommentOptions &Opts, ArgList &Args) {
> Opts.BlockCommandNames = Args.getAllArgValues(OPT_fcomment_block_commands);
> + Opts.ParseAllComments = Args.hasArg(OPT_fparse_all_comments);
> }
>
> static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
>
> Modified: cfe/trunk/lib/Sema/Sema.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.cpp?rev=179180&r1=179179&r2=179180&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/Sema.cpp (original)
> +++ cfe/trunk/lib/Sema/Sema.cpp Wed Apr 10 10:35:17 2013
> @@ -1077,7 +1077,8 @@ void Sema::ActOnComment(SourceRange Comm
> if (!LangOpts.RetainCommentsFromSystemHeaders &&
> SourceMgr.isInSystemHeader(Comment.getBegin()))
> return;
> - RawComment RC(SourceMgr, Comment);
> + RawComment RC(SourceMgr, Comment, false,
> + LangOpts.CommentOpts.ParseAllComments);
> if (RC.isAlmostTrailingComment()) {
> SourceRange MagicMarkerRange(Comment.getBegin(),
> Comment.getBegin().getLocWithOffset(3));
>
> Modified: cfe/trunk/lib/Serialization/ASTReader.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=179180&r1=179179&r2=179180&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTReader.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTReader.cpp Wed Apr 10 10:35:17 2013
> @@ -3907,6 +3907,7 @@ bool ASTReader::ParseLanguageOptions(con
> LangOpts.CommentOpts.BlockCommandNames.push_back(
> ReadString(Record, Idx));
> }
> + LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
>
> return Listener.ReadLanguageOptions(LangOpts, Complain);
> }
> @@ -7165,9 +7166,9 @@ void ASTReader::ReadComments() {
> (RawComment::CommentKind) Record[Idx++];
> bool IsTrailingComment = Record[Idx++];
> bool IsAlmostTrailingComment = Record[Idx++];
> - Comments.push_back(new (Context) RawComment(SR, Kind,
> - IsTrailingComment,
> - IsAlmostTrailingComment));
> + Comments.push_back(new (Context) RawComment(
> + SR, Kind, IsTrailingComment, IsAlmostTrailingComment,
> + Context.getLangOpts().CommentOpts.ParseAllComments));
> break;
> }
> }
>
> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=179180&r1=179179&r2=179180&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Wed Apr 10 10:35:17 2013
> @@ -1069,6 +1069,7 @@ void ASTWriter::WriteControlBlock(Prepro
> I != IEnd; ++I) {
> AddString(*I, Record);
> }
> + Record.push_back(LangOpts.CommentOpts.ParseAllComments);
>
> Stream.EmitRecord(LANGUAGE_OPTIONS, Record);
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130410/1c3793e8/attachment.html>
More information about the cfe-commits
mailing list