summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-07-28 12:02:32 +0300
committerAndrei Karas <akaras@inbox.ru>2014-07-28 20:15:10 +0300
commit1e6ea332e2cff8e47bbab3937e471f1c8f420508 (patch)
tree813db352981bd2b10cbbb0758f227951b3f19537 /src
parent7c744c1c323cc678bddb02c574730a23b10a6da0 (diff)
downloadmplint-1e6ea332e2cff8e47bbab3937e471f1c8f420508.tar.gz
mplint-1e6ea332e2cff8e47bbab3937e471f1c8f420508.tar.bz2
mplint-1e6ea332e2cff8e47bbab3937e471f1c8f420508.tar.xz
mplint-1e6ea332e2cff8e47bbab3937e471f1c8f420508.zip
Add checks for public:/protected:/private: formatting.
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am1
-rw-r--r--src/rules/formatting.cpp86
2 files changed, 87 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 1d16154..4cdfdfb 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -21,6 +21,7 @@ mplint_SOURCES = \
rules/debug.cpp \
rules/dump.cpp \
rules/final.cpp \
+ rules/formatting.cpp \
rules/include.cpp \
rules/license.cpp \
rules/po.cpp \
diff --git a/src/rules/formatting.cpp b/src/rules/formatting.cpp
new file mode 100644
index 0000000..1a49848
--- /dev/null
+++ b/src/rules/formatting.cpp
@@ -0,0 +1,86 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2014 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "template.hpp"
+
+registerRuleExt(formatting, "011", "(.+)[.](cpp|h)")
+
+namespace
+{
+ unsigned int align = 0;
+ std::stack<unsigned int> stack;
+} // namespace
+
+startRule(formatting)
+{
+ align = 0;
+}
+
+endRule(formatting)
+{
+}
+
+parseLineRule(formatting)
+{
+ std::string data0 = data;
+ trim(data0);
+ if (data0 == "{")
+ {
+ stack.push(align);
+ align = data.size() - data0.size() + 4;
+// print("open align=" + toString(align));
+ }
+ else if (findCutFirst(data0, "{ "))
+ {
+ const int sz = data0.size();
+ trim(data0);
+ if (!data0.empty() && data0[0] != '/')
+ return;
+ stack.push(align);
+ align = data.size() - sz - 2 + 4;
+// print("open align=" + toString(align));
+ }
+ else if (data0 == "}" || data0 == "};" || findCutFirst(data0, "} "))
+ {
+ if (stack.empty())
+ return;
+
+ align = stack.top();
+ stack.pop();
+// print("close align=" + toString(align));
+ }
+ else
+ {
+ std::string data2 = data;
+ if (findCutLast(data2, "public:")
+ || findCutLast(data2, "protected:")
+ || findCutLast(data2, "private:"))
+ {
+// print("sz=" + toString(int(data2.size())));
+// print("align=" + toString(align));
+ if (data2.size() != align)
+ {
+ print("Wrong public/protected/private formatting. "
+ "Must be align " + toString(align) + ", but present align "
+ + toString(static_cast<int>(data2.size())) + ".");
+ }
+ }
+ }
+}