File 3561-features-Change-format-and-argument-order-for-option.patch of Package erlang

From 3cd663ee027a879240795f049ac96f5e4c4de11f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cons=20T=20=C3=85hs?= <cons@erlang.org>
Date: Wed, 6 Apr 2022 12:05:11 +0200
Subject: [PATCH] [features] Change format and argument order for options and
 directives

* Use {feature, <feature>, enable|disable} in options
  and -compile(..)
* Use -feature(<feature>, enable|disable) in module
---
 erts/test/lux/bad_feature_erlc.lux            | 22 ++++++-------
 erts/test/lux/feature_erlc.lux                | 32 +++++++++----------
 erts/test/lux/feature_erlcold.lux             | 26 +++++++--------
 erts/test/lux/feature_ifnot.lux               | 14 ++++----
 erts/test/lux/input/enable.hrl                |  2 +-
 erts/test/lux/input/f_bad_ifnot.erl           |  2 +-
 erts/test/lux/input/f_directives.erl          |  4 +--
 erts/test/lux/input/f_directives_2.erl        |  6 ++--
 erts/test/lux/input/f_directives_3.erl        |  4 +--
 erts/test/lux/input/f_disable.erl             |  6 ++--
 erts/test/lux/input/f_ifnot.erl               |  2 +-
 erts/test/lux/input/f_include_1.erl           |  6 ++--
 erts/test/lux/input/f_include_2.erl           |  6 ++--
 erts/test/lux/input/f_include_3.erl           |  6 ++--
 .../test/lux/input/f_incorrect_directives.erl |  4 +--
 erts/test/lux/input/f_incorrect_disable.erl   |  6 ++--
 .../lux/input/feature_directive_maybe_ifn.erl |  4 +--
 erts/test/lux/input/maybe.hrl                 |  2 +-
 lib/compiler/src/compile.erl                  |  2 +-
 lib/compiler/test/compile_SUITE.erl           |  4 +--
 lib/compiler/test/maybe_SUITE.erl             |  2 +-
 lib/compiler/test/test_lib.erl                |  5 +--
 lib/compiler/test/warnings_SUITE.erl          |  6 ++--
 lib/stdlib/src/epp.erl                        |  4 +--
 lib/stdlib/src/erl_compile.erl                |  4 +--
 lib/stdlib/src/erl_features.erl               | 20 ++++++------
 lib/stdlib/test/epp_SUITE.erl                 |  8 ++---
 lib/stdlib/test/erl_eval_SUITE.erl            |  2 +-
 lib/stdlib/test/erl_lint_SUITE.erl            |  2 +-
 lib/syntax_tools/test/syntax_tools_SUITE.erl  |  4 +--
 lib/tools/src/cover.erl                       |  5 +--
 lib/tools/test/cover_SUITE.erl                |  2 +-
 32 files changed, 113 insertions(+), 111 deletions(-)

diff --git a/erts/test/lux/bad_feature_erlc.lux b/erts/test/lux/bad_feature_erlc.lux
index 84afadc8ff..903696d2ce 100644
--- a/erts/test/lux/bad_feature_erlc.lux
+++ b/erts/test/lux/bad_feature_erlc.lux
@@ -40,17 +40,17 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile ignorant.erl "+'{enable_feature, ifn}'"]
+    [invoke compile ignorant.erl "+'{feature, ifn, enable}'"]
     ?the feature 'ifn' does not exist
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile ignorant.erl "+'{enable_feature, maybe}'"]
+    [invoke compile ignorant.erl "+'{feature, maybe, enable}'"]
     ?the feature 'maybe' does not exist
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile ignorant.erl "+'{enable_feature, ifn}' +'{enable_feature, maybe}'"]
+    [invoke compile ignorant.erl "+'{feature, ifn, enable}' +'{feature, maybe, enable}'"]
     # FIXME these are in the wrong order
     ??the features 'maybe' and 'ifn' do not exist
     ?SH-PROMPT:
@@ -64,7 +64,7 @@
     ?the feature 'ifn' does not exist
     [invoke notok]
 
-    [invoke compile f_ifn.erl "'+{enable_feature, maybe}'"]
+    [invoke compile f_ifn.erl "'+{feature, maybe, enable}'"]
     ?the feature 'maybe' does not exist
     ?SH-PROMPT:
     [invoke notok]
@@ -74,7 +74,7 @@
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile f_ifn.erl "'+{enable_feature, maybe}' '+{enable_feature, ifn}'"]
+    [invoke compile f_ifn.erl "'+{feature, maybe, enable}' '+{feature, ifn, enable}'"]
     # FIXME Fix order!
     ??the features 'ifn' and 'maybe' do not exist
     ?SH-PROMPT:
@@ -90,7 +90,7 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile f_maybe.erl "'+{enable_feature, maybe}'"]
+    [invoke compile f_maybe.erl "'+{feature, maybe, enable}'"]
     ?the feature 'maybe' does not exist
     [invoke notok]
 
@@ -98,7 +98,7 @@
     ?the feature 'maybe' does not exist
     [invoke notok]
 
-    [invoke compile f_maybe.erl "'+{enable_feature, ifn}'"]
+    [invoke compile f_maybe.erl "'+{feature, ifn, enable}'"]
     ?the feature 'ifn' does not exist
     ?SH-PROMPT:
     [invoke notok]
@@ -108,7 +108,7 @@
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile f_maybe.erl "'+{enable_feature, maybe}' '+{enable_feature, ifn}'"]
+    [invoke compile f_maybe.erl "'+{feature, maybe, enable}' '+{feature, ifn, enable}'"]
     # FIXME fix order
     ??the features 'ifn' and 'maybe' do not exist
     ?SH-PROMPT:
