From 64fe2ecd153e6414cf33fc887604a31ee36e7952 Mon Sep 17 00:00:00 2001 From: Asko Nõmm Date: Sun, 1 May 2022 19:52:41 +0300 Subject: Implement newline corrector for list block. --- src/clarktown/correctors.clj | 9 ++++++--- src/clarktown/correctors/list_block.clj | 36 +++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 src/clarktown/correctors/list_block.clj (limited to 'src') diff --git a/src/clarktown/correctors.clj b/src/clarktown/correctors.clj index e251595..1a61f2d 100644 --- a/src/clarktown/correctors.clj +++ b/src/clarktown/correctors.clj @@ -1,7 +1,8 @@ (ns clarktown.correctors (:require [clarktown.correctors.code-block :as code-block] - [clarktown.correctors.atx-heading-block :as atx-heading-block])) + [clarktown.correctors.atx-heading-block :as atx-heading-block] + [clarktown.correctors.list-block :as list-block])) (def @@ -9,10 +10,12 @@ default-block-separation-correctors {:newline-above [code-block/empty-line-above? - atx-heading-block/empty-line-above?] + atx-heading-block/empty-line-above? + list-block/empty-line-above?] :newline-below [code-block/empty-line-below? - atx-heading-block/empty-line-below?]}) + atx-heading-block/empty-line-below? + list-block/empty-line-below?]}) (def diff --git a/src/clarktown/correctors/list_block.clj b/src/clarktown/correctors/list_block.clj new file mode 100644 index 0000000..cf84bb1 --- /dev/null +++ b/src/clarktown/correctors/list_block.clj @@ -0,0 +1,36 @@ +(ns clarktown.correctors.list-block + (:require + [clojure.string :as string] + [clarktown.matchers.list-block :as matcher])) + + +(defn empty-line-above? + "Determines whether there's a need for an empty new line + above the `line` at the current `index`. In the list block + case that's when the above line is not a newline and is not + a list block line." + [lines line index] + (and (matcher/match? line) + (> index 0) + (nil? (-> (nth lines (- index 1)) + string/trim + matcher/match?)) + (not (= (-> (nth lines (- index 1)) + string/trim) + "")))) + + +(defn empty-line-below? + "Determines whether there's a need for an empty new line + above the `line` at the current `index`. In the list block + case that's when the below line is not a newline and is not + a list block line." + [lines line index] + (and (matcher/match? line) + (> (- (count lines) 1) index) + (nil? (-> (nth lines (+ index 1)) + string/trim + matcher/match?)) + (not (= (-> (nth lines (+ index 1)) + string/trim) + "")))) -- cgit v1.2.3