[PATCH] D56597: [clangd] Add Limit parameter for xref.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 14 03:38:00 PST 2019
sammccall added inline comments.
================
Comment at: clangd/XRefs.cpp:724
}
-
+ if (!Limit)
+ Limit = std::numeric_limits<uint32_t>::max();
----------------
nit: move this to the top, since it's just adjusting input params?
================
Comment at: clangd/XRefs.cpp:730
for (const auto &Ref : MainFileRefs) {
+ if (Results.size() == Limit)
+ break;
----------------
I don't think we need to break up the flow here to early exit.
I'd suggest reducing the number of places we deal with limits, we can get away with 3 instead of 5:
```
... collect results as before ...
if (Index && Limit && Results.size() < Limit) {
... query index ...
Req.Limit = Limit;
... append results as usual ...
}
if (Limit && Results.size() > Limit)
Results.resize(limit)
```
================
Comment at: clangd/index/MemIndex.cpp:72
trace::Span Tracer("MemIndex refs");
+ uint32_t Limit =
+ Req.Limit ? *Req.Limit : std::numeric_limits<uint32_t>::max();
----------------
Req.Limit.getValueOr(...)
================
Comment at: clangd/index/MemIndex.cpp:72
trace::Span Tracer("MemIndex refs");
+ uint32_t Limit =
+ Req.Limit ? *Req.Limit : std::numeric_limits<uint32_t>::max();
----------------
sammccall wrote:
> Req.Limit.getValueOr(...)
if you're going to mutate this, maybe call it "remaining" or so?
================
Comment at: clangd/index/Merge.cpp:98
// Ultimately we should explicit check which index has the file instead.
+ uint32_t DynamicCount = 0;
+ uint32_t Limit =
----------------
why two separate count variables?
================
Comment at: clangd/index/Merge.cpp:98
// Ultimately we should explicit check which index has the file instead.
+ uint32_t DynamicCount = 0;
+ uint32_t Limit =
----------------
sammccall wrote:
> why two separate count variables?
you've inserted the new code between existing code and the comment that describes it.
================
Comment at: unittests/clangd/DexTests.cpp:673
- std::vector<std::string> Files;
- RefsRequest Req;
- Req.IDs.insert(Foo.ID);
- Req.Filter = RefKind::Declaration | RefKind::Definition;
- Dex(std::vector<Symbol>{Foo, Bar}, Refs).refs(Req, [&](const Ref &R) {
- Files.push_back(R.Location.FileURI);
- });
-
- EXPECT_THAT(Files, ElementsAre("foo.h"));
+ {
+ std::vector<std::string> Files;
----------------
If you want these to be the same test, there should be some connection between them.
A natural one is that it's the same query with a different limit - you could extend the original test to have multiple results.
================
Comment at: unittests/clangd/DexTests.cpp:686
+ Req.IDs.insert(Foo.ID);
+ Req.Limit = 1;
+ size_t RefCount = 0;
----------------
As far as I can tell, this limit makes no difference, there's only one result anyway.
================
Comment at: unittests/clangd/DexTests.cpp:691
+ });
+ EXPECT_THAT(*Req.Limit, RefCount);
+ }
----------------
In tests, we know what the number is, and it's clearer to just spell it out: `EXPECT_EQ(1, RefCount)`
================
Comment at: unittests/clangd/DexTests.cpp:691
+ });
+ EXPECT_THAT(*Req.Limit, RefCount);
+ }
----------------
sammccall wrote:
> In tests, we know what the number is, and it's clearer to just spell it out: `EXPECT_EQ(1, RefCount)`
generally prefer to use EXPECT_THAT only with matchers. EXPECT_EQ gives clearer error messages, reads more naturally, and is more common.
Better still would be to assert the actual outcomes, e.g. ElementsAre(anyOf("foo1.h", "foo2.h"))
================
Comment at: unittests/clangd/IndexTests.cpp:306
+ {
+ Request.Limit = 1;
+ size_t RefsCount = 0;
----------------
why new scope here?
Repository:
rCTE Clang Tools Extra
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D56597/new/
https://reviews.llvm.org/D56597
More information about the cfe-commits
mailing list