From b90d98ac4d9bc5b832bae94c5632e74c916da164 Mon Sep 17 00:00:00 2001 From: "Nicolas \"Pixel\" Noble" Date: Sat, 20 Jan 2024 19:35:51 -0800 Subject: [PATCH] Adding configuration entry. --- src/luacov/defaults.lua | 10 ++++++++++ src/luacov/hook.lua | 4 ++++ src/luacov/runner.lua | 4 ++++ 3 files changed, 18 insertions(+) diff --git a/src/luacov/defaults.lua b/src/luacov/defaults.lua index 66d8fd6..dff44fa 100644 --- a/src/luacov/defaults.lua +++ b/src/luacov/defaults.lua @@ -73,4 +73,14 @@ return { -- Default: false. includeuntestedfiles = false, + --- Provides a function to parse filenames. + -- This function is used to parse filenames in the debug hook. + -- It is passed the filename as an argument and should return the parsed filename. + -- The default parser removes leading `@` and replaces path separators with `/`. + -- @usage + -- nameparser = function(name) + -- return name:match("^@?(.*)") + -- end + nameparser = nil + } diff --git a/src/luacov/hook.lua b/src/luacov/hook.lua index dd98cab..819d0ef 100644 --- a/src/luacov/hook.lua +++ b/src/luacov/hook.lua @@ -30,8 +30,12 @@ function hook.new(runner) -- Get name of processed file. local name = debug.getinfo(level, "S").source local prefixed_name = string.match(name, "^@(.*)") + local name_parser = runner.configuration.nameparser + local parsed_name = name_parser and name_parser(name) if prefixed_name then name = prefixed_name:gsub("^%.[/\\]", ""):gsub("[/\\]", dir_sep) + elseif parsed_name then + name = parsed_name:gsub("^%.[/\\]", ""):gsub("[/\\]", dir_sep) elseif not runner.configuration.codefromstrings then -- Ignore Lua code loaded from raw strings by default. return diff --git a/src/luacov/runner.lua b/src/luacov/runner.lua index db64f88..c863ccf 100644 --- a/src/luacov/runner.lua +++ b/src/luacov/runner.lua @@ -528,6 +528,10 @@ local function getsourcefile(func) if d and d:sub(1, 1) == "@" then return d:sub(2) end + local name_parser = runner.configuration.nameparser + if d and name_parser then + return name_parser(d) + end end -- Looks for a function inside a table.