Исключительно первый вариант.
Я понимаю, откуда ноги растут у второго - и это действительно может показаться неплохой идеей
на стадии на разработки, DRY и властвуй, все дела, но
на стадии дальнейшей поддержки гораздо важнее иметь возможность в два (максимум - три, но это редкость) приёма найти в проекте нужные стили, а этого можно достичь только тем, что держать структуру максимально плоской, без ненужной вложенности.
Видим класс
some-block__el--theme-dark
, надо найти стили:
- Вычленяем название блока - переходим к файлу, в котором находятся стили блока (`some-block.scss`)
- Далее либо `Ctrl+F` по модификатору `--theme-dark` (чаще всего)
- Либо сначала к `Ctrl+F` элементу `__el` и внутри находим модификатор
Какой алгоритм выбора между 2 и 3 - не знаю, это где-то на уровне профессиональной интуиции, со временем приходит
ощущение.
В случае же второго варианта искать придётся по кусочкам, и при этом никакой гарантии что значения не пересекаются в рамках разных названий модификаторов.
Поэтому структура максимально плоская, просто для того, чтобы при поиске внутри файла сразу находить нужное.
Ровно по той же причине, кстати, медиа-запросы прописываются внутри элементов, а не отдельным блоком.
P.S. Из этого можно заключить, что "а давайте вообще откажемся от нестинга и будем искать в один приём сразу по классу целиком".
Есть те, кто разделяют это мнение. Я категорически не разделяю, но это тема для отдельной дискуссии. :)
Вам советую остановиться на том, что
нестинг отдельных БЭМ-сущностей (элементов и модификаторов) - хорошая идея, а
нестинг для композиции БЭМ-сущностей - не очень хорошая :)
P.P.S. И лучше для разделителя между модификатором и его значением использовать что-то отличное от префикса самого модификатора - меньше в глазах рябить будет, когда модификаторов станет 3-4 штуки на одном элементе ^^