diff --git a/src/common_parsers.hpp b/src/common_parsers.hpp
index 285234f..d51f9b8 100644
--- a/src/common_parsers.hpp
+++ b/src/common_parsers.hpp
@@ -40,3 +40,22 @@
 // someParser will have its attribute coerced to std::string
 // https://github.com/boostorg/spirit/issues/530#issuecomment-584836532
 template <typename CoerceTo> const as_type<CoerceTo> as{};
+
+/**
+ * Returns a parser that generates suggestions based on a Completion set.
+ * Usage:
+ * const auto suggestSomeStuff = staticSuggestions({"some", "stuff", "yay"});
+ *
+ * You can use this as a standard parser in a Spirit grammar.
+ */
+auto staticSuggestions(const std::initializer_list<std::string>& strings)
+{
+    std::set<Completion> completions;
+    std::transform(begin(strings), end(strings), std::inserter(completions, completions.end()),
+            [](const auto s) { return Completion{s, " "}; });
+    return as<x3::unused_type>[x3::eps[([completions](auto& ctx) {
+        auto& parserContext = x3::get<parser_context_tag>(ctx);
+        parserContext.m_suggestions = completions;
+        parserContext.m_completionIterator = _where(ctx).begin();
+    })]];
+}
diff --git a/src/grammars.hpp b/src/grammars.hpp
index d0d2d0c..67cf792 100644
--- a/src/grammars.hpp
+++ b/src/grammars.hpp
@@ -15,25 +15,6 @@
 #include "leaf_data.hpp"
 #include "path_parser.hpp"
 
-/**
- * Returns a parser that generates suggestions based on a Completion set.
- * Usage:
- * const auto suggestSomeStuff = staticSuggestions({"some", "stuff", "yay"});
- *
- * You can use this as a standard parser in a Spirit grammar.
- */
-auto staticSuggestions(const std::initializer_list<std::string>& strings)
-{
-    std::set<Completion> completions;
-    std::transform(begin(strings), end(strings), std::inserter(completions, completions.end()),
-            [](const auto s) { return Completion{s, " "}; });
-    return as<x3::unused_type>[x3::eps[([completions](auto& ctx) {
-        auto& parserContext = x3::get<parser_context_tag>(ctx);
-        parserContext.m_suggestions = completions;
-        parserContext.m_completionIterator = _where(ctx).begin();
-    })]];
-}
-
 #if BOOST_VERSION <= 107700
 namespace boost::spirit::x3::traits {
     // Backport https://github.com/boostorg/spirit/pull/702
