From: Eric Liu Date: Wed, 19 Oct 2016 08:19:46 +0000 (+0000) Subject: [clang-format] Add comment manipulation header X-Git-Tag: llvmorg-4.0.0-rc1~6842 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=99eeab7ff3aca9a2e0827349b5ce2e7c71a69373;p=platform%2Fupstream%2Fllvm.git [clang-format] Add comment manipulation header Summary: Introduces a separate target for comment manipulation. Currently, comment manipulation is in BreakableComment.cpp. Towards implementing comment reflowing, we want to factor out the comment-related functionality, so it can be reused. Start simple by just moving out getLineCommentIndentPrefix. Patch by Krasimir Georgiev! Reviewers: djasper Subscribers: klimek, beanz, mgorny, modocache Differential Revision: https://reviews.llvm.org/D25725 llvm-svn: 284573 --- diff --git a/clang/lib/Format/BreakableToken.cpp b/clang/lib/Format/BreakableToken.cpp index 36a8c4d..6363f89 100644 --- a/clang/lib/Format/BreakableToken.cpp +++ b/clang/lib/Format/BreakableToken.cpp @@ -14,6 +14,7 @@ //===----------------------------------------------------------------------===// #include "BreakableToken.h" +#include "Comments.h" #include "clang/Basic/CharInfo.h" #include "clang/Format/Format.h" #include "llvm/ADT/STLExtras.h" @@ -182,21 +183,6 @@ void BreakableStringLiteral::insertBreak(unsigned LineIndex, Prefix, InPPDirective, 1, IndentLevel, LeadingSpaces); } -static StringRef getLineCommentIndentPrefix(StringRef Comment) { - static const char *const KnownPrefixes[] = {"///", "//", "//!"}; - StringRef LongestPrefix; - for (StringRef KnownPrefix : KnownPrefixes) { - if (Comment.startswith(KnownPrefix)) { - size_t PrefixLength = KnownPrefix.size(); - while (PrefixLength < Comment.size() && Comment[PrefixLength] == ' ') - ++PrefixLength; - if (PrefixLength > LongestPrefix.size()) - LongestPrefix = Comment.substr(0, PrefixLength); - } - } - return LongestPrefix; -} - BreakableLineComment::BreakableLineComment( const FormatToken &Token, unsigned IndentLevel, unsigned StartColumn, bool InPPDirective, encoding::Encoding Encoding, const FormatStyle &Style) diff --git a/clang/lib/Format/CMakeLists.txt b/clang/lib/Format/CMakeLists.txt index cb46b9f..c977c2d 100644 --- a/clang/lib/Format/CMakeLists.txt +++ b/clang/lib/Format/CMakeLists.txt @@ -3,6 +3,7 @@ set(LLVM_LINK_COMPONENTS support) add_clang_library(clangFormat AffectedRangeManager.cpp BreakableToken.cpp + Comments.cpp ContinuationIndenter.cpp Format.cpp FormatToken.cpp diff --git a/clang/lib/Format/Comments.cpp b/clang/lib/Format/Comments.cpp new file mode 100644 index 0000000..1b27f5b --- /dev/null +++ b/clang/lib/Format/Comments.cpp @@ -0,0 +1,36 @@ +//===--- Comments.cpp - Comment Manipulation -------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// \brief Implements comment manipulation. +/// +//===----------------------------------------------------------------------===// + +#include "Comments.h" + +namespace clang { +namespace format { + +StringRef getLineCommentIndentPrefix(StringRef Comment) { + static const char *const KnownPrefixes[] = {"///", "//", "//!"}; + StringRef LongestPrefix; + for (StringRef KnownPrefix : KnownPrefixes) { + if (Comment.startswith(KnownPrefix)) { + size_t PrefixLength = KnownPrefix.size(); + while (PrefixLength < Comment.size() && Comment[PrefixLength] == ' ') + ++PrefixLength; + if (PrefixLength > LongestPrefix.size()) + LongestPrefix = Comment.substr(0, PrefixLength); + } + } + return LongestPrefix; +} + +} // namespace format +} // namespace clang diff --git a/clang/lib/Format/Comments.h b/clang/lib/Format/Comments.h new file mode 100644 index 0000000..59f0596 --- /dev/null +++ b/clang/lib/Format/Comments.h @@ -0,0 +1,33 @@ +//===--- Comments.cpp - Comment manipulation -----------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// \brief Declares comment manipulation functionality. +/// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_LIB_FORMAT_COMMENTS_H +#define LLVM_CLANG_LIB_FORMAT_COMMENTS_H + +#include "clang/Basic/LLVM.h" +#include "llvm/ADT/StringRef.h" + +namespace clang { +namespace format { + +/// \brief Returns the comment prefix of the line comment \p Comment. +/// +/// The comment prefix consists of a leading known prefix, like "//" or "///", +/// together with the following whitespace. +StringRef getLineCommentIndentPrefix(StringRef Comment); + +} // namespace format +} // namespace clang + +#endif