diff --git a/Sources/LeafKit/LeafAST.swift b/Sources/LeafKit/LeafAST.swift index c0b9826..6e4e662 100644 --- a/Sources/LeafKit/LeafAST.swift +++ b/Sources/LeafKit/LeafAST.swift @@ -62,13 +62,7 @@ public struct LeafAST: Hashable { } // replace the original Syntax with the results of inlining, potentially 1...n - let replacementSyntax: [Syntax] - if case .extend(let extend) = ast[pos], let context = extend.context { - let inner = ast[pos].inlineRefs(providedExts, [:]) - replacementSyntax = [.with(.init(context: context, body: inner))] - } else { - replacementSyntax = ast[pos].inlineRefs(providedExts, [:]) - } + let replacementSyntax = ast[pos].inlineRefs(providedExts, [:]) ast.replaceSubrange(pos...pos, with: replacementSyntax) // any returned new inlined syntaxes can't be further resolved at this point // but we need to add their unresolvable references to the global set diff --git a/Sources/LeafKit/LeafSyntax/LeafSyntax.swift b/Sources/LeafKit/LeafSyntax/LeafSyntax.swift index 29b0488..dd597ed 100644 --- a/Sources/LeafKit/LeafSyntax/LeafSyntax.swift +++ b/Sources/LeafKit/LeafSyntax/LeafSyntax.swift @@ -105,6 +105,10 @@ extension Syntax: BodiedSyntax { } internal func inlineRefs(_ externals: [String: LeafAST], _ imports: [String: Export]) -> [Syntax] { + if case .extend(let extend) = self, let context = extend.context { + let inner = extend.inlineRefs(externals, imports) + return [.with(.init(context: context, body: inner))] + } var result = [Syntax]() switch self { case .import(let im): diff --git a/Tests/LeafKitTests/LeafTests.swift b/Tests/LeafKitTests/LeafTests.swift index cc4b17b..2825e9c 100644 --- a/Tests/LeafKitTests/LeafTests.swift +++ b/Tests/LeafKitTests/LeafTests.swift @@ -252,6 +252,39 @@ final class LeafTests: XCTestCase { XCTAssertEqual(str, expected) } + func testNestedExtendWithSugar() throws { + let layout = """ +
#import("content") + """ + + let header = """ +