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中添加了警告,每次找到此类文件时,它都会停止对任何文件进行linting检查,直到更正这些事项。

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