Current section

Files

Jump to
quic rebar.config
Raw

rebar.config

{erl_opts, [
debug_info,
warn_export_vars,
warn_shadow_vars,
warn_obsolete_guard,
{platform_define, "^[0-9]+", namespaced_types}
]}.
%% Include subdirectories for HTTP/3 and QPACK
{src_dirs, ["src", "src/dist", "src/interop", "src/qpack", "src/h3"]}.
{minimum_otp_vsn, "26"}.
{deps, []}.
{profiles, [
{test, [
{deps, [
{proper, "1.4.0"}
]},
{erl_opts, [debug_info, nowarn_export_all]}
]},
{interop_client, [
{escript_main_app, quic},
{escript_name, quic_interop_client},
{escript_emu_args, "%%! -escript main quic_interop_client\n"}
]},
{interop_server, [
{escript_main_app, quic},
{escript_name, quic_interop_server},
{escript_emu_args, "%%! -escript main quic_interop_server\n"}
]},
{h3_client, [
{escript_main_app, quic},
{escript_name, quic_h3_client},
{escript_emu_args, "%%! -escript main quic_h3_client\n"}
]},
{h3_server, [
{escript_main_app, quic},
{escript_name, quic_h3_server},
{escript_emu_args, "%%! -escript main quic_h3_server\n"}
]},
{dist_node, [
{relx, [
{release, {quic_node, "0.1.0"}, [
quic,
sasl
]},
{mode, prod},
{include_erts, true},
{extended_start_script, true},
{sys_config_src, "config/dist_sys.config.src"},
{vm_args_src, "config/dist_vm.args.src"}
]}
]}
]}.
{project_plugins, [
{rebar3_proper, "~> 0.12"},
{rebar3_hex, "~> 7.0"},
{rebar3_ex_doc, "~> 0.2"},
{rebar3_lint, "~> 5.0"},
{erlfmt, "~> 1.7"}
]}.
{hex, [{doc, ex_doc}]}.
{ex_doc, [
{source_url, <<"https://github.com/benoitc/erlang_quic">>},
{extras, [
<<"README.md">>,
<<"CHANGELOG.md">>,
<<"docs/GETTING_STARTED.md">>,
<<"docs/DEVELOPER_GUIDE.md">>,
<<"docs/features.md">>,
<<"docs/DESIGN.md">>,
<<"docs/SERVER_GUIDE.md">>,
<<"docs/CLIENT_GUIDE.md">>,
<<"docs/QUIC_DIST.md">>,
<<"docs/QLOG_GUIDE.md">>,
<<"docs/HTTP3.md">>,
<<"docs/PERFORMANCE.md">>
]},
{groups_for_extras, [
{<<"Guides">>, [
<<"docs/GETTING_STARTED.md">>,
<<"docs/DEVELOPER_GUIDE.md">>,
<<"docs/CLIENT_GUIDE.md">>,
<<"docs/SERVER_GUIDE.md">>
]},
{<<"Reference">>, [
<<"docs/features.md">>,
<<"docs/DESIGN.md">>,
<<"docs/PERFORMANCE.md">>
]},
{<<"Advanced">>, [
<<"docs/QUIC_DIST.md">>,
<<"docs/QLOG_GUIDE.md">>,
<<"docs/HTTP3.md">>
]}
]},
{main, <<"readme">>},
{groups_for_modules, [
{<<"Public API">>, [quic, quic_listener]},
{<<"Connection">>, [quic_connection, quic_stream]},
{<<"Protocol">>, [quic_packet, quic_frame, quic_varint]},
{<<"Cryptography">>, [quic_crypto, quic_tls, quic_keys, quic_aead, quic_hkdf]},
{<<"Flow Control">>, [quic_flow, quic_cc, quic_loss, quic_ack]},
{<<"Session">>, [quic_ticket]},
{<<"Distribution">>, [
quic_dist,
quic_dist_controller,
quic_dist_sup,
quic_epmd,
quic_discovery,
quic_discovery_static,
quic_discovery_dns,
quic_dist_tickets
]},
{<<"HTTP/3">>, [
quic_h3,
quic_h3_connection,
quic_h3_frame,
quic_h3_client,
quic_h3_server
]},
{<<"QPACK">>, [
quic_qpack,
quic_qpack_huffman
]},
{<<"Load Balancer">>, [quic_lb]}
]}
]}.
{erlfmt, [
write,
{files, [
"{src,test,include,scripts}/**/*.{hrl,erl,app.src,escript}",
"src/{qpack,h3}/**/*.{hrl,erl}",
"erldns.example.config",
"rebar.config"
]}
]}.
{elvis, [
{config, [
#{
files => [
"src/*.erl",
"src/dist/**/*.erl",
"src/interop/**/*.erl",
"src/qpack/**/*.erl",
"src/h3/**/*.erl"
],
rules => [
%% Keep
{elvis_style, no_macros, disable},
{elvis_style, state_record_and_type, #{
ignore => [
quic_dist_controller,
quic_dist_tickets,
quic_listener,
quic_listener_manager,
quic_server_registry,
quic_connection,
quic_h3_connection
]
}},
{elvis_style, private_data_types, #{
ignore => [
quic_keys, quic_loss, quic_packet, quic_ticket, quic_lb, quic, quic_cc
]
}},
{elvis_style, no_receive_without_timeout, #{
ignore => [quic_dist, quic_dist_controller, quic_interop_server, quic_h3_server]
}},
{elvis_style, no_debug_call, #{
ignore => [
quic_interop_client, quic_interop_server, quic_h3_client, quic_h3_server
]
}},
{elvis_style, atom_naming_convention, #{
% public_key record field names need this
ignore => [quic_dist],
regex => "^[a-z](_?[a-zA-Z0-9]+)*(_SUITE)?$"
}},
%% Since OTP28
{elvis_style, prefer_strict_generators, disable},
%% New in elvis_core 5.x - disable for now
{elvis_style, prefer_sigils, disable},
{elvis_style, consistent_ok_error_spec, disable},
{elvis_style, abc_size, disable},
{elvis_style, code_complexity, disable},
{elvis_style, consistent_variable_naming, disable},
%% Disable rules that are too strict for this codebase
{elvis_style, no_common_caveats_call, disable},
{elvis_style, no_init_lists, disable},
{elvis_style, no_spec_with_records, disable},
{elvis_style, param_pattern_matching, disable},
{elvis_style, no_used_ignored_variables, disable},
{elvis_style, no_throw, #{
ignore => [
quic_qpack,
quic_qpack_huffman,
quic_h3_frame,
quic_h3_connection
]
}},
{elvis_text_style, max_line_length, #{limit => 120}},
{elvis_style, no_if_expression, #{
ignore => [quic_aead, quic_discovery_dns, quic_stream, quic_connection]
}},
{elvis_style, no_deep_nesting, #{
ignore => [quic_listener, quic_interop_client, quic_connection, quic_h3_client]
}},
{elvis_style, variable_naming_convention, #{ignore => [quic_tls]}},
%% TODO: Per-module ignores; to be fixed later
{elvis_style, dont_repeat_yourself, #{
ignore => [
quic_ack,
quic_connection,
quic_cc,
quic_cc_bbr,
quic_cc_cubic,
quic_cc_newreno,
quic_discovery_dns,
quic_listener,
quic_loss,
quic_aead,
quic_dist_controller,
quic_packet,
quic_interop_client,
quic_socket,
quic_tls,
quic_qpack,
quic_qpack_huffman,
quic_h3_frame,
quic_h3_connection
]
}},
{elvis_style, max_function_length, #{
ignore => [
quic_ack,
quic_cc,
quic_cc_bbr,
quic_cc_cubic,
quic_cc_newreno,
quic_connection,
quic_dist,
quic_dist_controller,
quic_frame,
quic_interop_client,
quic_lb,
quic_listener,
quic_loss,
quic_packet,
quic_pmtu,
quic_qlog,
quic_socket,
quic_stream,
quic_sup,
quic_tls,
quic_qpack,
quic_qpack_huffman,
quic_h3_frame,
quic_h3_connection,
quic_h3_client,
quic_h3_server
]
}},
{elvis_style, no_god_modules, #{
limit => 30,
ignore => [
quic,
quic_cc,
quic_cc_bbr,
quic_cc_cubic,
quic_cc_newreno,
quic_connection,
quic_crypto,
quic_stream,
quic_dist_controller,
quic_qpack,
quic_h3,
quic_h3_connection
]
}},
{elvis_style, max_function_clause_length, #{
ignore => [
quic_ack,
quic_cc,
quic_cc_bbr,
quic_cc_cubic,
quic_cc_newreno,
quic_connection,
quic_dist,
quic_dist_controller,
quic_interop_client,
quic_lb,
quic_listener,
quic_packet,
quic_pmtu,
quic_socket,
quic_stream,
quic_sup,
quic_tls,
quic_loss,
quic_qpack,
quic_h3_connection,
quic_h3_client,
quic_h3_server
]
}},
{elvis_style, max_module_length, #{
ignore => [
quic_cc_bbr,
quic_cc_cubic,
quic_cc_newreno,
quic_connection,
quic_dist,
quic_dist_controller,
quic_interop_client,
quic_listener,
quic_loss,
quic_socket,
quic_tls,
quic_qpack,
quic_h3_connection
]
}},
{elvis_style, max_function_arity, #{
ignore => [quic_loss]
}},
{elvis_style, max_record_fields, #{
ignore => [
quic_cc_bbr,
quic_cc_cubic,
quic_cc_newreno,
quic_connection,
quic_dist_controller,
quic_h3_connection
]
}},
{elvis_style, no_catch_expressions, #{
ignore => [quic_dist, quic_h3_connection]
}},
{elvis_style, simplify_anonymous_functions, #{
ignore => [quic_dist]
}},
{elvis_style, no_invalid_dynamic_calls, #{
ignore => [quic_dist, quic_h3_connection]
}}
],
ruleset => erl_files
},
#{
files => ["include/*.hrl"],
ruleset => hrl_files
},
#{
files => ["rebar.config"],
ruleset => rebar_config
}
]}
]}.
{dialyzer, [
{warnings, [
error_handling,
unknown
]},
{plt_apps, all_deps},
{plt_extra_apps, [crypto, ssl]}
]}.
{xref_checks, [
undefined_function_calls,
undefined_functions,
deprecated_function_calls,
deprecated_functions
]}.
%% Ignore unused exports prepared for future use
{xref_ignores, [
{quic_listener, register_cid, 3},
{quic_listener, unregister_cid, 2},
{quic_ticket, create_ticket, 5},
{quic_ticket, build_new_session_ticket, 1},
%% Distribution module callbacks (used by Erlang VM)
{quic_dist, listen, 1},
{quic_dist, listen, 2},
{quic_dist, accept, 1},
{quic_dist, accept_connection, 5},
{quic_dist, setup, 5},
{quic_dist, close, 1},
{quic_dist, select, 1},
{quic_dist, address, 0},
{quic_dist, is_node_name, 1},
{quic_dist, acceptor_loop, 2},
{quic_dist, do_setup, 6},
%% EPMD module callbacks
{quic_epmd, start_link, 0},
{quic_epmd, register_node, 2},
{quic_epmd, register_node, 3},
{quic_epmd, port_please, 2},
{quic_epmd, port_please, 3},
{quic_epmd, names, 1},
{quic_epmd, address_please, 3},
%% Discovery behaviour callbacks
{quic_discovery_static, init, 1},
{quic_discovery_static, register, 3},
{quic_discovery_static, lookup, 2},
{quic_discovery_static, list_nodes, 1},
{quic_discovery_dns, init, 1},
{quic_discovery_dns, lookup, 2},
{quic_discovery_dns, list_nodes, 1},
%% HTTP/3 frame helpers (used by quic_h3_connection)
{quic_h3_frame, decode_stream_type, 1},
{quic_h3_frame, is_reserved_frame_type, 1},
{quic_h3_frame, is_reserved_setting, 1}
]}.
{cover_enabled, true}.
{cover_opts, [verbose]}.