diff --git a/modules/lang/beancount/autoload/advice.el b/modules/lang/beancount/autoload/advice.el index f43085677..8bcb0790a 100644 --- a/modules/lang/beancount/autoload/advice.el +++ b/modules/lang/beancount/autoload/advice.el @@ -44,18 +44,23 @@ (widen) (with-temp-buffer (save-excursion (insert-buffer-substring source)) - (while (re-search-forward (rx bol - (or (seq (= 4 num) "-" (= 2 num) "-" (= 2 num) (+ " ") - "document" (+ " ") - (+ (or alnum ":" "_" "-"))) - "include" - (seq "option" (+ " ") "\"documents\"")) - (+ " ") "\"" - (group (+ (not "\"")))) - nil t) - (replace-match (expand-file-name - (match-string-no-properties 1)) - t t nil 1)) + (save-excursion + (while (re-search-forward "^;+# " nil t) + (replace-match "" t t))) + (while (re-search-forward + (rx bol + (or (seq (= 4 num) "-" (= 2 num) "-" (= 2 num) (+ " ") + "document" (+ " ") + (+ (or alnum ":" "_" "-"))) + "include" + (seq "option" (+ " ") "\"documents\"")) + (+ " ") "\"" + (group (+ (not "\"")))) + nil t) + (unless (file-name-absolute-p (match-string-no-properties 1)) + (replace-match (expand-file-name + (match-string-no-properties 1)) + t t nil 1))) (buffer-substring-no-properties (point-min) (point-max))))) (process-send-eof flymake-bean-check-process))) diff --git a/modules/lang/beancount/config.el b/modules/lang/beancount/config.el index 831cdd9ec..1e2e22436 100644 --- a/modules/lang/beancount/config.el +++ b/modules/lang/beancount/config.el @@ -27,10 +27,24 @@ :around #'beancount--fava-filter (funcall fn process (ansi-color-filter-apply output))) - ;; HACK: Widens the buffer so flymake never operates on partial buffer - ;; contents. Also replaces any relative file paths in include and document - ;; directives with an absolute path, so bean-check doesn't throw false - ;; positives due to flymake-bean's implementation. + ;; HACK: This makes a couple adjustments to beancount-mode's flymake linter: + ;; + ;; 1. Widens the buffer so bean-check can see the full buffer and won't + ;; complain about missing context. + ;; 2. Replaces any relative file paths in include and document directives + ;; with an absolute path, so bean-check doesn't throw false positives + ;; about missing files relative to /dev (because flymake-bean is piping + ;; context to /dev/stdin). + ;; 3. Adds support for meta lines that only the flymake linter will see. + ;; These are lines prefixed by any number of semicolons followed by a hash + ;; then space. E.g. + ;; + ;; ;# include "../config.beancount" + ;; ;# 2025-01-01 pad Assets:Bank Equity:Opening-Balances + ;; + ;; Used to silence the linter in multi-file beancount projects without + ;; dealing with multiple-include errors and redundancies. + ;; REVIEW: PR features 1 and 2 upstream! 3 needs discussing. (advice-add #'flymake-bean-check--run :override #'+beancount--flymake-bean-check--run-a)