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

欢迎!请参阅关于页面以获取更多关于这是如何工作的信息。

0
tools.reader

问题
我是rewrite-clj的维护者。
Rewrite-clj 极大地使用 clojure tools.reader 来解析 Clojure 源代码。
一名 rewrite-clj 用户在 Windows 上工作,最近提出一个问题,想知道为什么他的Windows \r\n换行被转换为 \n

我基本上耸了耸肩,并有效回答:“因为 rewrite-clj 使用 tools.reader”。因为如此简短,我感到有些内疚,所以在这个 Ask Clojure 上提出了这个问题。

代表那个 rewrite-clj 用户,我问道

  1. 《tools.reader》的意图是否是将所有换行都转换为 \n?(我认为是的)
  2. 应该这样吗?

大优点是新行被归一化,但这也意味着信息的损失。

相关
之前我在 Clojure 工具读取器上提出了一个问题,如何处理 Windows 换行

1 答案

0

将“标准化所有换行”意味着什么?我不明白这个问题在问什么。

by
感谢您的回复!我正在使用Clojure工具读取源代码中看到的语言。

我的理解是,它使用“规范化换行”来描述

- `\r\n` 被转换成 `\n`。
- (也可能有点奇怪,它将 `\r\f` 转换成 `\n`)。

这意味着,从工具读取器解析结果中不可用原始特定于操作系统的换行。
by
我认为我在询问的是——tools.reader(以及 Clojure LispReader)基本上是关于从文本流中读取形式。空白主要是表格的结果中不存在的(因为空白被丢弃),可能除了字符串字面量。
by
对了,是的,这是一个好点子!感谢您在这方面的耐心。

Rewrite-clj比大多数用户更深入地挖掘tools.reader。

它使用clojure.tools.reader.reader-types命名空间中的fns,如read-char、unread和peekchar。它采用这种方法返回较高级别读取器fns不返回的内容,如空白、注释和#_ :skipped-stuff。

因此,当rewrite-clj获取空白时,换行总是\n(即使它们最初是\r\n)。
...