ioeric added inline comments.

================
Comment at: include/clang/Tooling/Refactoring/RefactoringActionRules.h:45
 std::unique_ptr<RefactoringActionRule>
 createRefactoringRule(Expected<ResultType> (*RefactoringFunction)(
                           typename RequirementTypes::OutputType...),
----------------
Can we get rid of this overload and simply make `RefactoringRuleContext` 
mandatory for all refactoring functions? 


================
Comment at: 
include/clang/Tooling/Refactoring/RefactoringActionRulesInternal.h:99
+  template <typename ContextType, typename ValueType, size_t... Is>
+  void invokeImplDispatch(
+      RefactoringResultConsumer &Consumer, RefactoringRuleContext &,
----------------
Do we still need this overload?


================
Comment at: include/clang/Tooling/Refactoring/RefactoringRuleContext.h:44
 
+  ASTContext &getASTContext() const {
+    assert(AST && "no AST!");
----------------
Should we also provide an interface to test if this has an `ASTContext`? Or 
maybe simply return null if there is `ASTContext`? WDYT?


================
Comment at: lib/Tooling/Refactoring/Rename/RenamingAction.cpp:50
+
+  static Expected<AtomicChanges>
+  renameOccurrences(const RefactoringRuleContext &Context,
----------------
Should this be private?


================
Comment at: tools/clang-refactor/ClangRefactor.cpp:60
+      : SubCommand(Name, Description), Action(&Action) {
+    Sources = llvm::make_unique<cl::list<std::string>>(
+        cl::Positional, cl::ZeroOrMore, cl::desc("<source0> [... <sourceN>]"),
----------------
arphaman wrote:
> arphaman wrote:
> > ioeric wrote:
> > > I think you would get a conflict of positional args when you have 
> > > multiple sub-command instances.
> > > 
> > > Any reason not to use `clang::tooling::CommonOptionsParser` which takes 
> > > care of sources and compilation options for you? 
> > Not from my experience, I've tried multiple actions it seems like the right 
> > arguments are parsed for the right subcommand. It looks like the cl option 
> > parser looks is smart enough to handle identical options across multiple 
> > subcommands.
> I agree that using `CommonOptionsParser` would be preferable, but right now 
> it doesn't work well with subcommands. I will create a followup patch that 
> improves subcommand support in `CommonOptionsParser` and uses them in 
> clang-refactor when this patch is accepted.
Thanks! Could you add a `FIXME` for the `CommonOptionsParser` change?




================
Comment at: tools/clang-refactor/ClangRefactor.cpp:312
+      [](const std::unique_ptr<RefactoringActionSubcommand> &SubCommand) {
+        return !!(*SubCommand);
+      });
----------------
arphaman wrote:
> ioeric wrote:
> > Do we need a `FIXME` here?  It seems that this simply finds the first 
> > command that is available? What if there are more than one commands that 
> > satisfy the requirements?
> I don't quite follow, when would multiple subcommands be satisfied? The 
> subcommand corresponds to the action that the user wants to do, there should 
> be no ambiguity.
(I added this comment a while ago, and it seemed to have shifted. I was 
intended to comment on line 297 `  auto It = llvm::find_if(`. Sorry about that.)

I guess I don't quite understand how a specific subcommand is picked based on 
the commandline options users provide. The `llvm::find_if` above seems to 
simply find the first action/subcommand that is registered? Could you add a 
comment about how submamands are matched?


Repository:
  rL LLVM

https://reviews.llvm.org/D36574



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

Reply via email to