55 lines
1.2 KiB
C++
55 lines
1.2 KiB
C++
#ifndef EDITOR_COMPLETIONS_H
|
|
#define EDITOR_COMPLETIONS_H
|
|
|
|
#include "pch.h"
|
|
#include "ui/completionbox.h"
|
|
#include "ui/hover.h"
|
|
#include "utils/utils.h"
|
|
|
|
struct CompletionItem {
|
|
std::string label;
|
|
uint8_t kind;
|
|
std::optional<std::string> detail;
|
|
std::optional<std::string> documentation;
|
|
bool is_markup = false;
|
|
bool deprecated = false;
|
|
bool asis = true;
|
|
std::string sort;
|
|
std::string filter;
|
|
bool snippet = false;
|
|
std::vector<TextEdit> edits;
|
|
json original;
|
|
std::vector<char> end_chars;
|
|
};
|
|
|
|
struct CompletionSession {
|
|
struct Editor *editor;
|
|
std::shared_mutex mtx;
|
|
bool active = false;
|
|
Coord hook;
|
|
std::optional<std::string> prefix;
|
|
uint32_t select = 0;
|
|
uint32_t scroll = 0;
|
|
std::vector<CompletionItem> items;
|
|
std::vector<uint32_t> visible;
|
|
bool complete = true;
|
|
std::optional<char> trigger_char;
|
|
uint8_t trigger = 0;
|
|
CompletionBox box;
|
|
HoverBox hover;
|
|
uint32_t doc = UINT32_MAX;
|
|
std::atomic<bool> hover_dirty = false;
|
|
int version;
|
|
|
|
CompletionSession(Editor *editor) : editor(editor), box(this) {}
|
|
|
|
void resolve_doc();
|
|
void accept();
|
|
void next();
|
|
void prev();
|
|
void choose(uint8_t index);
|
|
void handle(KeyEvent event);
|
|
};
|
|
|
|
#endif
|