Программирование

Почему Prettier в VS Code не форматирует .ts файлы

Решение проблемы: Prettier VS Code показывает 'Formatting completed', но не меняет .ts файлы из-за requirePragma в локальной конфигурации. Как отключить pragma, настроить vs code форматирование и интегрировать с ESLint.

5 ответов 1 просмотр

Почему Prettier в VS Code не форматирует некоторые .ts файлы, хотя вывод показывает успешное завершение?

Я установил расширение Prettier и настроил всё правильно. Два .ts файла форматируются командой Format Document, но другие — нет. В выводе Prettier для проблемных файлов отображается:

["INFO" - 7:56:40 PM] Using local configuration (VS Code configuration will not be used)
["INFO" - 7:56:40 PM] Prettier Options:
{
 "filepath": "/home/sergey/www/icod-elysia/src/index.ts",
 "parser": "typescript",
 "useTabs": false,
 "tabWidth": 4,
 "endOfLine": "lf",
 "trailingComma": "es5",
 "printWidth": 120,
 "semi": false,
 "bracketSpacing": false,
 "singleQuote": false,
 "singleAttributePerLine": true,
 "requirePragma": true,
 "objectWrap": "preserve",
 "insertPragma": true,
 "bracketSameLine": true
}
["INFO" - 7:56:40 PM] Formatting completed in 23ms. 

Prettier указывает, что форматирование завершено, но в файле ничего не меняется: добавленные пробелы остаются. В другом файле из той же директории форматирование работает корректно и удаляет лишние пробелы.

Я проверил на наличие ошибок: удалил весь контент и написал простую строку let a = 10;, но форматирование всё равно не применяется, хотя вывод подтверждает завершение.

settings.json настроен правильно с Prettier как default formatter.

Как исправить проблему с форматированием отдельных .ts файлов в VS Code с Prettier? Почему используется локальная конфигурация и игнорируется VS Code настройка?

Проблема с vs code форматирование в prettier vs code часто возникает из‑за локальной конфигурации .prettierrc с опциями "requirePragma": true и "insertPragma": true. Эти настройки требуют специальный комментарий /** @format */ в начале файла — без него prettier vscode завершает форматирование «успешно», но не меняет код, даже простой let a = 10;. Локальный конфиг имеет приоритет над settings.json VS Code, поэтому добавьте pragma вручную или отключите эти опции, чтобы vs code форматирование кода работало для всех .ts файлов.


Содержание


Почему Prettier в VS Code не форматирует некоторые .ts файлы

Представьте: вы пишете let a = 10; с лишними пробелами, жмете Format Document, и лог кричит «Formatting completed in 23ms», но ничего не меняется. Знакомо? Это классика с prettier vs code и prettier typescript. Два файла из одной папки работают, остальные — нет. Почему?

В вашем логе ключ: “Using local configuration (VS Code configuration will not be used)”. Prettier находит .prettierrc (или prettier.config.js в проекте) и следует ему слепо. А там "requirePragma": true — это значит, форматирование применяется только к файлам с pragma‑комментарием вроде /** @format */ или /** @prettier */ в самом верху.

Почему один файл работает? Вероятно, у него уже есть pragma (от предыдущего форматирования с "insertPragma": true). В /home/sergey/www/icod-elysia/src/index.ts его нет — вот и тишина. Локальный конфиг ищется рекурсивно от файла вверх по директориям, так что даже если в корне проекта есть .prettierrc, он рулит всем.

Это не баг VS Code или расширения esbenp.prettier-vscode. Это фича Prettier для командной работы: чтобы не переформатировать чужой код случайно. Но для solo‑разработки бесит.


Локальная конфигурация Prettier и почему игнорируются настройки VS Code

Prettier vs code настройка простая, но с подвохом. Ваш settings.json с "defaultFormatter": "esbenp.prettier-vscode" и "editor.formatOnSave": true — идеален. Но если в проекте есть локальный конфиг, он переопределяет всё.

Prettier ищет файлы по порядку:

  • .prettierrc (JSON/YAML)
  • prettier.config.js/cjs
  • package.json с секцией "prettier"
  • .prettierrc.toml

