| require 'set' |
| module Sass |
| # Provides `Sass.has_feature?` which allows for simple feature detection |
| # by providing a feature name. |
| module Features |
| # This is the set of features that can be detected. |
| # |
| # When this is updated, the documentation of `feature-exists()` should be |
| # updated as well. |
| KNOWN_FEATURES = Set[*%w( |
| global-variable-shadowing |
| extend-selector-pseudoclass |
| units-level-3 |
| at-error |
| custom-property |
| )] |
| |
| # Check if a feature exists by name. This is used to implement |
| # the Sass function `feature-exists($feature)` |
| # |
| # @param feature_name [String] The case sensitive name of the feature to |
| # check if it exists in this version of Sass. |
| # @return [Boolean] whether the feature of that name exists. |
| def has_feature?(feature_name) |
| KNOWN_FEATURES.include?(feature_name) |
| end |
| |
| # Add a feature to Sass. Plugins can use this to easily expose their |
| # availability to end users. Plugins must prefix their feature |
| # names with a dash to distinguish them from official features. |
| # |
| # @example |
| # Sass.add_feature("-import-globbing") |
| # Sass.add_feature("-math-cos") |
| # |
| # |
| # @param feature_name [String] The case sensitive name of the feature to |
| # to add to Sass. Must begin with a dash. |
| def add_feature(feature_name) |
| unless feature_name[0] == ?- |
| raise ArgumentError.new("Plugin feature names must begin with a dash") |
| end |
| KNOWN_FEATURES << feature_name |
| end |
| end |
| |
| extend Features |
| end |