Js-beautify: HTML: Предложение по организации настроек переноса атрибутов

Созданный на 31 мая 2018  ·  9Комментарии  ·  Источник: beautify-web/js-beautify

Извлечено из № 1297.

Что мы имеем

wrap_attributes :

  • auto - включает перенос атрибутов.
  • force - первый атрибут остается, остальные завернуты в "wrap_attributes_indent_size"
  • force-aligned - первый атрибут остается, остальные завернуты и выровнены с первым
  • force-expand-multiline - Если имеется более 1 атрибута, ВСЕ атрибуты, несмотря ни на что, переносятся с отступом "wrap_attributes_indent_size". И: закрывающий '>' открывающего тега также находится на новой строке. Этот режим в настоящее время не работает, создает файлы с неправильным отступом :(

Также предпринимаются многочисленные попытки предоставить некоторые дополнительные режимы, которые имеют дело с переносом длинных html-элементов с несколькими атрибутами: #1285 и #1262.

Я думаю, что здесь есть несколько (ортогональных) проблем, и объединение их всех в одно значение приведет к еще большей путанице и взрыву странных имен опций, если мы хотим обрабатывать все случаи.

Итак, давайте разделим обтекание, выравнивание и количество атрибутов в строке и т.д.

Предложение

wrap_attributes_mode :

  • none — мы просто не переносим атрибуты, и точка. (нужный?)
  • auto - Нормальная упаковка атрибутов, это должно быть по умолчанию, наверное, как наиболее логичный случай. Когда линия слишком большая, мы заворачиваем. Если все атрибуты помещаются в одну строку, они остаются на одной строке, без переноса. (По умолчанию.)
  • force — Мы принудительно переносим, ​​если присутствует более 1 атрибута, в противном случае автоматически.

Когда оболочка работает, в игру вступают следующие свойства. Если обертывания не происходит, они не играют никакой роли.

wrapped_attributes_per_line :

  • multiple — Мягкая упаковка, по умолчанию . Поместите столько атрибутов в строку, сколько разрешено.
  • single — первый атрибут остается в первой строке, остальные — в отдельных строках.
  • single-all - Все атрибуты, включая первый, вынесены на отдельные строки. Таким образом, каждый атрибут находится на отдельной строке, а в строке элемента/тега атрибутов не осталось.

wrapped_attributes_indent :

  1. auto -- использует wrap_attributes_indent_size , по умолчанию .
  2. выровнены -- все строки атрибутов начинаются с первого атрибута. Если первый атрибут находится на новой строке (режим «один-все» wrapped_attributes_per_line ), то мы используем wrap_attributes_indent_size для вычисления отступа.

wrapped_attributes_end :

  • autoпо умолчанию
  • multiline - закрывающий > на отдельной строке.

Примеры

  1. Случай ПО УМОЛЧАНИЮ: мы делаем мягкий перенос и пытаемся разместить как можно больше атрибутов в строке, но в пределах ограничения длины строки.
wrap_attributes_mode = auto
wrapped_attributes_per_line = multiple
wrapped_attributes_indent = auto
wrapped_attributes_end = auto
  1. Дело №1285. Очень похоже на случай по умолчанию, но мы выравниваем обернутые атрибуты так, чтобы они находились на том же уровне отступа, что и первый атрибут.
wrap_attributes_mode = auto
wrapped_attributes_per_line = multiple
wrapped_attributes_indent = aligned
wrapped_attributes_end = auto
  1. Дело №1262. Когда мы переносим, ​​нам нужен один атрибут в строке, выровненный с первым.
wrap_attributes_mode = auto
wrapped_attributes_per_line = single
wrapped_attributes_indent = aligned
wrapped_attributes_end = auto
  1. Текущий случай force-expand-multiline : принудительный перенос, если имеется более 1 атрибута, с одним атрибутом в строке и с многострочным окончанием, с размещением закрывающего > на новой строке.
wrap_attributes_mode = force
wrapped_attributes_per_line = single-all
wrapped_attributes_indent = auto
wrapped_attributes_end = multiline
javascript discussion enhancement

Самый полезный комментарий

Мне нравится ваше предложение, и я думаю, что еще более простой реализацией, которая могла бы решить множество проблем для некоторых людей, была бы возможность настроить точку, в которой «сила» использует auto. Например, можно сказать, что если у него меньше X атрибутов, использовать auto, в противном случае — принудительный перенос.

Все 9 Комментарий

@vvs
Потрясающе спасибо!

Похоже, что есть совпадение между force и multiple , но некоторый конфликт, вероятно, неизбежен из-за сложности настроек.

Как я уже сказал, мне нравятся имена значений, которые вы выбрали в целом. Я думаю, что я бы изменил wrapped_attributes_end на expand-multiline , потому что он расширяется только тогда, когда элемент является многострочным.

Похоже, вы были бы против использования списка значений, разделенных запятыми, как это делает brace-style ( [collapse|expand|end-expand|none][,preserve-inline] ). Я спрашиваю только потому, что мне не нравится иметь больше полей опций, когда одно может работать.

Привет @bitwiseman. Да, между force и multiple есть некоторое совпадение. По сути, «принудительное» использование нескольких атрибутов равно auto :)

Я также в порядке с expand-multiline .

Похоже, вы были бы против использования значения, разделенного запятыми

Лично я могу жить с чем угодно, даже если настройки представляют собой значения в кодировке BASE64! Главное, что я могу настроить поведение форматирования в соответствии с моими/командными потребностями (которые в настоящее время соответствуют #1262).

Но с точки зрения предпочтений лучше иметь отдельные «группы опций», чтобы я мог независимо модифицировать их и думать о разных (ортогональных) проблемах независимо. И, самое главное, намного проще документировать настройки по отдельности, чем огромный список всех возможных комбинаций.

@vvs
Хороший момент о том, чтобы иметь отдельные настройки для разных поведений.

Мне нравится ваше предложение, и я думаю, что еще более простой реализацией, которая могла бы решить множество проблем для некоторых людей, была бы возможность настроить точку, в которой «сила» использует auto. Например, можно сказать, что если у него меньше X атрибутов, использовать auto, в противном случае — принудительный перенос.

Я хотел бы использовать «выровненное-множественное» при использовании <= 3 атрибутов, в противном случае «принудительное выравнивание». Возможно ли это на данный момент?

@otonielguajardo

В настоящее время его не существует.

То, что вы просите, похоже на # 1262, что в основном означает «Разрешить атрибутам одну строку, если они не собираются переноситься, и в этом случае выровняйте их».
Похоже, что @Adondriel запросил что-то вроде того, что вы хотите (на основе количества атрибутов) и в этой проблеме.

какие-то авансы?

Есть ли планы пересмотреть это?

@notiv-nt @Drumstix42
Имея ограниченное время, я исправлял другие ошибки.
Это все еще стоит сделать, но требует, чтобы кто-то нашел время, чтобы закончить дизайн и реализовать его.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги