cache = true
unused_secondaries = false
codes = true
ignore = { "411/err", "421/err", "411/ok", "421/ok", "211/_ENV", "431/log", "143/table", "113/unpack" }

max_line_length = 150

read_globals = {
	"prosody",
	"import",
};
files["prosody"] = {
	allow_defined_top = true;
	module = true;
}
files["prosodyctl"] = {
	allow_defined_top = true;
	module = true;
};
files["core/"] = {
	globals = {
		"prosody.hosts.?",
	};
}
files["util/"] = {
	-- Ignore unwrapped license text
	max_comment_line_length = false;
}
files["plugins/"] = {
	module = true;
	allow_defined_top = true;
	read_globals = {
		-- Module instance
		"module.name",
		"module.host",
		"module._log",
		"module.log",
		"module.event_handlers",
		"module.reloading",
		"module.saved_state",
		"module.global",
		"module.path",

		-- Module API
		"module.add_extension",
		"module.add_feature",
		"module.add_identity",
		"module.add_item",
		"module.add_timer",
		"module.broadcast",
		"module.context",
		"module.depends",
		"module.fire_event",
		"module.get_directory",
		"module.get_host",
		"module.get_host_items",
		"module.get_host_type",
		"module.get_name",
		"module.get_option",
		"module.get_option_array",
		"module.get_option_boolean",
		"module.get_option_inherited_set",
		"module.get_option_number",
		"module.get_option_path",
		"module.get_option_scalar",
		"module.get_option_set",
		"module.get_option_string",
		"module.handle_items",
		"module.hook",
		"module.hook_global",
		"module.hook_object_event",
		"module.hook_tag",
		"module.load_resource",
		"module.measure",
		"module.measure_event",
		"module.measure_global_event",
		"module.measure_object_event",
		"module.open_store",
		"module.provides",
		"module.remove_item",
		"module.require",
		"module.send",
		"module.set_global",
		"module.shared",
		"module.unhook",
		"module.unhook_object_event",
		"module.wrap_event",
		"module.wrap_global",
		"module.wrap_object_event",

		-- mod_http API
		"module.http_url",
	};
	globals = {
		-- Methods that can be set on module API
		"module.unload",
		"module.add_host",
		"module.load",
		"module.add_host",
		"module.save",
		"module.restore",
		"module.command",
		"module.environment",
	};
}
files["spec/"] = {
	std = "+busted"
}
files["prosody.cfg.lua"] = {
	ignore = { "131" };
	globals = {
		"Host",
		"host",
		"VirtualHost",
		"Component",
		"component",
		"Include",
		"include",
		"RunScript"
	};
}

if os.getenv("PROSODY_STRICT_LINT") ~= "1" then
	-- These files have not yet been brought up to standard
	-- Do not add more files here, but do help us fix these!
	local exclude_files = {
	"doc/net.server.lua";

	"fallbacks/bit.lua";
	"fallbacks/lxp.lua";

	"net/adns.lua";
	"net/cqueues.lua";
	"net/dns.lua";
	"net/server_select.lua";

	"plugins/mod_admin_adhoc.lua";
	"plugins/mod_admin_telnet.lua";
	"plugins/mod_http_files.lua";
	"plugins/mod_net_multiplex.lua";
	"plugins/mod_privacy.lua";
	"plugins/mod_s2s/mod_s2s.lua";
	"plugins/mod_s2s/s2sout.lib.lua";
	"plugins/mod_storage_sql1.lua";
	"plugins/mod_storage_sql.lua";
	"plugins/mod_websocket.lua";

	"spec/core_configmanager_spec.lua";
	"spec/core_moduleapi_spec.lua";
	"spec/net_http_parser_spec.lua";
	"spec/util_cache_spec.lua";
	"spec/util_events_spec.lua";
	"spec/util_http_spec.lua";
	"spec/util_ip_spec.lua";
	"spec/util_json_spec.lua";
	"spec/util_multitable_spec.lua";
	"spec/util_rfc6724_spec.lua";
	"spec/util_throttle_spec.lua";
	"spec/util_xmppstream_spec.lua";

	"tools/ejabberd2prosody.lua";
	"tools/ejabberdsql2prosody.lua";
	"tools/erlparse.lua";
	"tools/jabberd14sql2prosody.lua";
	"tools/migration/migrator.cfg.lua";
	"tools/migration/migrator/jabberd14.lua";
	"tools/migration/migrator/mtools.lua";
	"tools/migration/migrator/prosody_files.lua";
	"tools/migration/migrator/prosody_sql.lua";
	"tools/migration/prosody-migrator.lua";
	"tools/openfire2prosody.lua";
	"tools/xep227toprosody.lua";

	"util/sasl/digest-md5.lua";
	}
	for _, file in ipairs(exclude_files) do
		files[file] = { only = {} }
	end
else
	max_cyclomatic_complexity = 50
	max_line_length = 120
end