mirror of
				https://github.com/MaskRay/ccls.git
				synced 2025-11-04 14:17:07 +00:00 
			
		
		
		
	Uniquify $ccls/inheritanceHierarchy and add flat to $ccls/memberHierarchy
This commit is contained in:
		
							parent
							
								
									48c92c05a1
								
							
						
					
					
						commit
						caddc18860
					
				@ -199,6 +199,9 @@ struct Handler_CclsInheritanceHierarchy
 | 
				
			|||||||
        for (auto &entry1 : entry->children)
 | 
					        for (auto &entry1 : entry->children)
 | 
				
			||||||
          q.push(&entry1);
 | 
					          q.push(&entry1);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					      std::sort(out1.result.begin(), out1.result.end());
 | 
				
			||||||
 | 
					      out1.result.erase(std::unique(out1.result.begin(), out1.result.end()),
 | 
				
			||||||
 | 
					                        out1.result.end());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    pipeline::WriteStdout(kMethodType, out1);
 | 
					    pipeline::WriteStdout(kMethodType, out1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -21,6 +21,7 @@ using namespace ccls;
 | 
				
			|||||||
#include <clang/AST/Type.h>
 | 
					#include <clang/AST/Type.h>
 | 
				
			||||||
using namespace clang;
 | 
					using namespace clang;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <queue>
 | 
				
			||||||
#include <unordered_set>
 | 
					#include <unordered_set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace {
 | 
					namespace {
 | 
				
			||||||
@ -41,12 +42,12 @@ struct In_CclsMemberHierarchy : public RequestInMessage {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    bool qualified = false;
 | 
					    bool qualified = false;
 | 
				
			||||||
    int levels = 1;
 | 
					    int levels = 1;
 | 
				
			||||||
  };
 | 
					    bool flat = false;
 | 
				
			||||||
  Params params;
 | 
					  } params;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MAKE_REFLECT_STRUCT(In_CclsMemberHierarchy::Params, textDocument, position, id,
 | 
					MAKE_REFLECT_STRUCT(In_CclsMemberHierarchy::Params, textDocument, position, id,
 | 
				
			||||||
                    qualified, levels);
 | 
					                    qualified, levels, flat);
 | 
				
			||||||
MAKE_REFLECT_STRUCT(In_CclsMemberHierarchy, id, params);
 | 
					MAKE_REFLECT_STRUCT(In_CclsMemberHierarchy, id, params);
 | 
				
			||||||
REGISTER_IN_MESSAGE(In_CclsMemberHierarchy);
 | 
					REGISTER_IN_MESSAGE(In_CclsMemberHierarchy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -276,7 +277,29 @@ struct Handler_CclsMemberHierarchy
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!params.flat) {
 | 
				
			||||||
      pipeline::WriteStdout(kMethodType, out);
 | 
					      pipeline::WriteStdout(kMethodType, out);
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    Out_LocationList out1;
 | 
				
			||||||
 | 
					    out1.id = request->id;
 | 
				
			||||||
 | 
					    if (out.result) {
 | 
				
			||||||
 | 
					      std::queue<Out_CclsMemberHierarchy::Entry *> q;
 | 
				
			||||||
 | 
					      for (auto &entry1 : out.result->children)
 | 
				
			||||||
 | 
					        q.push(&entry1);
 | 
				
			||||||
 | 
					      while (q.size()) {
 | 
				
			||||||
 | 
					        auto *entry = q.front();
 | 
				
			||||||
 | 
					        q.pop();
 | 
				
			||||||
 | 
					        if (entry->location.uri.raw_uri.size())
 | 
				
			||||||
 | 
					          out1.result.push_back({entry->location});
 | 
				
			||||||
 | 
					        for (auto &entry1 : entry->children)
 | 
				
			||||||
 | 
					          q.push(&entry1);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      std::sort(out1.result.begin(), out1.result.end());
 | 
				
			||||||
 | 
					      out1.result.erase(std::unique(out1.result.begin(), out1.result.end()),
 | 
				
			||||||
 | 
					                        out1.result.end());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    pipeline::WriteStdout(kMethodType, out1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
REGISTER_MESSAGE_HANDLER(Handler_CclsMemberHierarchy);
 | 
					REGISTER_MESSAGE_HANDLER(Handler_CclsMemberHierarchy);
 | 
				
			||||||
 | 
				
			|||||||
@ -154,6 +154,8 @@ struct lsServerCapabilities {
 | 
				
			|||||||
  bool definitionProvider = true;
 | 
					  bool definitionProvider = true;
 | 
				
			||||||
  // The server provides Goto Type Definition support.
 | 
					  // The server provides Goto Type Definition support.
 | 
				
			||||||
  bool typeDefinitionProvider = true;
 | 
					  bool typeDefinitionProvider = true;
 | 
				
			||||||
 | 
					  // The server provides Goto Implementation support.
 | 
				
			||||||
 | 
					  bool implementationProvider = true;
 | 
				
			||||||
  // The server provides find references support.
 | 
					  // The server provides find references support.
 | 
				
			||||||
  bool referencesProvider = true;
 | 
					  bool referencesProvider = true;
 | 
				
			||||||
  // The server provides document highlight support.
 | 
					  // The server provides document highlight support.
 | 
				
			||||||
@ -182,11 +184,12 @@ struct lsServerCapabilities {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
MAKE_REFLECT_STRUCT(lsServerCapabilities, textDocumentSync, hoverProvider,
 | 
					MAKE_REFLECT_STRUCT(lsServerCapabilities, textDocumentSync, hoverProvider,
 | 
				
			||||||
                    completionProvider, signatureHelpProvider,
 | 
					                    completionProvider, signatureHelpProvider,
 | 
				
			||||||
                    definitionProvider, typeDefinitionProvider,
 | 
					                    definitionProvider, implementationProvider,
 | 
				
			||||||
                    referencesProvider, documentHighlightProvider,
 | 
					                    typeDefinitionProvider, referencesProvider,
 | 
				
			||||||
                    documentSymbolProvider, workspaceSymbolProvider,
 | 
					                    documentHighlightProvider, documentSymbolProvider,
 | 
				
			||||||
                    codeActionProvider, codeLensProvider,
 | 
					                    workspaceSymbolProvider, codeActionProvider,
 | 
				
			||||||
                    documentFormattingProvider, documentRangeFormattingProvider,
 | 
					                    codeLensProvider, documentFormattingProvider,
 | 
				
			||||||
 | 
					                    documentRangeFormattingProvider,
 | 
				
			||||||
                    documentOnTypeFormattingProvider, renameProvider,
 | 
					                    documentOnTypeFormattingProvider, renameProvider,
 | 
				
			||||||
                    documentLinkProvider, executeCommandProvider);
 | 
					                    documentLinkProvider, executeCommandProvider);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user