klimek added inline comments.

================
Comment at: 
cfe/trunk/include/clang/Tooling/Refactoring/RefactoringActionRule.h:23-37
+/// A common refactoring action rule interface.
+class RefactoringActionRule {
+public:
+  enum RuleKind { SourceChangeRefactoringRuleKind };
+
+  RuleKind getRuleKind() const { return Kind; }
+
----------------
arphaman wrote:
> klimek wrote:
> > Sorry for being late, was out on vacation.
> > Generally, why do we need this tag-based abstraction here instead of using 
> > the more typical OO double-dispatch where necessary?
> > (We do this in the AST a lot, but the AST is special, because there we want 
> > to implement a lot of different algorithms that rely on the node type, 
> > while I don't see how that applies here)
> Generally the clients will have to somehow distinguish between the types of 
> results that are produced by rules to figure out what to do (e.g. 
> AtomicChanges -> apply, SymbolOccurrences -> ask user, Continuation -> look 
> for more ASTs). So far I've thought that the LLVM based dynamic casts will 
> work well for this, e.g. 
> 
> ```
> if (auto *Action = dyn_cast<SourceChangeRefactoringRule>()) {
>   Expected<Optional<AtomicChanges>> Changes = 
> Action->createSourceReplacements();
>   applyChanges(Changes);
> } else if (...) {
>   ...
> } else (...) {
>    ...
> }
> ```
> 
> But you're probably right, there might be a better way to do this rather than 
> the tag based approach. Something like a consumer class that clients can 
> implement that provides consumer functions that take in the specific results. 
> I reckon a single consumer will actually work better in the long-run when we 
> might Continuations that both return changes in the first TU and information 
> for searches in other TUs. I'll see if I can get a patch out that removes 
> this tag and uses the consumer approach.
Cool, looking forward to it :)


Repository:
  rL LLVM

https://reviews.llvm.org/D36075



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

Reply via email to