clang/bin/rename-wrapper | 19 ++++++++ clang/find-unprefixed-members.cxx | 85 +++++++++++++++++++++++++++++++------- clang/rename.cxx | 2 3 files changed, 90 insertions(+), 16 deletions(-)
New commits: commit aa9424be6303cec6e1c8bcba369b66e2b7701fa3 Author: Miklos Vajna <[email protected]> Date: Mon Jan 18 09:38:45 2016 +0100 clang: initial online.git support 1) Support autotools next to gbuild in rename-wrapper. 2) Support Poco-style naming convention in find-unprefixed-members. diff --git a/clang/bin/rename-wrapper b/clang/bin/rename-wrapper index a67743f..b13fb90 100755 --- a/clang/bin/rename-wrapper +++ b/clang/bin/rename-wrapper @@ -6,16 +6,33 @@ if [ -h $0 ]; then fi c= +o= +file= for i in "$@" do if [ "$i" = "-c" ]; then c=1 + elif [ "$i" = "-o" ]; then + o=1 + elif [ -n "$o" ]; then + o= elif [ -n "$c" ]; then file=$i break fi done -exec $mydir/rename $RENAME_ARGS $file -- "$@" +ret=0 +if [ -n "$file" ]; then + $mydir/rename $RENAME_ARGS $file -- "$@" + ret=$? +fi + +# gbuild detected or error: no need to call the real compiler +if [ $ret -gt 0 -o -n "$COMPILER_EXTERNAL_TOOL" ]; then + exit $ret +fi + +exec "$@" # vi:set shiftwidth=4 expandtab: diff --git a/clang/find-unprefixed-members.cxx b/clang/find-unprefixed-members.cxx index 9cb3503..981b4b7 100644 --- a/clang/find-unprefixed-members.cxx +++ b/clang/find-unprefixed-members.cxx @@ -14,21 +14,78 @@ class Context { std::string m_aClassName; std::string m_aClassPrefix; + std::set<std::string> m_aClassExcludedPrefixes; + bool m_bPoco; public: - Context(const std::string& rClassName, const std::string& rClassPrefix) + Context(const std::string& rClassName, const std::string& rClassPrefix, const std::string& rClassExcludedPrefix, bool bPoco) : m_aClassName(rClassName), - m_aClassPrefix(rClassPrefix) + m_aClassPrefix(rClassPrefix), + m_bPoco(bPoco) { + std::stringstream aStream(rClassExcludedPrefix); + std::string aExclude; + while (std::getline(aStream, aExclude, ',')) + m_aClassExcludedPrefixes.insert(aExclude); } bool match(const std::string& rName) const { if (m_aClassName == "") - return rName.find(m_aClassPrefix) == 0; + { + bool bRet = rName.find(m_aClassPrefix) == 0; + if (bRet) + { + for (const std::string& rPrefix : m_aClassExcludedPrefixes) + if (rName.find(rPrefix) == 0) + return false; + return true; + } + else + return false; + } else return rName == m_aClassName; } + + /// Checks if a non-static member has an expected name + bool checkNonStatic(const std::string& rName) const + { + if (m_bPoco) + return rName.find("_") == 0; + else + return rName.find("m") == 0; + } + + /// Checks if a static member has an expected name + bool checkStatic(const std::string& rName) const + { + if (m_bPoco) + return !rName.empty() && rName[0] >= 'A' && rName[0] <= 'Z'; + else + return rName.find("s") == 0; + } + + /// Suggest a better name, provided that checkNonStatic() returned false. + void suggestNonStatic(std::string& rName) const + { + if (m_bPoco) + rName.insert(0, "_"); + else + rName.insert(0, "m_"); + } + + /// Suggest a better name, provided that checkStatic() returned false. + void suggestStatic(std::string& rName) const + { + if (m_bPoco) + { + if (!rName.empty()) + rName[0] = toupper(rName[0]); + } + else + rName.insert(0, "s_"); + } }; class Visitor : public clang::RecursiveASTVisitor<Visitor> @@ -69,9 +126,9 @@ public: if (m_rContext.match(pRecord->getQualifiedNameAsString())) { std::string aName = pDecl->getNameAsString(); - if (aName.find("m") != 0) + if (!m_rContext.checkNonStatic(aName)) { - aName.insert(0, "m_"); + m_rContext.suggestNonStatic(aName); std::stringstream ss; ss << pDecl->getNameAsString() << "," << aName; m_aResults.push_back(std::make_pair(pRecord->getQualifiedNameAsString(), ss.str())); @@ -98,9 +155,9 @@ public: if (pRecord && m_rContext.match(pRecord->getQualifiedNameAsString())) { std::string aName = pDecl->getNameAsString(); - if (aName.find("s") != 0) + if (!m_rContext.checkStatic(aName)) { - aName.insert(0, "s_"); + m_rContext.suggestStatic(aName); std::stringstream ss; ss << pDecl->getNameAsString() << "," << aName; m_aResults.push_back(std::make_pair(pRecord->getQualifiedNameAsString(), ss.str())); @@ -193,17 +250,17 @@ int main(int argc, const char** argv) llvm::cl::opt<std::string> aClassPrefix("class-prefix", llvm::cl::desc("Qualified name prefix (e.g. namespace::Cl)."), llvm::cl::cat(aCategory)); + llvm::cl::opt<std::string> aClassExcludedPrefix("class-excluded-prefix", + llvm::cl::desc("Qualified name prefix to exclude (e.g. std::), has priority over the -class-prefix include."), + llvm::cl::cat(aCategory)); + llvm::cl::opt<bool> bPoco("poco", + llvm::cl::desc("Expect Poco-style '_' instead of LibreOffice-style 'm_' as prefix."), + llvm::cl::cat(aCategory)); clang::tooling::CommonOptionsParser aParser(argc, argv, aCategory); - if (aClassName.empty() && aClassPrefix.empty()) - { - std::cerr << "-class-name or -class-prefix is required." << std::endl; - return 1; - } - clang::tooling::ClangTool aTool(aParser.getCompilations(), aParser.getSourcePathList()); - Context aContext(aClassName, aClassPrefix); + Context aContext(aClassName, aClassPrefix, aClassExcludedPrefix, bPoco); FrontendAction aAction(aContext); std::unique_ptr<clang::tooling::FrontendActionFactory> pFactory = clang::tooling::newFrontendActionFactory(&aAction); return aTool.run(pFactory.get()); diff --git a/clang/rename.cxx b/clang/rename.cxx index 352a90b..902c6d5 100644 --- a/clang/rename.cxx +++ b/clang/rename.cxx @@ -19,7 +19,7 @@ class RenameRewriter : public clang::Rewriter public: RenameRewriter(const std::map<std::string, std::string>& rNameMap, bool bDump) : maNameMap(rNameMap), - mbDump(bDump) + mbDump(bDump) { } _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
