diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-07-28 12:02:32 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-07-28 20:15:10 +0300 |
commit | 1e6ea332e2cff8e47bbab3937e471f1c8f420508 (patch) | |
tree | 813db352981bd2b10cbbb0758f227951b3f19537 /src/rules/formatting.cpp | |
parent | 7c744c1c323cc678bddb02c574730a23b10a6da0 (diff) | |
download | mplint-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/rules/formatting.cpp')
-rw-r--r-- | src/rules/formatting.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
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())) + "."); + } + } + } +} |