Skip to content

Commit 8f4b13f

Browse files
committed
Add test cases for invalid submodule selectors
And add newline-sensitive behavior matching other uses of module selectors.
1 parent e35f6f9 commit 8f4b13f

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

Sources/SwiftParser/Names.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ extension TokenConsumer {
106106
}
107107

108108
var extra: [Token] = []
109-
while self.isAtModuleSelector() {
109+
while !self.currentToken.isAtStartOfLine && self.isAtModuleSelector() {
110110
if !self.at(.colonColon) {
111111
extra.append(self.consumeAnyToken())
112112
}

Tests/SwiftParserTest/translated/ModuleSelectorTests.swift

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13-
// This test file has been translated from swift/test/NameLookup/module_selector.swift
13+
// This test file has been translated from swift/test/Parse/module_selector.swift
1414

1515
@_spi(ExperimentalLanguageFeatures) import SwiftParser
1616
@_spi(ExperimentalLanguageFeatures) import SwiftSyntax
@@ -2257,6 +2257,41 @@ final class ModuleSelectorTests: ParserTestCase {
22572257
)
22582258
)
22592259
}
2260+
2261+
func testModuleSelectorSubmodule() {
2262+
assertParse(
2263+
"_ = Foundation::1️⃣NSData::NSData()",
2264+
diagnostics: [
2265+
DiagnosticSpec(message: "unexpected code 'NSData::' in module selector")
2266+
]
2267+
)
2268+
2269+
assertParse(
2270+
"_ = Foundation::1️⃣NSData::Fnord::NSData()",
2271+
diagnostics: [
2272+
DiagnosticSpec(message: "unexpected code 'NSData::Fnord::' in module selector")
2273+
]
2274+
)
2275+
2276+
assertParse(
2277+
"""
2278+
_ = Foundation::1️⃣NSData::2️⃣
2279+
Fnord::NSData()
2280+
""",
2281+
diagnostics: [
2282+
DiagnosticSpec(message: "unexpected code 'NSData::' in module selector"),
2283+
DiagnosticSpec(
2284+
locationMarker: "2️⃣",
2285+
message: "expected identifier",
2286+
fixIts: ["insert identifier"]
2287+
),
2288+
],
2289+
fixedSource: """
2290+
_ = Foundation::NSData::<#identifier#>
2291+
Fnord::NSData()
2292+
"""
2293+
)
2294+
}
22602295
}
22612296

22622297
// MARK: - Syntax tree construction helpers

0 commit comments

Comments
 (0)