diff options
| author | Daniil Rozanov <daniilrozzanov@gmail.com> | 2024-03-29 04:37:56 +0300 | 
|---|---|---|
| committer | Daniil Rozanov <daniilrozzanov@gmail.com> | 2024-03-29 04:37:56 +0300 | 
| commit | 672f0d32e322b79661b5d7959887adaa9e41ad98 (patch) | |
| tree | c2c3f4e2157d47c7e3f8dfd2f3229e37e0919b3e /lua/cmake-explorer/file_api.lua | |
| parent | d453f54d98536eb3a52daebfe279c4e624979c31 (diff) | |
feat: build from current variant
Diffstat (limited to 'lua/cmake-explorer/file_api.lua')
| -rw-r--r-- | lua/cmake-explorer/file_api.lua | 117 | 
1 files changed, 58 insertions, 59 deletions
diff --git a/lua/cmake-explorer/file_api.lua b/lua/cmake-explorer/file_api.lua index cd83be4..37eda3a 100644 --- a/lua/cmake-explorer/file_api.lua +++ b/lua/cmake-explorer/file_api.lua @@ -2,6 +2,7 @@ local capabilities = require("cmake-explorer.capabilities")  local Path = require("plenary.path")  local Scandir = require("plenary.scandir")  local notif = require("cmake-explorer.notification") +local utils = require("cmake-explorer.utils")  local query_path_suffix = { ".cmake", "api", "v1", "query", "client-cmake-explorer", "query.json" }  local reply_dir_suffix = { ".cmake", "api", "v1", "reply" } @@ -11,83 +12,81 @@ local FileApi = {}  FileApi.__index = FileApi  function FileApi:new(opts) -  if not capabilities.has_fileapi() then -    notif.notify("No fileapi files", vim.log.levels.ERROR) -    return -  end -  local path -  if type(opts) == "string" then -    path = opts -  end -  local obj = { -    path = Path:new(path):absolute(), -    index = nil, -    cmakefiles = nil, -    codemodel = nil, -    targets = nil, -  } -  Path:new(path):mkdir({ parents = true }) -  setmetatable(obj, FileApi) -  return obj +	if not capabilities.has_fileapi() then +		notif.notify("No fileapi files", vim.log.levels.ERROR) +		return +	end +	local path +	if type(opts) == "string" then +		path = opts +	end +	local obj = { +		path = path, +		index = nil, +		cmakefiles = nil, +		codemodel = nil, +		targets = {}, +	} +	setmetatable(obj, FileApi) +	return obj  end  function FileApi:create() -  local query = Path:new(self.path, unpack(query_path_suffix)) -  if not query:exists() then -    if not query:touch({ parents = true }) then -      notif.notify("Cannot create query file", vim.log.levels.ERROR) -      return -    end -    query:write(vim.json.encode(capabilities.json.fileApi), "w") -  end -  Path:new(self.path, unpack(reply_dir_suffix)):mkdir({ parents = true }) -  return true +	local query = Path:new(self.path, unpack(query_path_suffix)) +	if not query:exists() then +		if not query:touch({ parents = true }) then +			notif.notify("Cannot create query file", vim.log.levels.ERROR) +			return +		end +		query:write(vim.json.encode(capabilities.json.fileApi), "w") +	end +	Path:new(self.path, unpack(reply_dir_suffix)):mkdir({ parents = true }) +	return true  end  function FileApi:read_reply() -  if not self:reply_exists() then -    notif.notify("No reply directory", vim.log.levels.ERROR) -    return -  end -  local reply_dir = Path:new(self.path, unpack(reply_dir_suffix)) -  local index = Scandir.scan_dir(tostring(reply_dir), { search_pattern = "index*" }) -  if #index == 0 then -    notif.notify("No files in reply", vim.log.levels.ERROR) -    return -  end -  self.index = vim.json.decode(Path:new(index[1]):read()) -  for _, object in ipairs(self.index.objects) do -    if object.kind == "codemodel" then -      self.codemodel = vim.json.decode((reply_dir / object.jsonFile):read()) -      self.targets = {} -      for _, target in ipairs(self.codemodel.configurations[1].targets) do -        table.insert(self.targets, vim.json.decode((reply_dir / target.jsonFile):read())) -      end -    elseif object.kind == "cmakeFiles" then -      self.cmakefiles = vim.json.decode(Path:new(reply_dir / object.jsonFile):read()) -    end -  end -  return true +	if not self:reply_exists() then +		notif.notify("No reply directory", vim.log.levels.ERROR) +		return +	end +	local reply_dir = Path:new(self.path, unpack(reply_dir_suffix)) +	local index = Scandir.scan_dir(tostring(reply_dir), { search_pattern = "index*" }) +	if #index == 0 then +		notif.notify("No files in reply", vim.log.levels.ERROR) +		return +	end +	self.index = vim.json.decode(Path:new(index[1]):read()) +	for _, object in ipairs(self.index.objects) do +		if object.kind == "codemodel" then +			self.codemodel = vim.json.decode((reply_dir / object.jsonFile):read()) +			for _, target in ipairs(self.codemodel.configurations[1].targets) do +				self.targets[target.name] = vim.json.decode((reply_dir / target.jsonFile):read()) +			end +		elseif object.kind == "cmakeFiles" then +			self.cmakefiles = vim.json.decode(Path:new(reply_dir / object.jsonFile):read()) +		end +	end +	return true  end  function FileApi:query_exists() -  return Path:new(self.path, unpack(query_path_suffix)):exists() +	return Path:new(self.path, unpack(query_path_suffix)):exists()  end  function FileApi:reply_exists() -  local reply_dir = Path:new(self.path, unpack(reply_dir_suffix)) -  if not reply_dir:exists() then -    return -  end -  return true +	local reply_dir = Path:new(self.path, unpack(reply_dir_suffix)) +	if not reply_dir:exists() then +		return +	end +	return true  end  function FileApi:exists() -  return self:query_exists() and self:reply_exists() +	return self:query_exists() and self:reply_exists()  end  function FileApi.is_fileapi(other) -  return getmetatable(other) == FileApi +	return getmetatable(other) == FileApi  end  return FileApi  | 
