script allows for the creation of arbitrary logic-based rules using Tengo, a Go-like scripting language.
yaml
Copy
extends: scriptmessage: 'Consider inserting a new section heading at this point.'link: https://tengolang.comscope: rawscript: MyScript.tengo
Where MyScript.tengo is a file containing the Tengo script to execute stored
at $StypesPath/config/scripts.
go
Copy
text := import("text")matches := []// at most 3 paragraphs per sectionp_limit := 3// 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 := 0for 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 }}
In each script:
Use Tengo’s text module, which provides a number of string- and
regex-related utility functions.
Process the content in the scope variable. scope contains text based on
the scope: <scope> setting for the rule. For more information, see Scoping.
Populate the matches array with rule matches. Each match must be a map
with the keys:
begin: where the match begins in the content provided by the scope variable.
end: where the match ends in the content provided by the scope variable.