1个不稳定版本
0.1.0 | 2019年6月24日 |
---|
#10 在 #indent
用于 off-side
11KB
141 行
indent-stack
Rust库,用于解析类似YAML或Python的偏移语法
语法规范
虽然缩进通常由空格和制表符组成,但此库不对用于缩进的字符指定任何约束。只要字符序列相同(没有等效转换),就认为它们是相同的缩进级别。
此库接受调用者提供的缩进字符串;提取文件缓冲区中的缩进不是此库的责任。调用者应从每一行中提取缩进字符,并迭代地将它们传递给 accept()
函数。
偏移语法由以下规则定义
- 如果第
x + 1
行的缩进比第x
行长,并且以第x
行的缩进开头,则称第x + 1
行为第x
行的 "子"。 - 如果第
x
行和第y
行具有相同的缩进,并且第x+1..=y-1
行是第x
行的子,则称第x
行和第y
行为 "兄弟"。 - 如果第
y
行是第x
行的子,并且第z
行和第y
行是兄弟,则第z
行也是第x
行的子。 - 所有有效行要么是行0(定义为没有缩进的行)的子,要么是兄弟。
这导致以下结果
- 如果一行没有前缀也不是上一行的延续,则该行为无效行。
- 一行所有兄弟和子行的缩进的最长公共前缀是其自己的缩进。
不允许不一致的缩进
默认情况下,不允许不一致的缩进。也就是说,所有缩进必须是第一个缩进的重复。
例如,如果第一个缩进是2个空格,则所有缩进必须是2个空格;2个空格缩进的行后面跟着4个空格缩进的行是语法错误。