#python #indent #braces #syntax #write

off-side

使用偏移侧语法(使用缩进来代替花括号,类似于Python)来编写Rust!

2个版本

0.1.1 2019年6月26日
0.1.0 2019年6月26日

#1975进程宏

Apache-2.0

13KB
182

off-side.rs

构建 状态
Travis-CI

使用偏移侧语法(使用缩进来代替花括号,类似于Python)来编写Rust!

免责声明:实现语言的另一种标准显然不是一个好主意。该项目只是一个用于娱乐的证明概念。

偏移侧规则

偏移侧规则 指的是计算机语言使用缩进而不是使用 {} 花括号来区分代码层次。著名的例子包括 YAML(一种数据序列化语言)、Python(一种编程语言)和 PugJS(一种JavaScript标记预处理器语言)。

示例

#[macro_use]
extern crate off_side;

use std::io::{Error, ErrorKind};

off_side! {

fn try_int(i: i32) -> Result<i32, Error>:
    match i:
        0 => Ok(1),
        1 => Err(Error::new(ErrorKind::NotFound, "Hello")),
        _ => unreachable!(),

fn main():
    for i in 0..2:
        let result = try_int(i);
        let num = match result:;
            Ok(i) => i,
            Err(err) => err.raw_os_error().unwrap_or_else(|| 3),
        println!("num: {}", num);

}

语法规范

  • 缩进规则遵循 indent-stack crate 中的规范。
  • 由于 proc_macro 限制,所有缩进字符都被视为相同。换句话说,如果你混合了制表符和空格,制表符将被视为一个空格。
  • 不要在行首放置块注释 /* */。它们 可能 也会被视为空格。
  • 在应该用花括号包裹的缩进块的父行上,在父行末尾添加额外的 :
  • 如果花括号的缩进块应该跟一个分号(例如 let 语句与 matchif/else),在父行末尾添加 :;

最终免责声明

这个库是一个 证明概念,并且 仅用于娱乐。不推荐在生产环境中或公开发布的Crates中使用。

依赖项

~2MB
~46K SLoC