File 0804-erl_lint-Add-nowarn_unused_type-option.patch of Package erlang

From ed31aef5639ae1a8911862c84006773e41c27fc9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20H=C3=B6gberg?= <john@erlang.org>
Date: Fri, 1 Nov 2019 13:08:33 +0100
Subject: [PATCH] erl_lint: Add nowarn_unused_type option

---
 lib/stdlib/src/erl_lint.erl        | 11 ++++++++++-
 lib/stdlib/test/erl_lint_SUITE.erl | 30 +++++++++++++++++++++++++++---
 2 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index d6cb57e392..54b0fbd999 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -556,6 +556,9 @@ start(File, Opts) ->
 	 {unused_function,
 	  bool_option(warn_unused_function, nowarn_unused_function,
 		      true, Opts)},
+	 {unused_type,
+	  bool_option(warn_unused_type, nowarn_unused_type,
+		      true, Opts)},
 	 {bif_clash,
 	  bool_option(warn_bif_clash, nowarn_bif_clash,
 		      true, Opts)},
@@ -3150,7 +3153,13 @@ add_missing_spec_warnings(Forms, St0, Type) ->
 		  add_warning(L, {missing_spec,FA}, St)
 	  end, St0, Warns).
 
-check_unused_types(Forms, #lint{usage=Usage, types=Ts, exp_types=ExpTs}=St) ->
+check_unused_types(Forms, St) ->
+    case is_warn_enabled(unused_type, St) of
+        true -> check_unused_types_1(Forms, St);
+        false -> St
+    end.
+
+check_unused_types_1(Forms, #lint{usage=Usage, types=Ts, exp_types=ExpTs}=St) ->
     case [File || {attribute,_L,file,{File,_Line}} <- Forms] of
 	[FirstFile|_] ->
 	    D = Usage#usage.used_types,
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index a8ed4b19db..38d07249fd 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -64,7 +64,8 @@
          predef/1,
          maps/1,maps_type/1,maps_parallel_match/1,
          otp_11851/1,otp_11879/1,otp_13230/1,
-         record_errors/1]).
+         record_errors/1,
+         unused_type/1]).
 
 suite() ->
     [{ct_hooks,[ts_install_cth]},
@@ -84,7 +85,8 @@ all() ->
      too_many_arguments, basic_errors, bin_syntax_errors, predef,
      maps, maps_type, maps_parallel_match,
      otp_11851, otp_11879, otp_13230,
-     record_errors].
+     record_errors,
+     unused_type].
 
 groups() -> 
     [{unused_vars_warn, [],
@@ -915,7 +917,30 @@ unused_function(Config) when is_list(Config) ->
 
     [] = run(Config, Ts),
     ok.
-    
+
+%% Test warnings for unused types
+unused_type(Config) when is_list(Config) ->
+    Ts = [{func1,
+           <<"-type foo() :: term().">>,
+           {[]},                                %Tuple indicates no export_all
+           {warnings,[{1,erl_lint,{unused_type,{foo,0}}}]}},
+
+           %% Turn off warnings for unused types.
+           {func2,
+           <<"-type foo() :: term().">>,
+           {[nowarn_unused_type]},              %Tuple indicates no export_all
+           []},
+
+           %% Turn off warnings for unused types using a -compile() directive.
+           {func3,
+           <<"-compile(nowarn_unused_type).
+              -type foo() :: term().">>,
+           {[]},                                %Tuple indicates no export_all
+           []}],
+
+    [] = run(Config, Ts),
+    ok.
+
 %% OTP-4671. Errors for unsafe variables.
 unsafe_vars(Config) when is_list(Config) ->
     Ts = [{unsafe1,
-- 
2.16.4

openSUSE Build Service is sponsored by