local standards = require("luacheck.standards")
local empty = {}
local luajit_string_def = standards.def_fields(
	"byte",
	"char",
	"dump",
	"find",
	"format",
	"gmatch",
	"gsub",
	"len",
	"lower",
	"match",
	"rep",
	"reverse",
	"sub",
	"upper"
)
-- Globals added by lua-nginx-module 0.10.10 in internal definition table format.
-- Will be added to `luajit` std to form `ngx_lua` std.
local ngx_defs = {
	fields = {
		ngx = {
			fields = {
				arg = {other_fields = true, read_only = false},
				var = {other_fields = true, read_only = false},
				OK = empty,
				ERROR = empty,
				AGAIN = empty,
				DONE = empty,
				DECLINED = empty,
				null = empty,
				HTTP_GET = empty,
				HTTP_HEAD = empty,
				HTTP_PUT = empty,
				HTTP_POST = empty,
				HTTP_DELETE = empty,
				HTTP_OPTIONS = empty,
				HTTP_MKCOL = empty,
				HTTP_COPY = empty,
				HTTP_MOVE = empty,
				HTTP_PROPFIND = empty,
				HTTP_PROPPATCH = empty,
				HTTP_LOCK = empty,
				HTTP_UNLOCK = empty,
				HTTP_PATCH = empty,
				HTTP_TRACE = empty,
				HTTP_CONTINUE = empty,
				HTTP_SWITCHING_PROTOCOLS = empty,
				HTTP_OK = empty,
				HTTP_CREATED = empty,
				HTTP_ACCEPTED = empty,
				HTTP_NO_CONTENT = empty,
				HTTP_PARTIAL_CONTENT = empty,
				HTTP_SPECIAL_RESPONSE = empty,
				HTTP_MOVED_PERMANENTLY = empty,
				HTTP_MOVED_TEMPORARILY = empty,
				HTTP_SEE_OTHER = empty,
				HTTP_NOT_MODIFIED = empty,
				HTTP_TEMPORARY_REDIRECT = empty,
				HTTP_BAD_REQUEST = empty,
				HTTP_UNAUTHORIZED = empty,
				HTTP_PAYMENT_REQUIRED = empty,
				HTTP_FORBIDDEN = empty,
				HTTP_NOT_FOUND = empty,
				HTTP_NOT_ALLOWED = empty,
				HTTP_NOT_ACCEPTABLE = empty,
				HTTP_REQUEST_TIMEOUT = empty,
				HTTP_CONFLICT = empty,
				HTTP_GONE = empty,
				HTTP_UPGRADE_REQUIRED = empty,
				HTTP_TOO_MANY_REQUESTS = empty,
				HTTP_CLOSE = empty,
				HTTP_ILLEGAL = empty,
				HTTP_INTERNAL_SERVER_ERROR = empty,
				HTTP_METHOD_NOT_IMPLEMENTED = empty,
				HTTP_BAD_GATEWAY = empty,
				HTTP_SERVICE_UNAVAILABLE = empty,
				HTTP_GATEWAY_TIMEOUT = empty,
				HTTP_VERSION_NOT_SUPPORTED = empty,
				HTTP_INSUFFICIENT_STORAGE = empty,
				STDERR = empty,
				EMERG = empty,
				ALERT = empty,
				CRIT = empty,
				ERR = empty,
				WARN = empty,
				NOTICE = empty,
				INFO = empty,
				DEBUG = empty,
				ctx = {other_fields = true, read_only = false},
				location = standards.def_fields("capture", "capture_multi"),
				status = {read_only = false},
				header = {other_fields = true, read_only = false},
				resp = standards.def_fields("get_headers"),
				req = standards.def_fields(
					"is_internal",
					"start_time",
					"http_version",
					"raw_header",
					"get_method",
					"set_method",
					"set_uri",
					"set_uri_args",
					"get_uri_args",
					"get_post_args",
					"get_headers",
					"set_header",
					"clear_header",
					"read_body",
					"discard_body",
					"get_body_data",
					"get_body_file",
					"set_body_data",
					"set_body_file",
					"init_body",
					"append_body",
					"finish_body",
					"socket"
				),
				exec = empty,
				redirect = empty,
				send_headers = empty,
				headers_sent = empty,
				print = empty,
				say = empty,
				log = empty,
				flush = empty,
				exit = empty,
				eof = empty,
				sleep = empty,
				escape_uri = empty,
				unescape_uri = empty,
				encode_args = empty,
				decode_args = empty,
				encode_base64 = empty,
				decode_base64 = empty,
				crc32_short = empty,
				crc32_long = empty,
				hmac_sha1 = empty,
				md5 = empty,
				md5_bin = empty,
				sha1_bin = empty,
				quote_sql_str = empty,
				today = empty,
				time = empty,
				now = empty,
				update_time = empty,
				localtime = empty,
				utctime = empty,
				cookie_time = empty,
				http_time = empty,
				parse_http_time = empty,
				is_subrequest = empty,
				re = standards.def_fields("match", "find", "gmatch", "sub", "gsub"),
				shared = {other_fields = true, read_only = false},
				socket = standards.def_fields("udp", "tcp", "connect", "stream"),
				get_phase = empty,
				thread = standards.def_fields("spawn", "wait", "kill"),
				on_abort = empty,
				timer = standards.def_fields("at", "every", "running_count", "pending_count"),
				config = {
					fields = {
						subsystem = luajit_string_def,
						debug = empty,
						prefix = empty,
						nginx_version = empty,
						nginx_configure = empty,
						ngx_lua_version = empty,
					},
				},
				worker = standards.def_fields("pid", "count", "id", "exiting"),
			},
		},
		ndk = {
			fields = {
				set_var = {other_fields = true},
			},
		},
	},
}
return ngx_defs