[PATCH] D40089: [clangd] Make completion scores use 0-1 floats internally.

Haojian Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Nov 17 07:18:50 PST 2017


hokein added a comment.

A few comments based on our discussion.



================
Comment at: clangd/ClangdUnit.cpp:387
 
   std::string sortText() const {
     std::string S, NameStorage;
----------------
example


================
Comment at: clangd/ClangdUnit.cpp:416
+
+  // Produces an integer that sorts in the same order as F.
+  static uint32_t encodeFloat(float F) {
----------------
nit: mention that if a < b, encodeFloat(a) < encodeFloat(b)


================
Comment at: clangd/ClangdUnit.cpp:417
+  // Produces an integer that sorts in the same order as F.
+  static uint32_t encodeFloat(float F) {
+    // IEEE 754 floats compare like 2s complement integers.
----------------
I think we'd better have unittest for this function.


================
Comment at: clangd/ClangdUnit.cpp:423
+    memcpy(&U, &F, sizeof(float));
+    // Convert U from 2s complement to unsigned, preserving order.
+    const uint32_t SignBit = ~(~uint32_t{0} >> 1);
----------------
Would be nice to explain more what we do here: we are trying to remap from the signed range [INT_MIN, INT_MAX] to the unsigned range [0, UINT_MAX], so that we can compare them via string literal comparison.


================
Comment at: clangd/ClangdUnit.cpp:425
+    const uint32_t SignBit = ~(~uint32_t{0} >> 1);
+    return U & SignBit ? 0 - U : U + SignBit;
+  }
----------------
U ^ SignBit


================
Comment at: test/clangd/completion-items-kinds.test:1
 # RUN: clangd -enable-snippets -run-synchronously < %s | FileCheck %s
 # It is absolutely vital that this file has CRLF line endings.
----------------
an off-topic comment: why not using `-pretty` in this test?


https://reviews.llvm.org/D40089





More information about the cfe-commits mailing list