-- Copyright (c) 2020-2021 shadmansaleh -- MIT license, see LICENSE for more details. local M = require('lualine.component'):extend() function M:update_status() local component = self.options[1] local ok, status if self.options.type == nil then ok, status = pcall(M.lua_eval, component) if not ok then status = M.vim_function(component) end else if self.options.type == 'lua_expr' then ok, status = pcall(M.lua_eval, component) if not ok then status = nil end elseif self.options.type == 'vim_fun' then status = M.vim_function(component) end end return status end ---evaluate the lua code and return it's result as string ---@param code string ---@return string function M.lua_eval(code) local result = loadstring('return ' .. code)() assert(result, 'String expected got nil') return tostring(result) end ---call vim function (name) and return it's result as string ---@param name string ---@return string function M.vim_function(name) -- vim function component local ok, return_val = pcall(vim.api.nvim_call_function, name, {}) if not ok then return '' end -- function call failed ok, return_val = pcall(tostring, return_val) return ok and return_val or '' end return M