@@ -149,17 +149,17 @@
     ???{ok,ignorant}
     ?$ERLPROMPT
 
-    [invoke erl-compile ignorant.erl [{enable_feature,ifn}]]
+    [invoke erl-compile ignorant.erl [{feature,ifn,enable}]]
     ?the feature 'ifn' does not exist
     ?error
     ?$ERLPROMPT
 
-    [invoke erl-compile ignorant.erl [{enable_feature,ifn},{enable_feature,while}]]
+    [invoke erl-compile ignorant.erl [{feature,ifn,enable},{feature,while,enable}]]
     ??the features 'ifn' and 'while' do not exist
     ?error
     ?$ERLPROMPT
 
-    [invoke erl-compile ignorant.erl [{enable_feature,unless},{enable_feature,ifn},{enable_feature,while}]]
+    [invoke erl-compile ignorant.erl [{feature,unless,enable},{feature,ifn,enable},{feature,while,enable}]]
     ??the features 'unless', 'ifn' and 'while' do not exist
     ?error
     ?$ERLPROMPT
diff --git a/erts/test/lux/feature_erlc.lux b/erts/test/lux/feature_erlc.lux
index 83647db856..3a033d0aad 100644
--- a/erts/test/lux/feature_erlc.lux
+++ b/erts/test/lux/feature_erlc.lux
@@ -40,20 +40,20 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile ignorant.erl "+'{enable_feature, ifn_expr}'"]
+    [invoke compile ignorant.erl "+'{feature, ifn_expr, enable}'"]
     ?syntax error before:
     ?syntax error before: ifn
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile ignorant.erl "+'{enable_feature, while_expr}'"]
+    [invoke compile ignorant.erl "+'{feature, while_expr, enable}'"]
     ?syntax error before: while
     ?syntax error before: while
     ?syntax error before: until
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile ignorant.erl "+'{enable_feature, ifn_expr}' +'{enable_feature, while_expr}'"]
+    [invoke compile ignorant.erl "+'{feature, ifn_expr, enable}' +'{feature, while_expr, enable}'"]
     ?syntax error before:
     ?syntax error before: while
     ?syntax error before: until
@@ -65,11 +65,11 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile f_ifn.erl "'+{enable_feature, ifn_expr}'"]
+    [invoke compile f_ifn.erl "'+{feature, ifn_expr, enable}'"]
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile f_ifn.erl "'+{enable_feature, while_expr}'"]
+    [invoke compile f_ifn.erl "'+{feature, while_expr, enable}'"]
     [invoke syntax-error while]
     [invoke syntax-error until]
     ?SH-PROMPT:
@@ -81,7 +81,7 @@
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile f_ifn.erl "'+{enable_feature, while_expr}' '+{enable_feature, ifn_expr}'"]
+    [invoke compile f_ifn.erl "'+{feature, while_expr, enable}' '+{feature, ifn_expr, enable}'"]
     [invoke syntax-error while]
     [invoke syntax-error until]
     ?SH-PROMPT:
@@ -97,7 +97,7 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile f_maybe.erl "'+{enable_feature, while_expr}'"]
+    [invoke compile f_maybe.erl "'+{feature, while_expr, enable}'"]
     ?SH-PROMPT:
     [invoke ok]
 
@@ -105,7 +105,7 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile f_maybe.erl "'+{enable_feature, ifn_expr}'"]
+    [invoke compile f_maybe.erl "'+{feature, ifn_expr, enable}'"]
     ?syntax error before:
     ?SH-PROMPT:
     [invoke notok]
@@ -115,7 +115,7 @@
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile f_maybe.erl "'+{enable_feature, while_expr}' '+{enable_feature, ifn_expr}'"]
+    [invoke compile f_maybe.erl "'+{feature, while_expr, enable}' '+{feature, ifn_expr, enable}'"]
     ?syntax error before:
     ?SH-PROMPT:
     [invoke notok]
@@ -129,7 +129,7 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile f_maybe_ifn.erl "'+{enable_feature, while_expr}'"]
+    [invoke compile f_maybe_ifn.erl "'+{feature, while_expr, enable}'"]
     ?SH-PROMPT:
     [invoke ok]
 
@@ -137,7 +137,7 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile f_maybe_ifn.erl "'+{enable_feature, ifn_expr}'"]
+    [invoke compile f_maybe_ifn.erl "'+{feature, ifn_expr, enable}'"]
     ?SH-PROMPT:
     [invoke ok]
 
@@ -145,7 +145,7 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile f_maybe_ifn.erl "'+{enable_feature, while_expr}' '+{enable_feature, ifn_expr}'"]
+    [invoke compile f_maybe_ifn.erl "'+{feature, while_expr, enable}' '+{feature, ifn_expr, enable}'"]
     ?SH-PROMPT:
     [invoke ok]
 
@@ -158,7 +158,7 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    # This file has instances of -compile({enable_feature, ..}) inside
+    # This file has instances of -compile({feature, .., enable}) inside
     [invoke compile f_directives.erl ""]
     ?SH-PROMPT:
     [invoke ok]
@@ -172,13 +172,13 @@
     ???{ok,ignorant}
     ?$ERLPROMPT
 
-    [invoke erl-compile ignorant.erl [{enable_feature,ifn_expr}]]
+    [invoke erl-compile ignorant.erl [{feature,ifn_expr,enable}]]
     ?syntax error before:
     ?syntax error before:
     ?error
     ?$ERLPROMPT
 
