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)]
    (or (< time (.lastModified file))
        (< time (apply max (map #(.lastModified %) filedeps)))
        (not-every? #(.exists %) filedeps))))

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

评论者:rymndhng

我尝试实现这个功能,希望能得到你的意见。但是文档确实需要一点修改来解释它的工作原理。

0 投票
by

评论者:rymndhng

遵循Stuart的建议,我创建了一个分支,包含一些如何配置的说明! https://github.com/rymndhng/tools.namespace

0 投票
by

评论者:[email protected]

我现在正在尝试这个,看起来它做了我想要的一切。但是,我发现:reloading消息中没有显示文件依赖的变化,它只显示了命名空间。不清楚你希望如何显示这一点。

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