🙆
次世代のFormatter「dprint」を試してみた
はじめに
修正や追加等はコメントまたはGitHubで編集リクエストをお待ちしております。
dprintとは
GitHubで公開されているRust製のFormatterです。
対応言語以下のリストです。
- TypeScript
- JavaScript
- JSON
- Markdown
- TOML
- Dockerfile
- C#(Roslynをラップ)
使い方
公式サイトに従ってインストールして、dprint init
で設定ファイルを作成します。
dprint init
何のプラグインを使うか聞かれるので、スペースで選択します。
対応する設定が書かれた dprint.json
が作成されます。
TypeScriptの例
下記プレイグラウンドから設定をコピーして、dprint.json
に貼り付けます。
{
"typescript": {
"lineWidth": 80,
"indentWidth": 4,
"useTabs": true,
"semiColons": "prefer",
"quoteStyle": "alwaysDouble",
"quoteProps": "preserve",
"newLineKind": "lf",
"useBraces": "whenNotSingleLine",
"bracePosition": "sameLineUnlessHanging",
"singleBodyPosition": "maintain",
"nextControlFlowPosition": "sameLine",
"trailingCommas": "onlyMultiLine",
"operatorPosition": "nextLine",
"preferHanging": false,
"preferSingleLine": false,
"arrowFunction.useParentheses": "maintain",
"binaryExpression.linePerExpression": false,
"jsx.bracketPosition": "nextLine",
"jsx.forceNewLinesSurroundingContent": false,
"jsx.quoteStyle": "preferDouble",
"jsx.multiLineParens": "prefer",
"memberExpression.linePerExpression": false,
"typeLiteral.separatorKind": "semiColon",
"enumDeclaration.memberSpacing": "maintain",
"spaceAround": false,
"spaceSurroundingProperties": true,
"objectExpression.spaceSurroundingProperties": true,
"objectPattern.spaceSurroundingProperties": true,
"typeLiteral.spaceSurroundingProperties": true,
"binaryExpression.spaceSurroundingBitwiseAndArithmeticOperator": true,
"commentLine.forceSpaceAfterSlashes": true,
"constructor.spaceBeforeParentheses": false,
"constructorType.spaceAfterNewKeyword": false,
"constructSignature.spaceAfterNewKeyword": false,
"doWhileStatement.spaceAfterWhileKeyword": true,
"exportDeclaration.spaceSurroundingNamedExports": true,
"forInStatement.spaceAfterForKeyword": true,
"forOfStatement.spaceAfterForKeyword": true,
"forStatement.spaceAfterForKeyword": true,
"forStatement.spaceAfterSemiColons": true,
"functionDeclaration.spaceBeforeParentheses": false,
"functionExpression.spaceBeforeParentheses": false,
"functionExpression.spaceAfterFunctionKeyword": false,
"getAccessor.spaceBeforeParentheses": false,
"ifStatement.spaceAfterIfKeyword": true,
"importDeclaration.spaceSurroundingNamedImports": true,
"jsxSelfClosingElement.spaceBeforeSlash": true,
"jsxExpressionContainer.spaceSurroundingExpression": false,
"method.spaceBeforeParentheses": false,
"setAccessor.spaceBeforeParentheses": false,
"taggedTemplate.spaceBeforeLiteral": false,
"typeAnnotation.spaceBeforeColon": false,
"typeAssertion.spaceBeforeExpression": true,
"whileStatement.spaceAfterWhileKeyword": true,
"ignoreNodeCommentText": "dprint-ignore",
"ignoreFileCommentText": "dprint-ignore-file"
},
"json": {},
"markdown": {},
"toml": {},
"includes": [
"**/*.{ts,tsx,js,jsx,cjs,mjs,json,md,toml}"
],
"excludes": [
"**/node_modules",
"**/*-lock.json"
],
"plugins": [
"https://plugins.dprint.dev/typescript-0.83.0.wasm",
"https://plugins.dprint.dev/json-0.17.0.wasm",
"https://plugins.dprint.dev/markdown-0.15.2.wasm",
"https://plugins.dprint.dev/toml-0.5.4.wasm"
]
}
dprint fmt
でフォーマットできますが、VSCodeの拡張機能を使うと、保存時に自動でフォーマットしてくれます。
{
"editor.defaultFormatter": "dprint.dprint",
"editor.formatOnSave": true,
// or specify per language, for example
"[javascript]": {
"editor.defaultFormatter": "dprint.dprint",
"editor.formatOnSave": true
}
}
Rustを使っているので、めちゃくちゃ速いです。
まとめ
TypeScriptのフォーマッタは、Romeを使っていたのですが、コピペしたときに謎のエラーが出てしまうので、dprintに変更しました。
Prettier一強時代が終わったのかなと思います。
これからの dprint
の活躍が楽しみです。
Discussion