mirror of
				https://github.com/MaskRay/ccls.git
				synced 2025-11-04 06:15:20 +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)
 | 
			
		||||
          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);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -21,6 +21,7 @@ using namespace ccls;
 | 
			
		||||
#include <clang/AST/Type.h>
 | 
			
		||||
using namespace clang;
 | 
			
		||||
 | 
			
		||||
#include <queue>
 | 
			
		||||
#include <unordered_set>
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
@ -41,12 +42,12 @@ struct In_CclsMemberHierarchy : public RequestInMessage {
 | 
			
		||||
 | 
			
		||||
    bool qualified = false;
 | 
			
		||||
    int levels = 1;
 | 
			
		||||
  };
 | 
			
		||||
  Params params;
 | 
			
		||||
    bool flat = false;
 | 
			
		||||
  } params;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
MAKE_REFLECT_STRUCT(In_CclsMemberHierarchy::Params, textDocument, position, id,
 | 
			
		||||
                    qualified, levels);
 | 
			
		||||
                    qualified, levels, flat);
 | 
			
		||||
MAKE_REFLECT_STRUCT(In_CclsMemberHierarchy, id, params);
 | 
			
		||||
REGISTER_IN_MESSAGE(In_CclsMemberHierarchy);
 | 
			
		||||
 | 
			
		||||
@ -276,7 +277,29 @@ struct Handler_CclsMemberHierarchy
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!params.flat) {
 | 
			
		||||
      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);
 | 
			
		||||
 | 
			
		||||
@ -154,6 +154,8 @@ struct lsServerCapabilities {
 | 
			
		||||
  bool definitionProvider = true;
 | 
			
		||||
  // The server provides Goto Type Definition support.
 | 
			
		||||
  bool typeDefinitionProvider = true;
 | 
			
		||||
  // The server provides Goto Implementation support.
 | 
			
		||||
  bool implementationProvider = true;
 | 
			
		||||
  // The server provides find references support.
 | 
			
		||||
  bool referencesProvider = true;
 | 
			
		||||
  // The server provides document highlight support.
 | 
			
		||||
@ -182,11 +184,12 @@ struct lsServerCapabilities {
 | 
			
		||||
};
 | 
			
		||||
MAKE_REFLECT_STRUCT(lsServerCapabilities, textDocumentSync, hoverProvider,
 | 
			
		||||
                    completionProvider, signatureHelpProvider,
 | 
			
		||||
                    definitionProvider, typeDefinitionProvider,
 | 
			
		||||
                    referencesProvider, documentHighlightProvider,
 | 
			
		||||
                    documentSymbolProvider, workspaceSymbolProvider,
 | 
			
		||||
                    codeActionProvider, codeLensProvider,
 | 
			
		||||
                    documentFormattingProvider, documentRangeFormattingProvider,
 | 
			
		||||
                    definitionProvider, implementationProvider,
 | 
			
		||||
                    typeDefinitionProvider, referencesProvider,
 | 
			
		||||
                    documentHighlightProvider, documentSymbolProvider,
 | 
			
		||||
                    workspaceSymbolProvider, codeActionProvider,
 | 
			
		||||
                    codeLensProvider, documentFormattingProvider,
 | 
			
		||||
                    documentRangeFormattingProvider,
 | 
			
		||||
                    documentOnTypeFormattingProvider, renameProvider,
 | 
			
		||||
                    documentLinkProvider, executeCommandProvider);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user