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

欢迎!请参阅关于页面以了解更多有关如何使用本网站的信息。

0
tool.namespace
重新标签

问题

tool.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
...