评论者:stuart.sierra
感谢你们对补丁的工作。我进行了更多测试,并发现了更多复杂问题。
猜测文件扩展名会导致不可预测的结果,因为你不知道哪个文件会被移动。例如,在ClojureScript中使用{{:require-macros}}时,同一个命名空间既可能有{{.clj}}版本也可能有{{.cljs}}版本,这并不罕见。
不幸的是,即使指定“平台”参数也不能完全解决问题,因为你可以同时拥有{{.cljc}}文件、{{.clj}}和{{.cljs}}文件。这种情况可能不太常见,但在设计读取条件(http://dev.clojure.org/display/design/Reader Conditionals)的文本中明确允许:设计读取条件)。例如,一个库可能有一个平台无关的{{.cljc}}文件,并用特定平台的文件覆盖它。在这种情况下,即使你指定了“平台”参数,仍然无法控制哪个文件被移动。
因此,我认为将命名空间移动操作如"移动命名空间"弄得有意义的方法是移动定义该命名空间的所有文件,保留它们的文件扩展名。这看起来似乎也是用户期望的。
因此,{{move-ns}}应接受新旧符号,查找所有匹配的文件,无论是哪种扩展名,都移动/重命名它们,同时保留扩展名,然后对所有{{.clj}}、{{.cljs}}和{{.cljc}}文件应用文本变换。
如果我们正在寻找文件,我们可以消除指定源路径的需要,因此这也与TNS-39有关。