From 6b1ccff95c47b78da2cd5ac5650279c160599fbf Mon Sep 17 00:00:00 2001
From: Daniil Rozanov <daniilrozzanov@gmail.com>
Date: Tue, 7 May 2024 21:59:22 +0300
Subject: fix: bad assertion

---
 lua/cmake/project.lua | 328 +++++++++++++++++++++++++-------------------------
 1 file changed, 164 insertions(+), 164 deletions(-)

(limited to 'lua')

diff --git a/lua/cmake/project.lua b/lua/cmake/project.lua
index 0edbb02..4922b49 100644
--- a/lua/cmake/project.lua
+++ b/lua/cmake/project.lua
@@ -38,51 +38,51 @@ local fileapis = {}
 
 --- Set internal variables to default
 local reset_internals = function()
-	configs = {}
-	current_config = nil
-	fileapis = {}
-	initialised = true
+  configs = {}
+  current_config = nil
+  fileapis = {}
+  initialised = true
 end
 
 --- Set `after_success` function to each command which may be executed.
 --- These functions do minimal to plugin works
 local append_after_success_actions = function()
-	local read_reply = function(v, not_presented)
-		if (not_presented and not fileapis[v.directory]) or not not_presented then
-			utils.symlink(v.directory .. "/compile_commands.json", uv.cwd())
-			fileapis[v.directory] = { targets = {} }
-			FileApi.read_reply(v.directory, function(target)
-				table.insert(fileapis[v.directory].targets, target)
-			end)
-		end
-	end
-	for _, v in ipairs(configs) do
-		v.generate_command.after_success = function()
-			read_reply(v, false)
-		end
-		for _, bv in ipairs(v.build_options) do
-			bv.command.after_success = function()
-				read_reply(v, true)
-			end
-		end
-	end
+  local read_reply = function(v, not_presented)
+    if (not_presented and not fileapis[v.directory]) or not not_presented then
+      utils.symlink(v.directory .. "/compile_commands.json", uv.cwd())
+      fileapis[v.directory] = { targets = {} }
+      FileApi.read_reply(v.directory, function(target)
+        table.insert(fileapis[v.directory].targets, target)
+      end)
+    end
+  end
+  for _, v in ipairs(configs) do
+    v.generate_command.after_success = function()
+      read_reply(v, false)
+    end
+    for _, bv in ipairs(v.build_options) do
+      bv.command.after_success = function()
+        read_reply(v, true)
+      end
+    end
+  end
 end
 
 --- Clear existing fileapis and read from available build directories
 local init_fileapis = function()
-	fileapis = {}
-	for _, v in ipairs(configs) do
-		if not fileapis[v.directory] then
-			fileapis[v.directory] = { targets = {} }
-			FileApi.exists(v.directory, function(fileapi_exists)
-				if fileapi_exists then
-					FileApi.read_reply(v.directory, function(target)
-						table.insert(fileapis[v.directory].targets, target)
-					end)
-				end
-			end)
-		end
-	end
+  fileapis = {}
+  for _, v in ipairs(configs) do
+    if not fileapis[v.directory] then
+      fileapis[v.directory] = { targets = {} }
+      FileApi.exists(v.directory, function(fileapi_exists)
+        if fileapi_exists then
+          FileApi.read_reply(v.directory, function(target)
+            table.insert(fileapis[v.directory].targets, target)
+          end)
+        end
+      end)
+    end
+  end
 end
 
 -- TODO: validate yaml and fallback to config's variants if not valid
@@ -91,160 +91,160 @@ end
 ---Initialise project from variants
 ---@param variants table
 function Project.from_variants(variants)
