ilya-biryukov added a comment.

The change makes both testing and scoring code better.
Even though those are largely independent changes, perfectly happy to review 
them together.

I mostly have NITs here, overall the changes LG.



================
Comment at: clangd/CodeComplete.cpp:36
 
+#define DEBUG_TYPE "codecomplete"
+
----------------
Is this used by `DEBUG()` macro?
It would be nice to have a short comment saying why we need this define.


================
Comment at: clangd/CodeComplete.cpp:909
+
+    auto QualScore = Quality.evaluate(), RelScore = Relevance.evaluate();
+    CompletionItemScores Scores;
----------------
NIT: Maybe use `float` here instead of auto? Would remove the need to look at 
`evaluate` for anyone reading the code for the first time.


================
Comment at: clangd/Quality.cpp:83
+// That is: a < b <==> encodeFloat(a) < encodeFloat(b).
+uint32_t encodeFloat(float F) {
+  static_assert(std::numeric_limits<float>::is_iec559, "");
----------------
This function does not seem to be exposed outside this C++ file. Maybe add 
`static`?


================
Comment at: clangd/Quality.h:45
+
+// Attributes of a symbol that affect how much we like it.
+struct SymbolQualitySignals {
----------------
Maybe use doxygen-style comments to be consistent with the rest of LLVM?


================
Comment at: clangd/Quality.h:66
+  float NameMatch = 1;
+  bool Unavailable = false;
+
----------------
Maybe rename to `Inaccessible`? It seems to be closer to what this bool means 
in C++, if I'm reading the code correctly.
Or add a comment explaining what "unavailable" means?


================
Comment at: clangd/Quality.h:80
+// TopN<T> is a lossy container that preserves only the "best" N elements.
+template <typename T, typename Compare = std::greater<T>> class TopN {
+public:
----------------
As you mentioned  in the change description, moving `TopN` and `sortText` to a 
separate file might be a good idea since they don't depend on various 
clangd-specific bits.
But I'm perfectly happy to leave it as is and do this later if needed.


================
Comment at: clangd/Quality.h:119
+
+// Returns a string that sorts like (-Score, Tiebreak).
+std::string sortText(float Score, llvm::StringRef Tiebreak = "");
----------------
Maybe mention that it's used for LSP sortText? To give a bit more context on 
why we need this function.


================
Comment at: unittests/clangd/TestTU.cpp:56
+  const Symbol *Result = nullptr;
+  for (const Symbol &S : Slab)
+    if (QName == (S.Scope + S.Name).str()) {
----------------
Maybe add braces for the loop body here? It seems to be long enough that it 
could actually, arguably, improve readability.
We could some nesting by inverting the condition too:
`if (QName != ...) continue;`


================
Comment at: unittests/clangd/TestTU.cpp:62
+                      << S;
+        llvm_unreachable("QName is not unique");
+      }
----------------
Maybe use `FAIL()` instead of `ADD_FAILURE()` followed by `llvm_unreachable()`?
`llvm_unreachable` may produce surprising behaviors, i.e. miscompiles in opt 
mode etc, IIUC.
Both failing or returning a first matching symbol while also signalling an 
error seem like good alternatives here.


================
Comment at: unittests/clangd/TestTU.h:28
+  TestTU() = default;
+  TestTU(llvm::StringRef Code, llvm::StringRef HeaderCode = "")
+      : Code(Code), HeaderCode(HeaderCode) {}
----------------
I really like this helper, now that we can reuse the code between different 
tests!
It took me some time to get the semantics of this constructor, though.
I suggest to have a few constructor functions with more descriptive name (my 
names are not great, but should give the idea):
```
static TestTU FromSourceFile(StringRef Code);
static TestTU FromHeaderFile(StringRef Code);
static TestTU WithImplicitInclude(StringRef Source, StringRef IncludedHeader);
```





Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D46524



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to