🙆

次世代のFormatter「dprint」を試してみた

2023/02/12に公開

はじめに

修正や追加等はコメントまたはGitHubで編集リクエストをお待ちしております。

dprintとは

GitHubで公開されているRust製のFormatterです。
対応言語以下のリストです。

  • TypeScript
  • JavaScript
  • JSON
  • Markdown
  • TOML
  • Dockerfile
  • C#(Roslynをラップ)

https://dprint.dev/

使い方

公式サイトに従ってインストールして、dprint init で設定ファイルを作成します。

https://dprint.dev/install/

dprint init

何のプラグインを使うか聞かれるので、スペースで選択します。
対応する設定が書かれた dprint.json が作成されます。

TypeScriptの例

下記プレイグラウンドから設定をコピーして、dprint.json に貼り付けます。

https://dprint.dev/playground/#code/Q/language/typescript

{
  "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の拡張機能を使うと、保存時に自動でフォーマットしてくれます。

https://marketplace.visualstudio.com/items?itemName=dprint.dprint

{
  "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 の活躍が楽しみです。

GitHubで編集を提案

Discussion