-    [invoke erl-compile ignorant.erl [{enable_feature,ifn_expr},{enable_feature,while_expr}]]
+    [invoke erl-compile ignorant.erl [{feature,ifn_expr,enable},{feature,while_expr,enable}]]
     ?syntax error before:
     ?syntax error before: while
     ?syntax error before: until
@@ -282,7 +282,7 @@
 
     [invoke start-erl ""]
 
-    [invoke erl-compile f_macros.erl [{enable_feature,ifn_expr}]]
+    [invoke erl-compile f_macros.erl [{feature,ifn_expr,enable}]]
     ???{ok,f_macros}
     ?$ERLPROMPT
 
diff --git a/erts/test/lux/feature_erlcold.lux b/erts/test/lux/feature_erlcold.lux
index 82ee437b97..fa62cc85c3 100644
--- a/erts/test/lux/feature_erlcold.lux
+++ b/erts/test/lux/feature_erlcold.lux
@@ -20,7 +20,7 @@
     [invoke ok]
 
     # Different error message when ifn is not in parser
-    [invoke compile feature_ignorant.erl "+'{enable_feature, ifn_expr}'"]
+    [invoke compile feature_ignorant.erl "+'{feature, ifn_expr, enable}'"]
     ?syntax error before:
     ?syntax error before: ifn
     ?SH-PROMPT:
@@ -33,7 +33,7 @@
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile feature_ignorant.erl "+'{enable_feature, while_expr}'"]
+    [invoke compile feature_ignorant.erl "+'{feature, while_expr, enable}'"]
     ?syntax error before: while
     ?syntax error before: while
     ?syntax error before: until
@@ -48,7 +48,7 @@
     [invoke notok]
 
     # Different error message when ifn not in parser
-    [invoke compile feature_ignorant.erl "+'{enable_feature, ifn_expr}' +'{enable_feature, while_expr}'"]
+    [invoke compile feature_ignorant.erl "+'{feature, ifn_expr, enable}' +'{feature, while_expr, enable}'"]
     ?syntax error before:
     ?syntax error before: while
     ?syntax error before: until
@@ -69,7 +69,7 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile feature_ifn.erl "'+{enable_feature, ifn_expr}'"]
+    [invoke compile feature_ifn.erl "'+{feature, ifn_expr, enable}'"]
     ?SH-PROMPT:
     [invoke ok]
 
@@ -77,7 +77,7 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile feature_ifn.erl "'+{enable_feature, while_expr}'"]
+    [invoke compile feature_ifn.erl "'+{feature, while_expr, enable}'"]
     [invoke syntax-error while]
     [invoke syntax-error until]
     ?SH-PROMPT:
@@ -89,7 +89,7 @@
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile feature_ifn.erl "'+{enable_feature, while_expr}' '+{enable_feature, ifn_expr}'"]
+    [invoke compile feature_ifn.erl "'+{feature, while_expr, enable}' '+{feature, ifn_expr, enable}'"]
     [invoke syntax-error while]
     [invoke syntax-error until]
     ?SH-PROMPT:
@@ -105,18 +105,18 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile feature_maybe.erl "'+{enable_feature, while_expr}'"]
+    [invoke compile feature_maybe.erl "'+{feature, while_expr, enable}'"]
     ?SH-PROMPT:
     [invoke ok]
 
     # Different error message when ifn not in parser
-    [invoke compile feature_maybe.erl "'+{enable_feature, ifn_expr}'"]
+    [invoke compile feature_maybe.erl "'+{feature, ifn_expr, enable}'"]
     [invoke syntax-error ifn]
     ?SH-PROMPT:
     [invoke notok]
 
     # Different error message when ifn not in parser
-    [invoke compile feature_maybe.erl "'+{enable_feature, while_expr}' '+{enable_feature, ifn_expr}'"]
+    [invoke compile feature_maybe.erl "'+{feature, while_expr, enable}' '+{feature, ifn_expr, enable}'"]
     [invoke syntax-error ifn]
     ?SH-PROMPT:
     [invoke notok]
@@ -125,15 +125,15 @@
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile feature_maybe_ifn.erl "'+{enable_feature, while_expr}'"]
+    [invoke compile feature_maybe_ifn.erl "'+{feature, while_expr, enable}'"]
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile feature_maybe_ifn.erl "'+{enable_feature, ifn_expr}'"]
+    [invoke compile feature_maybe_ifn.erl "'+{feature, ifn_expr, enable}'"]
     ?SH-PROMPT:
     [invoke ok]
 
-    [invoke compile feature_maybe_ifn.erl "'+{enable_feature, while_expr}' '+{enable_feature, ifn_expr}'"]
+    [invoke compile feature_maybe_ifn.erl "'+{feature, while_expr, enable}' '+{feature, ifn_expr, enable}'"]
     ?SH-PROMPT:
     [invoke ok]
 
@@ -147,7 +147,7 @@
     ?$ERLPROMPT
 
     # Different error message when ifn not in parser
-    [invoke erl-compile feature_ignorant.erl [{enable_feature,ifn_expr}]]
+    [invoke erl-compile feature_ignorant.erl [{feature,ifn_expr,enable}]]
     ?syntax error before: ifn
     ?syntax error before: ifn
     ?error
