diff --git a/gulie/engine.scm b/gulie/engine.scm index d003e5d..9b86c2c 100644 --- a/gulie/engine.scm +++ b/gulie/engine.scm @@ -93,17 +93,20 @@ and '%min-severity with value 'error, 'warning, or 'info (default)." (when (memq pass '(all surface)) (set! diagnostics (append (run-line-rules file lines config) diagnostics)) - ;; Pass 1b: CST rules (if tokenizer is loaded) - (let ((tok-mod (resolve-module '(gulie tokenizer) #:ensure #f))) - (when tok-mod - (let ((tokenize (module-ref tok-mod 'tokenize)) - (cst-mod (resolve-module '(gulie cst) #:ensure #f))) - (when cst-mod - (let* ((parse-cst (module-ref cst-mod 'parse-cst)) - (tokens (tokenize text file)) - (cst (parse-cst tokens))) - (set! diagnostics (append (run-cst-rules file cst config) - diagnostics)))))))) + ;; Pass 1b: CST rules — only tokenize if there are active CST rules + (let ((cst-rules (filter-rules-by-config (rules-of-type 'cst) config))) + (when (not (null? cst-rules)) + (let ((tok-mod (resolve-module '(gulie tokenizer) #:ensure #f))) + (when tok-mod + (let ((tokenize (module-ref tok-mod 'tokenize)) + (cst-mod (resolve-module '(gulie cst) #:ensure #f))) + (when cst-mod + (let* ((parse-cst (module-ref cst-mod 'parse-cst)) + (tokens (tokenize text file)) + (cst (parse-cst tokens))) + (set! diagnostics + (append (run-cst-rules file cst config) + diagnostics)))))))))) ;; Pass 2: semantic rules (if compiler module is loaded) (when (memq pass '(all semantic)) (let ((comp-mod (resolve-module '(gulie compiler) #:ensure #f)))