Fix parsing bugs and add better indentation support
This commit is contained in:
@@ -17,6 +17,8 @@ void fetch_lsp_hover(Editor *editor);
|
||||
void handle_mouse(Editor *editor, KeyEvent event);
|
||||
void indent_current_line(Editor *editor);
|
||||
void dedent_current_line(Editor *editor);
|
||||
void indent_selection(Editor *editor);
|
||||
void dedent_selection(Editor *editor);
|
||||
void paste(Editor *editor);
|
||||
void copy(Editor *editor);
|
||||
void cut(Editor *editor);
|
||||
|
||||
@@ -112,12 +112,18 @@ struct IndentationEngine {
|
||||
uint32_t set_indent(uint32_t row, int64_t indent_level);
|
||||
uint32_t indent_line(uint32_t row);
|
||||
uint32_t dedent_line(uint32_t row);
|
||||
void indent_block(uint32_t start_row, uint32_t end_row, int delta);
|
||||
void indent_block(uint32_t start, uint32_t end);
|
||||
void dedent_block(uint32_t start, uint32_t end);
|
||||
// fixes a autocomplete block's indentation
|
||||
char *block_to_asis(Coord cursor, std::string source, uint32_t *out_len);
|
||||
|
||||
private:
|
||||
const std::vector<std::string> *start_end = nullptr;
|
||||
const std::vector<std::string> *start_start = nullptr;
|
||||
const std::vector<std::string> *end_full = nullptr;
|
||||
const std::vector<std::string> *end_start = nullptr;
|
||||
|
||||
// TODO: Ignore comments/strings too
|
||||
// returns the indent level of the line itself or of the previous non-empty
|
||||
uint32_t indent_expected(uint32_t row);
|
||||
|
||||
@@ -6,12 +6,17 @@
|
||||
#include "utils/utils.h"
|
||||
|
||||
struct LSPPending {
|
||||
std::string method;
|
||||
Editor *editor = nullptr;
|
||||
|
||||
std::function<void(Editor *, std::string, json)> callback;
|
||||
std::function<void(Editor *, const json &)> callback;
|
||||
};
|
||||
|
||||
// TODO: Defer any editor mutation to main thread to get rid of
|
||||
// all mutex locks on the editor rope.
|
||||
// struct LSPPendingResponse {
|
||||
// LSPPending *pending = nullptr;
|
||||
// json message;
|
||||
// };
|
||||
|
||||
struct LSPOpenRequest {
|
||||
Language language;
|
||||
Editor *editor;
|
||||
|
||||
@@ -23,7 +23,7 @@ struct Parser {
|
||||
UniqueQueue<uint32_t> dirty_lines;
|
||||
|
||||
Parser(Editor *editor, std::string n_lang, uint32_t n_scroll_max);
|
||||
void edit(uint32_t start_line, uint32_t old_end_line, uint32_t inserted_rows);
|
||||
void edit(uint32_t start_line, uint32_t removed_rows, uint32_t inserted_rows);
|
||||
void work();
|
||||
void scroll(uint32_t line);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user