Keep-Sortedは、大きなファイル内の2つのマーカー間の線を並べ替える言語に依存しないフォーマッタです。
コメントでkeep-sorted start
とkeep-sorted end
で並べ替えを続けるために行を囲みます。たとえば、Java:
前に @ Component (
modules = {
UtilsModule . class ,
GetRequestModule . class ,
PostRequestModule . class ,
AuthModule . class ,
MonitoringModule . class ,
LoggingModule . class ,
})
interface FrontendComponent {
FrontendRequestHandler requestHandler ();
} | 後@Component(
modules = {
+ // keep-sorted start
AuthModule.class,
GetRequestModule.class,
LoggingModule.class,
MonitoringModule.class,
PostRequestModule.class,
UtilsModule.class,
+ // keep-sorted end
})
interface FrontendComponent {
FrontendRequestHandler requestHandler();
} |
キープソートブロックをネストすることもできます:
foo = [
'y' ,
'x' ,
'z' ,
]
bar = [
'1' ,
'3' ,
'2' ,
] | + # keep-sorted start block=yes
bar = [
+ # keep-sorted start
'1',
'2',
'3',
+ # keep-sorted end
]
foo = [
+ # keep-sorted start
'x',
'y',
'z',
+ # keep-sorted end
]
+ # keep-sorted end |
注記
キープソートは現在、少なくとも1.23に進む必要があります。
キープソートをインストールします:
$ go install github.com/google/[email protected]
キープソートを実行:
$ keep-sorted [file1] [file2] ...
ファイル-
場合、ツールはstdinから読み取り、stdoutに書き込みます。
このリポジトリを事前コミットに追加することにより、キープソートを自動的に実行できます。
- repo : https://github.com/google/keep-sorted
rev : v0.5.1
hooks :
- id : keep-sorted
事前にソートオプションは、ファイル内のどのコンテンツがソートする必要がある単一の論理行を構成するかをKeepSortedに示します。
デフォルトでは、Keep-Sortedは、増加するインデントを線の継続として解釈し、上記の線でグループインデントラインをグループインデントします。この動作が必要ない場合、 group=no
。
// keep-sorted start
private final Bar bar ;
private final Baz baz =
new Baz ()
private final Foo foo ;
// keep-sorted end | + // keep-sorted start group=no
new Baz()
private final Bar bar;
private final Baz baz =
private final Foo foo;
// keep-sorted end |
あるいは、 block=yes
いくつかのゴッチャを使用して、より複雑なコードブロックを処理するオプトイン方法です。通常、単一の論理ラインのコードで閉じられると予想される文字を調べます(たとえば、ブレースはバランスが取れています)。したがって、グループと見なされるのは、すべての典型的なシンボルのバランスが取れている最小の線のセット(括弧、ブレース、括弧、引用符)です。これにより、GO構造体やJSONオブジェクトなどのデータを並べ替えることができます。
widgets := [] widget {
{
Name : "def" ,
},
{
Name : "abc" ,
},
} | widgets := []widget{
+ // keep-sorted start block=yes
{
Name: "abc",
},
{
Name: "def",
},
+ // keep-sorted end
} |
警告:キープソートは言語が認識していないため、グループはまだ基本的な文字列としてソートされています。たとえば、「{ n」が "{name:"の前に登場するので、ラインブレークとホワイトスペースの使用を混ぜると、予期しない並べ替えが生じる可能性があります。
注:アングルブラケット(
<
)は、不均衡な形式で数学的式に使用されているため>
ブロックモードではサポートされていません。
ラインをグループ化する別の方法は、 group_prefixes
引数を使用することです。これには、接頭辞のコンマ分離されたリストが必要です。これらのプレフィックスのいずれかで始まるラインは、継続ラインとして扱われます。
| + // keep-sorted start group_prefixes=and,with
hamburger
with lettuce
and tomatoes
peanut butter
and jelly
spaghetti
with meatballs
+ // keep-sorted end |
ソートされたブロックに埋め込まれたコメントは、後継者に固執するように作られています。コメント行は、キープソート命令自体と同じコメントマーカーで開始する必要があります(例:以下のケースの#
)。キープソートは//
、 /*
、 #
、 --
、を認識します;
、および<!--
コメントマーカーとして、他の種類のコメントについては、 sticky_prefixes
使用します。
この特別な取り扱いは、パラメーターsticky_comments=no
:を指定することで無効にできます。
# keep-sorted start
# alice
username: al 1
# bob
username: bo 2
# charlie
username: ch 3
# keep-sorted end | + # keep-sorted start sticky_comments=no
# alice
# bob
# charlie
username: al1
username: bo2
username: ch3
# keep-sorted end |
後継者に固執するために、より多くのプレフィックスを作成できます。引数sticky_prefixes
すべてが粘着性として扱われるプレフィックスのコンマ分離されたリストを採用しています。これらのプレフィックスにはスペース文字を含めることはできません。
+ // keep-sorted start sticky_prefixes=/*,@Annotation
Baz baz;
/* Foo */
@Annotation
Foo foo;
// keep-sorted end
場合によっては、ソートされた領域の直前にライン上にスタート指令を持つことができない場合があります。この場合、 skip_lines
使用して、ソートされた領域の前にスキップする線の数を示すことができます。
たとえば、これはマークダウンテーブルで使用できます。これは、ヘッダーとヘッダーがソートされるのを防ぐために使用できます。
Name | Value
------- | -----
Charlie | Baz
Delta | Qux
Bravo | Bar
Alpha | Foo
| + <!-- keep-sorted start skip_lines=2 -->
Name | Value
------- | -----
Alpha | Foo
Bravo | Bar
Charlie | Baz
Delta | Qux
+ <!-- keep-sorted end --> |
ソートオプションは、キープソルツブロックの論理ラインをソートする方法をキープソルティングしていることを示します。
デフォルトでは、Keep-Sortedはケースに敏感です。これは、大文字が小文字の前に注文されることを意味します。この動作は、 case
フラグを使用してケースインスセンシックに並べ替えるように変更できます。
# keep-sorted start
Bravo
Delta
Foxtrot
alpha
charlie
echo
# keep-sorted end | + # keep-sorted start case=no
alpha
Bravo
charlie
Delta
echo
Foxtrot
# keep-sorted end |
デフォルトでは、Keep-SORTEDは語彙ソートを使用します。データに応じて、これはあなたが望むものではありません。 numeric=yes
を指定することにより、行に埋め込まれた数字のシーケンスはその数値によって解釈され、それに応じてソートされます。
progress = (
# keep-sorted start
'PROGRESS_100_PERCENT' ,
'PROGRESS_10_PERCENT' ,
'PROGRESS_1_PERCENT' ,
'PROGRESS_50_PERCENT' ,
'PROGRESS_5_PERCENT' ,
# keep-sorted end
) | progress = (
+ # keep-sorted start numeric=yes
'PROGRESS_1_PERCENT',
'PROGRESS_5_PERCENT',
'PROGRESS_10_PERCENT',
'PROGRESS_50_PERCENT',
'PROGRESS_100_PERCENT',
# keep-sorted end
) |
一部の要素のカスタム注文を指定すると便利な場合があります。引数prefix_order=…
は、並べ替える行と一致するプレフィックスのコンマ分離されたリストを取得します。行が指定された値のいずれかで始まる場合、対応する位置に配置されます。空のプレフィックスが指定されている場合、他のプレフィックスで覆われていない行が一致します。
// keep-sorted start
DO_SOMETHING_WITH_BAR ,
DO_SOMETHING_WITH_FOO ,
FINAL_BAR ,
FINAL_FOO ,
INIT_BAR ,
INIT_FOO
// keep-sorted end | // Keep this list sorted with
// - INIT_* first
// - FINAL_* last
// - Everything else in between
+ // keep-sorted start prefix_order=INIT_,,FINAL_
INIT_BAR,
INIT_FOO,
DO_SOMETHING_WITH_BAR,
DO_SOMETHING_WITH_FOO,
FINAL_BAR,
FINAL_FOO
// keep-sorted end |
これは、数値ソートと組み合わせることもできます。
droid_components = [
+ # keep-sorted start numeric=yes prefix_order=R2,C3
R2D2_BOLTS_5_MM,
R2D2_BOLTS_10_MM,
R2D2_PROJECTOR,
C3PO_ARM_L,
C3PO_ARM_R,
C3PO_HEAD,
R4_MOTIVATOR,
# keep-sorted end
]
一部のユースケースでは、アイテムを注文しようとするときに最もよく無視されるプレフィックス文字列があります。引数ignore_prefixes=…
は、ソート目的で無視されているプレフィックスのコンマ分離されたリストを取得します。行が任意またはまったくない、またはリストされているプレフィックスの1つが続く場合、プレフィックスはソート目的のために空の文字列として扱われます。
// keep-sorted start
fs . setBoolFlag ( "paws_with_cute_toebeans" , true )
fs . setBoolFlag ( "whiskered_adorable_dog" , true )
fs . setIntFlag ( "pretty_whiskered_kitten" , 6 )
// keep-sorted end | + // keep-sorted start ignore_prefixes=fs.setBoolFlag,fs.setIntFlag
fs.setBoolFlag("paws_with_cute_toebeans", true)
fs.setIntFlag("pretty_whiskered_kitten", 6)
fs.setBoolFlag("whiskered_adorable_dog", true)
// keep-sorted end |
これは、数値ソートと組み合わせることもできます。
droid_components = [
+ # keep-sorted start numeric=yes ignore_prefixes=R2D2,C3PO,R4
C3PO_ARM_L,
C3PO_ARM_R,
R2D2_BOLTS_5_MM,
R2D2_BOLTS_10_MM,
C3PO_HEAD,
R4_MOTIVATOR,
R2D2_PROJECTOR,
# keep-sorted end
]
ソーティング後のオプションは、結果のコードをより読みやすくする追加の便利な機能です。
デフォルトでは、キープソートはソートされたセクションから複製を削除します。それ以外の場合は同一の行に異なるコメントが添付されている場合、エントリは保存されます。
# keep-sorted start
rotation: bar
# Add bar twice!
rotation: bar
rotation: baz
rotation: foo
# keep-sorted end
Switch remove_duplicates
で複製処理を変更できます。
+ # keep-sorted start remove_duplicates=no
rotation: bar
rotation: bar
rotation: baz
rotation: baz
rotation: baz
rotation: foo
# keep-sorted end
また、 newline_separated=yes
オプションもあります。これは、ソートされたアイテムの間に空白線を追加するために使用できます。
| + # keep-sorted start newline_separated=yes
Apples
Bananas
Oranges
Pineapples
# keep-sorted end |
オプションの1つの値(スペース、コンマ、左括弧)に特殊文字を含めたいと思う場合は、YAMLフローシーケンスでそれを行うことができます。
<!-- keep-sorted start prefix_order=["* ", "* ["] -->
* bar
* foo
* [ baz ] ( path/to/baz )
<!-- keep-sorted end -->
これは、複数の値を受け入れるオプションで機能します。