Browse Source

Language protocol: fixed type coverage warnings

merge-requests/399/head
eidheim 6 years ago
parent
commit
3be03516fb
  1. 25
      src/source_language_protocol.cc
  2. 6
      src/source_language_protocol.h

25
src/source_language_protocol.cc

@ -935,15 +935,20 @@ void Source::LanguageProtocolView::escape_text(std::string &text) {
void Source::LanguageProtocolView::update_diagnostics(std::vector<LanguageProtocol::Diagnostic> &&diagnostics) {
dispatcher.post([this, diagnostics = std::move(diagnostics)]() {
update_diagnostics(diagnostics);
last_diagnostics = std::move(diagnostics);
});
}
void Source::LanguageProtocolView::update_diagnostics(const std::vector<LanguageProtocol::Diagnostic> &diagnostics) {
diagnostic_offsets.clear();
diagnostic_tooltips.clear();
if(!capabilities.type_coverage)
get_buffer()->remove_tag_by_name("def:warning_underline", get_buffer()->begin(), get_buffer()->end());
get_buffer()->remove_tag_by_name("def:error_underline", get_buffer()->begin(), get_buffer()->end());
if(!capabilities.type_coverage)
num_warnings = 0;
num_errors = 0;
num_fix_its = 0;
for(auto &diagnostic : diagnostics) {
auto start = get_iter_at_line_pos(diagnostic.range.start.line, diagnostic.range.start.character);
auto end = get_iter_at_line_pos(diagnostic.range.end.line, diagnostic.range.end.character);
@ -988,15 +993,16 @@ void Source::LanguageProtocolView::update_diagnostics(std::vector<LanguageProtoc
});
}
for(auto &mark : type_coverage_marks)
for(auto &mark : type_coverage_marks) {
add_diagnostic_tooltip(mark.first->get_iter(), mark.second->get_iter(), false, [](const Glib::RefPtr<Gtk::TextBuffer> &buffer) {
buffer->insert_at_cursor(type_coverage_message);
});
num_warnings++;
}
status_diagnostics = std::make_tuple(num_warnings, num_errors, num_fix_its);
if(update_status_diagnostics)
update_status_diagnostics(this);
});
}
Gtk::TextIter Source::LanguageProtocolView::get_iter_at_line_pos(int line, int pos) {
@ -1535,27 +1541,18 @@ void Source::LanguageProtocolView::update_type_coverage() {
}
dispatcher.post([this, ranges = std::move(ranges)] {
num_warnings = 0;
for(auto &mark : type_coverage_marks) {
get_buffer()->delete_mark(mark.first);
get_buffer()->delete_mark(mark.second);
}
type_coverage_marks.clear();
get_buffer()->remove_tag_by_name("def:warning_underline", get_buffer()->begin(), get_buffer()->end());
for(auto &range : ranges) {
auto start = get_iter_at_line_pos(range.start.line, range.start.character);
auto end = get_iter_at_line_pos(range.end.line, range.end.character);
add_diagnostic_tooltip(start, end, false, [](const Glib::RefPtr<Gtk::TextBuffer> &buffer) {
buffer->insert_at_cursor(type_coverage_message);
});
type_coverage_marks.emplace_back(get_buffer()->create_mark(start), get_buffer()->create_mark(end));
++num_warnings;
}
status_diagnostics = std::make_tuple(num_warnings, num_errors, num_fix_its);
if(update_status_diagnostics)
update_status_diagnostics(this);
update_diagnostics(last_diagnostics);
});
});
}

6
src/source_language_protocol.h

@ -154,6 +154,10 @@ namespace Source {
void update_diagnostics(std::vector<LanguageProtocol::Diagnostic> &&diagnostics);
private:
void update_diagnostics(const std::vector<LanguageProtocol::Diagnostic> &diagnostics);
public:
Gtk::TextIter get_iter_at_line_pos(int line, int pos) override;
std::string uri;
@ -194,6 +198,8 @@ namespace Source {
bool has_named_parameters();
std::vector<LanguageProtocol::Diagnostic> last_diagnostics;
sigc::connection update_type_coverage_connection;
std::vector<std::pair<Glib::RefPtr<Gtk::TextMark>, Glib::RefPtr<Gtk::TextMark>>> type_coverage_marks;
size_t num_warnings = 0, num_errors = 0, num_fix_its = 0;

Loading…
Cancel
Save