Находит — и игнорирует VS Code. В логе ваши опции: tabWidth: 4, printWidth: 120, semi: false — это из локального файла. Чтобы проверить: откройте терминал в VS Code, npx prettier --find-config /home/sergey/www/icod-elysia/src/index.ts. Покажет путь к конфигу.

Хотите глобальные настройки? В settings.json добавьте "prettier.requireConfig": false — тогда Prettier пропустит локал и возьмет VS Code. Или укажите "prettier.configPath": "none". Но осторожно: команда может ругаться на несоответствия.

А если конфига нет? Тогда VS Code рулит. Но у вас он есть — вот почему «local configuration».


Что такое requirePragma и insertPragma в Prettier

Давайте разберем эти опции по полочкам. Согласно документации Prettier, "requirePragma": true — барьер: без /** @format */ в первых строках форматирование скипается. Лог покажет «завершено», но delta нулевой.

"insertPragma": true — помощник: при первом форматировании Prettier сам впихнет pragma в начало. Поэтому один ваш .ts файл «поумнел» и теперь форматируется.

Почему это нужно? В больших командах pragma — сигнал «ок, форматируй меня». Без него Prettier не трогает legacy‑код. В вашем случае для prettier typescript это убивает workflow.

Отключить просто: в .prettierrc поставьте "requirePragma": false, "insertPragma": false. Сохраните, перезапустите Prettier (Developer: Reload Window). Теперь vs code форматирование заработает везде.

Но если команда требует pragma — добавляйте вручную. Или скриптом: find src -name "*.ts" -exec sed -i '1i /** @format */' {} +.


Как добавить pragma-комментарий и принудительно форматировать

Быстрое решение для /home/sergey/www/icod-elysia/src/index.ts: откройте файл, вставьте в самую первую строку:

typescript
/** @format */

let a = 10;

Сохраните, Format Document (Shift+Alt+F). Бум — пробелы улетели. Почему? Pragma есть, prettier vs code доволен.

Для всех файлов разом: используйте команду Format Document (Forced) из палитры (Ctrl+Shift+P). Она игнорирует requirePragma и .prettierignore, как указано в репозитории prettier-vscode. Идеально для теста.

Автоматически? В settings.json:

json
{
 "prettier.insertPragma": true,
 "prettier.requirePragma": false
}

Но если локальный конфиг перебивает — сначала "prettier.requireConfig": false.

Проверили на пустом файле? Pragma спасет даже let a = 10; .


Пошаговая настройка Prettier в VS Code

Как настроить prettier vs code с нуля или пофиксить вашу проблему:

  1. Установите расширение esbenp.prettier-vscode (если нет).
  2. В settings.json (Ctrl+, → Open Settings JSON):
json
{
 "editor.defaultFormatter": "esbenp.prettier-vscode",
 "editor.formatOnSave": true,
 "editor.formatOnPaste": false,
 "[typescript]": {
 "editor.defaultFormatter": "esbenp.prettier-vscode",
 "editor.formatOnSave": true
 },
 "prettier.requireConfig": false, // Игнор локала
 "prettier.configPath": "none" // Или явно none
}
  1. Удалите/отредактируйте .prettierrc: "requirePragma": false.

  2. Перезагрузите: Ctrl+Shift+P → Developer: Reload Window.

  3. Тест: создайте .ts, набросайте кривой код, Shift+Alt+F.

Если prettier скачать заново — через marketplace. Для npm: npm i -D prettier. Но расширение самодостаточно.

Теперь prettier vs code настройка вечна.


Горячие клавиши и команды для vs code форматирование кода

Горячая клавиша форматирования vs code — Shift+Alt+F (Format Document). Работает с Prettier по умолчанию.

Другие:

  • Ctrl+Shift+P → Format Document (Forced) — обходит pragma.
  • Ctrl+S с formatOnSave — авто на сохранении.
  • Ctrl+Shift+P → Prettier: Format Selection — только выделенное.

Перенастройте: Ctrl+K Ctrl+S → search “format”. Назначьте на F2 или что угодно.

В логе “parser: typescript” — хорошо, Prettier угадал. Если нет — укажите explicitly в конфиге.

Shortcuts спасут от рутины.


Интеграция Prettier с ESLint и решение других проблем

