#formatter #norm #42 #normintte

app norm-formatter

将 C 语言编写的代码格式化为符合 Norm 规范

2 个稳定版本

1.0.4 2022年3月9日

#1089 in 命令行工具

MIT 许可证

61KB
1.5K SLoC

Rust 1.5K SLoC // 0.1% comments C 158 SLoC

norm formatter

英文版

概要

将 C 语言编写的代码格式化为符合 norminette 规范的命令行工具 formatter/linter。

安装

Linux

如果未安装 cargo,请运行以下命令安装 rustup 并使 cargo 可用。

$ curl https://sh.rustup.rs -sSf | sh

可以使用以下命令安装

$ cargo install norm-formatter

Mac

由于没有 Mac,无法进行验证。但可能和 Linux 的安装方法类似,如果有确认过的方法,请通过 [email protected] 联系。

用法

请指定要格式化的 .c.h 文件。

$ norm-formatter.exe <path>

在 VSCode 中,可以与 "Run on Save" 结合使用,以便在保存时自动执行。

使用示例

以下是在 Windows + VSCode 中使用示例。

按照以下步骤,保存时会自动进行格式化。

  1. 将下载的执行文件 (norm-formatter) 添加到路径
  2. 将以下设置 1 添加到 .vscode/setting.json
  3. 添加 VSCode 扩展 Clang-Format/xaver
  4. c_formatter_42 的设置文件 c_formatter_42/c_formatter_42/data/.clang-format 放到工作空间的根目录下
  5. 在 VSCode 上的设置中启用 formatOnSave

设置 1

  "emeraldwalk.runonsave": {
    "commands": [
      {
        "match": ".c",
        "isAsync": true,
        "cmd": "norm-formatter ${file}"
      },
    ]
  }

支持的错误消息

并非所有错误消息都有支持,开发是在假设将 dawnbeen 的 c_formatter_42 中的 clang-format 设置文件 (c_formatter_42/c_formatter_42/data/.clang-format) 与 clang-format 一起使用的前提下进行的。

计划未来制作一个包含 clang-format 的一体化格式化工具。

错误消息 解决内容
NEWLINE_PROCESS_FUNC 在函数与函数之间如果没有空行,则添加空行
RETURN_PARENTHESIS 如果返回值没有被括号包围,则包围括号
NO_ARGS_VOID 在函数定义时如果没有参数,则添加 void
SPACE_REPLACE_TAB 如果变量声明的变量类型与变量名之间有空格,则删除空格并使前后与函数对齐
SPACE_BEFORE_FUNC 如果函数定义中函数的返回值与函数名之间有空格,则替换为制表符
BRACE_SHOULD_EOL 如果最后一行没有空行,则添加空行
SPACE_AFTER_KW break; 转换为 break ;

NEWLINE_PROCESS_FUNC

before

int	x(void)
{
	return 1;
}
int	y(void)
{
	return 2;
}

after

int	x(void)
{
	return 1;
}

int	y(void)
{
	return 2;
}

RETURN_PARENTHESIS

before

int	x(void)
{
	return 1;
}

after

int	x(void)
{
	return (1);
}

NO_ARGS_VOID

before

int	x(void)
{
	return (1);
}

after

int	x(void)
{
	return (1);
}

SPACE_REPLACE_TAB

before

void	x(void)
{
	int x;
	double y;
}

after

void	x(void)
{
	int		x;
	double	y;
}

SPACE_BEFORE_FUNC

before

int x(void)
{
	return (1);
}

after

int	x(void)
{
	return (1);
}

BRACE_SHOULD_EOL

before

int	x(void)
{
	return (1);
}

after

int	x(void)
{
	return (1);
}

许可证

依赖

~3MB
~51K SLoC