diff --git a/erts/test/lux/feature_ifnot.lux b/erts/test/lux/feature_ifnot.lux
index fc3b332816..cfd99e1881 100644
--- a/erts/test/lux/feature_ifnot.lux
+++ b/erts/test/lux/feature_ifnot.lux
@@ -122,7 +122,7 @@
     ?$ERLPROMPT
 
     # Moved from feature_erlcold.lux as ifn is no longer present in parser
-    [invoke compile feature_ignorant.erl "+'{enable_feature, ifn_expr}'"]
+    [invoke compile feature_ignorant.erl "+'{feature, ifn_expr, enable}'"]
     ?syntax error before: ','
     ?syntax error before: ifn
     ?SH-PROMPT:
@@ -134,7 +134,7 @@
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile feature_ignorant.erl "+'{enable_feature, ifn_expr}' +'{enable_feature, maybe_expr}'"]
+    [invoke compile feature_ignorant.erl "+'{feature, ifn_expr, enable}' +'{feature, maybe_expr, enable}'"]
     ?syntax error before: ','
     ?syntax error before: maybe
     ?syntax error before: else
@@ -150,23 +150,23 @@
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile feature_maybe.erl "'+{enable_feature, ifn_expr}'"]
+    [invoke compile feature_maybe.erl "'+{feature, ifn_expr, enable}'"]
     [invoke syntax-error ',']
     ?SH-PROMPT:
     [invoke notok]
 
-    [invoke compile feature_maybe.erl "'+{enable_feature, maybe_expr}' '+{enable_feature, ifn_expr}'"]
+    [invoke compile feature_maybe.erl "'+{feature, maybe_expr, enable}' '+{feature, ifn_expr, enable}'"]
     [invoke syntax-error ',']
     ?SH-PROMPT:
     [invoke notok]
 
-    # This file has instances of -compile({enable_feature, ..}) inside
+    # This file has instances of -compile({feature, .., enable}) inside
     [invoke compile feature_directive_maybe_ifn.erl "-enable-feature ifn_expr"]
     ?SH-PROMPT:
     [invoke ok]
 
 [shell erl]
-    [invoke erl-compile feature_ignorant.erl [{enable_feature,ifn_expr}]]
+    [invoke erl-compile feature_ignorant.erl [{feature,ifn_expr,enable}]]
     ?syntax error before: ','
     ?syntax error before: ifn
     ?error
@@ -178,7 +178,7 @@
     ?SH-PROMPT:
     !export ERLC_USE_SERVER=$erlcserver
     ?SH-PROMPT:
-    # This file has instances of -compile({enable_feature, ..}) inside
+    # This file has instances of -compile({feature, .., enable}) inside
     [invoke compile feature_directive_maybe_ifn.erl "-enable-feature ifn_expr"]
     ?SH-PROMPT:
     [invoke ok]
diff --git a/erts/test/lux/input/enable.hrl b/erts/test/lux/input/enable.hrl
index d8eb0f1fc7..9835829d08 100644
--- a/erts/test/lux/input/enable.hrl
+++ b/erts/test/lux/input/enable.hrl
@@ -1 +1 @@
--feature(enable, maybe_expr).
+-feature(maybe_expr, enable).
diff --git a/erts/test/lux/input/f_bad_ifnot.erl b/erts/test/lux/input/f_bad_ifnot.erl
index e4c50f4303..f37b972904 100644
--- a/erts/test/lux/input/f_bad_ifnot.erl
+++ b/erts/test/lux/input/f_bad_ifnot.erl
@@ -20,7 +20,7 @@
 
 -module(f_bad_ifnot).
 
--feature(enable, ifnot_expr).
+-feature(ifnot_expr, enable).
 
 -export([f3/0]).
 
diff --git a/erts/test/lux/input/f_directives.erl b/erts/test/lux/input/f_directives.erl
index 47ee210fd1..308eb45916 100644
--- a/erts/test/lux/input/f_directives.erl
+++ b/erts/test/lux/input/f_directives.erl
@@ -23,8 +23,8 @@
 %% This module uses both features ifn_expr and maybe_expr, so atoms
 %% belonging to these need t be quoted.
 
--feature(enable, ifn_expr).
--feature(enable, while_expr).
+-feature(ifn_expr, enable).
+-feature(while_expr, enable).
 
 -export([bar/0
 	]).
diff --git a/erts/test/lux/input/f_directives_2.erl b/erts/test/lux/input/f_directives_2.erl
index 07c93440f0..45c395a3b8 100644
--- a/erts/test/lux/input/f_directives_2.erl
+++ b/erts/test/lux/input/f_directives_2.erl
@@ -23,10 +23,10 @@
 %% This module uses the feature ifn_expr, so atoms belonging to that
 %% featurfe need to be quoted.
 
--feature(enable, while_expr).
--feature(enable, ifn_expr).
+-feature(while_expr, enable).
+-feature(ifn_expr, enable).
 %% Disable feature so atoms beonging to maybe_expr can be unquoted
