| Crates.io | norm-formatter |
| lib.rs | norm-formatter |
| version | 1.0.4 |
| created_at | 2022-03-09 07:50:41.811447+00 |
| updated_at | 2022-03-09 09:11:46.037484+00 |
| description | Formats (format & lint) code written in c language to fit Norm. |
| homepage | |
| repository | |
| max_upload_size | |
| id | 546812 |
| size | 80,408 |
C言語で書かれたコードをnorminetteに合わせた形で整形するCommand line toolのformatter/linterです
もしcargoがインストールされていない場合は、以下のコマンドを実行してrustupをインストールし、cargoを使えるようにしてください。
$ curl https://sh.rustup.rs -sSf | sh
以下のコマンドでインストールできます
$ cargo install norm-formatter
手元にMacがないため、検証できません。 おそらくLinuxとほぼ同じ方法でインストールできますが、動作確認のできた方は courange.c@gmail.com まで連絡お願いします。
.cまたは.hファイルを指定してください。
$ norm-formatter.exe <path>
VSCodeではRun on Saveと組み合わせることにより保存時に自動的に実行できるようになります。
Windows + VSCodeでの使用例です。
以下の手順を踏むことにより保存時にフォーマットされます。
.vscode/setting.jsonに追加するc_formatter_42/c_formatter_42/data/.clang-formatをワークスペースのルートに置く設定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だった場合、spaceを削除し前後の関数とそろえる |
| SPACE_BEFORE_FUNC | 関数定義の関数の返り値と関数名の間がspaceだった場合、タブを置き換えます |
| BRACE_SHOULD_EOL | 最終行に空行がなかった場合挿入します |
| SPACE_AFTER_KW | break;をbreak ;にする |
before
int x(void)
{
return 1;
}
int y(void)
{
return 2;
}
after
int x(void)
{
return 1;
}
int y(void)
{
return 2;
}
before
int x(void)
{
return 1;
}
after
int x(void)
{
return (1);
}
before
int x(void)
{
return (1);
}
after
int x(void)
{
return (1);
}
before
void x(void)
{
int x;
double y;
}
after
void x(void)
{
int x;
double y;
}
before
int x(void)
{
return (1);
}
after
int x(void)
{
return (1);
}
before
int x(void)
{
return (1);
}
after
int x(void)
{
return (1);
}