[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [akonadi-next/feature/new_cli] akonadish: REGISTER_SYNTAX for automagic adding of syntax
From:       Aaron Seigo <aseigo () kde ! org>
Date:       2015-12-24 10:54:34
Message-ID: E1aC3XW-0000Bg-J5 () scm ! kde ! org
[Download RAW message or body]

Git commit 35f0ddf67c629ce9efaa1ba893afcb2921a251a2 by Aaron Seigo.
Committed on 24/12/2015 at 09:22.
Pushed by aseigo into branch 'feature/new_cli'.

REGISTER_SYNTAX for automagic adding of syntax

a fun abuse of static initialization and std::function

M  +2    -0    akonadish/syntax_modules/akonadi_count.cpp
M  +2    -0    akonadish/syntax_modules/akonadi_list.cpp
M  +2    -0    akonadish/syntax_modules/akonadi_sync.cpp
M  +2    -0    akonadish/syntax_modules/core_syntax.cpp
M  +6    -9    akonadish/syntaxtree.cpp
M  +2    -0    akonadish/syntaxtree.h

http://commits.kde.org/akonadi-next/35f0ddf67c629ce9efaa1ba893afcb2921a251a2

diff --git a/akonadish/syntax_modules/akonadi_count.cpp \
b/akonadish/syntax_modules/akonadi_count.cpp index 40ad693..e54ac22 100644
--- a/akonadish/syntax_modules/akonadi_count.cpp
+++ b/akonadish/syntax_modules/akonadi_count.cpp
@@ -39,6 +39,8 @@
 namespace AkonadiCount
 {
 
+REGISTER_SYNTAX(AkonadiCount)
+
 Syntax::List syntax()
 {
     Syntax::List syntax;
diff --git a/akonadish/syntax_modules/akonadi_list.cpp \
b/akonadish/syntax_modules/akonadi_list.cpp index 6abc853..25ebbca 100644
--- a/akonadish/syntax_modules/akonadi_list.cpp
+++ b/akonadish/syntax_modules/akonadi_list.cpp
@@ -39,6 +39,8 @@
 namespace AkonadiList
 {
 
+REGISTER_SYNTAX(AkonadiList)
+
 Syntax::List syntax()
 {
     Syntax::List syntax;
diff --git a/akonadish/syntax_modules/akonadi_sync.cpp \
b/akonadish/syntax_modules/akonadi_sync.cpp index 990fdf6..e9388d2 100644
--- a/akonadish/syntax_modules/akonadi_sync.cpp
+++ b/akonadish/syntax_modules/akonadi_sync.cpp
@@ -37,6 +37,8 @@
 namespace AkonadiSync
 {
 
+REGISTER_SYNTAX(AkonadiSync)
+
 Syntax::List syntax()
 {
     Syntax::List syntax;
diff --git a/akonadish/syntax_modules/core_syntax.cpp \
b/akonadish/syntax_modules/core_syntax.cpp index 393a0a5..8fb1448 100644
--- a/akonadish/syntax_modules/core_syntax.cpp
+++ b/akonadish/syntax_modules/core_syntax.cpp
@@ -27,6 +27,8 @@
 namespace CoreSyntax
 {
 
+REGISTER_SYNTAX(CoreSyntax)
+
 Syntax::List syntax()
 {
     Syntax::List syntax;
diff --git a/akonadish/syntaxtree.cpp b/akonadish/syntaxtree.cpp
index 2d7c127..cd7348e 100644
--- a/akonadish/syntaxtree.cpp
+++ b/akonadish/syntaxtree.cpp
@@ -45,15 +45,12 @@ Syntax::Syntax(const QString &k, const QString &helpText, \
std::function<bool(con  
 SyntaxTree::SyntaxTree()
 {
-    QVector<std::function<Syntax::List()> > syntaxSyntaxTrees;
-    syntaxSyntaxTrees << &CoreSyntax::syntax
-                      << &AkonadiList::syntax
-                      << &AkonadiCount::syntax
-                      << &AkonadiSync::syntax
-                      ;
-    for (auto syntaxSyntaxTree: syntaxSyntaxTrees) {
-        m_syntax += syntaxSyntaxTree();
-    }
+}
+
+int SyntaxTree::registerSyntax(std::function<Syntax::List()> f)
+{
+    m_syntax += f();
+    return m_syntax.size();
 }
 
 SyntaxTree *SyntaxTree::self()
diff --git a/akonadish/syntaxtree.h b/akonadish/syntaxtree.h
index 77f52af..6fdf2b9 100644
--- a/akonadish/syntaxtree.h
+++ b/akonadish/syntaxtree.h
@@ -57,6 +57,7 @@ public:
 
     static SyntaxTree *self();
 
+    int registerSyntax(std::function<Syntax::List()> f);
     Syntax::List syntax() const;
     Command match(const QStringList &commands) const;
     Syntax::List nearestSyntax(const QStringList &words, const QString &fragment) \
const; @@ -73,3 +74,4 @@ private:
     static SyntaxTree *s_module;
 };
 
+#define REGISTER_SYNTAX(name) static const int theTrickFor##name = \
SyntaxTree::self()->registerSyntax(&name::syntax);


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic