return function( filepath )
	local name = string.match( filepath, "[^/]*$" )
	-- files to exclude from coverage calculations
	if name == "Info.lua" or
		string.match( filepath, ".*Test.*%.lua$" ) or
		string.match( filepath, "/tests/" ) or
		string.match( filepath, "/LrView.+Properties.%lua$" ) or -- documentation only
		string.match( filepath, "/resources/" ) or
		string.match( filepath, "^core_app/scripts/" ) or
		string.match( filepath, "^modules/stamina/" ) or
		string.match( filepath, "^modules/monitor/" ) or
		string.match( filepath, "^modules/layout_module/layout_templates/" ) or
		string.match( filepath, "^plugins/camera_stats.lrdevplugin" ) or
		string.match( filepath, "^toolkits/coverage/" ) or
		string.match( filepath, "Mock" )
	then
		return nil
	end
	
	if string.match( filepath, "/Lr" ) and not string.match( name, '^Lrm' ) then
		return "sdk-namespaces", name
	end
	
	-- group based on the first 2 path elements beyond source root
	--return string.match( filepath, "^[^/]*/[^/]*/[^/]*" ) or "(unknown)", name --first 3 subsystems
	return string.match( filepath, "^[^/]*/[^/]*" ) or "(unknown)", name


end

