Keep-Sorted é um formatador agnóstico da linguagem que classifica as linhas entre dois marcadores em um arquivo maior.
Cerruine as linhas para se manter classificadas com keep-sorted start
e keep-sorted end
dos comentários. Por exemplo, em Java:
Antes @ Component (
modules = {
UtilsModule . class ,
GetRequestModule . class ,
PostRequestModule . class ,
AuthModule . class ,
MonitoringModule . class ,
LoggingModule . class ,
})
interface FrontendComponent {
FrontendRequestHandler requestHandler ();
} | Depois @Component(
modules = {
+ // keep-sorted start
AuthModule.class,
GetRequestModule.class,
LoggingModule.class,
MonitoringModule.class,
PostRequestModule.class,
UtilsModule.class,
+ // keep-sorted end
})
interface FrontendComponent {
FrontendRequestHandler requestHandler();
} |
Você também pode aninhar blocos de manutenção:
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 |
Observação
Atualmente, o Keepted requer pelo menos 1 1,23.
Instale Keep-Sorted:
$ go install github.com/google/[email protected]
Execute-se bem-sucedido:
$ keep-sorted [file1] [file2] ...
Se o arquivo for -
, a ferramenta lerá do stdin e gravará para o stdout.
Você pode ser executado automaticamente, adicionando este repositório ao seu pré-compromisso.
- repo : https://github.com/google/keep-sorted
rev : v0.5.1
hooks :
- id : keep-sorted
As opções de pré-classificação dizem que mantém o conteúdo do seu arquivo constitui uma única linha lógica que precisa ser classificada.
Por padrão, Keepted interpretará o aumento do recuo como uma continuação de linha e linhas recuadas de grupo com as linhas acima. Se você não deseja esse comportamento, a continuação da linha pode ser desativada via 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 |
Como alternativa, block=yes
é uma maneira de opção de lidar com blocos de código mais complicados, com alguns gotchas. Ele analisa os caracteres que normalmente se espera que sejam fechados em uma única linha lógica de código (por exemplo, os aparelhos são equilibrados). Assim, o que é considerado um grupo é o menor conjunto de linhas que possui todos os símbolos típicos equilibrados (parênteses, aparelhos, colchetes e citações). Isso permite classificar dados como Go Structs e JSON Objects.
widgets := [] widget {
{
Name : "def" ,
},
{
Name : "abc" ,
},
} | widgets := []widget{
+ // keep-sorted start block=yes
{
Name: "abc",
},
{
Name: "def",
},
+ // keep-sorted end
} |
Aviso: Keepteded não está ciente da linguagem, então os grupos ainda estão sendo classificados como seqüências básicas. por exemplo, "{ n" vem antes "{name:", então misturar a quebra da linha e o uso do espaço em branco pode causar classificação inesperada.
Nota:
>
colchetes de ângulo (<
) não são suportados pelo modo de bloco devido ao uso para expressões matemáticas em um formato desequilibrado.
Outra maneira de agrupar linhas é com o argumento group_prefixes
. Isso leva uma lista de prefixos separada por vírgula. Qualquer linha que começa com um desses prefixos será tratada como uma linha de continuação.
| + // keep-sorted start group_prefixes=and,with
hamburger
with lettuce
and tomatoes
peanut butter
and jelly
spaghetti
with meatballs
+ // keep-sorted end |
Comentários incorporados no bloco classificado são feitos para manter seu sucessor. As linhas de comentários devem começar com o mesmo marcador de comentários que a própria instrução classificada (por exemplo, #
no caso abaixo). Keep-Sorted reconhecerá //
, /*
, #
, --
;
, e <!--
Como marcadores de comentários, para quaisquer outros tipos de comentários, use sticky_prefixes
.
Este manuseio especial pode ser desativado especificando o parâmetro 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 |
Mais prefixos podem ser feitos para manter seu sucessor. O argumento sticky_prefixes
leva uma lista de prefixos separada por vírgula que será tratada como pegajosa. Esses prefixos não podem conter caracteres espaciais.
+ // keep-sorted start sticky_prefixes=/*,@Annotation
Baz baz;
/* Foo */
@Annotation
Foo foo;
// keep-sorted end
Em alguns casos, pode não ser possível ter a diretiva inicial na linha imediatamente antes da região classificada. Nesse caso, skip_lines
pode ser usado para indicar quantas linhas devem ser ignoradas antes da região classificada.
Por exemplo, isso pode ser usado com uma tabela de marcação, para impedir que os cabeçalhos e a linha tracejada após os cabeçalhos sejam classificados:
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 --> |
As opções de classificação dizem que mantenha-se bem-sucedido como as linhas lógicas em seu bloco de manutenção devem ser classificadas.
Por padrão, o Keep-Dorted é sensível ao maiúsculas. Isso significa que as letras maiúsculas serão encomendadas antes das minúsculas. Esse comportamento pode ser alterado para classificar o caso, insensivelmente usando o sinalizador 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 |
Por padrão, o Keepted-Dorted usa a classificação lexical. Dependendo dos seus dados, não é isso que você deseja. Ao especificar numeric=yes
, sequências de dígitos incorporadas nas linhas são interpretadas por seus valores numéricos e classificados de acordo:
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
) |
Às vezes, é útil especificar uma ordem personalizada para alguns elementos. O argumento prefix_order=…
pega uma lista separada por vírgula de prefixos que correspondem às linhas a serem classificadas: se a linha começar com um dos valores especificados, ela será colocada na posição correspondente. Se um prefixo vazio for especificado, qualquer linha não coberta por outros prefixos será correspondida.
// 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 |
Isso também pode ser combinado com classificação numérica:
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
]
Para alguns casos de uso, existem strings de prefixo que seriam melhor ignorados ao tentar manter os itens em um pedido. O argumento ignore_prefixes=…
leva uma lista separada por vírgula de prefixos que são ignorados para fins de classificação. Se a linha começar com um ou nenhum espaço em branco seguido por um dos prefixos listados, o prefixo será tratado como a corda vazia para fins de classificação.
// 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 |
Isso também pode ser combinado com classificação numérica:
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
]
As opções pós-classificação são recursos de conveniência adicionais que tornam o código resultante mais legível.
Por padrão, a manutenção remove duplicata da seção classificada. Se comentários diferentes forem anexados a linhas idênticas, as entradas serão preservadas:
# keep-sorted start
rotation: bar
# Add bar twice!
rotation: bar
rotation: baz
rotation: foo
# keep-sorted end
O manuseio duplicado pode ser alterado com o switch remove_duplicates
:
+ # keep-sorted start remove_duplicates=no
rotation: bar
rotation: bar
rotation: baz
rotation: baz
rotation: baz
rotation: foo
# keep-sorted end
Há também uma opção newline_separated=yes
que pode ser usada para adicionar linhas em branco entre os itens que se mantêm está classificando:
| + # keep-sorted start newline_separated=yes
Apples
Bananas
Oranges
Pineapples
# keep-sorted end |
Se você se encontrar querendo incluir caracteres especiais no valor (espaços, vírgulas, colchetes esquerdos) de uma das opções, você pode fazê -lo com uma sequência de fluxo YAML.
<!-- keep-sorted start prefix_order=["* ", "* ["] -->
* bar
* foo
* [ baz ] ( path/to/baz )
<!-- keep-sorted end -->
Isso funciona para qualquer opção que aceite mais de um valor.