File 8142-fixup-Add-options-for-silencing-warnings-for-behavio.patch of Package erlang
From b38327e81f7c75cfbec0d76fcd1c094d8a3de0fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Fri, 8 Nov 2024 06:19:26 +0100
Subject: [PATCH 2/2] fixup! Add options for silencing warnings for behaviours
---
lib/compiler/src/compile.erl | 3 +++
lib/stdlib/src/erl_lint.erl | 13 +++++++++++--
lib/stdlib/test/erl_lint_SUITE.erl | 27 +++++++++++++++++----------
3 files changed, 31 insertions(+), 12 deletions(-)
diff --git a/lib/compiler/doc/src/compile.xml b/lib/compiler/doc/src/compile.xml
index 4f58a162be..10ddb07f07 100644
--- a/lib/compiler/doc/src/compile.xml
+++ b/lib/compiler/doc/src/compile.xml
@@ -934,6 +934,12 @@ module.beam: module.erl \
of such tuples.</p>
</item>
+ <tag><c>nowarn_behaviours</c></tag>
+ <item>
+ <p>By default, warnings are emitted for issues with behaviours.
+ Use this option to turn off all warnings of this kind.</p>
+ </item>
+
<tag><c>nowarn_conflicting_behaviours</c></tag>
<item>
<p>By default, warnings are emitted when a module opts in to
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index b871e76491..b190225cbe 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -823,6 +823,10 @@ start(File, Opts) ->
bool_option(warn_update_literal, nowarn_update_literal,
true, Opts)},
%% Behaviour warnings.
+ {behaviours,
+ bool_option(warn_behaviours,
+ nowarn_behaviours,
+ true, Opts)},
{conflicting_behaviours,
bool_option(warn_conflicting_behaviours,
nowarn_conflicting_behaviours,
@@ -1256,8 +1260,13 @@ post_traversal_check(Forms, St0) ->
%% check_behaviour(State0) -> State
%% Check that the behaviour attribute is valid.
-check_behaviour(St0) ->
- behaviour_check(St0#lint.behaviour, St0).
+check_behaviour(St) ->
+ case is_warn_enabled(behaviours, St) of
+ true ->
+ behaviour_check(St#lint.behaviour, St);
+ false ->
+ St
+ end.
%% behaviour_check([{Anno,Behaviour}], State) -> State'
%% Check behaviours for existence and defined functions.
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index e1ca2ebe24..c51a91951a 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -3472,10 +3472,14 @@ behaviour_basic(Config) when is_list(Config) ->
],
[] = run(Config, Ts),
- Subst = #{behaviour1 => [nowarn_undefined_behaviour_func],
- behaviour2 => [nowarn_undefined_behaviour_func],
- behaviour4 => [nowarn_undefined_behaviour_func]},
+ Subst0 = #{behaviour1 => [nowarn_undefined_behaviour_func],
+ behaviour2 => [nowarn_undefined_behaviour_func],
+ behaviour4 => [nowarn_undefined_behaviour_func]},
+ [] = run(Config, rewrite(Ts, Subst0)),
+
+ Subst = #{K => [nowarn_behaviours] || K := _ <- Subst0},
[] = run(Config, rewrite(Ts, Subst)),
+
ok.
%% Basic tests with multiple behaviours.
@@ -3781,13 +3785,16 @@ otp_11861(Conf) when is_list(Conf) ->
],
[] = run(Conf, Ts),
- Subst = #{otp_11861_1 => [nowarn_conflicting_behaviours],
- otp_11861_11 => [nowarn_ill_defined_behaviour_callbacks],
- otp_11861_12 => [nowarn_undefined_behaviour],
- otp_11861_13 => [nowarn_undefined_behaviour],
- otp_11861_17 => [nowarn_undefined_behaviour_callbacks],
- otp_11861_19 => [nowarn_ill_defined_optional_callbacks]
- },
+ Subst0 = #{otp_11861_1 => [nowarn_conflicting_behaviours],
+ otp_11861_11 => [nowarn_ill_defined_behaviour_callbacks],
+ otp_11861_12 => [nowarn_undefined_behaviour],
+ otp_11861_13 => [nowarn_undefined_behaviour],
+ otp_11861_17 => [nowarn_undefined_behaviour_callbacks],
+ otp_11861_19 => [nowarn_ill_defined_optional_callbacks]
+ },
+ [] = run(Conf, rewrite(Ts, Subst0)),
+
+ Subst = #{K => [nowarn_behaviours] || K := _ <- Subst0},
[] = run(Conf, rewrite(Ts, Subst)),
true = code:set_path(CodePath),
--
2.43.0