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

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

+1 投票
工具命名空间

当进行刷新时支持追踪非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- 修改后的文件 [追踪器 文件])
  (filter #(修改? 追踪器 %) 文件))
0 投票

评论者:rymndhng

我尝试实现了这个功能,很乐意听取您的意见。这些文档确实需要一些修改来说明它的工作原理。

0 投票

评论者:rymndhng

按照Stuart的建议,我已经创建了一个分支,其中包括如何设置的说明![链接](https://github.com/rymndhng/tools.namespace)

0 投票

评论者:[email protected]

我现在正在尝试这个功能,看起来它正好符合我想要的效果。唯一注意到的是,在:reloading消息中没有显示文件依赖项变更的指示,它只显示了命名空间。不确定您是否想要这样显示。

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