Недавно в моем проекте javascript/React я наткнулся на проблему форматирования кода с использованием lsp-mode и typescript-language-server.

Что я сделал?

Я отформатировал буфер с помощью функции форматирования lsp-mode (lsp-format-buffer).

Что я ожидал?

Я ожидал, что отступ будет равен 4 пробелам, без табуляции, только пробелы.

Что случилось?

В результате отступ составил 8 пробелов, а отступ текста был выполнен с помощью табуляции. Ниже приведен пример, где вкладки обозначены значком ›› (включен режим пробелов).

const myConst = [
>>      {
>>      >>      some:."value"
>>      }
]

Проблема

Нет переменной, которую lsp-mode мог бы использовать для установки размера табуляции и отступа по умолчанию. Я также пробовал несколько файлов конфигурации, ни один из них не помог в этом случае.

Решение

Lsp-mode предоставляет переменную lsp-client-settings , которая должна хранить настройки для языковых серверов. Эту переменную следует изменить с помощью функции lsp-register-custom-settings, как в следующем примере.

(lsp-register-custom-settings
 '(("javascript.format.baseIndentSize" 0 t)
   ("javascript.format.indentSize" 4 t)
   ("javascript.format.tabSize" 4 t)
   ("javascript.format.indentStyle" "Block" t)
   ("javascript.format.convertTabsToSpaces" t t)))

что привело, в моем случае, к исправлению отступа

const myConst = [
....{
........some:."value"
....}
]

Список доступных опций конфигурации typescript-language-server можно найти в документации сервера typescript.