-	local variants_copy = vim.deepcopy(variants)
-	local list_variants = {}
-	for k, v in pairs(variants_copy) do
-		table.insert(list_variants, v)
-		list_variants[#list_variants]._name = k
-	end
-	table.sort(list_variants, function(a, b)
-		return a._name < b._name
-	end)
-	for var, is_default in VariantConfig.cartesian_product(list_variants) do
-		var.current_build = 1
-		table.insert(configs, var)
-		current_config = not current_config and is_default and #configs or current_config
-	end
-	if not current_config and #configs ~= 0 then
-		current_config = 1
-	end
-	append_after_success_actions()
-	init_fileapis()
+  local variants_copy = vim.deepcopy(variants)
+  local list_variants = {}
+  for k, v in pairs(variants_copy) do
+    table.insert(list_variants, v)
+    list_variants[#list_variants]._name = k
+  end
+  table.sort(list_variants, function(a, b)
+    return a._name < b._name
+  end)
+  for var, is_default in VariantConfig.cartesian_product(list_variants) do
+    var.current_build = 1
+    table.insert(configs, var)
+    current_config = not current_config and is_default and #configs or current_config
+  end
+  if not current_config and #configs ~= 0 then
+    current_config = 1
+  end
+  append_after_success_actions()
+  init_fileapis()
 end
 
 --- Delete `CMakeCache.txt` and `CMakeFiles` from current build directory
 function Project.clear_cache()
-	local cd = Project.current_directory()
-	local Path = require("plenary.path")
-	Path:new(vim.fs.joinpath(cd, "CMakeCache.txt")):rm()
-	Path:new(vim.fs.joinpath(cd, "CMakeFiles")):rm({ recursive = true })
-	-- uv.fs_unlink(vim.fs.joinpath(Project.current_directory(), "CMakeCache.txt"), function(f_err, _)
-	-- 	assert(f_err, f_err)
-	-- uv.fs_unlink(vim.fs.joinpath(Project.current_directory(), "CMakeFiles"), function(d_err)
-	-- 	assert(d_err, d_err)
-	-- 	callback()
-	-- end)
-	-- end)
+  local cd = Project.current_directory()
+  local Path = require("plenary.path")
+  Path:new(vim.fs.joinpath(cd, "CMakeCache.txt")):rm()
+  Path:new(vim.fs.joinpath(cd, "CMakeFiles")):rm({ recursive = true })
+  -- uv.fs_unlink(vim.fs.joinpath(Project.current_directory(), "CMakeCache.txt"), function(f_err, _)
+  -- 	assert(f_err, f_err)
+  -- uv.fs_unlink(vim.fs.joinpath(Project.current_directory(), "CMakeFiles"), function(d_err)
+  -- 	assert(d_err, d_err)
+  -- 	callback()
+  -- end)
+  -- end)
 end
 
 --- Get all project's generate configs
 --- @return CMakeGenerateOption[]
 function Project.generate_options()
-	return configs
+  return configs
 end
 
 --- Get current generate option
 ---@return unknown
 function Project.current_generate_option()
-	assert(current_config, "No current project config")
-	return configs[current_config]
+  assert(current_config, "No current project config")
+  return configs[current_config]
 end
 
 ---Get current generate option's index
 ---@return number|nil
 function Project.current_generate_option_idx()
-	return current_config
+  return current_config
 end
 
 --- Set current generate option by index
 --- @param idx number
 function Project.set_current_generate_option(idx)
-	assert(
-		not (idx < 1 or idx > #configs),
-		"Index is out of range. Index is " .. idx .. " for " .. #configs .. " config(s)"
-	)
-	current_config = idx
+  assert(
+    not (idx < 1 or idx > #configs),
+    "Index is out of range. Index is " .. idx .. " for " .. #configs .. " config(s)"
+  )
+  current_config = idx
 end
 
 --- Current build option's index
 ---@return number
 function Project.current_build_option_idx()
-	return configs[current_config].current_build
+  return configs[current_config].current_build
 end
 
 ---Current build option
 ---@return CMakeBuildOption|nil
 function Project.current_build_option()
-	if not Project.current_build_option_idx() then
-		return nil
-	end
-	return configs[current_config].build_options[Project.current_build_option_idx()]
+  if not Project.current_build_option_idx() then
+    return nil
+  end
+  return configs[current_config].build_options[Project.current_build_option_idx()]
 end
 
 --- Set current build option by index
 --- @param idx number
 function Project.set_current_build_option(idx)
-	local _size = #configs[current_config].build_options
-	assert(not (idx < 1 or idx > _size), "Index is out of range. Index is " .. idx .. " for " .. _size .. "config(s)")
-	configs[current_config].current_build = idx
+  local _size = #configs[current_config].build_options
+  assert(not (idx < 1 or idx > _size), "Index is out of range. Index is " .. idx .. " for " .. _size .. "config(s)")
+  configs[current_config].current_build = idx
 end
 
 ---Current build directory (usually `build-<...>`)
 ---@return string|nil
 function Project.current_directory()
-	return current_config and configs[current_config].directory or nil
+  return current_config and configs[current_config].directory or nil
 end
 
 ---Current fileapi
 ---@return CMakeFileApi|nil
 local current_fileapi = function()
-	if not Project.current_directory() or not fileapis[Project.current_directory()] then
-		return nil
-	end
-	return fileapis[Project.current_directory()]
+  if not Project.current_directory() or not fileapis[Project.current_directory()] then
+    return nil
+  end
+  return fileapis[Project.current_directory()]
 end
 
 ---Set current executable target by it's index
 ---@param idx number
 function Project.set_current_executable_target(idx)
-	assert(not current_fileapi())
-	assert(
-		not (idx < 1 or idx > #current_fileapi().targets),
-		"Index is out of range. Index is " .. idx .. " for " .. #current_fileapi().targets(" target(s)")
-	)
-	assert(current_fileapi().targets[idx].type == "EXECUTABLE", "target is not executable")
-	current_fileapi().current_executable_target = idx
+  assert(current_fileapi(), "current fileapi in nil")
+  assert(
+    not (idx < 1 or idx > #current_fileapi().targets),
+    "Index is out of range. Index is " .. idx .. " for " .. #current_fileapi().targets .. " target(s)"
+  )
+  assert(current_fileapi().targets[idx].type == "EXECUTABLE", "target is not executable")
+  current_fileapi().current_executable_target = idx
 end
 
 ---Current executable target's index
 ---@return number|nil
 function Project.current_executable_target_idx()
-	local _curr_fileapi = current_fileapi()
-	if not _curr_fileapi then
-		return nil
-	end
-	return _curr_fileapi.current_executable_target
+  local _curr_fileapi = current_fileapi()
+  if not _curr_fileapi then
+    return nil
+  end
+  return _curr_fileapi.current_executable_target
 end
 
 ---Current executable target
 ---@return CMakeFileApiTarget|nil
 function Project.current_executable_target()
-	local _curr_fileapi = current_fileapi()
-	if not _curr_fileapi then
-		return nil
-	end
-	local _curr_exe_target_idx = Project.current_executable_target_idx()
-	if not _curr_exe_target_idx then
-		return nil
-	end
-	return _curr_fileapi.targets[_curr_exe_target_idx]
+  local _curr_fileapi = current_fileapi()
+  if not _curr_fileapi then
+    return nil
+  end
+  local _curr_exe_target_idx = Project.current_executable_target_idx()
+  if not _curr_exe_target_idx then
+    return nil
+  end
+  return _curr_fileapi.targets[_curr_exe_target_idx]
 end
 
 ---Targets for current generate option (configuration)
 ---@param opts {type: string|nil}|nil Filter parameters
 ---@return CMakeFileApiTarget[]|nil
 function Project.current_targets(opts)
-	opts = opts or {}
-	local _curr_fileapi = current_fileapi()
-	if not _curr_fileapi then
-		return nil
-	end
-	if opts.type then
-		return vim.tbl_filter(function(t)
-			return t.type == opts.type
-		end, _curr_fileapi.targets)
-	end
-	return _curr_fileapi.targets
+  opts = opts or {}
+  local _curr_fileapi = current_fileapi()
+  if not _curr_fileapi then
+    return nil
+  end
+  if opts.type then
+    return vim.tbl_filter(function(t)
+      return t.type == opts.type
+    end, _curr_fileapi.targets)
+  end
+  return _curr_fileapi.targets
 end
 
 --TODO: opts -> config identifier (which can be number, string or configuration table)
@@ -253,60 +253,60 @@ end
 ---@param opts {idx:number, path:string, config:CMakeGenerateOption}|nil Specity configuration to generate query
 ---@param callback function Callback. Will be executed after query created or if it already exists
 function Project.create_fileapi_query(opts, callback)
-	opts = opts or {}
-	local path
+  opts = opts or {}
+  local path
 
-	if type(opts.idx) == "number" then
-		path = configs[opts.idx].directory
-	elseif type(opts.path) == "string" then
-		path = opts.path
-		--TODO: compare getmetatable(opts.config) with VariantConfig (and PresetsConfig in future)
-	elseif type(opts.config) == "table" then
-		path = opts.config.directory
-	else
-		path = configs[current_config].directory
-	end
-	FileApi.query_exists(path, function(query_exists)
-		if not query_exists then
-			FileApi.create(path, function()
-				callback()
-			end)
-		else
-			callback()
-		end
-	end)
+  if type(opts.idx) == "number" then
+    path = configs[opts.idx].directory
+  elseif type(opts.path) == "string" then
+    path = opts.path
+    --TODO: compare getmetatable(opts.config) with VariantConfig (and PresetsConfig in future)
+  elseif type(opts.config) == "table" then
+    path = opts.config.directory
+  else
+    path = configs[current_config].directory
+  end
+  FileApi.query_exists(path, function(query_exists)
+    if not query_exists then
+      FileApi.create(path, function()
+        callback()
+      end)
+    else
+      callback()
+    end
+  end)
 end
 
 local do_setup = function(opts)
-	reset_internals()
-	local variants_path = vim.fs.joinpath(uv.cwd(), constants.variants_yaml_filename)
-	utils.file_exists(variants_path, function(variants_exists)
-		if variants_exists then
-			utils.read_file(variants_path, function(variants_data)
-				local yaml = require("cmake.lyaml").eval(variants_data)
-				Project.from_variants(yaml)
-			end)
-		else
-			Project.from_variants(config.variants)
-		end
-	end)
+  reset_internals()
+  local variants_path = vim.fs.joinpath(uv.cwd(), constants.variants_yaml_filename)
+  utils.file_exists(variants_path, function(variants_exists)
+    if variants_exists then
+      utils.read_file(variants_path, function(variants_data)
+        local yaml = require("cmake.lyaml").eval(variants_data)
+        Project.from_variants(yaml)
+      end)
+    else
+      Project.from_variants(config.variants)
+    end
+  end)
 end
 
 ---Setup project, which means get capabilities, create configurations from presets or variants
 ---and read fileapis
 ---@param opts {first_time_only: boolean}|nil
 function Project.setup(opts)
-	opts = opts or {}
-	if opts.first_time_only and initialised then
-		return
-	end
-	if not initialised then
-		require("cmake.capabilities").setup(function()
-			do_setup(opts)
-		end)
-	else
-		do_setup(opts)
-	end
+  opts = opts or {}
+  if opts.first_time_only and initialised then
+    return
+  end
+  if not initialised then
+    require("cmake.capabilities").setup(function()
+      do_setup(opts)
+    end)
+  else
+    do_setup(opts)
+  end
 end
 
 return Project
-- 
cgit v1.2.3