Skip to content

Commit bfe975d

Browse files
authored
Merge pull request #65399 from ahoppen/ahoppen/rename-macro-definition
[Rename] Also syntactically rename a macro’s definition
2 parents 4dee668 + 8abe38f commit bfe975d

File tree

4 files changed

+18
-1
lines changed

4 files changed

+18
-1
lines changed

include/swift/AST/ASTWalker.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,10 @@ class ASTWalker {
591591
/// TODO: Consider changing this to false by default.
592592
virtual bool shouldWalkSerializedTopLevelInternalDecls() { return true; }
593593

594+
/// Whether to walk into the definition of a \c MacroDecl if it hasn't been
595+
/// type-checked yet.
596+
virtual bool shouldWalkIntoUncheckedMacroDefinitions() { return false; }
597+
594598
/// walkToParameterListPre - This method is called when first visiting a
595599
/// ParameterList, before walking into its parameters.
596600
///

include/swift/IDE/Utils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ class NameMatcher: public ASTWalker {
379379
PreWalkAction walkToTypeReprPre(TypeRepr *T) override;
380380
PreWalkResult<Pattern *> walkToPatternPre(Pattern *P) override;
381381
bool shouldWalkIntoGenericParams() override { return true; }
382+
bool shouldWalkIntoUncheckedMacroDefinitions() override { return true; }
382383

383384
PreWalkResult<ArgumentList *>
384385
walkToArgumentListPre(ArgumentList *ArgList) override;

lib/AST/ASTWalker.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,8 @@ class Traversal : public ASTVisitor<Traversal, Expr*, Stmt*,
425425
if (auto def = MD->definition) {
426426
// Don't walk into unchecked definitions.
427427
if (auto expansion = dyn_cast<MacroExpansionExpr>(def)) {
428-
if (!expansion->getType().isNull()) {
428+
if (!expansion->getType().isNull() ||
429+
Walker.shouldWalkIntoUncheckedMacroDefinitions()) {
429430
if (auto newDef = doIt(def))
430431
MD->definition = newDef;
431432
else
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// RUN: %empty-directory(%t.ranges)
2+
// RUN: %refactor -find-rename-ranges -source-filename %s -pos="test" -is-function-like -old-name "StringifyMacro" | %FileCheck %s
3+
4+
// CHECK: struct /*test:def*/<base>StringifyMacro</base> {}
5+
// CHECK: @freestanding(expression)
6+
// CHECK: macro stringify<T>(_ value: T) -> (T, String) = #externalMacro(module: "MyMacroMacros", type: "/*test:ref*/<base>StringifyMacro</base>")
7+
8+
struct /*test:def*/StringifyMacro {}
9+
10+
@freestanding(expression)
11+
macro stringify<T>(_ value: T) -> (T, String) = #externalMacro(module: "MyMacroMacros", type: "/*test:ref*/StringifyMacro")

0 commit comments

Comments
 (0)