Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
2341-stdlib-Let-the-linter-report-all-locations...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2341-stdlib-Let-the-linter-report-all-locations-for-undef.patch of Package erlang
From 3c31bdb47066c33566405ee731d6cdafd206444e Mon Sep 17 00:00:00 2001 From: Hans Bolinder <hasse@erlang.org> Date: Thu, 3 Jun 2021 11:39:14 +0200 Subject: [PATCH 1/2] stdlib: Let the linter report all locations for undef types The Erlang code linter used to report the last location where an undefined type was used. Reporting all locations is similar to how undefined functions and undefined records are reported. --- lib/stdlib/src/erl_lint.erl | 27 ++++++++++++++------------- lib/stdlib/test/erl_lint_SUITE.erl | 5 ++++- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl index 7cafc9ce73..7803273c5e 100644 --- a/lib/stdlib/src/erl_lint.erl +++ b/lib/stdlib/src/erl_lint.erl @@ -1288,8 +1288,10 @@ check_undefined_types(#lint{usage=Usage,types=Def}=St0) -> TA <- UTAs, not is_map_key(TA, Def), not is_default_type(TA)], - foldl(fun ({TA,Anno}, St) -> - add_error(Anno, {undefined_type,TA}, St) + foldl(fun ({TA,AnnoList}, St) -> + foldl( fun(Anno, St1) -> + add_error(Anno, {undefined_type,TA}, St1) + end, St, AnnoList) end, St0, Undef). %% check_bif_clashes(Forms, State0) -> State @@ -1423,21 +1425,20 @@ export(Anno, Es, #lint{exports = Es0, called = Called} = St0) -> -spec export_type(anno(), [ta()], lint_state()) -> lint_state(). %% Mark types as exported; also mark them as used from the export line. -export_type(Anno, ETs, #lint{usage = Usage, exp_types = ETs0} = St0) -> - UTs0 = Usage#usage.used_types, - try foldl(fun ({T,A}=TA, {E,U,St2}) when is_atom(T), is_integer(A) -> +export_type(Anno, ETs, #lint{exp_types = ETs0} = St0) -> + try foldl(fun ({T,A}=TA, {E,St2}) when is_atom(T), is_integer(A) -> St = case gb_sets:is_element(TA, E) of true -> Warn = {duplicated_export_type,TA}, add_warning(Anno, Warn, St2); false -> - St2 + used_type(TA, Anno, St2) end, - {gb_sets:add_element(TA, E), maps:put(TA, Anno, U), St} + {gb_sets:add_element(TA, E), St} end, - {ETs0,UTs0,St0}, ETs) of - {ETs1,UTs1,St1} -> - St1#lint{usage = Usage#usage{used_types = UTs1}, exp_types = ETs1} + {ETs0,St0}, ETs) of + {ETs1,St1} -> + St1#lint{exp_types = ETs1} catch error:_ -> add_error(Anno, {bad_export_type, ETs}, St0) @@ -3087,9 +3088,9 @@ check_record_types([], _Name, _DefFields, SeenVars, St, _SeenFields) -> {SeenVars, St}. used_type(TypePair, Anno, #lint{usage = Usage, file = File} = St) -> - OldUsed = Usage#usage.used_types, - UsedTypes = maps:put(TypePair, erl_anno:set_file(File, Anno), OldUsed), - St#lint{usage=Usage#usage{used_types=UsedTypes}}. + Used = Usage#usage.used_types, + NewUsed = maps_prepend(TypePair, erl_anno:set_file(File, Anno), Used), + St#lint{usage=Usage#usage{used_types=NewUsed}}. is_default_type({Name, NumberOfTypeVariables}) -> erl_internal:is_type(Name, NumberOfTypeVariables). diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl index cf43551692..f6888721db 100644 --- a/lib/stdlib/test/erl_lint_SUITE.erl +++ b/lib/stdlib/test/erl_lint_SUITE.erl @@ -3725,7 +3725,10 @@ predef(Config) when is_list(Config) -> %% dict(), digraph() and so on were removed in Erlang/OTP 18.0. E2 = get_compilation_result(Config, "predef2", []), Tag = undefined_type, - {[{{7,13},erl_lint,{Tag,{array,0}}}, + {[{{5,2},erl_lint,{Tag,{array,0}}}, + {{5,2},erl_lint,{Tag,{digraph,0}}}, + {{5,2},erl_lint,{Tag,{gb_set,0}}}, + {{7,13},erl_lint,{Tag,{array,0}}}, {{12,12},erl_lint,{Tag,{dict,0}}}, {{17,15},erl_lint,{Tag,{digraph,0}}}, {{27,14},erl_lint,{Tag,{gb_set,0}}}, -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor