[PATCH] D47762: [clangd] Boost code completion results that are narrowly scoped (local, members)

Eric Liu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jun 5 01:57:27 PDT 2018


ioeric added a comment.

Looks like a great improvement on ranking!



================
Comment at: clangd/Quality.cpp:62
+  bool InClass;
+  for (const DeclContext *DC = D.getDeclContext(); DC != nullptr;
+       DC = DC->getParent()) {
----------------
nit: maybe stop when`!DC->isFileContext()`?


================
Comment at: clangd/Quality.cpp:66
+      return SymbolRelevanceSignals::FunctionScope;
+    InClass = InClass || isa<RecordDecl>(DC);
+  }
----------------
`DC->isRecord()`?


================
Comment at: clangd/Quality.cpp:70
+    return SymbolRelevanceSignals::ClassScope;
+  if (D.getLinkageInternal() < ExternalLinkage)
+    return SymbolRelevanceSignals::FileScope;
----------------
I wonder if this comparison is a common practice. Any reason not to use `!=`?


================
Comment at: clangd/Quality.cpp:71
+  if (D.getLinkageInternal() < ExternalLinkage)
+    return SymbolRelevanceSignals::FileScope;
+  return SymbolRelevanceSignals::GlobalScope;
----------------
Does `FileScope` indicate that `D` is defined in the current *translation unit*? If so, I think this is a good signal (boosting symbols in the same TU), but something like `TUScope` might be a bit clearer?


================
Comment at: clangd/Quality.cpp:76
+void SymbolRelevanceSignals::merge(const Symbol &IndexResult) {
+  // FIXME: Index results always assumed to be at global scope.
+}
----------------
What's here to be fixed? Do we plan to get rid of this assumption in the future?


================
Comment at: clangd/Quality.cpp:86
+  if (SemaCCResult.Kind == CodeCompletionResult::RK_Declaration)
+    Scope = std::min(Scope, ComputeScope(*SemaCCResult.Declaration));
 }
----------------
nit: does this assume that "smaller" scopes are better? If so, it might make sense to document.


================
Comment at: unittests/clangd/QualityTests.cpp:1
 //===-- SourceCodeTests.cpp  ------------------------------------*- C++ -*-===//
 //
----------------
Could you also add a test case for code completion?


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D47762





More information about the cfe-commits mailing list