--feature(disable, while_expr).
+-feature(while_expr, disable).
 
 -export([foo/0,
 	 bar/0,
diff --git a/erts/test/lux/input/f_directives_3.erl b/erts/test/lux/input/f_directives_3.erl
index 279c519150..58dd1aa733 100644
--- a/erts/test/lux/input/f_directives_3.erl
+++ b/erts/test/lux/input/f_directives_3.erl
@@ -23,8 +23,8 @@
 %% This module uses the feature ifn_expr, so atoms from that feature
 %% need to be quoted.
 
--feature(enable, ifn_expr).
--feature(disable, while_expr).
+-feature(ifn_expr, enable).
+-feature(while_expr, disable).
 
 -export([foo/0,
 	 bar/0,
diff --git a/erts/test/lux/input/f_disable.erl b/erts/test/lux/input/f_disable.erl
index b72dfdb550..46874d3acd 100644
--- a/erts/test/lux/input/f_disable.erl
+++ b/erts/test/lux/input/f_disable.erl
@@ -20,8 +20,8 @@
 
 -module(f_disable).
 
--feature(disable, ifn_expr).
--feature(disable, while_expr).
+-feature(ifn_expr, disable).
+-feature(while_expr, disable).
 
 -export([no_ifn/0,
 	 no_ftrs/0]).
@@ -44,7 +44,7 @@ no_ifn() ->
 no_ftrs() ->
     [ifn, while, until, ?BAR].
 
-%% -compile({enable_feature, ifn_expr}).
+%% -compile({feature, ifn_expr, enable}).
 
 %% do(X) ->
 %%     ifn X > 10 ->
diff --git a/erts/test/lux/input/f_ifnot.erl b/erts/test/lux/input/f_ifnot.erl
index bb81239e7f..c31469704f 100644
--- a/erts/test/lux/input/f_ifnot.erl
+++ b/erts/test/lux/input/f_ifnot.erl
@@ -20,7 +20,7 @@
 
 -module(f_ifnot).
 
--feature(enable, ifnot_expr).
+-feature(ifnot_expr, enable).
 
 -export([f0/0,
 	 f1/0,
diff --git a/erts/test/lux/input/f_include_1.erl b/erts/test/lux/input/f_include_1.erl
index c8dce1e503..05d2b98d61 100644
--- a/erts/test/lux/input/f_include_1.erl
+++ b/erts/test/lux/input/f_include_1.erl
@@ -1,19 +1,19 @@
 -module(f_include_1).
 
--feature(enable, unless_expr).
+-feature(unless_expr, enable).
 
 -ifdef(end_prefix).
 -record(constant, {value = 42}).
 -endif.
 
 -ifdef(end_include).
--feature(enable, maybe_expr).
+-feature(maybe_expr, enable).
 -endif.
 
 -include("is_enabled.hrl").
 
 -ifdef(end_include).
--feature(enable, ifnot_expr).
+-feature(ifnot_expr, enable).
 -endif.
 
 %% At this point the prefix will definitely end, if it has not already
diff --git a/erts/test/lux/input/f_include_2.erl b/erts/test/lux/input/f_include_2.erl
index 209c454fc9..9bb81c196a 100644
--- a/erts/test/lux/input/f_include_2.erl
+++ b/erts/test/lux/input/f_include_2.erl
@@ -1,19 +1,19 @@
 -module(f_include_2).
 
--feature(enable, unless_expr).
+-feature(unless_expr, enable).
 
 -ifdef(end_prefix).
 -record(constant, {value = 42}).
 -endif.
 
 -ifdef(end_include).
--feature(enable, maybe_expr).
+-feature(maybe_expr, enable).
 -endif.
 
 -include("macro_enabled.hrl").
 
 -ifdef(end_include).
--feature(enable, ifnot_expr).
+-feature(ifnot_expr, enable).
 -endif.
 
 %% At this point the prefix will definitely end, if it has not already
diff --git a/erts/test/lux/input/f_include_3.erl b/erts/test/lux/input/f_include_3.erl
index dba4a78dbb..294f3eb917 100644
--- a/erts/test/lux/input/f_include_3.erl
+++ b/erts/test/lux/input/f_include_3.erl
@@ -1,19 +1,19 @@
 -module(f_include_3).
 
--feature(enable, unless_expr).
+-feature(unless_expr, enable).
 
 -ifdef(end_prefix).
 -record(constant, {value = 42}).
 -endif.
 
 -ifdef(end_include).
--feature(enable, maybe_expr).
+-feature(maybe_expr, enable).
 -endif.
 
 -include("enable.hrl").
 
 -ifdef(end_include).
--feature(enable, ifnot_expr).
+-feature(ifnot_expr, enable).
 -endif.
 
 %% At this point the prefix will definitely end, if it has not already
diff --git a/erts/test/lux/input/f_incorrect_directives.erl b/erts/test/lux/input/f_incorrect_directives.erl
index 5e9129d1a1..6af2a2aa9b 100644
--- a/erts/test/lux/input/f_incorrect_directives.erl
+++ b/erts/test/lux/input/f_incorrect_directives.erl
@@ -28,13 +28,13 @@
 	]).
 
 %% FIXME This is out of place, but not check in any test.
--feature(enable, ifn).
+-feature(ifn, enable).
 
 foo() ->
     %% Note: maybe_expr not active here
     ['ifn', maybe, then, 'if'].
 
--feature(enable, maybe).
+-feature(maybe, enable).
 
 bar() ->
     ['then', 'maybe'].
diff --git a/erts/test/lux/input/f_incorrect_disable.erl b/erts/test/lux/input/f_incorrect_disable.erl
index 19f80c2e2c..53cb56b38b 100644
--- a/erts/test/lux/input/f_incorrect_disable.erl
+++ b/erts/test/lux/input/f_incorrect_disable.erl
@@ -22,7 +22,7 @@
 
 -module(f_incorrect_disable).
 
--feature(disable, unless).
+-feature(unless, disable).
 
 -export([do/1,
 	 no_ifn/0,
@@ -38,7 +38,7 @@
 no_ifn() ->
     [ifn, 'maybe', ?FOO].
 
--feature(disable, maybe_expr).
+-feature(maybe_expr, disable).
 
 -if(?FEATURE_ENABLED(maybe_expr)).
 -define(BAR, has_maybe).
@@ -49,7 +49,7 @@ no_ifn() ->
 no_ftrs() ->
     [ifn, maybe, then, ?BAR].
 
--feature(enable, ifn_expr).
+-feature(ifn_expr, enable).
 
 do(X) ->
     ifn X > 10 ->
diff --git a/erts/test/lux/input/feature_directive_maybe_ifn.erl b/erts/test/lux/input/feature_directive_maybe_ifn.erl
index 82f448dc1a..c1ea3d48dd 100644
--- a/erts/test/lux/input/feature_directive_maybe_ifn.erl
+++ b/erts/test/lux/input/feature_directive_maybe_ifn.erl
@@ -42,7 +42,7 @@ ifn_0() -> false.
 %% NOTE: We need to quote the feature name due to it being the same as
 %% the new reserved word and it might have been enabled earlier, i.e.,
 %% from the command line or in argumemts to compile:file/..
--compile({enable_feature, 'ifn_expr'}).
+-compile({feature, 'ifn_expr', enable}).
 
 %% use_ifn(X) ->
 %%     ifn X > 0 ->
@@ -67,7 +67,7 @@ maybe_0() ->
 maybe_0() -> false.
 -endif.
 
--compile({enable_feature, 'maybe_expr'}).
+-compile({feature, 'maybe_expr', enable}).
 
 -if(?FEATURE_ENABLED('maybe_expr')).
 maybe_1() ->
diff --git a/erts/test/lux/input/maybe.hrl b/erts/test/lux/input/maybe.hrl
index ffa665f0eb..5ea653e511 100644
--- a/erts/test/lux/input/maybe.hrl
+++ b/erts/test/lux/input/maybe.hrl
@@ -1,5 +1,5 @@
 -if(?enable_maybe > 0).
--feature(enable, while_expr).
+-feature(while_expr, enable).
 -record(conditional, {on=off, 'until'=none}).
 -else.
 -record(conditional, {on=on, until=until}).
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index 4e80779479..54b1cd3141 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -1032,7 +1032,7 @@ do_parse_module(DefEncoding, #compile{ifile=File,options=Opts,dir=Dir}=St) ->
                     Encoding = proplists:get_value(encoding, Extra),
                     %% Get features used in the module, indicated by
                     %% enabling features with
-                    %% -compile({enable_feature, ..}).
+                    %% -compile({feature, .., enable}).
                     UsedFtrs = proplists:get_value(features, Extra),
                     St1 = metadata_add_features(UsedFtrs, St),
                     Forms = case with_columns(Opts ++ compile_options(Forms0)) of
diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl
index 8e7a97d58c..8cf14ab671 100644
--- a/lib/compiler/test/compile_SUITE.erl
+++ b/lib/compiler/test/compile_SUITE.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %%
-%% Copyright Ericsson AB 1997-2021. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2022. All Rights Reserved.
 %%
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -1450,7 +1450,7 @@ warnings(_Config) ->
     test_lib:p_run(fun do_warnings/1, Files).
 
 do_warnings(F) ->
-    Options = [{enable_feature,maybe_expr},binary,bin_opt_info,recv_opt_info,return],
+    Options = [{feature,maybe_expr,enable},binary,bin_opt_info,recv_opt_info,return],
     {ok,_,_,Ws} = compile:file(F, Options),
     do_warnings_1(Ws, F).
 
diff --git a/lib/compiler/test/maybe_SUITE.erl b/lib/compiler/test/maybe_SUITE.erl
index 905bc33584..6c6e21f547 100644
--- a/lib/compiler/test/maybe_SUITE.erl
+++ b/lib/compiler/test/maybe_SUITE.erl
@@ -24,7 +24,7 @@
 %% Note: also require the feature to be set during runtime as long as
 %% the feature is experimental.  This is currently done in ../Makefile
 %% by overriding the test target.  Ugly and very non local.
--feature(enable, maybe_expr).
+-feature(maybe_expr, enable).
 
 -export([all/0, groups/0, init_per_suite/1, end_per_suite/1]).
 -export([basic/1, nested/1]).
diff --git a/lib/compiler/test/test_lib.erl b/lib/compiler/test/test_lib.erl
index 48a8a970af..4f24310d15 100644
--- a/lib/compiler/test/test_lib.erl
+++ b/lib/compiler/test/test_lib.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %%
-%% Copyright Ericsson AB 2003-2021. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2022. All Rights Reserved.
 %%
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -86,7 +86,8 @@ opt_opts(Mod) ->
     lists:filter(fun
                      (debug_info) -> true;
                      (dialyzer) -> true;
-                     ({enable_feature,_}) -> true;
+                     ({feature,_,enable}) -> true;
+                     ({feature,_,disable}) -> true;
                      (inline) -> true;
                      (no_bsm3) -> true;
                      (no_bsm_opt) -> true;
diff --git a/lib/compiler/test/warnings_SUITE.erl b/lib/compiler/test/warnings_SUITE.erl
index 8ab46fed09..96cd735cdf 100644
--- a/lib/compiler/test/warnings_SUITE.erl
+++ b/lib/compiler/test/warnings_SUITE.erl
@@ -1177,12 +1177,12 @@ eep49(Config) ->
                       Always
                   end.
            ">>,
-           [{enable_feature,maybe_expr}],
+           [{feature,maybe_expr,enable}],
            []},
           {disabled,
            <<"foo() -> maybe.                        %Atom maybe.
            ">>,
-           [{disable_feature,maybe_expr}],
+           [{feature,maybe_expr,disable}],
            []}
 	 ],
     run(Config, Ts),
diff --git a/lib/stdlib/src/epp.erl b/lib/stdlib/src/epp.erl
index 1c2dbcb3bb..d642b53bf4 100644
--- a/lib/stdlib/src/epp.erl
+++ b/lib/stdlib/src/epp.erl
@@ -1002,8 +1002,8 @@ scan_err_warn(Toks, {atom,_,Tag}=Token, From, St) ->
     wait_req_scan(St).
 
 %% scan a feature directive
-scan_feature([{'(', _Ap}, {atom, _Am, Ind},
-              {',', _}, {atom, _, Ftr}, {')', _}, {dot, _}],
+scan_feature([{'(', _Ap}, {atom, _Am, Ftr},
+              {',', _}, {atom, _, Ind}, {')', _}, {dot, _}],
              Feature, From, St)
   when St#epp.in_prefix,
        (Ind =:= enable
diff --git a/lib/stdlib/src/erl_compile.erl b/lib/stdlib/src/erl_compile.erl
index 87af230c67..6cb8590f13 100644
--- a/lib/stdlib/src/erl_compile.erl
+++ b/lib/stdlib/src/erl_compile.erl
@@ -179,12 +179,12 @@ parse_generic_option("enable-feature" ++ Str, T0,
     {FtrStr, T} = get_option("enable-feature", Str, T0),
     Feature = list_to_atom(FtrStr),
     compile1(T, Opts#options{
-                  specific = Spec ++ [{enable_feature, Feature}]});
+                  specific = Spec ++ [{feature, Feature, enable}]});
 parse_generic_option("disable-feature" ++ Str, T0,
                      #options{specific = Spec} = Opts) ->
     {FtrStr, T} = get_option("disable-feature", Str, T0),
     Feature = list_to_atom(FtrStr),
-    compile1(T, Opts#options{specific = Spec ++ [{disable_feature, Feature}]});
+    compile1(T, Opts#options{specific = Spec ++ [{feature, Feature, disable}]});
 parse_generic_option("describe-feature" ++ Str, T0,
                      #options{specific = Spec} = Opts) ->
     {FtrStr, T} = get_option("disable-feature", Str, T0),
diff --git a/lib/stdlib/src/erl_features.erl b/lib/stdlib/src/erl_features.erl
index e969293a92..77ada029cb 100644
--- a/lib/stdlib/src/erl_features.erl
+++ b/lib/stdlib/src/erl_features.erl
@@ -188,8 +188,8 @@ keywords(Ftr, Map) ->
 %%               | {'error', error()}.
 keyword_fun(Opts, KeywordFun) ->
     %% Get items enabling or disabling features, preserving order.
-    IsFtr = fun({enable_feature, _}) -> true;
-               ({disable_feature, _}) -> true;
+    IsFtr = fun({feature, _, enable}) -> true;
+               ({feature, _, disable}) -> true;
                (_) -> false
             end,
     FeatureOps = lists:filter(IsFtr, Opts),
@@ -310,8 +310,8 @@ init_features() ->
                               end,
                               init:get_arguments()),
 
-    Cnv = fun('enable-feature') -> enable_feature;
-             ('disable-feature') -> disable_feature
+    Cnv = fun('enable-feature') -> enable;
+             ('disable-feature') -> disable
           end,
 
     FeatureOps = lists:append(lists:map(fun({Tag, Strings}) ->
@@ -327,9 +327,9 @@ init_features() ->
                 try
                     Atom = list_to_atom(String),
                     case is_valid_feature(Atom) of
-                        true -> {true, {Cnv(Tag), Atom}};
+                        true -> {true, {feature, Atom, Cnv(Tag)}};
                         false when Atom == all ->
-                            {true, {Cnv(Tag), Atom}};
+                            {true, {feature, Atom, Cnv(Tag)}};
                         false -> false
                     end
                 catch
@@ -483,17 +483,17 @@ collect_features(FOps) ->
 
 collect_features([], Add, Del) ->
     {Add, Del};
-collect_features([{enable_feature, all}| FOps], Add, _Del) ->
+collect_features([{feature, all, enable}| FOps], Add, _Del) ->
     All = features(),
     Add1 = lists:foldl(fun add_ftr/2, Add, All),
     collect_features(FOps, Add1, []);
-collect_features([{enable_feature, Feature}| FOps], Add, Del) ->
+collect_features([{feature, Feature, enable}| FOps], Add, Del) ->
     collect_features(FOps, add_ftr(Feature, Add), Del -- [Feature]);
-collect_features([{disable_feature, all}| FOps], _Add, Del) ->
+collect_features([{feature, all, disable}| FOps], _Add, Del) ->
     %% Start over
     All = features(),
     collect_features(FOps, [], Del -- All);
-collect_features([{disable_feature, Feature}| FOps], Add, Del) ->
+collect_features([{feature, Feature, disable}| FOps], Add, Del) ->
     collect_features(FOps, Add -- [Feature],
                      add_ftr(Feature, Del)).
 
diff --git a/lib/stdlib/test/epp_SUITE.erl b/lib/stdlib/test/epp_SUITE.erl
index 3a62b79135..027d6ec42a 100644
--- a/lib/stdlib/test/epp_SUITE.erl
+++ b/lib/stdlib/test/epp_SUITE.erl
@@ -2018,7 +2018,7 @@ eval_tests(Config, Fun, Tests) ->
                 Return = Fun(Config, P, Opts),
                 %% The result should be the same when enabling maybe ... end
                 %% (making 'else' a keyword instead of an atom).
-                Return = Fun(Config, P, [{enable_feature,maybe_expr}|Opts]),
+                Return = Fun(Config, P, [{feature,maybe_expr,enable}|Opts]),
                 case message_compare(E, Return) of
                     true ->
                         case E of
@@ -2041,7 +2041,7 @@ check_test(Config, Test, Opts) ->
     PrivDir = proplists:get_value(priv_dir, Config),
     File = filename:join(PrivDir, Filename),
     ok = file:write_file(File, Test),
-    case epp:parse_file(File, [PrivDir], Opts) of
+    case epp:parse_file(File, [{includes, PrivDir}| Opts]) of
 	{ok,Forms} ->
 	    Errors = [E || E={error,_} <- Forms],
 	    call_format_error([E || {error,E} <- Errors]),
@@ -2116,10 +2116,10 @@ run_test(Config, Test0, Opts0) ->
     Opts = [return, {i,PrivDir},{outdir,PrivDir}] ++ Opts0,
     {ok, epp_test, []} = compile:file(File, Opts),
     AbsFile = filename:rootname(File, ".erl"),
-    %% FIXME For now, use firbidden feature at rumtime
+    %% FIXME For now, use forbidden feature at rumtime
     erl_features:enable_feature(maybe_expr),
     {module, epp_test} = code:load_abs(AbsFile, epp_test),
-    %% FIXME For now, use firbidden feature at rumtime
+    %% FIXME For now, use forbidden feature at rumtime
     erl_features:disable_feature(maybe_expr),
     Reply = epp_test:t(),
     code:purge(epp_test),
diff --git a/lib/stdlib/test/erl_eval_SUITE.erl b/lib/stdlib/test/erl_eval_SUITE.erl
index 00a56d8a2b..faaa9f727f 100644
--- a/lib/stdlib/test/erl_eval_SUITE.erl
+++ b/lib/stdlib/test/erl_eval_SUITE.erl
@@ -18,7 +18,7 @@
 %% %CopyrightEnd%
 
 -module(erl_eval_SUITE).
--feature(enable, maybe_expr).
+-feature(maybe_expr, enable).
 -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
 	 init_per_testcase/2, end_per_testcase/2,
 	 init_per_group/2,end_per_group/2]).
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index 955e5fbb40..627d61c74d 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -4727,7 +4727,7 @@ unused_type2(Config) when is_list(Config) ->
 
 %% Test maybe ... else ... end.
 eep49(Config) when is_list(Config) ->
-    EnableMaybe = {enable_feature,maybe_expr},
+    EnableMaybe = {feature,maybe_expr,enable},
     Ts = [{exp1,
            <<"t(X) ->
                   maybe
diff --git a/lib/syntax_tools/test/syntax_tools_SUITE.erl b/lib/syntax_tools/test/syntax_tools_SUITE.erl
index 623e79b207..6d91ab8f54 100644
--- a/lib/syntax_tools/test/syntax_tools_SUITE.erl
+++ b/lib/syntax_tools/test/syntax_tools_SUITE.erl
@@ -412,7 +412,7 @@ test_prettypr([File|Files],DataDir,PrivDir) ->
 test_epp_dodger([], _, _) -> ok;
 test_epp_dodger([Filename|Files],DataDir,PrivDir) ->
     io:format("Parsing ~p~n", [Filename]),
-    Options  = [{enable_feature, maybe_expr}],
+    Options  = [{feature, maybe_expr, enable}],
     InFile   = filename:join(DataDir, Filename),
     Parsers  = [{fun(File) -> epp_dodger:parse_file(File, Options) end,parse_file},
 		{fun(File) -> epp_dodger:quick_parse_file(File,
@@ -621,7 +621,7 @@ p_run_loop(Test, List, N, Refs0, Errors0) ->
     end.
 
 res_word_option() ->
-    Options = [{enable_feature, maybe_expr}],
+    Options = [{feature, maybe_expr, enable}],
     {ok, {_Ftrs, ResWordFun}} =
         erl_features:keyword_fun(Options, fun erl_scan:f_reserved_word/1),
     {reserved_word_fun, ResWordFun}.
diff --git a/lib/tools/src/cover.erl b/lib/tools/src/cover.erl
index 27006199d1..1f7a518dfe 100644
--- a/lib/tools/src/cover.erl
+++ b/lib/tools/src/cover.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %%
-%% Copyright Ericsson AB 2001-2021. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2022. All Rights Reserved.
 %%
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -336,7 +336,8 @@ filter_options(Options) ->
                              {d, _Macro, _Value} -> true;
                              export_all -> true;
                              tuple_calls -> true;
-                             {enable_feature,_} -> true; %FIXME: To be removed.
+                             {feature,_,enable} -> true; %FIXME: To be removed.
+                             {feature,_,disable} -> true; %FIXME: To be removed.
                              _ -> false
                          end
                  end,
diff --git a/lib/tools/test/cover_SUITE.erl b/lib/tools/test/cover_SUITE.erl
index b02b3df0b6..9977fa8763 100644
--- a/lib/tools/test/cover_SUITE.erl
+++ b/lib/tools/test/cover_SUITE.erl
@@ -1881,7 +1881,7 @@ eep49(Config) ->
 
     File = "t.erl",
     Test = <<"-module(t).
-              -feature(enable,maybe_expr).
+              -feature(maybe_expr,enable).
               -export([t/0]).
 
               t() ->
-- 
2.34.1

openSUSE Build Service is sponsored by