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

欢迎!请参阅 关于 页面了解更多有关该网站如何工作的信息。

+1
tools(namespace)

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

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

6 个答案

0

评论者:stuart.sierra

我已经意识到这个功能的价值很长时间了,但我认为它需要对 tools(namespace) 使用的内部数据结构做出重大、破坏性的更改。

0
_评论者:rymndhng_

我考虑了一下内部数据结构,我认为可以在不破坏内部数据结构的情况下跟踪这些文件。洞察力在于,我们需要通过取 clojure 源文件的最后修改时间及其任何外部依赖的最大修改时间来确定 `modified` 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)]
    (或(< 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`消息中没有任何关于filedep更改的指示,它只显示namespaces。不确定你是否希望这样显示。

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