aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/suggestions.hh
blob: 3caed487ae21d04d483b5024912d957be94fa2be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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);
};

}