Changed onDiagnostics Closure<Void> to diagnosticsConsumer Consumer<Collection<Diagnostic>>.

This commit is contained in:
JesseBrault0709 2023-04-26 15:08:15 +02:00
parent 2af6eeddec
commit 958d3ca0ff
9 changed files with 45 additions and 41 deletions

View File

@ -3,9 +3,12 @@ package com.jessebrault.ssg.dsl
import com.jessebrault.ssg.part.Part
import com.jessebrault.ssg.render.RenderContext
import com.jessebrault.ssg.text.Text
import com.jessebrault.ssg.util.Diagnostic
import groovy.transform.EqualsAndHashCode
import org.jetbrains.annotations.Nullable
import java.util.function.Consumer
import static java.util.Objects.requireNonNull
@EqualsAndHashCode(includeFields = true)
@ -13,7 +16,7 @@ final class EmbeddablePart {
private final Part part
private final RenderContext context
private final Closure<Void> onDiagnostics
private final Consumer<Collection<Diagnostic>> diagnosticsConsumer
@Nullable
private final Text text
@ -21,24 +24,24 @@ final class EmbeddablePart {
EmbeddablePart(
Part part,
RenderContext context,
Closure<Void> onDiagnostics,
Consumer<Collection<Diagnostic>> diagnosticsConsumer,
@Nullable Text text
) {
this.part = requireNonNull(part)
this.context = requireNonNull(context)
this.onDiagnostics = requireNonNull(onDiagnostics)
this.diagnosticsConsumer = requireNonNull(diagnosticsConsumer)
this.text = text
}
String render(Map binding = [:]) {
def result = part.type.renderer.render(
def result = this.part.type.renderer.render(
this.part,
binding,
this.context,
this.text
)
if (result.hasDiagnostics()) {
this.onDiagnostics.call(result.diagnostics)
this.diagnosticsConsumer.accept(result.diagnostics)
''
} else {
result.get()

View File

@ -2,9 +2,12 @@ package com.jessebrault.ssg.dsl
import com.jessebrault.ssg.render.RenderContext
import com.jessebrault.ssg.text.Text
import com.jessebrault.ssg.util.Diagnostic
import groovy.transform.EqualsAndHashCode
import org.jetbrains.annotations.Nullable
import java.util.function.Consumer
import static java.util.Objects.requireNonNull
@EqualsAndHashCode(includeFields = true)
@ -15,13 +18,13 @@ final class EmbeddablePartsMap {
EmbeddablePartsMap(
RenderContext context,
Closure<Void> onDiagnostics,
Consumer<Collection<Diagnostic>> diagnosticsConsumer,
@Nullable Text text = null
) {
requireNonNull(context)
requireNonNull(onDiagnostics)
requireNonNull(diagnosticsConsumer)
context.parts.each {
this.put(it.path, new EmbeddablePart(it, context, onDiagnostics, text))
this[it.path] = new EmbeddablePart(it, context, diagnosticsConsumer, text)
}
}

View File

@ -2,24 +2,27 @@ package com.jessebrault.ssg.dsl
import com.jessebrault.ssg.text.FrontMatter
import com.jessebrault.ssg.text.Text
import com.jessebrault.ssg.util.Diagnostic
import groovy.transform.EqualsAndHashCode
import groovy.transform.Memoized
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
import java.util.function.Consumer
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck(includeGenerated = true)
@EqualsAndHashCode(includeFields = true)
final class EmbeddableText {
private final Text text
private final Closure<Void> onDiagnostics
private final Consumer<Collection<Diagnostic>> diagnosticsConsumer
@Memoized
String render() {
def result = this.text.type.renderer.render(this.text)
if (result.diagnostics.size() > 0) {
this.onDiagnostics.call(result.diagnostics)
this.diagnosticsConsumer.accept(result.diagnostics)
''
} else {
result.get()
@ -30,7 +33,7 @@ final class EmbeddableText {
FrontMatter getFrontMatter() {
def result = this.text.type.frontMatterGetter.get(this.text)
if (result.hasDiagnostics()) {
this.onDiagnostics.call(result.diagnostics)
this.diagnosticsConsumer.accept(result.diagnostics)
new FrontMatter(this.text, [:])
} else {
result.get()
@ -41,7 +44,7 @@ final class EmbeddableText {
String getExcerpt(int limit) {
def result = this.text.type.excerptGetter.getExcerpt(this.text, limit)
if (result.hasDiagnostics()) {
this.onDiagnostics.call(result.diagnostics)
this.diagnosticsConsumer.accept(result.diagnostics)
''
} else {
result.get()

View File

@ -1,9 +1,12 @@
package com.jessebrault.ssg.dsl
import com.jessebrault.ssg.text.Text
import com.jessebrault.ssg.util.Diagnostic
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import java.util.function.Consumer
@NullCheck
@EqualsAndHashCode(includeFields = true)
final class EmbeddableTextsCollection {
@ -11,9 +14,9 @@ final class EmbeddableTextsCollection {
@Delegate
private final Collection<EmbeddableText> embeddableTexts = []
EmbeddableTextsCollection(Collection<Text> texts, Closure<Void> onDiagnostics) {
EmbeddableTextsCollection(Collection<Text> texts, Consumer<Collection<Diagnostic>> diagnosticsConsumer) {
texts.each {
this << new EmbeddableText(it, onDiagnostics)
this << new EmbeddableText(it, diagnosticsConsumer)
}
}

View File

@ -4,11 +4,12 @@ import com.jessebrault.ssg.dsl.tagbuilder.DynamicTagBuilder
import com.jessebrault.ssg.dsl.urlbuilder.PathBasedUrlBuilder
import com.jessebrault.ssg.render.RenderContext
import com.jessebrault.ssg.text.Text
import com.jessebrault.ssg.util.Diagnostic
import groovy.transform.NullCheck
import groovy.transform.stc.ClosureParams
import groovy.transform.stc.SimpleType
import org.slf4j.LoggerFactory
import java.util.function.Consumer
final class StandardDslMap {
@NullCheck(includeGenerated = true)
@ -16,8 +17,8 @@ final class StandardDslMap {
private final Map<String, Object> custom = [:]
Consumer<Collection<Diagnostic>> diagnosticsConsumer = { }
String loggerName = ''
Closure<Void> onDiagnostics = { }
Text text = null
void putCustom(String key, Object value) {
@ -32,17 +33,10 @@ final class StandardDslMap {
static Map<String, Object> get(
RenderContext context,
@DelegatesTo(value = Builder, strategy = Closure.DELEGATE_FIRST)
@ClosureParams(
value = SimpleType,
options = ['com.jessebrault.ssg.dsl.StandardDslMap.Builder']
)
Closure<Void> builderClosure
Consumer<Builder> builderConsumer
) {
def b = new Builder()
builderClosure.resolveStrategy = Closure.DELEGATE_FIRST
builderClosure.delegate = b
builderClosure(b)
builderConsumer.accept(b)
[:].tap {
// standard variables
@ -51,7 +45,7 @@ final class StandardDslMap {
it.models = new ModelCollection<Object>(context.models)
it.parts = new EmbeddablePartsMap(
context,
b.onDiagnostics,
b.diagnosticsConsumer,
b.text
)
it.siteSpec = context.siteSpec
@ -61,11 +55,11 @@ final class StandardDslMap {
it.tasks = new TaskCollection(context.tasks)
it.text = b.text ? new EmbeddableText(
b.text,
b.onDiagnostics
b.diagnosticsConsumer
) : null
it.texts = new EmbeddableTextsCollection(
context.texts,
b.onDiagnostics
b.diagnosticsConsumer
)
it.urlBuilder = new PathBasedUrlBuilder(
context.targetPath,

View File

@ -21,9 +21,8 @@ final class GspPageRenderer implements PageRenderer {
def diagnostics = []
try {
def result = this.gspRenderer.render(specialPage.text, context) {
it.diagnosticsConsumer = diagnostics.&addAll
it.loggerName = "GspSpecialPage(${ specialPage.path })"
it.onDiagnostics = diagnostics.&addAll
return
}
Result.of(diagnostics, result.toString())
} catch (Exception e) {

View File

@ -1,10 +1,10 @@
package com.jessebrault.ssg.part
import com.jessebrault.ssg.render.StandardGspRenderer
import com.jessebrault.ssg.util.Diagnostic
import com.jessebrault.ssg.render.RenderContext
import com.jessebrault.ssg.util.Result
import com.jessebrault.ssg.render.StandardGspRenderer
import com.jessebrault.ssg.text.Text
import com.jessebrault.ssg.util.Diagnostic
import com.jessebrault.ssg.util.Result
import groovy.transform.EqualsAndHashCode
import org.jetbrains.annotations.Nullable
@ -29,12 +29,11 @@ final class GspPartRenderer implements PartRenderer {
try {
def result = this.gspRenderer.render(part.text, context) {
it.putCustom('binding', binding)
it.diagnosticsConsumer = diagnostics.&addAll
it.loggerName = "GspPart(${ part.path })"
it.onDiagnostics = diagnostics.&addAll
if (text) {
it.text = text
}
return
}
Result.of(diagnostics, result.toString())
} catch (Exception e) {

View File

@ -5,6 +5,8 @@ import groovy.text.GStringTemplateEngine
import groovy.text.TemplateEngine
import org.codehaus.groovy.control.CompilerConfiguration
import java.util.function.Consumer
final class StandardGspRenderer {
private final TemplateEngine engine
@ -18,10 +20,9 @@ final class StandardGspRenderer {
String render(
String template,
RenderContext context,
@DelegatesTo(value = StandardDslMap.Builder, strategy = Closure.DELEGATE_FIRST)
Closure<Void> dslMapBuilderClosure
Consumer<StandardDslMap.Builder> dslMapBuilderConsumer
) {
this.engine.createTemplate(template).make(StandardDslMap.get(context, dslMapBuilderClosure)).toString()
this.engine.createTemplate(template).make(StandardDslMap.get(context, dslMapBuilderConsumer)).toString()
}
}

View File

@ -23,10 +23,9 @@ final class GspTemplateRenderer implements TemplateRenderer {
def diagnostics = []
try {
def result = this.gspRenderer.render(template.text, context) {
it.diagnosticsConsumer = diagnostics.&addAll
it.loggerName = "GspTemplate(${ template.path })"
it.onDiagnostics = diagnostics.&addAll
it.text = text
return
}
Result.of(diagnostics, result)
} catch (Exception e) {