[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