评论由:stuart.sierra 提供
感谢您对这些补丁的工作。我进行了一些更多的测试,并发现了更多的问题。
猜测文件扩展名会导致不可预测的结果,因为您不知道哪个文件会被移动。例如,对于在ClojureScript中使用{{:require-macros}}的情况,同一个命名空间可能会同时存在{{.clj}}和{{.cljs}}版本,这是很常见的。
不幸的是,即使指定“平台”参数也不能完全解决问题,因为在同一时间您可以同时有{{.cljc}}文件、{{.clj}}和{{.cljs}}文件。这可能不常见,但在(a链接:http://dev.clojure.org/display/design/Reader+Conditionals)中明确指出,这是读者条件设计的一部分)。例如,一个库可能有一个平台无关的{{.cljc}}文件,并用特定平台的文件覆盖它。在这种情况下,即使指定了“平台”参数,您仍然无法控制哪个文件被移动。
因此,现在我认为像“移动命名空间”这样的操作的唯一合理方式是移动定义该命名空间的所有文件,保留它们的文件扩展名。这在用户视角上似乎也是人们想要的。
因此,{{move-ns}}应该接受新旧符号,找出所有匹配的文件(任何扩展名),在保留扩展名的情况下移动/重命名它们,然后对所有{{.clj}}、{{.cljs}}和{{.cljc}}文件应用文本转换。
如果我们正在搜索文件,那么我们可以消除指定源路径的必要,这也与TNS-39有关。