t0vim/lua/custom
2025-02-03 20:55:33 +03:00
..
plugins Merge branch 'nvim-develop' of git.pro100code.ru:t0xa/t0vim into nvim-develop 2025-02-03 20:55:33 +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
obsidian.lua Add obsidian plugin 2025-02-03 20:55:31 +03:00
oil.lua Add obsidian plugin 2025-02-03 20:55:31 +03:00
README.md Update binding for snippets and refactor python version getter 2025-02-02 15:54:21 +03:00
telescope.lua Change path display for telescope 2025-02-03 09:00:33 +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 - читать число.