メインコンテンツへスキップ

Prettier 1.2

· 1分で読める
非公式ベータ版翻訳

このページは PageTurner AI で翻訳されました(ベータ版)。プロジェクト公式の承認はありません。 エラーを見つけましたか? 問題を報告 →

1.0リリースはPrettierの終着点ではなく、JavaScriptコードフォーマッターとしての完成度を高めるため、引き続き細かなフォーマット問題に対応していきます。今回のようなマイナーバージョンアップでは、些細な変更やエッジケースの修正が中心で、大きな論争を呼ぶ変更は含まれないことをご理解ください。

フォーマット

prettier-ignore使用時にサブツリーを出力しない (#1286)

===グループのトラバース処理を中断 (#1294)

1.0で導入されたリグレッションにより、深くネストされた関数で指数関数的な処理が発生し、現実的な時間で完了しなくなる問題がありました。完全な即時解決ではありませんが、妥当な時間内に処理が完了する緩和策を導入しました。

someObject.someFunction().then(function () {
return someObject.someFunction().then(function () {
return someObject.someFunction().then(function () {
return someObject.someFunction().then(function () {
return someObject.someFunction().then(function () {
});
});
});
});
});

if条件式内で改行が発生した場合に全体を改行 (#1344)

従来、80カラムに収まらないif条件式の内部で改行が発生すると、条件式全体が単一行で出力される不自然な状態になるケースがありました。今後はif文自体が改行される場合、条件式も改行されるよう改善されました。

// Before
if (
this.hasPlugin("dynamicImports") && this.lookahead().type === tt.parenLeft
) {

// After
if (
this.hasPlugin("dynamicImports") &&
this.lookahead().type === tt.parenLeft
) {

最終引数展開時の引数改行を回避 (#1305)

最終引数展開と複雑な引数の組み合わせに関する長年の問題が修正され、異常な出力状態は解消されました。

// Before
manageChildren: jest.fn(function manageChildren(parentTag, moveFromIndices = [
], moveToIndices = [], addChildReactTags = [], addAtIndices = [
], removeAtIndices = []) {

// After
manageChildren: jest.fn(function manageChildren(
parentTag,
moveFromIndices = [],
moveToIndices = [],
addChildReactTags = [],
addAtIndices = [],
removeAtIndices = []
) {

アロー関数本体の代入式に括弧を追加 (#1326)

コードの理解を助けるため、括弧追加のタイミングを微調整しています。今回はアロー関数内の代入式への対応です。括弧が必要と思われるケースでPrettierが追加しない場合は、issue登録をお願いします。

// Before
() => foo = bar + 2;

// After
() => (foo = bar + 2);

正規表現の出力改善 (#1341)

FlowとBabylonでエスケープシーケンスとフラグの出力形式に不一致がありました。修正後はエスケープシーケンスが元ソースと同一になり、フラグはソートされるようになりました。

// Before
/[\/]\/\u0aBc/mgi;

// After
/[/]\/\u0aBc/gim;

Flowパーサー使用時のコメント付きアロー関数括弧を修正 (#1339)

Flowパーサー使用時、単一引数の関数にコメントが存在する場合に括弧が追加されない問題を修正しました。

// Before
call(/*object*/ row => {});

// After
call((/*object*/ row) => {});

引数リスト右側の括弧インライン化を停止 (#1345)

引数リスト内部の右側にコメントが不正に配置される問題を修正しました。

// Before
f(/* ... */) {}

// After
f() /* ... */ {}

テンプレートリテラル内コメントの修正 (#1296)

テンプレートリテラル内のコメントが特定条件でクラッシュしたり、誤った${}内に挿入される問題を解消しました :)

// Before
stdin: TypeError: Cannot read property 'comments' of undefined

// After
`
(?:${escapeChar}[\\S\\s]|(?:(?!${// Using `XRegExp.union` safely rewrites backreferences in `left` and `right`.
// Intentionally not passing `basicFlags` to `XRegExp.union` since any syntax
// transformation resulting from those flags was already applied to `left` and
// `right` when they were passed through the XRegExp constructor above.
XRegExp.union([left, right], '', {conjunction: 'or'}).source})[^${escapeChar}])+)+
`

Windows環境でのisPreviousLineEmptyを修正 (#1263)

Windows環境でswitch caseの空行が適切に保持されない問題を修正しました。

// Before
switch (a) {
case x:

case y:
call();
}

// After
switch (a) {
case x:
case y:
call();
}

CLI

globパターンでないファイル名のnode-glob処理をスキップ (#1307)

prettier file.jsを実行した際、file.jsが存在しない場合、暗黙の無視ではなく例外がスローされるよう変更されました。

CLI変更の同期書き出しを実装 (#1292)

プロセスの停止に Ctrl+C を使用した場合に発生する競合状態の問題があり、ファイルが削除される可能性がありました。今回の変更でファイル書き込みを同期的に行うようになったため、この問題は解消されました。