-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
engine.clj
26 lines (23 loc) · 976 Bytes
/
engine.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(ns clj-holmes.engine
(:require [clj-holmes.logic.namespace :as logic.namespace]
[clj-holmes.logic.parser :as p]
[clj-holmes.rules.engine :as rules.engine]))
(defn ^:private remove-ns-from-forms [forms ns-declaration]
(when-let [ns-declaration-index (some-> ns-declaration meta :index)]
(-> ns-declaration-index
(drop forms)
vec)))
(defn ^:private parser [code]
(let [forms (p/code->data code)
ns-declaration (logic.namespace/find-ns-declaration forms)
forms-without-ns (remove-ns-from-forms forms ns-declaration)]
{:forms (or forms-without-ns forms)
:ns-declaration ns-declaration
:rules []}))
(defn process [code rules]
(let [code-structure (parser code)
findings (->> rules
(map (fn [rule]
(rules.engine/check code-structure rule)))
(filterv identity))]
(assoc code-structure :rules findings)))