Keep-sorted es un formato de lenguaje agnóstico que clasifica las líneas entre dos marcadores en un archivo más grande.
Rodea las líneas para mantenerse clasificadas con keep-sorted start
y keep-sorted end
en los comentarios. Por ejemplo, en Java:
Antes @ Component (
modules = {
UtilsModule . class ,
GetRequestModule . class ,
PostRequestModule . class ,
AuthModule . class ,
MonitoringModule . class ,
LoggingModule . class ,
})
interface FrontendComponent {
FrontendRequestHandler requestHandler ();
} | Después @Component(
modules = {
+ // keep-sorted start
AuthModule.class,
GetRequestModule.class,
LoggingModule.class,
MonitoringModule.class,
PostRequestModule.class,
UtilsModule.class,
+ // keep-sorted end
})
interface FrontendComponent {
FrontendRequestHandler requestHandler();
} |
También puede anidar los bloques de mantenimiento de mantenimiento:
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 |
Nota
El sorteo de Keep Actualmente requiere al menos GO 1.23.
Instalar Keep-sorted:
$ go install github.com/google/[email protected]
Ejecutar mantenido:
$ keep-sorted [file1] [file2] ...
Si el archivo es -
, la herramienta se leerá desde Stdin y se escribirá en Stdout.
Puede ejecutar Keep-Sorted automáticamente agregando este repositorio a su pre-Commit.
- repo : https://github.com/google/keep-sorted
rev : v0.5.1
hooks :
- id : keep-sorted
Opciones previas a la organización Déjese que Keep sorted qué contenido en su archivo constituye una sola línea lógica que debe ordenarse.
De manera predeterminada, Keep sorted interpretará el aumento de la sangría como una continuación de línea y las líneas con sangría grupal con las líneas anteriores. Si no desea este comportamiento, la continuación de la línea se puede deshabilitar a través 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 |
Alternativamente, block=yes
es una forma optada de manejar bloques de código más complicados, con algunos gotchas. Observa los caracteres que generalmente se espera que se cierren en una sola línea lógica de código (por ejemplo, los aparatos ortopédicos están equilibrados). Por lo tanto, lo que se considera un grupo es el conjunto más pequeño de líneas que tiene todos los símbolos típicos equilibrados (paréntesis, bosques, soportes y citas). Esto permite clasificar datos como estructuras GO y objetos JSON.
widgets := [] widget {
{
Name : "def" ,
},
{
Name : "abc" ,
},
} | widgets := []widget{
+ // keep-sorted start block=yes
{
Name: "abc",
},
{
Name: "def",
},
+ // keep-sorted end
} |
ADVERTENCIA: Keep sorted no es consciente del lenguaje, por lo que los grupos todavía se están clasificando como cadenas básicas. Por ejemplo, "{ n" viene antes "{nombre:", por lo que mezclar el descanso de la línea y el uso de espacios blancos pueden causar una clasificación inesperada.
Nota: Los soportes de ángulo (
<
) no son compatibles con el modo de bloque debido>
que se usan para expresiones matemáticas en un formato desequilibrado.
Otra forma de agrupar las líneas juntas es con el argumento group_prefixes
. Esto toma una lista de prefijos separados por comas. Cualquier línea que comience con uno de esos prefijos será tratada como una línea de continuación.
| + // keep-sorted start group_prefixes=and,with
hamburger
with lettuce
and tomatoes
peanut butter
and jelly
spaghetti
with meatballs
+ // keep-sorted end |
Los comentarios incrustados dentro del bloque clasificado están hechos para seguir con su sucesor. Las líneas de comentarios deben comenzar con el mismo marcador de comentarios que la instrucción de mantenimiento en sí mismo (por ejemplo, #
en el caso a continuación). Keep-sorted reconocerá //
, /*
, #
, --
;
, y <!--
Como marcadores de comentarios, para cualquier otro tipo de comentarios, use sticky_prefixes
.
Este manejo especial se puede deshabilitar especificando el 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 |
Se pueden hacer más prefijos para seguir con su sucesor. El argumento sticky_prefixes
toma una lista de prefijos separados por comas que se tratarán como pegajosos. Estos prefijos no pueden contener caracteres espaciales.
+ // keep-sorted start sticky_prefixes=/*,@Annotation
Baz baz;
/* Foo */
@Annotation
Foo foo;
// keep-sorted end
En algunos casos, es posible que no sea posible tener la directiva de inicio en la línea inmediatamente antes de la región ordenada. En este caso, se pueden usar skip_lines
para indicar cuántas líneas se omitirán antes de la región ordenada.
Por ejemplo, esto se puede usar con una tabla de Markdown, para evitar los encabezados y la línea discontinua después de que se ordenen los encabezados:
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 --> |
Opciones de clasificación Déjes que Keep sorted cómo se deben ordenar las líneas lógicas en su bloque de mantenimiento.
Por defecto, Keep sorted es sensible al caso. Esto significa que las letras mayúsculas se ordenarán antes que las minúsculas. Este comportamiento se puede cambiar para clasificar el caso de manera insensible utilizando el indicador 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 defecto, Keep Sorted usa clasificación léxica. Dependiendo de sus datos, esto no es lo que podría desear. Al especificar numeric=yes
, las secuencias de dígitos integrados en las líneas se interpretan por sus valores numéricos y se ordenan en consecuencia:
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
) |
A veces, es útil especificar un pedido personalizado para algunos elementos. El argumento prefix_order=…
toma una lista de prefijos separados por comas que coinciden con las líneas para ordenarse: si la línea comienza con uno de los valores especificados, se coloca en la posición correspondiente. Si se especifica un prefijo vacío, se combina cualquier línea no cubierta por otros prefijos.
// 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 |
Esto también se puede combinar con clasificación 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 algunos casos de uso, hay cadenas de prefijo que se ignorarían mejor al tratar de mantener los artículos en un pedido. El argumento ignore_prefixes=…
toma una lista de prefijos separados por comas que se ignoran con fines de clasificación. Si la línea comienza con cualquier espacio en blanco seguido de uno de los prefijos enumerados, el prefijo se trata como la cadena vacía para fines de clasificación.
// 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 |
Esto también se puede combinar con clasificación 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
]
Las opciones posteriores a la organización son características de conveniencia adicionales que hacen que el código resultante sea más legible.
Por defecto, Keep sorted elimina los duplicados de la sección ordenada. Si se adjuntan diferentes comentarios a líneas idénticas de otro modo, las entradas se conservan:
# keep-sorted start
rotation: bar
# Add bar twice!
rotation: bar
rotation: baz
rotation: foo
# keep-sorted end
El manejo de duplicado se puede cambiar con el interruptor remove_duplicates
:
+ # keep-sorted start remove_duplicates=no
rotation: bar
rotation: bar
rotation: baz
rotation: baz
rotation: baz
rotation: foo
# keep-sorted end
También hay una opción newline_separated=yes
que se puede usar para agregar líneas en blanco entre los elementos que se organizan organizando:
| + # keep-sorted start newline_separated=yes
Apples
Bananas
Oranges
Pineapples
# keep-sorted end |
Si se encuentra con ganas de incluir caracteres especiales en el valor (espacios, comas, soportes izquierdos) de una de las opciones, puede hacerlo con una secuencia de flujo Yaml.
<!-- keep-sorted start prefix_order=["* ", "* ["] -->
* bar
* foo
* [ baz ] ( path/to/baz )
<!-- keep-sorted end -->
Esto funciona para cualquier opción que acepte más de un valor.