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

欢迎!请参阅关于页面以获取有关此功能的更多信息。

+1 投票
tools.namespace

在刷新时支持跟踪非 Clojure 文件。这里的想法是使重新加载工作流程能够很好地适用于像 HugSQL(可能依赖于项目中的非 Clojure 文件)这样的库。

有关更多背景信息,请参见https://github.com/layerware/hugsql/issues/72

6 个答案

0 投票

评论人:stuart.sierra

我已经很久以来就知道这个功能的价值了,但我预计这需要对 tools.namespace 使用的内部数据结构进行重大的破坏性更改。

0 投票
_评论人:rymndhng_

我考虑了一下内部数据结构,我认为可能可以不破坏内部数据结构来跟踪此内容。一个洞见是我们需要通过取 Clojure 源文件及其任何外部依赖项的最大修改时间来确定“已修改”的 Clojure 源文件。

这需要三项更改

1. 定义外部文件依赖关系的方式(也许作为命名空间上的元数据)。示例


(ns my.testing.ns
  {:clojure.tools.namespace.files/filedeps #{"resources/foo1.properties"
                                             "resources/foo2.properties"})


2. 在追踪器中添加一个名为 {{::files/filedeps}} 的新条目,这将把源文件映射到其他文件。

3. 更新 `modified-files` 断言,以接收 `file-deps`,大致如下


(defn- modified? [tracker ^File file]
  (let [filedeps  (get-in tracker [::file/filedeps file])
        time (::time tracker 0)]
    (或 (< 时间 (.lastModified 文件))
        (< 时间 (apply max (map #(.lastModified %) 文件依赖集)))
        (not-every? #(.exists %) 文件依赖集))))

(defn- modified-files [tracker 文件集]
  (filter #(modified? tracker %) 文件集)))
0 投票

评论者:rymndhng

我尝试实现了这个功能,希望得到您的意见。但是文档需要修改以更好地解释其工作原理。

0 投票

评论者:rymndhng

按照Stuart的建议,我创建了一个分支,包含了一些设置说明! https://github.com/rymndhng/tools.namespace

0 投票

评论者:[email protected]

我现在正在尝试这个功能,它似乎满足了我的需求。唯一需要注意的是,在 :reloading 消息中没有显示文件依赖项更改的提示,只显示了命名空间。不清楚您是否希望显示这一点。

0 投票
参考: https://clojure.atlassian.net/browse/TNS-48(由rymndhng报告)
...