2024年Clojure状态调查!中分享您的想法。

欢迎!请访问关于页面以了解有关此工作方式的一些更多信息。

0
tools.namespace
重新标记

问题

tools.namespace的v1.4.0版本返回了命名空间声明的元数据。新版本不再返回。

复现步骤

给定./src/foo.clj

(ns ^{:doc "foo" :no-doc true} foo)

./test.clj

(require '[clojure.tools.namespace.find :as f]
         '[clojure.java.io :as io])

(binding [*print-meta* true]
  (pr (f/find-ns-decls-in-dir (io/file "src"))))

如果使用v1.4.0,我将获得foo命名空间的:doc:no-doc元数据

❯ clj -Sdeps '{:deps {org.clojure/tools.namespace {:mvn/version "1.4.0"}}}' -M test.clj
((ns ^{:doc "foo", :no-doc true} foo))

但使用v1.4.4时,命名空间元数据包括来自tools.namespace的新生成的:dir:file元数据,但不包括:doc:no-doc元数据

❯ clj -Sdeps '{:deps {org.clojure/tools.namespace {:mvn/version "1.4.4"}}}' -M test.clj
((ns ^{:dir "src", :file "foo.clj"} foo))

这自v1.4.1版本以来一直如此,该版本引入了jar/dir和文件元数据功能

❯ clj -Sdeps '{:deps {org.clojure/tools.namespace {:mvn/version "1.4.1"}}}' -M test.clj
((ns ^{:dir "src", :file "foo.clj"} foo))

附加信息

同样的问题应该会在find-ns-decls-in-jarfile中体现。

使用场景

Cljdoc在尝试加载之前使用tools.namespace来了解命名空间。它会跳过具有:no-doc和/或:skip-wiki元数据的命名空间。

1个答案

0
...