评论者:stuart.sierra
感谢您为这些补丁进行工作。我进行了一些额外的测试,并发现了一些更多的复杂性。
推测文件扩展名会导致不可预测的结果,因为你不知道哪一个文件会被移动。例如,由于在ClojureScript中有{{:require-macros}},同一个命名空间同时存在{{.clj}}和{{.cljs}}版本并不罕见。
不幸的是,即使指定了一个"平台"参数,也不能完全解决问题,因为你可以同时拥有{{.cljc}}文件、{{.clj}}和{{.cljs}}文件。这种情况可能不多见,但在《链接:(http://dev.clojure.org/display/design/Reader+Conditionals) reader条件的设计》中明文允许:例如,一个库可能有一个平台无关的CLJC文件,并用平台特定的文件覆盖它。在这种情况下,即使指定了"平台"参数,你也无法控制哪个文件会被移动。
因此,我认为操作如"移动命名空间"的唯一合理方式是移动定义该命名空间的所有文件,保留它们的文件扩展名。我认为这符合用户的角度。
因此,{{move-ns}}应接受新旧符号,找到所有匹配的文件,包括任何扩展名,在保留扩展名的同时移动或重命名它们,然后对所有的{{.clj}}、{{.cljs}}和{{.cljc}}文件应用文本转换。
如果我们正在寻找文件,我们也可以消除指定源路径的需要,这也就与TNS-39有关。