hokein added inline comments.

================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:452
+      for (int Pos : MatchedIndex)
+        Mapped.push_back(Lexed[Pos]);
+      return MatchedCB(std::move(Mapped));
----------------
sammccall wrote:
> if we're actually evaluating all ranges, can we pass the index array (by 
> reference), use it to evaluate scores, and only copy ranges for the winner?
we could use the index array to evaluate the scores, but it would make the cost 
API signature a bit weird, like `size_t 
renameRangeAdjustmentCost(ArrayRef<Range> Indexed, ArrayRef<Range> Lexed, 
ArrayRef<size_t> MatchedLexedIndex);`


================
Comment at: clang-tools-extra/clangd/refactor/Rename.h:95
+  /// \p getBest, exposing for testing only.
+  static MatchType match(llvm::ArrayRef<Range> LHS, llvm::ArrayRef<Range> RHS);
+
----------------
sammccall wrote:
> hokein wrote:
> > sammccall wrote:
> > > Oops, forgot this...
> > > I think the public API isn't quite right here - exposing parts for 
> > > testing is fine, but the classification itself isn't fine grained enough 
> > > I think. (Too easy to write a test that "passes" but the actual mapping 
> > > found isn't the right one).
> > > 
> > > And the class structure wrapping a LangOpts ref seems like a detail that 
> > > can be hidden.
> > > 
> > > I'd like to see:
> > >  - a function that returns the lexed ranges from a StringRef/LangOpts
> > >  - a function that constructs the mapping given two sequences of ranges 
> > > (like `getMappedRanges(ArrayRef<Range>, ArrayRef<Range>) -> vector<Range>`
> > >  - a function that ties these together to the data structures we care 
> > > about (i.e. taking Code + identifier + LangOpts + ArrayRef<Ref> or so)
> > > 
> > > then you can unit test the first and second and smoke test the third.
> > > 
> > > Tests like
> > > 
> > > ```
> > > Indexed = "int [[x]] = 0; void foo(int x);";
> > > Draft = "double [[x]] = 0; void foo(double x);";
> > > verifyRenameMatches(Indexed, Draft);
> > > ```
> > > a function that returns the lexed ranges from a StringRef/LangOpts
> > 
> > There is an existing function `collectIdentifierRanges` in SourceCode.cpp, 
> > and it has been unittested.
> > 
> > 
> > > a function that constructs the mapping given two sequences of ranges 
> > > (like getMappedRanges(ArrayRef<Range>, ArrayRef<Range>) -> vector<Range>
> > > a function that ties these together to the data structures we care about 
> > > (i.e. taking Code + identifier + LangOpts + ArrayRef<Ref> or so)
> > 
> > sure, I think it is sufficient to test the second one, since the second one 
> > is a simple wrapper of the `getMappedRanges`.
> > sure, I think it is sufficient to test the second one, since the second one 
> > is a simple wrapper of the `getMappedRanges`.
> 
> Did you mean "sufficient to test the first one"?
> Testing the second one is certainly sufficient, but tests more than it needs 
> to (particularly the lexing bits again).
I got the point here, exposed `getMappedRanges` and added unit tests for it.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D70594/new/

https://reviews.llvm.org/D70594



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

Reply via email to