This release introduces a new extension point, script
, that allows for the creation of rules that require programming logic. The extension point uses the embedded language Tengo and is supported on all platforms.
# An example rule for suggesting a new section after 3 paragraphs of text.
extends: script
message: "Consider inserting a new section heading at this point."
link: https://tengolang.com/
# The unprocessed file contents.
#
# We need this to access heading markup.
scope: raw
script: |
text := import("text")
matches := []
p_limit := 3 // at most 3 paragraphs per section
// Remove all instances of code blocks since we don't want to count
// inter-block newlines as a new paragraph.
document := text.re_replace("(?s) *(\n```.*?```\n)", scope, "")
count := 0
for line in text.split(document, "\n") {
if text.has_prefix(line, "#") {
count = 0 // New section; reset count
} else if count > p_limit {
start := text.index(scope, line)
matches = append(matches, {begin: start, end: start + len(line)})
count = 0
} else if text.trim_space(line) == "" {
count += 1
}
}
Also check out the new online Rule Explorer app.