Vs code eslint prettier — частая связка. ESLint лLintит, Prettier форматирует. Конфликт? Установите eslint-config-prettier и eslint-plugin-prettier.

В .eslintrc:

json
{
 "extends": ["prettier"],
 "plugins": ["prettier"],
 "rules": { "prettier/prettier": "error" }
}

В VS Code: расширения ESLint + Prettier. settings.json:

json
"eslint.format.enable": true,
"editor.codeActionsOnSave": {
 "source.fixAll.eslint": true
}

Проблемы:

  • .prettierignore блокирует? Forced format.
  • Несовпадение опций? "prettier.resolveGlobalModules": true.
  • Медленно? Кэш: Ctrl+Shift+P → Prettier: Clear Cache.

Для vs code eslint prettier — порядок: ESLint fix, потом Prettier.


Источники

  1. Prettier in VS Code does not format some of the files — Обсуждение проблемы с pragma в локальной конфигурации: https://stackoverflow.com/questions/79875813/prettier-in-vs-code-does-not-format-some-of-the-files
  2. prettier/prettier-vscode — Документация по расширению, forced format и приоритету конфигов: https://github.com/prettier/prettier-vscode
  3. Options — Описание requirePragma и insertPragma в Prettier: https://prettier.io/docs/options
  4. Configuration File — Порядок поиска локальных конфигураций Prettier: https://prettier.io/docs/configuration

Заключение

В итоге, vs code форматирование с prettier vs code ломается на requirePragma: true без pragma — добавьте /** @format */ или отключите в .prettierrc. Локал всегда босс, но "prettier.requireConfig": false вернет контроль VS Code. Настройте formatOnSave, hotkeys вроде Shift+Alt+F — и код всегда чистый. Для prettier typescript и команд — pragma must‑have. Тестируйте на index.ts, и проблема уйдет навсегда.

S

Проблема с vs code форматирование решается отключением комбинации "insertPragma": true и "requirePragma": true в локальной конфигурации Prettier. Эти опции заставляют prettier vs code форматировать только файлы с pragma вроде /** @format */ в начале. Без него форматирование “завершается успешно”, но ничего не меняет. После экспериментов автор добавил pragma вручную или отключил опции — и prettier vscode начал работать для всех .ts файлов. Локальная .prettierrc имеет приоритет над настройками VS Code.

@prettier / Разработчик ПО

В prettier vs code используйте команду Format Document (Forced), чтобы обойти requirePragma и игнорировать .prettierignore — это принудительно форматирует даже проблемные .ts файлы. Локальная конфигурация (.prettierrc) всегда переопределяет настройки VS Code: “Using local configuration (VS Code configuration will not be used)”. Установите prettier.requireConfig: false, чтобы игнорировать локальный конфиг, или укажите prettier.configPath. Для vs code форматирование кода на save настройте formatOnSave и esbenp prettier vscode.

@prettier / Разработчик ПО

В prettier typescript опция requirePragma: true блокирует vs code форматирование, если нет комментария /** @format */ или /** @prettier */ — Prettier завершает работу без изменений. insertPragma: true автоматически добавляет pragma при первом запуске prettier vs code. Локальная конфигурация (.prettierrc) имеет высший приоритет, игнорируя VS Code. Решение: отключите requirePragma или добавьте pragma вручную для всех .ts файлов в prettier vs code настройка.

@prettier / Разработчик ПО

Prettier vs code ищет локальные конфиги (.prettierrc, package.json) рекурсивно от файла вверх, игнорируя глобальные настройки VS Code. requirePragma: true требует pragma-комментарий для vs code форматирование — без него ничего не меняется в .ts файлах. Добавьте // @prettier или отключите опцию в конфиге. Это гарантирует консистентность prettier vscode в команде, но вызывает проблемы вроде описанных.

Авторы
S
Программист
M
Разработчик ПО
@prettier / Разработчик ПО
Разработчик ПО
Источники
Stack Overflow / Платформа вопросов и ответов
Платформа вопросов и ответов
GitHub / Платформа для хостинга кода и совместной разработки
Платформа для хостинга кода и совместной разработки
Prettier / Документация
Документация
Проверено модерацией
Модерация
Почему Prettier в VS Code не форматирует .ts файлы