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

欢迎!请参阅关于页面,了解这个平台是如何工作的。

0 投票
tools.namespace

当尝试加载文件时,如果命名空间声明与文件名称不匹配,则 tools.namespace 依赖跟踪器可能会进入不一致的状态。

复现步骤

在一个新的 Clojure 项目中,在类路径上创建一个名为 {{foo.clj}} 的文件,包含命名空间声明 {{(ns wrong-ns-declaration-for-foo)}}

然后在 REPL 中

`
user=> (use 'clojure.tools.namespace.repl)
nil
user=> (refresh)
:reloading (wrong-ns-declaration-for-foo)
:error-while-loading wrong-ns-declaration-for-foo

`

编辑文件 {{foo.clj}},使其命名空间声明正确:{{(ns foo)}}

但在 REPL 中,{{refresh}} 仍然不能工作

`
user=> (refresh)
:reloading (foo wrong-ns-declaration-for-foo)
:error-while-loading wrong-ns-declaration-for-foo

`

从 tools.namespace 0.2.5 版本开始,可以通过调用 {{clear}} 作为工作区

user=> (clear) {} user=> (refresh) :reloading (foo) :ok

2 答案

0 投票

评论由:jafingerhut

此类文件会对所有类型的工具造成问题,而不仅仅是 tools.namespace。我不知道所有可能的后果,但这里列出了两个: https://github.com/jonase/eastwood#check-consistency-of-namespace-and-file-names

我在 Eastwood 中添加了警告,每当发现此类文件时,并且在此类问题修正之前不进行任何代码风格检查。

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