[PATCH] D19941: [tooling] FixItHint Tooling refactoring

Etienne Bergeron via cfe-commits cfe-commits at lists.llvm.org
Wed May 11 07:07:54 PDT 2016


etienneb added a comment.

I added the "using statements".
landing.


================
Comment at: include/clang/Tooling/Fixit.h:35
@@ +34,3 @@
+///        used by the following template abstractions.
+inline SourceRange getSourceRange(const SourceRange &Range) { return Range; }
+
----------------
alexfh wrote:
> Do we want to expose `getSourceRange` as an API? If no, it should also be in the `namespace internal`.
Good question.
I moved it into the internal namespace.

If it's become needed, we can re-expose it.

================
Comment at: include/clang/Tooling/Fixit.h:55
@@ +54,3 @@
+// \brief Returns a FixItHint to remove \p Node.
+template <typename T> FixItHint createRemoval(const T &Node) {
+  return FixItHint::CreateRemoval(getSourceRange(Node));
----------------
alexfh wrote:
> I wonder whether we should later extend this to remove comments attached to nodes like Stmt and FunctionDecl? It's out of this patches scope, but maybe add a FIXME to sketch the further development plans.
I like the idea. I didn't think about comments and other syntactical elements that may be related to a Node. 
But, I believe we will have a other set of functions for Node and comments.

An other concept that I believe it's missing is to provide helper to append expression (operators) and stay semantically correct with operator precedence. Some cases needed to add parentheses.



================
Comment at: unittests/Tooling/FixitTest.cpp:53
@@ +52,3 @@
+
+TEST(FixitTest, getTextWithMacro) {
+  CallsVisitor Visitor;
----------------
alexfh wrote:
> Could you add a test where getText returns an empty string?
see line 68, already there!

================
Comment at: unittests/Tooling/FixitTest.cpp:119
@@ +118,3 @@
+              LocationToString(Hint0.RemoveRange.getBegin(), Context));
+    EXPECT_EQ("input.cc:2:26 <Spelling=input.cc:1:17>",
+              LocationToString(Hint0.RemoveRange.getEnd(), Context));
----------------
alexfh wrote:
> One character range is boring. Can you make the parameter longer and also verify whether the range is a token range or a character range?
In this case, it's not one character... it's one token.
As it's a "token range", the whole token is used.

But, I can use an expression too.
Not a bad idea: added but in 'createRemoval'

There is already a reand at line 138:
  EXPECT_EQ("input.cc:2:26 <Spelling=input.cc:1:37>",
  EXPECT_EQ("input.cc:2:26 <Spelling=input.cc:1:45>",


http://reviews.llvm.org/D19941





More information about the cfe-commits mailing list