sass/accepted/module-system.changes.md

241 lines
8.1 KiB
Markdown
Raw Normal View History

## Draft 6
* Require `ForwardRule`'s `AsClause` to come before `ShowClose` or `HideClause`,
rather than after. This ensures that the clause with unbounded length comes
last if both are present.
* Imported forwarded members now take precedence over members that were defined
in the local file prior to the `@import`.
* Modules can now extend CSS from modules they forward but do not use.
* Move `keywords()` from `sass:map` to `sass:meta`.
* Add `extend()` to `sass:selector`. This is the same as the global
`selector-extend()` function.
* The `sass:color` functions `grayscale()`, `invert()`, `alpha()`, and
`opacity()` no longer allow non-color arguments.
* Make `get-function()` throw an error if `$module` and `$css` are both passed.
* Describe how to resolve built-in global functions and mixins.
## Draft 5
* Drop the `lighten()`, `darken()`, `saturate()`, `desaturate()`, `opacify()`,
and `transparentize()` functions from the `color` module. The use of these
functions is discouraged, and they're just shorthands for the `color.adjust()`
function so including them isn't necessary to allow migration.
* Give files with the suffix `".css"` lower precedence than `".sass"` and
`".scss"` files even in `@use`. This accommodates the use-case of `@use`ing a
file that's also being compiled in-place to a CSS file.
* Add a `$module` parameter to `get-function()`.
* Load CSS from modules used by imported files.
* Clarify the behavior of the first law of extend when multiple modules extend
the same selector.
* Remove missing outdated entries from the table of contents.
## Draft 4.2
* Add "static analysis" as a low-level goal.
* Ensure that plain CSS imports always appear at the beginning of the generated
CSS.
* Other than plain CSS imports, always emit the CSS for a given module
(including comments) to the same location, rather than splitting it up if a
comment appeared above a `@use`.
* Forbid diamond extensions from interacting with one another. That is, if two
modules use the same upstream modules but don't use one another, ensure that
they cannot extend one another's selectors.
* Explicitly indicate that only selectors explicitly written by hand are exempt
from being optimized away when resolving extensions.
* Always add `!global` variables to a module's variable set, even if those
variable declarations aren't evaluated.
* Explicitly define that `*-exists()` functions should throw an error for
conflicting member names from global modules.
* Explicitly define how members are resolved locally versus globally.
* Fix some faulty logic around resolving namespaceless members. If a member is
defined in both the import context and a global module that's now an error.
* Syntactically forbid namespaced references to private identifiers (as in
`foo.-bar`). This is never valid, so making it a syntax error rather than just
a runtime error ensures that the user will be notified as eagerly as possible.
* Fix the logic for import-only files so that `@import "foo.scss"` doesn't try
to load `foo.scss.import` and `@import "foo"` doesn't try to load
`foo.import/index.scss`.
* Rename configuration variables when they're passed to a forwarded module with
an `AsClause`.
* Only allow top-level members to shadow forwarded members.
* Add an imported file's members to the current module.
* Make config resolution part of evaluating a `!default` variable assignment
rather than part of resolving any variable.
* Clean up the way "Forwarding Modules" and "Importing Files" are invoked.
* Fix a few broken links.
2018-12-26 22:05:47 +00:00
## Draft 4.1
* Make the release timeline more concrete.
2018-12-26 22:05:47 +00:00
* Fix a broken link in the table of contents.
## Draft 4
* Allow `@forward "module" as prefix-*` to add a prefix to forwarded module.
* Rename `math.unitless()` to `math.is-unitless()`, to match
`list.is-bracketed()` and make it clear that it doesn't remove units from a
number.
* Rename `math.comparable()` to `math.compatible()`, to make it clear that it
also tests for compatibility for addition and subtraction.
* Add the missing `content-exists()` function.
* Move `meta.unique-id()` to `string.unique-id()`.
* Add "code splitting" as a non-goal.
## Draft 3
* Limit extensions to affecting only modules transitively used by the module in
which the `@extend` appears.
* Replace module mixins with a built-in `load-css()` mixin that dynamically
includes the CSS for a module with a given URL.
* Add support for configuring modules using a new `with` clause.
* Update the `module-variables()` and `module-functions()` functions to return
maps from names to values, rather than just lists of names.
* Remove the `module-mixins()` function until Sass supports first-class mixins.
* Add support for `_file.import.scss` as a file that only `@import`s will see.
* Change the syntax for a `@use` rule without a namespace to `@use "..." as *`.
* Initialize modules' variables with the values as declared in those modules.
* Allow comments to be emitted before dependencies' CSS.
* Show or hide variables with their `$` prefixes in `@forward`.
* Define a source file as an AST plus a canonical URL. This means that built-in
modules are no longer source files, which seems more reasonable.
* Clarify that `@forward` includes the forwarded module's CSS tree.
* Pass configuration for a module to any modules it `@forward`s.
* Forbid whitespace in various member-reference productions.
* Explicitly indicate that extensions are dynamically scoped.
* Explicitly indicate which parts of a module are immutable.
* Explicitly describe how variable declarations are resolved.
* Explicitly describe how a configuration affects file evaluation.
* Explicitly mention that variable declarations are allowed before `@use`.
* Loading a module with configuration variables it doesn't expose is now an
error.
* Don't make nested mixin and function declarations part of a module's API.
* Re-organize "Resolving Extensions" to make its behavior clearer.
* Link to the existing import spec rather than redefining terms.
## Draft 2.1
* Make sure nested `@import`s preserve the parent selector/at-rule context of
the current stylesheet.
* Removed the low-level "using CSS files" goal, since this is now covered by
[the CSS Imports proposal][].
[the CSS Imports proposal]: ../accepted/css-imports.md
* Add "Context-independent modules" and "Increased strictness" as non-goals.
2018-09-24 16:56:17 +00:00
* Add a couple FAQs.
* Made the requirements for valid module URLs more explicit.
* Merged the "Using Modules" section into the "Loading Modules" algorithm.
* Added a separate section for "Determining Prefixes".
* Make the import context mandatory everywhere, to simplify logic.
Implementations are still free to allocate them lazily, though.
* Consistently put non-normative asides in block quotes.
* Refer to "namespaces" rather than "prefixes".
* Refer to "URLs" rather than "URIs", per [the URL spec][].
[the URL spec]: https://url.spec.whatwg.org/#goals
* Refer to "at-rules" rather than "directives".
* Refer to "style rules" rather than "CSS rules".
* Format and structure algorithms consistently with more recent proposals.
* Other small non-semantic changes.
2016-02-12 21:51:49 +00:00
## Draft 2
* The namespace separator is now a period rather than a hyphen.
* Placeholder selectors are no longer considered members of modules. They are
still allowed to be marked private, however.
* Be explicit about how URIs are canonicalized and thus compared.
* Allow `@forward` and `@use` to be intermingled.
2016-03-04 23:53:21 +00:00
* Allow `@extend` to affect downstream modules as well as upstream ones.
Downstream modules inherently share the same semantics for selector names, and
extensions are an aspect of those semantics.
* Don't allow module mixin arguments to be passed by position.
* To `@forward` a module mixin, use the module's prefix rather than its URI.
* Modules now export *all* variables that have global definitions, even if those
definitions weren't executed. This preserves the invariant that modules'
member sets are statically knowable.
* Add new functions for module introspection.
* Add a `$module` parameter to `global-variable-exists()`, `function-exists()`,
and `mixin-exists()`.
2016-02-12 21:51:49 +00:00
## Draft 1
* Initial draft.