mirror of
				https://github.com/MaskRay/ccls.git
				synced 2025-11-03 22:04:24 +00:00 
			
		
		
		
	
							parent
							
								
									c4cc5d2697
								
							
						
					
					
						commit
						b5b7e9b7e2
					
				@ -122,6 +122,23 @@ void FilterCandidates(CompletionList &result, const std::string &complete_text,
 | 
				
			|||||||
      result.isIncomplete = true;
 | 
					      result.isIncomplete = true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int overwrite_len = 0;
 | 
				
			||||||
 | 
					    for (auto &item : items) {
 | 
				
			||||||
 | 
					      auto &edits = item.additionalTextEdits;
 | 
				
			||||||
 | 
					      if (edits.size() && edits[0].range.end == begin_pos) {
 | 
				
			||||||
 | 
					        Position start = edits[0].range.start, end = edits[0].range.end;
 | 
				
			||||||
 | 
					        if (start.line == begin_pos.line) {
 | 
				
			||||||
 | 
					          overwrite_len =
 | 
				
			||||||
 | 
					              std::max(overwrite_len, end.character - start.character);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          overwrite_len = -1;
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Position overwrite_begin = {begin_pos.line,
 | 
				
			||||||
 | 
					                                begin_pos.character - overwrite_len};
 | 
				
			||||||
    std::string sort(4, ' ');
 | 
					    std::string sort(4, ' ');
 | 
				
			||||||
    for (auto &item : items) {
 | 
					    for (auto &item : items) {
 | 
				
			||||||
      item.textEdit.range = lsRange{begin_pos, end_pos};
 | 
					      item.textEdit.range = lsRange{begin_pos, end_pos};
 | 
				
			||||||
@ -130,17 +147,20 @@ void FilterCandidates(CompletionList &result, const std::string &complete_text,
 | 
				
			|||||||
      // https://github.com/Microsoft/language-server-protocol/issues/543
 | 
					      // https://github.com/Microsoft/language-server-protocol/issues/543
 | 
				
			||||||
      // Order of textEdit and additionalTextEdits is unspecified.
 | 
					      // Order of textEdit and additionalTextEdits is unspecified.
 | 
				
			||||||
      auto &edits = item.additionalTextEdits;
 | 
					      auto &edits = item.additionalTextEdits;
 | 
				
			||||||
      if (edits.size() && edits[0].range.end == begin_pos) {
 | 
					      if (overwrite_len > 0) {
 | 
				
			||||||
        Position start = edits[0].range.start, end = edits[0].range.end;
 | 
					        item.textEdit.range.start = overwrite_begin;
 | 
				
			||||||
        item.textEdit.range.start = start;
 | 
					        std::string orig = buffer_line.substr(overwrite_begin.character, overwrite_len);
 | 
				
			||||||
        item.textEdit.newText = edits[0].newText + item.textEdit.newText;
 | 
					        if (edits.size() && edits[0].range.end == begin_pos &&
 | 
				
			||||||
        if (start.line == begin_pos.line) {
 | 
					            edits[0].range.start.line == begin_pos.line) {
 | 
				
			||||||
          item.filterText =
 | 
					          int cur_edit_len = edits[0].range.end.character - edits[0].range.start.character;
 | 
				
			||||||
              buffer_line.substr(start.character,
 | 
					          item.textEdit.newText =
 | 
				
			||||||
                                 end.character - start.character) +
 | 
					              buffer_line.substr(overwrite_begin.character, overwrite_len - cur_edit_len) +
 | 
				
			||||||
              item.filterText;
 | 
					              edits[0].newText + item.textEdit.newText;
 | 
				
			||||||
 | 
					          edits.erase(edits.begin());
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          item.textEdit.newText = orig + item.textEdit.newText;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        edits.erase(edits.begin());
 | 
					        item.filterText = orig + item.filterText;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (item.filterText == item.label)
 | 
					      if (item.filterText == item.label)
 | 
				
			||||||
        item.filterText.clear();
 | 
					        item.filterText.clear();
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user