Skip to content

FEEDBACK-443: привести кавычки в JS-уроках к рекомендации линтера - #868

Merged
fey merged 4 commits into
mainfrom
feedback-443-broken-examples
Sep 11, 2026
Merged

fey merged 4 commits into
mainfrom
feedback-443-broken-examples

Conversation

@fey

@fey fey commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Продолжение PR #867 (смержен). Там возвращались съеденные форматтером примеры в уроке про линтер; здесь разбирается класс кавычек, вскрытый тем же тикетом FEEDBACK-443.

Урок расходился с линтером

10-basics/10-hello-world и 25-strings/10-quotes рекомендовали одинарные кавычки со ссылкой на стиль AirBnb. При этом весь код курса и все практики стоят на двойных: их ставит oxfmt, а по docs/js-code-style.md кита дефолт инструмента и есть канон. Студент читал одно, а в редакторе видел другое.

Рекомендация переписана по образцу, который эта же кампания применила в python-курсах: единого правила в сообществе нет, курс держится двойных, одинарные берутся когда внутри строки есть двойные.

Что потянулось следом

Пример с апострофом держался на прежнем правиле: по умолчанию одинарные → апостроф ломает синтаксис → поэтому здесь двойные. При двойных по умолчанию апостроф внутри проблемы не создаёт, и абзац перестал чему-либо учить.

Правило зеркалится, а не исчезает: строку обрывает кавычка, совпадающая с внешней. Пример дополнен второй строкой, которая это показывает:

console.log("it's JavaScript"); // апостроф внутри двойных кавычек это обычный символ
console.log('Он сказал "Нет"'); // двойные кавычки внутри, поэтому снаружи одинарные

Этот блок намеренно не помечен: oxfmt обе строки оставляет как есть, проверено прогоном.

Третьим шагом показано экранирование, которого в уроке не было вовсе, вместе с оговоркой, почему в готовом коде такая запись встречается редко.

Восстановлено съеденное

Демонстрация двух форм записи (оба блока стали одинаковыми) и экранирование двойной кавычки в 10-quotes, которое прогон переписал в экранирование апострофа, хотя абзац рядом описывает первое.

Все три блока помечены и переведены на метку text, потому что oxfmt снимает экранирование и сводит формы к одной:

<!-- lint-code-blocks: skip — причина -->

Правило — docs/markdown.md кита, § «Антипример идёт в ```text».

Парные правки в курсах Хекслета: merge requests в ru/js_fundamentals_course !3 и es/js_fundamentals_course !2.

🤖 Generated with Claude Code

fey and others added 4 commits September 11, 2026 18:47
Уроки рекомендовали одинарные кавычки со ссылкой на стиль AirBnb, а весь код
курса и все практики стоят на двойных: их ставит oxfmt, и по
`docs/js-code-style.md` дефолт инструмента и есть канон кита. Студент читал одно,
а в редакторе видел другое.

Рекомендация переписана: единого правила в сообществе нет, курс держится двойных,
одинарные берутся когда внутри строки есть двойные. Следом поправлен пример с
апострофом — внутри двойных кавычек он проблемы не создаёт, и прежнее объяснение
про сломанный синтаксис к нему больше не подходит.

Заодно восстановлены съеденные форматтером примеры: демонстрация двух форм
записи и экранирование двойной кавычки, которое прогон переписал в экранирование
апострофа, хотя текст рядом описывает первое. Блоки помечены как антипримеры.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Смена рекомендации на двойные обесценила пример с апострофом: под одинарными по
умолчанию он показывал, почему кавычки приходится менять, а под двойными апостроф
внутри проблемы не создаёт. Абзац остался, но учить перестал.

Правило то же, только зеркальное: строку обрывает кавычка, совпадающая с внешней,
поэтому при двойных снаружи столкновение даёт двойная внутри. Пример дополнен
второй строкой, которая это показывает, и абзац снова описывает случай, а не факт.

Блок намеренно не помечен: oxfmt обе строки оставляет как есть — проверено
прогоном, — то есть пример совпадает с тем, что делает форматтер, и защищать его
от прогона не нужно.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Урок показывал два способа разойтись со столкновением кавычек — сменить внешние и
оставить апостроф внутри двойных, — но не третий, само экранирование. Добавлен
пример с апострофом под слэшем вместе с объяснением, что слэш делает.

Рядом сказано, почему в готовом коде такая запись встречается редко: oxfmt сам
переписывает её на кавычки без слэша. По той же причине блок помечен как
антипример — без пометки следующий прогон форматтера его съест. Так уже
сломалось экранирование в уроке про строки.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Экранированию в курсе отведён отдельный урок, `250-escape-characters`, а перед
ним `240-strings` разбирает экранирование кавычек в обе стороны, включая
апостроф под слэшем. Пример в `100-hello-world` это дублировал и выдавал
обратный слэш студенту, который за пятнадцать уроков до темы не видел ещё ни
одной управляющей последовательности.

Столкновение кавычек в уроке остаётся: оно там по месту и объясняет, зачем
вообще менять внешние кавычки.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@fey
fey merged commit 0b70b4c into main Sep 11, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant