Skip to content

Commit 85c2344

Browse files
committed
Diagnose the specific options directive that is dropped
1 parent ff69522 commit 85c2344

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

Sources/SwiftDocC/Semantics/Article/Article.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ public final class Article: Semantic, MarkupConvertible, Abstracted, Redirected,
165165
continue
166166
}
167167

168-
let extraOptionsProblems = options.map { extraOptionsDirective in
168+
let extraOptionsProblems = extraOptions.map { extraOptionsDirective in
169169
let diagnostic = Diagnostic(
170170
source: source,
171171
severity: .warning,

Tests/SwiftDocCTests/Semantics/ArticleTests.swift

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,4 +167,45 @@ class ArticleTests: XCTestCase {
167167
let replacement = try XCTUnwrap(solution.replacements.first)
168168
XCTAssertEqual(replacement.replacement, "# <#Title#>")
169169
}
170+
171+
func testArticleWithDuplicateOptions() throws {
172+
let source = """
173+
# Article
174+
175+
@Options {
176+
@AutomaticSeeAlso(disabled)
177+
}
178+
179+
This is an abstract.
180+
181+
@Options {
182+
@AutomaticSeeAlso(siblingPages)
183+
}
184+
185+
Here's an overview.
186+
"""
187+
let document = Document(parsing: source, options: [.parseBlockDirectives])
188+
let (bundle, context) = try testBundleAndContext(named: "TestBundle")
189+
var problems = [Problem]()
190+
let article = Article(from: document, source: nil, for: bundle, in: context, problems: &problems)
191+
XCTAssertNotNil(article)
192+
XCTAssertEqual(
193+
problems.map(\.diagnostic.identifier),
194+
[
195+
"org.swift.docc.HasAtMostOne<Article, Options, local>.DuplicateChildren",
196+
]
197+
)
198+
199+
XCTAssertEqual(problems.count, 1)
200+
XCTAssertEqual(
201+
problems.first?.diagnostic.identifier,
202+
"org.swift.docc.HasAtMostOne<Article, Options, local>.DuplicateChildren"
203+
)
204+
XCTAssertEqual(
205+
problems.first?.diagnostic.range?.lowerBound.line,
206+
9
207+
)
208+
209+
XCTAssertEqual(article?.options[.local]?.automaticSeeAlsoBehavior, .disabled)
210+
}
170211
}

0 commit comments

Comments
 (0)