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