Avatar ·

WebStorm/PhpStorm: как заставить автоимпорт в TypeScript использовать одинарные кавычки вместо двойных?

Всем привет! Я только начал изучать TypeScript и использую WebStorm. У меня есть небольшой проект, и я заметил странную вещь: когда я пишу код и использую автоимпорт (Alt+Enter), IDE автоматически добавляет импорты с двойными кавычками. Например, я пишу: ```typescript const myFunc = (): void => { console.log('Hello'); } ``` И когда я хочу импортировать какой-то модуль, скажем, `import { Component } from "angular/core";`, WebStorm вставляет двойные кавычки. Но в моем проекте я везде использую одинарные кавычки для строк (это правило eslint). В результате каждый раз приходится вручную менять кавычки после автоимпорта, что очень раздражает. Я проверил настройки: в `Preferences > Editor > Code Style > TypeScript > Punctuation` у меня стоит "Single quotes" для строк. Перезагружал IDE, чистил кеш — не помогает. Подскажите, как заставить автоимпорт всегда использовать одинарные кавычки? Может быть, есть какой-то хитрый плагин или настройка, которую я упустил? Буду благодарен за любую помощь! <<>>

Проверьте глобальные настройки Code Style

Проблема часто возникает из-за того, что настройки Code Style применяются не к тому уровню. В WebStorm/PhpStorm есть два места, где задаются правила для кавычек:

  • Глобальные настройки (File → Settings → Editor → Code Style → TypeScript)
  • Настройки проекта (File → Settings → Editor → Code Style → TypeScript — но для текущего проекта)

Убедитесь, что вы изменили настройки именно в разделе Default (глобальные), а не только для открытого проекта. Иногда проект может иметь свои переопределения, которые блокируют глобальные правила.

Правильный путь к настройке

Перейдите в File → Settings → Editor → Code Style → TypeScript. Найдите вкладку Punctuation (или "Кавычки" в русской версии). Убедитесь, что:

  • В выпадающем списке Use single quotes always выбрано Single quotes.
  • Опция Use double quotes for JSX attributes (если есть) должна быть отключена, если вы не хотите двойных кавычек в JSX.

После этого нажмите Apply и OK. Затем перезапустите IDE (File → Invalidate Caches and Restart).

Проверьте настройки ESLint/Prettier

Если в проекте используется ESLint с правилом quotes: ["error", "single"], WebStorm может игнорировать свои настройки в пользу ESLint. Чтобы это исправить:

  • Установите плагин ESLint в IDE (обычно он уже есть).
  • В настройках File → Settings → Languages & Frameworks → JavaScript → Code Quality Tools → ESLint включите Run eslint --fix on save.
  • Или добавьте в .editorconfig (если используете) строку: quote_type = single.

Пример конфигурации .editorconfig

root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
quote_type = single  # Это заставит IDE использовать одинарные кавычки

Если ничего не помогает

Попробуйте удалить папку .idea в корне проекта (предварительно сохранив нужные настройки) и открыть проект заново. Иногда кеш настроек портится. Также проверьте, не задано ли в tsconfig.json каких-то странных опций, влияющих на форматирование (например, forceConsistentCasingInFileNames — не влияет, но на всякий случай).

После всех манипуляций автоимпорт должен начать использовать одинарные кавычки. Если нет — напишите в комментариях, будем разбираться дальше!

<<>>

Альтернативное решение: скрипт для автоматической замены

Если настройки IDE упорно не работают, можно обойти проблему с помощью небольшого скрипта на Node.js. После каждого автоимпорта запускайте его вручную или через File Watchers в WebStorm.

Создайте файл fix-quotes.js в корне проекта:

const fs = require('fs');
const path = require('path');

function fixQuotes(dir) {
  const files = fs.readdirSync(dir);
  files.forEach(file => {
    const fullPath = path.join(dir, file);
    if (fs.statSync(fullPath).isDirectory() && file !== 'node_modules') {
      fixQuotes(fullPath);
    } else if (file.endsWith('.ts') || file.endsWith('.tsx')) {
      let content = fs.readFileSync(fullPath, 'utf8');
      // Заменяем двойные кавычки на одинарные в импортах
      content = content.replace(/import\s+.*?from\s+"([^"]+)"/g, (match, p1) => {
        return match.replace(`"${p1}"`, `'${p1}'`);
      });
      fs.writeFileSync(fullPath, content, 'utf8');
    }
  });
}

fixQuotes('./src'); // Укажите свою папку с исходниками

Затем добавьте этот скрипт в File Watchers (Settings → Tools → File Watchers) с триггером на изменение файлов .ts. Теперь при каждом сохранении файла кавычки будут автоматически исправляться. Это костыль, но он работает, пока вы не разобрались с настройками IDE.