Browse Source

Language protocol: added support for textDocument/rangeFormatting

merge-requests/365/head
eidheim 8 years ago
parent
commit
f952f9db38
  1. 17
      src/source_language_protocol.cc

17
src/source_language_protocol.cc

@ -390,7 +390,22 @@ void Source::LanguageProtocolView::setup_navigation_and_refactoring() {
};
std::vector<Replace> replaces;
std::promise<void> result_processed;
client->write_request("textDocument/formatting", "\"textDocument\":{\"uri\":\""+uri+"\"},\"options\":{\"tabSize\":"+std::to_string(tab_size)+",\"insertSpaces\":"+(tab_char==' '?"true":"false")+"}", [&replaces, &result_processed](const boost::property_tree::ptree &result, bool error) {
std::string method;
std::string params;
std::string options("\"tabSize\":"+std::to_string(tab_size)+",\"insertSpaces\":"+(tab_char==' '?"true":"false"));
if(get_buffer()->get_has_selection() && capabilities.document_range_formatting) {
method="textDocument/rangeFormatting";
Gtk::TextIter start, end;
get_buffer()->get_selection_bounds(start, end);
params="\"textDocument\":{\"uri\":\""+uri+"\"},\"range\":{\"start\":{\"line\":"+std::to_string(start.get_line())+",\"character\":"+std::to_string(start.get_line_offset())+"},\"end\":{\"line\":"+std::to_string(end.get_line())+",\"character\":"+std::to_string(end.get_line_offset())+"}},\"options\":{"+options+"}";
}
else {
method="textDocument/formatting";
params="\"textDocument\":{\"uri\":\""+uri+"\"},\"options\":{"+options+"}";
}
client->write_request(method, params, [&replaces, &result_processed](const boost::property_tree::ptree &result, bool error) {
if(!error) {
for(auto it=result.begin();it!=result.end();++it) {
auto range_it=it->second.find("range");

Loading…
Cancel
Save