Clojure: clj-kondo datalog linting

clj-kondo has had really nice datalog syntax checking for a while. However, on some projects you might have wrapped the underlying datalog query function q or be using a datalog implementation clj-kondo doesn't know about. Thankfully, it's trivial to add linting support to any implementation of the query function q as long as it conforms to the Datalog dialect of Datomic.

Example of a wrapped q implementation

(ns example.db
  (:require [datalevin.core :as d]))
(defn q [query & inputs]
  (apply d/q query inputs))

Update linter configuration

At the root of your project you should have a config.edn file located in the .clj-kondo directory.

├── .clj-kondo
│   └── config.edn

Add :lint-as {example.db/q datascript.core/q} to the config.edn file.

{:lint-as {example.db/q datascript.core/q}}

This will tell clj-kondo to lint our q function the same way it would lint datascript.core/q.

That's it. You should now have nice lint messages for datalog queries.