aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/suggestions.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil/suggestions.hh')
-rw-r--r--src/libutil/suggestions.hh41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/libutil/suggestions.hh b/src/libutil/suggestions.hh
new file mode 100644
index 000000000..3caed487a
--- /dev/null
+++ b/src/libutil/suggestions.hh
@@ -0,0 +1,41 @@
+#pragma once
+
+#include "comparator.hh"
+#include "types.hh"
+#include <set>
+
+namespace nix {
+
+/**
+ * A potential suggestion for the cli interface.
+ */
+class Suggestion {
+public:
+ int distance; // The smaller the better
+ std::string suggestion;
+
+ std::string pretty_print() const;
+
+ GENERATE_CMP(Suggestion, me->distance, me->suggestion)
+};
+
+class Suggestions {
+public:
+ std::set<Suggestion> suggestions;
+
+ std::string pretty_print() const;
+
+ Suggestions trim(
+ int limit = 5,
+ int maxDistance = 2
+ ) const;
+
+ static Suggestions bestMatches (
+ std::set<std::string> allMatches,
+ std::string query
+ );
+
+ Suggestions& operator+=(const Suggestions & other);
+};
+
+}