Недавно в моем проекте 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.