]> granicus.if.org Git - icinga2/commitdiff
Get rid of code duplication in ConfigWriter/ConsoleCommand
authorGunnar Beutner <gunnar@beutner.name>
Tue, 11 Aug 2015 04:44:42 +0000 (06:44 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Tue, 11 Aug 2015 04:47:08 +0000 (06:47 +0200)
refs #9099

lib/cli/consolecommand.cpp
lib/config/configcompiler.cpp
lib/config/configcompiler.hpp
lib/config/configwriter.cpp

index 79d1adca4665f0e92daeae025f0efffc01bcc433..0a7af7edefad3b848a0a3a679e97c16e16f07ccc 100644 (file)
@@ -80,34 +80,9 @@ static char *ConsoleCompleteHelper(const char *word, int state)
        if (state == 0) {
                matches.clear();
 
-               AddSuggestion(matches, word, "object");
-               AddSuggestion(matches, word, "template");
-               AddSuggestion(matches, word, "include");
-               AddSuggestion(matches, word, "include_recursive");
-               AddSuggestion(matches, word, "library");
-               AddSuggestion(matches, word, "null");
-               AddSuggestion(matches, word, "true");
-               AddSuggestion(matches, word, "false");
-               AddSuggestion(matches, word, "const");
-               AddSuggestion(matches, word, "var");
-               AddSuggestion(matches, word, "this");
-               AddSuggestion(matches, word, "globals");
-               AddSuggestion(matches, word, "locals");
-               AddSuggestion(matches, word, "use");
-               AddSuggestion(matches, word, "apply");
-               AddSuggestion(matches, word, "to");
-               AddSuggestion(matches, word, "where");
-               AddSuggestion(matches, word, "import");
-               AddSuggestion(matches, word, "assign");
-               AddSuggestion(matches, word, "ignore");
-               AddSuggestion(matches, word, "function");
-               AddSuggestion(matches, word, "return");
-               AddSuggestion(matches, word, "break");
-               AddSuggestion(matches, word, "continue");
-               AddSuggestion(matches, word, "for");
-               AddSuggestion(matches, word, "if");
-               AddSuggestion(matches, word, "else");
-               AddSuggestion(matches, word, "while");
+               BOOST_FOREACH(const String& keyword, ConfigCompiler::GetKeywords()) {
+                       AddSuggestion(matches, word, keyword);
+               }
 
                {
                        ObjectLock olock(l_ScriptFrame.Locals);
index e9b26fd6bd682d5b188d98197c63c002c122f791..161319c67d12c46bcd3b2ec59df33afbfadc030e 100644 (file)
@@ -329,3 +329,40 @@ void ConfigCompiler::RegisterZoneDir(const String& tag, const String& ppath, con
        m_ZoneDirs[zoneName].push_back(zf);
 }
 
+const std::vector<String>& ConfigCompiler::GetKeywords(void)
+{
+       static std::vector<String> keywords;
+
+       if (keywords.empty()) {
+               keywords.push_back("object");
+               keywords.push_back("template");
+               keywords.push_back("include");
+               keywords.push_back("include_recursive");
+               keywords.push_back("library");
+               keywords.push_back("null");
+               keywords.push_back("true");
+               keywords.push_back("false");
+               keywords.push_back("const");
+               keywords.push_back("var");
+               keywords.push_back("this");
+               keywords.push_back("globals");
+               keywords.push_back("locals");
+               keywords.push_back("use");
+               keywords.push_back("apply");
+               keywords.push_back("to");
+               keywords.push_back("where");
+               keywords.push_back("import");
+               keywords.push_back("assign");
+               keywords.push_back("ignore");
+               keywords.push_back("function");
+               keywords.push_back("return");
+               keywords.push_back("break");
+               keywords.push_back("continue");
+               keywords.push_back("for");
+               keywords.push_back("if");
+               keywords.push_back("else");
+               keywords.push_back("while");
+       }
+
+       return keywords;
+}
index dad82602ec2ced341689152a3a72bf530cb626ed..0d72b9ac2ff5bf9ef36f9e9ed9a21683c648c1bd 100644 (file)
@@ -109,6 +109,8 @@ public:
        static std::vector<ZoneFragment> GetZoneDirs(const String& zone);
        static void RegisterZoneDir(const String& tag, const String& ppath, const String& zoneName);
 
+       static const std::vector<String>& GetKeywords(void);
+
 private:
        boost::promise<boost::shared_ptr<Expression> > m_Promise;
 
index 278aae122ee621bd5db6699e0c7a281025418f76..3d05817c3f23ca23228b7a0b295dfdfe094c9fec 100644 (file)
  ******************************************************************************/
 
 #include "config/configwriter.hpp"
+#include "config/configcompiler.hpp"
 #include "base/exception.hpp"
 #include <boost/foreach.hpp>
 #include <boost/regex.hpp>
 #include <boost/algorithm/string/replace.hpp>
+#include <iterator>
 
 using namespace icinga;
 
@@ -131,34 +133,8 @@ void ConfigWriter::EmitIdentifier(const String& identifier, bool inAssignment)
 {
        static std::set<String> keywords;
        if (keywords.empty()) {
-               keywords.insert("object");
-               keywords.insert("template");
-               keywords.insert("include");
-               keywords.insert("include_recursive");
-               keywords.insert("library");
-               keywords.insert("null");
-               keywords.insert("true");
-               keywords.insert("false");
-               keywords.insert("const");
-               keywords.insert("var");
-               keywords.insert("this");
-               keywords.insert("globals");
-               keywords.insert("locals");
-               keywords.insert("use");
-               keywords.insert("apply");
-               keywords.insert("to");
-               keywords.insert("where");
-               keywords.insert("import");
-               keywords.insert("assign");
-               keywords.insert("ignore");
-               keywords.insert("function");
-               keywords.insert("return");
-               keywords.insert("break");
-               keywords.insert("continue");
-               keywords.insert("for");
-               keywords.insert("if");
-               keywords.insert("else");
-               keywords.insert("while");
+               const std::vector<String>& vkeywords = ConfigCompiler::GetKeywords();
+               std::copy(vkeywords.begin(), vkeywords.end(), std::inserter(keywords, keywords.begin()));
        }
 
        if (keywords.find(identifier) != keywords.end()) {