The Project value object: raw version.edn data plus a resolved version, with every default applied. Pure.
Nothing downstream reads version.edn again, so a default lives here exactly once.
The Project value object: raw version.edn data plus a resolved version, with every default applied. Pure. Nothing downstream reads version.edn again, so a default lives here exactly once.
(classify-roots src-dirs files-by-dir)src-dirs split into roots holding sources and roots holding only
resources. files-by-dir maps each dir to the paths beneath it.
Contract: the two results partition src-dirs — every root is classified,
none is classified twice.
`src-dirs` split into roots holding sources and roots holding only resources. `files-by-dir` maps each dir to the paths beneath it. Contract: the two results partition `src-dirs` — every root is classified, none is classified twice.
Metadata keys stripped from every AOT class file unless version.edn overrides :aot/elide-meta. Docstrings, arglists and source coordinates ship as string constants in bytecode.
:column is deliberately absent. Eliding it alongside these keys makes the compiler fail on some dependency graphs, and a column number on its own discloses nothing that :file and :line do not.
Metadata keys stripped from every AOT class file unless version.edn overrides :aot/elide-meta. Docstrings, arglists and source coordinates ship as string constants in bytecode. :column is deliberately absent. Eliding it alongside these keys makes the compiler fail on some dependency graphs, and a column number on its own discloses nothing that :file and :line do not.
Jar entry prefixes whose Clojure sources ship on purpose, so the opacity audit does not report them.
clj-kondo reads hook source at lint time and cannot read a compiled hook, so an AOT jar that exports hooks has to carry them as text.
Jar entry prefixes whose Clojure sources ship on purpose, so the opacity audit does not report them. clj-kondo reads hook source at lint time and cannot read a compiled hook, so an AOT jar that exports hooks has to carry them as text.
(project cfg version)A Project from raw version.edn cfg and the resolved version string.
Throws when :lib is not a qualified symbol: nothing downstream can name an artifact without it, and a build that guesses is worse than one that stops.
Two opacity levers, defaulted independently:
:project/strict-source-entries? a readable source file in the artifact fails the build. Defaults to the publish target's privacy. :project/strict-opacity? any opacity finding, docstring leaks included, fails the build. Defaults off everywhere.
:aot/strict-source-entries and :aot/strict-opacity override them.
A Project from raw version.edn `cfg` and the resolved `version` string.
Throws when :lib is not a qualified symbol: nothing downstream can name an
artifact without it, and a build that guesses is worse than one that stops.
Two opacity levers, defaulted independently:
:project/strict-source-entries? a readable source file in the artifact
fails the build. Defaults to the publish
target's privacy.
:project/strict-opacity? any opacity finding, docstring leaks
included, fails the build. Defaults off
everywhere.
`:aot/strict-source-entries` and `:aot/strict-opacity` override them.(source-file? path)True when path names a compilable source that is not a clj-kondo export.
True when `path` names a compilable source that is not a clj-kondo export.
(source-root? paths)True when paths — the files beneath one directory — contains a source.
True when `paths` — the files beneath one directory — contains a source.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |