ли форматирует? Ну так выкиньте его.
наоборот, хотят отформатировать так чтобы в содержимом литерала отступов небыло, а в коде он был с отступами под текущий скоуп
А что считать отступом?
в т.ч. эту загадку и пытаются решить
Мой исходный пример. Корректные отступы в коде и в содержимом литерала сейчас невозможны одновременно
То есть отступом считать то что во второй строке при условии что первая пустая и первую вырезать? И сделать это должен препроцессор.
>> То есть отступом считать то что во второй строке при условии что первая пустая и первую вырезать? Отступом должен считаться минимальный отступ среди всех строк литерала. Например, void foo() { auto x = R"( a b c )"; } должно превращаться в a b c
void foo() { auto x = R"([config])" "\n" R"( hello = Hello, World)" "\n" R"( answer = 42)" "\n"; } 🗿🗿🗿
Я уже упомянул, что это лишает существование сырых многострочных литералов всякого смысла
Их смысл не в том чтобы сохранять codestyle.
Я считаю, что заведомо не должно быть таких сущностей, которые ломают кодстайл
А мне нравится что я беру кусок текста, вставляю в код и строка это ровно то что я вставил. И обратное тоже верно.
литералы вообще никакое отношение с код стайлу не имеют. Если у вас имеют - то вам код стайл надо менять и бить по рукам того, кто такой бред выдумывает
а я считаю, что не должно быть кодостайлов, которые ломаются от языка, для которого они предназначены 🗿
Может, вам в коде вообще тогда не нужны отступы? Потому что аргументация, почему литералы должны иметь идентацию относительно кода та же самая, что и в вопросе, почему идентация нужна вообще
Ещё раз. Сейчас корректный литерал вынужденно разрывает код: void foo() { auto x = R"([config] hello = Hello, World answer = 42 )"; } Аргументы, почему это же самое должно выглядеть на самом деле так: void foo() { auto x = R"( [config] hello = Hello, World answer = 42 )"; } полностью аналогичны аргументам, почему в коде идентация нужна вообще
Мне нужна сырая строка как есть, где никто ничего не "форматирует". Ради вот этой оочень нужной фичи и были введены сырые литералы. Вы предлагаете изменения под _ВАШ_ код стайл, которое сломает софт всем остальным (!) 🙈🙈🙈😄😄😄 это пять👍👍👍👍
Я говорил, я не вставляю отступы, clang-format же есть. И это прекрасно, я вообще о форматировании не думаю обычно :) Если литералы большие, отдельно в unnamed namespace вытаскиваю, а там отступ нулевой.
Вот, учу как сделать, чтобы вам "код стайл не ломало": void foo() { auto x = R"( [config] hello = Hello, World answer = 42 )"; }
слушай а удл работают с сырыми строками?
>> Мне нужна сырая строка как есть, где никто ничего не "форматирует" Ясчитаю, что такое поведение на практике не нужно. Ведь необходимое число отступов при вставке добавлять умеет практически любой текстовый редактор. Т.е. код и так обучает копируется и вставляется как есть, без изменений Более того, я не предлагал ломать желаемое вами уже существующее поведение. Но я настаиваю, что оно непрактично на деле >> Вы предлагаете изменения под _ВАШ_ код стайл Этого тоже не было. Предложенное мной подходит под любой стиль отступов и даже под его отсутствие
окружи его переводами строк
>> Я говорил, я не вставляю отступы, clang-format же есть Так а при чём здесь он и как он поможет? Проблема же не в стиле, а в невозможности сохранения идентации при сохранении корректного содержимого литерала >> Если литералы большие, отдельно в unnamed namespace вытаскиваю, а там отступ нулевой. Так можно, но даже здесь у некоторых может быть отступ относительно начала декларации переменной. Т.е. это решение, но оно всё ещё на уровне "положить в текстовый файл и позвать #embed". Доступно с более раннего стандарта, но бессмысленно именно в качестве литерала
просто берешь делаешь _rawmulti и триммишь вайтспейс
Так это, кажется, вообще повсеместная проблема же.
Вообще, возможно, что это и так. Я не помню языков, где сырые строки не разрывали бы уровень идентации. Но это же не повод молчать об этой раздражающей проблеме)
Я про то что в примере отступы явно вставил же не редактор :) А мне бы было лень, если я копирую например этот кусок из реального конфига вставлять отступы чтобы под код выровнять. Из кода большие я выношу в переменные потому что из-за кучи текста читаемость самого кода теряется, не из-за отступов.
"Ясчитаю, что такое поведение на практике не нужно." - вы не правы, наоборот после введения сырых литералов - другое поведение в большинстве случаев не нужно. Во-вторых, меня не устраивает отсекание "отступов" по вашему стилю, так как мне в нужных местах нужны отступы. И в принципе никто кроме разработчика не имеет информации как как оно должно быть. Потому сделать как вы предлагаете невозможно в принципе без введения 50+ типов литералов или ломания кода всем кроме вас.
я думаю подобную фичу можно сделать на уровне кодогенерации перед компиляцией, какой-нибудь [[fix human-readable literal]], но это максимум. И то это будет перегружать синтаксис 🫡
>> так как мне в нужных местах нужны отступы Ещё раз. В моём предложении отступы не исчезают. Они вместо этого выравниваются относительно самого левого элемента в строках литерала. Относительные отступы при этом не ломаются и будут сохранены, как вы и хотите
Ну вот в yaml мультистроки с отступами. Ещё и с модификаторами всякими. Но yaml он же весь на отступах.
Вы же ещё первую строку хотите вырезать, как в lua. Ну вот это может и полезно было бы
>> [[fix human-readable literal]] Нельзя. Суть атрибутов в том, что поведение не должно ломаться, если компилятор вдруг выключит поддержку атрибута. Т.е. атрибуты обычно сужают гарантии для программиста. А здесь они наоборот расширяются. Можно ключевым словом. Или скорее другим префиксом. Не R"(...)", а I"(...)", например
вы ведь понимаете, что это один из исключительных случаев когда _вам_ это надо?
Да, но если первая пустая строчка именно нужна – всегда же ещё одну можно добавить. Вырезаться должна только первая
Ну да, в lua так и сделано.
меня не покидает чувство что ты описываешь функционал какого-то плагина для иде 🌚 Отступы как бы и есть, но их нет, но зато красиво, но и нужно чтобы код компенсировался не только в моей иде. Итог, нужен плагин который будет красиво показывать тебе литерал, но на самом деле он отформатирован как надо
На самом деле, исключительный случай – это литерал, состоящий только из пробелов в начале каждой строчки. В этом случае действительно ломается наблюдаемое поведение и этот пример был выше. Но мне не кажется, что это более частый случай, чем литералы, у которых есть хотя бы одна строчка с первым непробельным символом
какое-то расширение подписывания типа или названия переменной, где по синтаксису их нет. И табы, которые пробелы
Я не спорю, это можно сделать в IDE. Есть ли такая фича в современных – я не знаю, не видел. Но даже если будет... мне не нравится, что на условном гитхабе или в git diff содержимое будет отличаться от того, что видно в IDE. Мне кажется этот подход неправильным
фикс сделай удл и не ной
ну блин, нужно попробовать, да
Обсуждают сегодня