Js-beautify: HTML : proposition d'organisation des paramètres d'enveloppement d'attributs

Créé le 31 mai 2018  ·  9Commentaires  ·  Source: beautify-web/js-beautify

Extrait du #1297.

Ce que nous avons

wrap_attributes :

  • auto - active l'encapsulation des attributs.
  • force - le premier attribut reste, les autres enveloppés avec "wrap_attributes_indent_size"
  • force-aligned - le premier attribut reste, les autres enveloppés et alignés avec le premier
  • force-expand-multiline - S'il y a plus d'un attribut, TOUS les attributs sont enveloppés quoi qu'il arrive et indentés avec "wrap_attributes_indent_size". AND : le '>' de fermeture de la balise d'ouverture se trouve également sur la nouvelle ligne. Ce mode est actuellement cassé, produit des fichiers mal indentés :(

Il existe également de nombreux efforts pour fournir des modes supplémentaires qui traitent de l'habillage d'éléments html longs avec plusieurs attributs : #1285 et #1262.

Je pense qu'il y a plusieurs problèmes (orthogonaux) ici et les mettre tous dans une seule valeur créerait plus de confusion et une explosion des noms d'options étranges si nous voulons gérer tous les cas.

Séparons donc l'habillage, l'alignement et le nombre d'attributs par ligne, etc.

Proposition

wrap_attributes_mode :

  • none - Nous n'enveloppons tout simplement pas les attributs, point final. (nécessaire?)
  • auto - Emballage d'attribut normal, cela devrait être la valeur par défaut, probablement, comme le cas le plus logique. Quand la ligne est trop grande, on enroule. Si tous les attributs peuvent tenir sur une seule ligne, ils restent sur la même ligne, sans retour à la ligne. (Défaut.)
  • force - Nous enveloppons avec force s'il y a plus d'un attribut présent, sinon auto.

Lorsque l'emballage est en action, les propriétés suivantes sont en jeu. Si aucun emballage ne se produit, ils ne jouent aucun rôle.

wrapped_attributes_per_line :

  • multiple - Emballage souple, par défaut . Ajustez autant d'attributs par ligne que permis.
  • single - Le premier attribut reste sur la première ligne, les autres sont sur des lignes séparées.
  • single-all - Tous les attributs, y compris le premier, placés sur des lignes séparées. Ainsi, chaque attribut est sur une ligne distincte et la ligne d'élément/tag n'a plus d'attributs.

wrapped_attributes_indent :

  1. auto -- Utilise wrap_attributes_indent_size , par défaut .
  2. aligné -- Toutes les lignes d'attribut commencent alignées avec le premier attribut. Si le premier attribut est sur une nouvelle ligne (mode "single-all" de wrapped_attributes_per_line ), alors nous utilisons wrap_attributes_indent_size pour calculer l'indentation.

wrapped_attributes_end :

  • auto - par défaut
  • multiline - la fermeture > est sur la ligne séparée.

Exemples

  1. Cas PAR DÉFAUT : nous encapsulons et essayons d'adapter autant d'attributs par ligne que possible, mais dans la limite de longueur de ligne.
wrap_attributes_mode = auto
wrapped_attributes_per_line = multiple
wrapped_attributes_indent = auto
wrapped_attributes_end = auto
  1. cas #1285. Très similaire au cas par défaut, mais nous alignons les attributs enveloppés pour qu'ils soient au même niveau d'indentation que le premier attribut.
wrap_attributes_mode = auto
wrapped_attributes_per_line = multiple
wrapped_attributes_indent = aligned
wrapped_attributes_end = auto
  1. cas #1262. Lorsque nous encapsulons, nous voulons un attribut par ligne, aligné avec le premier.
wrap_attributes_mode = auto
wrapped_attributes_per_line = single
wrapped_attributes_indent = aligned
wrapped_attributes_end = auto
  1. Cas force-expand-multiline actuel : forcer l'habillage s'il y a plus d'un attribut, avec un attribut par ligne et avec une fin multiligne, en plaçant le > fermeture sur la nouvelle ligne.
wrap_attributes_mode = force
wrapped_attributes_per_line = single-all
wrapped_attributes_indent = auto
wrapped_attributes_end = multiline
javascript discussion enhancement

Commentaire le plus utile

J'aime votre proposition, et je pense qu'une implémentation encore plus simple qui pourrait résoudre beaucoup de problèmes pour certaines personnes, serait l'option de configurer le point auquel "force" utilise auto. Par exemple, être capable de dire, s'il a moins de X attributs, utiliser auto, sinon forcer le bouclage.

Tous les 9 commentaires

@vvs
Génial merci!

Il semble qu'il y ait un chevauchement entre force et multiple , mais certains conflits sont probablement inévitables avec la complexité des paramètres

Comme je l'ai dit, j'aime les noms de valeur que vous avez choisis en général. Je pense que je changerais wrapped_attributes_end en expand-multiline - car il ne se développe que lorsque l'élément est un élément multiligne.

Il semble que vous seriez opposé à l'utilisation d'une liste de valeurs séparées par des virgules comme le fait brace-style ( [collapse|expand|end-expand|none][,preserve-inline] ). Je demande uniquement parce que je n'aime pas avoir plus de champs d'options alors qu'un seul peut fonctionner.

Salut @bitwiseman. Oui, il y a un peu de chevauchement entre force et multiple . Fondamentalement, "forcer" les multiples attributs équivaut auto :)

Je suis également d'accord avec expand-multiline .

Il semble que vous seriez opposé à l'utilisation d'une valeur séparée par des virgules

Personnellement, je peux vivre avec n'importe quoi, même si les paramètres sont des valeurs encodées en BASE64 ! L'essentiel est que je puisse ajuster le comportement de formatage aux besoins de mon équipe (qui sont actuellement conformes au # 1262).

Mais par préférence, il est préférable d'avoir des "groupes d'options" séparés pour que je puisse les modifier indépendamment et réfléchir indépendamment à différentes préoccupations (orthogonales). Et, surtout, il est beaucoup plus facile de documenter les paramètres séparément par rapport à une énorme liste de toutes les combinaisons possibles.

@vvs
Bon point sur le fait d'avoir des paramètres séparés pour des comportements distincts.

J'aime votre proposition, et je pense qu'une implémentation encore plus simple qui pourrait résoudre beaucoup de problèmes pour certaines personnes, serait l'option de configurer le point auquel "force" utilise auto. Par exemple, être capable de dire, s'il a moins de X attributs, utiliser auto, sinon forcer le bouclage.

J'aimerais utiliser "aligned-multiple" si j'utilise <= 3 attributs, sinon "force-aligned". Est-ce possible en ce moment ?

@otonielguajardo

Il n'existe pas actuellement.

Ce que vous demandez est similaire à # 1262, qui est essentiellement "Autoriser les attributs sur une ligne à moins qu'ils ne soient enroulés, auquel cas alignez-les".
Il semble que @Adondriel ait également demandé quelque chose comme ce que vous voulez (basé sur le nombre d'attributs) dans ce numéro.

des avances ?

Avez-vous l'intention de revoir cela ?

@notiv-nt @Drumstix42
Avec mon temps disponible limité, j'ai corrigé d'autres bugs.
Cela vaut toujours la peine d'être fait, mais nécessite que quelqu'un prenne le temps de terminer la conception et de la mettre en œuvre.

Cette page vous a été utile?
0 / 5 - 0 notes