diff --git a/src/changelog.rst b/src/changelog.rst index 8ea20f53..f2a3c17d 100644 --- a/src/changelog.rst +++ b/src/changelog.rst @@ -28,6 +28,33 @@ Language changes in Rust 1.95.0 - Lints are outside the scope of the FLS. - `Support importing path-segment keywords with renaming `_ + + - New paragraphs: + + - :p:`fls_sUhnfV62HJrb` + - :p:`fls_QGdeRTe0H1Uc` + - :p:`fls_aam34hsRmKU2` + - :p:`fls_uSajfdSsbxna` + - :p:`fls_aam34hsRmKU2` + + - Changed paragraphs: + + - :p:`fls_2bkcn83smy2y` + - :p:`fls_iuzvtr3oax1o` + - :p:`fls_90hQvSh7Bfyg` + - :p:`fls_RUiFQ17bmRLt` + - :p:`fls_opn5n5t2mo3m` + - :p:`fls_7k88ypcgaoff` + - :p:`fls_yY58pFpkig9o` + - :p:`fls_ar03D5rxjzy0` + + - Removed paragraphs: + + - :p:`fls_cw006jhlboa` + - :p:`fls_hv3xT2CjZuxc` + - :p:`fls_Pxc0Ts8Y7pfW` + - :p:`fls_kz2Gij5wHXnl` + - `Stabilize ppc inline assembly `_ - The target is outside the scope of the FLS. @@ -39,12 +66,17 @@ Language changes in Rust 1.95.0 - `Make operational semantics of pattern matching independent of crate and module `_ -FLS corrections ---------------- +FLS fixes/improvements +---------------------- + +- Changed paragraph: :p:`fls_1941wid94hlg` + +- New paragraphs: -Changed paragraph: :p:`fls_1941wid94hlg` + - :p:`fls_CSuxTkwR96j9` + - :p:`fls_LV94x3HlpBWk` -New paragraph: :p:`fls_CSuxTkwR96j9` +- Replace the term "simple path prefix" with "common path prefix", to improve clarity. Language changes in Rust 1.94.0 ------------------------------- diff --git a/src/entities-and-resolution.rst b/src/entities-and-resolution.rst index 1a9222ee..b3647c55 100644 --- a/src/entities-and-resolution.rst +++ b/src/entities-and-resolution.rst @@ -295,24 +295,25 @@ A :t:`path segment` is an element of a :t:`path`. A :t:`path` is subject to :t:`path resolution`. :dp:`fls_opn5n5t2mo3m` -If a :t:`path segment` is expressed as either :t:`keyword` ``crate``, -:t:`keyword` ``$crate``, :t:`keyword` ``self``, or :t:`keyword` ``Self``, then -the :t:`path segment` shall be the first :t:`path segment` of a :t:`path`. +If a :t:`path segment` is expressed as either :t:`keyword` ``crate``, :t:`keyword` ``$crate``, or :t:`keyword` ``Self``, then the :t:`path segment` shall be the first :t:`path segment` of a :t:`path`. + +:dp:`fls_uSajfdSsbxna` +If a :t:`path segment` is expressed as :t:`keyword` ``self``, then the :t:`path segment` shall be either the first :t:`path segment` of a :t:`path`, or the last :t:`path segment` of a :t:`simple import` that appears in a :t:`nesting import`. :dp:`fls_774uryecc2sx` A :t:`path` that starts with a :t:`path segment` that is expressed as :t:`keyword` ``$crate`` shall appear only within a :t:`macro transcriber`. :dp:`fls_7k88ypcgaoff` -If a :t:`path segment` is expressed as :t:`keyword` ``super``, then the -:t:`path segment` shall either be the first :t:`path segment` of a :t:`path`, -or the previous :t:`path segment` of the :t:`path` shall also be expressed as -:t:`keyword` ``super``. +If a :t:`path segment` is expressed as :t:`keyword` ``super``, then each :t:`path segment` that precedes it in the :t:`path` shall be expressed as :t:`keyword` ``super``, except that the first :t:`path segment` of the :t:`path` may be expressed as :t:`keyword` ``self``. :dp:`fls_7kb6ltajgiou` A :t:`global path` is a :t:`path` that starts with :t:`namespace qualifier` ``::``. +:dp:`fls_P6dFw89ZDKv2` +The first :t:`path segment` of a :t:`global path` shall be expressed as an :t:`identifier` whose :t:`name` matches the :t:`name` of a :t:`candidate external prelude entity`. + :dp:`fls_n77icl6idazp` A :t:`simple path` is a :t:`path` whose :t:`[path segment]s` consist of either :t:`[identifier]s` or certain :t:`[keyword]s` as defined in the syntax rules @@ -326,14 +327,8 @@ A :dt:`path prefix` is a :t:`path` with its last :t:`path segment` and If a :t:`simple path` appears in a :t:`use import` and starts with a :t:`path segment` expressed as either :t:`keyword` ``crate``, :t:`keyword` ``$crate``, :t:`keyword` ``self``, or :t:`keyword` ``super``, then the -:t:`path` shall be the :t:`simple path prefix` of a :t:`glob import` or a -:t:`nesting import`, or the :t:`simple path` of a :t:`simple import`. - -:dp:`fls_cw006jhlboa` -If a :t:`simple path` appears in a :t:`use import` and starts with a -:t:`path segment` expressed as :t:`keyword` ``self``, then the :t:`path` shall -be part of the :s:`UseImportContent` of a :t:`nesting import` as long as the -:t:`path` is a :t:`single segment path`. +:t:`path` shall be the :t:`common path prefix` of a :t:`glob import` or a +:t:`nesting import`, or the :t:`path` of a :t:`simple import`. :dp:`fls_kv5bpq8rf1j9` A :t:`simple path` is subject to :t:`simple path resolution`. @@ -996,15 +991,15 @@ Use Imports | SimpleImport GlobImport ::= - SimplePathPrefix? $$*$$ + CommonPathPrefix? $$*$$ NestingImport ::= - SimplePathPrefix? $${$$ UseImportContentList? $$}$$ + CommonPathPrefix? $${$$ UseImportContentList? $$}$$ SimpleImport ::= SimplePath Renaming? - SimplePathPrefix ::= + CommonPathPrefix ::= SimplePath? $$::$$ UseImportContentList ::= @@ -1018,7 +1013,7 @@ A :t:`use import` brings :t:`entities ` :t:`in scope` within the :t:`use import` resides. :dp:`fls_sxo1jb25pl8a` -A :t:`simple path prefix` is the leading :t:`simple path` of a :t:`glob import` +A :dt:`common path prefix` is the leading :t:`simple path` of a :t:`glob import` or a :t:`nesting import`. :dp:`fls_WAA4WmohGu6T` @@ -1036,22 +1031,20 @@ An :dt:`import path prefix` is the fully constructed :t:`path` prefix of a * :dp:`fls_2UyFcB6Our1v` If the :t:`use import` is a :t:`glob import` then start with the - :t:`[path segment]s` of the :t:`glob import`'s :t:`simple path prefix`. + :t:`[path segment]s` of the :t:`glob import`'s :t:`common path prefix`. * :dp:`fls_irdKqoYzBM0M` If the :t:`use import` is a :t:`nesting import` then start with the - :t:`[path segment]s` of the :t:`nesting import`'s :t:`simple path prefix`. + :t:`[path segment]s` of the :t:`nesting import`'s :t:`common path prefix`. #. :dp:`fls_gAWsqibl4GLq` Then if the current :t:`use import` is the child of a :t:`nesting import`, - prepend the :t:`nesting import`'s :t:`simple path prefix` to the + prepend the :t:`nesting import`'s :t:`common path prefix` to the :t:`import path prefix`. Repeat this step with the :t:`nesting import` as the current :t:`use import`. :dp:`fls_2bkcn83smy2y` -A :t:`simple import` is a :t:`use import` that brings all :t:`entities ` -it refers to into scope, optionally with a different -:t:`name` than they are declared with by using a :t:`renaming`. +A :dt:`simple import` is a :t:`use import` that brings into :t:`scope` an :t:`entity` selected by its :t:`simple import path`, or by its :t:`import path prefix` when its :t:`simple path` ends in :t:`keyword` ``self`` and the :t:`simple path` appears in a :t:`nesting import`. :dp:`fls_v3a6y2ze44v2` A :t:`glob import` is a :t:`use import` that brings all :t:`entities ` @@ -1075,22 +1068,17 @@ A :t:`glob import` brings :t:`[name]s` into :t:`scope` as follows: :dp:`fls_90hQvSh7Bfyg` A :dt:`simple import path` is the :t:`path` constructed by appending the last -:t:`path segment` of a :t:`simple import`'s :t:`simple path` to the +:t:`path segment` of the :t:`path` of the :t:`simple import` to the :t:`import path prefix`. :dp:`fls_wRmvtgQkFA6w` A :t:`simple import` brings :t:`[name]s` into :t:`scope` as follows: -* :dp:`fls_kz2Gij5wHXnl` - If the :t:`simple path` is keyword ``self`` and: - - * :dp:`fls_yY58pFpkig9o` - The :t:`simple import` is in a :t:`nesting import`, then bring the - :t:`entity` in :t:`type namespace` that the :t:`import path prefix` resolves - to into :t:`scope`. +* :dp:`fls_yY58pFpkig9o` + If the :t:`simple import` appears in a :t:`nesting import` and the last :t:`path segment` of its :t:`simple path` is expressed as :t:`keyword` ``self``, then the :t:`simple import` brings the :t:`entity` in :t:`type namespace` that the :t:`import path prefix` resolves to into :t:`scope`. - * :dp:`fls_ar03D5rxjzy0` - Otherwise bring the containing :t:`module` into :t:`scope`. +* :dp:`fls_ar03D5rxjzy0` + If the :t:`simple path` is expressed as :t:`keyword` ``self``, then the :t:`simple import` brings the containing :t:`module` into :t:`scope`. * :dp:`fls_ce73bg0BqV1X` Otherwise bring all :t:`entities ` that the :t:`simple import path` @@ -1098,34 +1086,21 @@ A :t:`simple import` brings :t:`[name]s` into :t:`scope` as follows: :t:`simple import` into :t:`scope`. :dp:`fls_FILuR3pfwjw3` -An :t:`Entity` imported by a :t:`simple import` subject to a +An :t:`entity` imported by a :t:`simple import` subject to a :t:`renaming` with :t:`identifier` is brought into :t:`scope` under the :t:`name` declared by the :t:`renaming`. :dp:`fls_iQOgxNihUEr7` -A :t:`trait` imported by a :t:`simple import` subject to a -:t:`renaming` with character underscore ``_`` is added into :t:`scope` without -a :t:`name`. +An :t:`entity` imported by a :t:`simple import` subject to a :t:`renaming` with character underscore ``_`` is added into :t:`scope` without a :t:`name`. :dp:`fls_ldr7tsuqw34s` A :t:`nesting import` is a :t:`use import` that provides a common -:t:`simple path prefix` for its nested :t:`[use import]s`. +:t:`common path prefix` for its nested :t:`[use import]s`. :dp:`fls_iNUBX5fJAI1N` -A :t:`glob import` outside of a :t:`nesting import` without a :t:`simple path +A :t:`glob import` outside of a :t:`nesting import` without a :t:`common path prefix` is rejected, but may still be consumed by :t:`[macro]s`. -:dp:`fls_RUiFQ17bmRLt` -A :t:`simple import` with a :t:`simple path` with a single :t:`path segment` of -keyword ``self`` shall be subject to the following: - -* :dp:`fls_hv3xT2CjZuxc` - It shall either appear in a :t:`nesting import` with a non-empty - :t:`import path prefix`, or - -* :dp:`fls_Pxc0Ts8Y7pfW` - It shall be subject to a :t:`renaming`. - :dp:`fls_wB3fVglLOqbZ` It is a static error if two :t:`[glob import]s` import the same :t:`name` in the same :t:`namespace` but refer to different :t:`entities ` if the @@ -1135,6 +1110,21 @@ same :t:`namespace` but refer to different :t:`entities ` if the If two :t:`[glob import]s` import the same :t:`entity` under the same :t:`name`, the :t:`visibility` of the :t:`name` is the most permissive one. +:dp:`fls_RUiFQ17bmRLt` +When a :t:`path segment` expressed as :t:`keyword` ``self`` is used to import the current :t:`module`, the imported :t:`entity` shall be subject to a :t:`renaming`. + +:dp:`fls_sUhnfV62HJrb` +A :t:`use import` with a single :t:`path segment` expressed as either :t:`keyword` ``crate`` or :t:`keyword` ``$crate`` shall be subject to a :t:`renaming`. + +:dp:`fls_QGdeRTe0H1Uc` +When a :t:`path segment` expressed as :t:`keyword` ``super`` is used to import a parent :t:`module`, the imported :t:`entity` shall be subject to a :t:`renaming`. + +:dp:`fls_aam34hsRmKU2` +A :t:`simple import` whose :t:`import path prefix` consists only of :t:`namespace qualifier` ``::`` and whose :t:`simple path` consists of a single :t:`path segment` expressed as :t:`keyword` ``self`` shall not be used. + +:dp:`fls_LV94x3HlpBWk` +A :t:`simple import` shall not refer to :t:`[enum variant]s` through a :t:`type alias`. + .. rubric:: Examples :dp:`fls_5dlnffim6fso` @@ -1164,8 +1154,6 @@ The following is a selective import. The imported functions are use outer_module::inner_module {crate_visible_function, visible_function} -.. rubric:: Legality Rules - .. _fls_ydmnb7qnmzzq: Shadowing diff --git a/src/glossary.rst b/src/glossary.rst index d7d53531..883a17cf 100644 --- a/src/glossary.rst +++ b/src/glossary.rst @@ -4099,8 +4099,7 @@ See :s:`SimpleCStringLiteral`. simple import ^^^^^^^^^^^^^ -A :dt:`simple import` is a :t:`use import` that binds a :t:`simple path` to a -local :t:`name` by using an optional :t:`renaming`. +A :dt:`simple import` is a :t:`use import` that brings a :t:`simple path` into scope, optionally with a :t:`renaming`. See :s:`SimpleImport`. @@ -4112,14 +4111,6 @@ A :dt:`simple path` is a :t:`path` whose :t:`[path segment]s` consist of either See :s:`SimplePath`. -simple path prefix -^^^^^^^^^^^^^^^^^^ - -A :dt:`simple path prefix` is the leading :t:`simple path` of a -:t:`glob import` or a :t:`nesting import`. - -See :s:`SimplePathPrefix`. - simple path public modifier ^^^^^^^^^^^^^^^^^^^^^^^^^^^