t0vim/lua/custom
2025-02-02 18:05:53 +03:00
..
plugins Add some other things for luasnip 2025-02-01 18:05:45 +03:00
snippets Add python snippet for creating sqlalchemy table 2025-02-02 15:58:28 +03:00
colorschemes.lua Add colorschemes 2025-01-31 22:22:17 +03:00
completion.lua Add basic luasnip config 2025-02-01 17:02:46 +03:00
lsp.lua Remove prints 2025-02-02 18:05:53 +03:00
lualine.lua Add dressing and lualine plugins 2025-02-01 11:10:49 +03:00
luasnip.lua Update binding for snippets and refactor python version getter 2025-02-02 15:54:21 +03:00
neogen.lua Add negoen plugin 2025-02-01 11:05:39 +03:00
oil.lua Start config revamp based on neovim docs 2025-01-31 20:36:04 +03:00
README.md Update binding for snippets and refactor python version getter 2025-02-02 15:54:21 +03:00
telescope.lua Add telescope basic config 2025-01-31 22:47:03 +03:00
todo.lua Add TODO-comments plugin 2025-02-01 10:59:59 +03:00
treesitter.lua Fix some checkhealth issues 2025-02-01 08:15:17 +03:00
trouble.lua Add which_key plugin 2025-02-01 11:50:28 +03:00

Справка по интересным моментам в коде

Функция получения версии python в lsp.lua

local function get_python_version()
  local handle = io.popen("python --version 2>&1") -- Redirect stderr to stdout
  if handle then
    local result = handle:read("*a")
    handle:close()
    -- Check if the output contains a version number
    local version = result:match("Python (%d+%.%d+%.%d+)")
    if version then
      return version
    end
  end

  handle = io.popen("python3 --version 2>&1") -- Redirect stderr to stdout
  if handle then
    local result = handle:read("*a")
    handle:close()
    -- Check if the output contains a version number
    local version = result:match("Python (%d+%.%d+%.%d+)")
    if version then
      return version
    end
  end
  -- TODO: Add some exception handling if python not installed on user machine
  return "Python 0.0.0"
end

Что тут есть примечательного:

  • Получение данных, выполняя команду в shell оболочке системы с помощью io.popen. Важно: Данная функция может работать не во всех ОС
  • Функция выполняет команду, указанную в аргументе, и возвращает файловый дескриптор, который можно использовать для чтения вывода команды (или записи в нее)

Разберем флоу подробнее:
Если про python --version - все понятно, то вот:

2>&1

Уже надо прояснить:

  • В UNIX-подобных системах есть три стандартных потока - stdin = 0; stdout = 1; strerr = 2;
  • По умолчанию io.popen передает только вывод stdout в handle, поэтому для обработки ошибок, надо дополнительно захватывать поток stderr
  • 2>&1 означает, что мы хотим перенаправить поток ошибок 2 в стандартный вывод 1;
  • Это нужно для того, чтобы захватить не только вывод команды, но и возможные ошибки (например если питон не установлен);
  • >& - оператор перенаправления потоков.

Дополнительно:
*a внутри read - конструкция формата чтения файловых объектов в Lua. Они указывают - как именно стоит читать данные из файла или потока. Помимо a есть еще:

  • *a - читать все содержимое
  • *l - читать строку
  • *n - читать число.