Skip to content

Commit 9342e78

Browse files
author
Simon Barinka
committed
[SourceKit] Fix support for interpolated strings
1 parent 87878c5 commit 9342e78

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

lib/IDE/IDERequests.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,13 @@ ResolvedCursorInfoPtr CursorInfoResolver::resolve(SourceLoc Loc) {
229229
}
230230

231231
bool CursorInfoResolver::walkToDeclPre(Decl *D, CharSourceRange Range) {
232-
if (!rangeContainsLoc(D->getSourceRangeIncludingAttrs()))
232+
// Get char based source range for this declaration.
233+
SourceRange SR = D->getSourceRangeIncludingAttrs();
234+
auto &Context = D->getASTContext();
235+
CharSourceRange CharSR =
236+
Lexer::getCharSourceRangeFromSourceRange(Context.SourceMgr, SR);
237+
238+
if (!rangeContainsLoc(CharSR))
233239
return false;
234240

235241
if (isa<ExtensionDecl>(D))
@@ -348,8 +354,8 @@ bool CursorInfoResolver::walkToExprPost(Expr *E) {
348354
return false;
349355

350356
if (OutermostCursorExpr && isCursorOn(E, LocToResolve)) {
351-
CursorInfo = new ResolvedExprStartCursorInfo(CursorInfo->getSourceFile(),
352-
CursorInfo->getLoc(), E);
357+
CursorInfo = new ResolvedExprStartCursorInfo(
358+
CursorInfo->getSourceFile(), CursorInfo->getLoc(), OutermostCursorExpr);
353359
return false;
354360
}
355361

test/SourceKit/CursorInfo/cursor_info.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,9 @@ struct A: ExpressibleByIntegerLiteral {
240240
}
241241
var a: A = 42
242242

243+
let stringStr = "str"
244+
let strInterpolation = "This is a \(stringStr + "ing") interpolation"
245+
243246
// REQUIRES: objc_interop
244247
// RUN: %empty-directory(%t.tmp)
245248
// RUN: %swiftc_driver -emit-module -o %t.tmp/FooSwiftModule.swiftmodule %S/Inputs/FooSwiftModule.swift
@@ -860,3 +863,25 @@ var a: A = 42
860863
// CHECK98-NEXT: (A.Type) -> (Int) -> A
861864
// CHECK98-NEXT: $s14integerLiteral11cursor_info1AVSi_tcD
862865
// CHECK98-NEXT: cursor_info
866+
867+
// RUN: %sourcekitd-test -req=cursor -pos=244:51 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %s | %FileCheck -check-prefix=CHECK99 %s
868+
// CHECK99: source.lang.swift.ref.struct ()
869+
// CHECK99-NEXT: String
870+
// CHECK99-NEXT: s:SS
871+
// CHECK99-NEXT: source.lang.swift
872+
// CHECK99-NEXT: String.Type
873+
// CHECK99-NEXT: $sSSmD
874+
// CHECK99-NEXT: Swift
875+
// CHECK99-NEXT: <Group>String</Group>
876+
// CHECK99-NEXT: SYSTEM
877+
878+
// RUN: %sourcekitd-test -req=cursor -pos=244:61 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %s | %FileCheck -check-prefix=CHECK100 %s
879+
// CHECK100: source.lang.swift.ref.function.constructor ()
880+
// CHECK100-NEXT: init(stringInterpolation:)
881+
// CHECK100-NEXT: s:SS19stringInterpolationSSs013DefaultStringB0V_tcfc
882+
// CHECK100-NEXT: source.lang.swift
883+
// CHECK100-NEXT: (String.Type) -> (DefaultStringInterpolation) -> String
884+
// CHECK100-NEXT: $s19stringInterpolationSSs013DefaultStringB0V_tcD
885+
// CHECK100-NEXT: Swift
886+
// CHECK100-NEXT: <Group>String</Group>
887+
// CHECK100-NEXT: SYSTEM

0 commit comments

Comments
 (0)