保持分数是一种语言不可能的格式化器,该格式在较大文件中的两个标记之间排序。
包围行以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
预分类选项告诉您保留文件中的内容构成需要对的单个逻辑行。
默认情况下,保留排序将把增加的凹痕解释为线路的延续,并且与上面的线相结合。如果您不希望这种行为,可以通过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
是使用一些Gotchas处理更复杂的代码块的选择。它查看通常预期在单个逻辑行的代码线(例如,括号是平衡的)字符。因此,被认为是一组的最小线,具有所有典型符号平衡(括号,括号,括号和引号)。这允许对数据进行分类,例如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 |
嵌入在排序块中的评论是与他们的继任者坚持的。评论行必须以与保持分数指令本身相同的评论标记开始( #
以下情况)。保留将识别//
, /*
, #
, --
,, ;
,and <!--
作为评论标记,对于任何其他类型的评论,请使用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
指示在排序区域之前要跳过多少行。
例如,这可以与Markdown表一起使用,以防止标题和虚线进行分类之后:
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 --> |
排序选项告诉您要保持分类的方式应如何分类保存块中的逻辑线。
默认情况下,保留式分级对病例敏感。这意味着大写字母将在小写字母之前订购。可以使用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 |
默认情况下,保留级别使用词汇排序。根据您的数据,这不是您想要的。通过指定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=…
获取以逗号分隔的前缀列表,这些列表被忽略了。如果该行以任何或没有任何空格开头,然后是列出的前缀之一,则将前缀视为用于排序目的的空字符串。
// 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
可以通过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 |
如果您发现自己想在其中一个选项的值(空格,逗号,左边)中包含特殊字符,则可以使用YAML流序列进行操作。
<!-- keep-sorted start prefix_order=["* ", "* ["] -->
* bar
* foo
* [ baz ] ( path/to/baz )
<!-- keep-sorted end -->
这适用于接受多个值的任何选项。