Skip to content

Commit

Permalink
Add a deprecation warning for @import's that resolved .css files
Browse files Browse the repository at this point in the history
This is the first to removing native CSS imports.

Like Ruby Sass, Dart Sass will not implement this behaviour. This is
blocking compatibility between Node Sass and Dart Sass.

This is a non-standard behaviour which is constant source of confusion.

We had originally planned to removed this behaviour when the module
system was ready. However that has feature has been delayed and
people are continuing to be tripped up by this behaviour.
  • Loading branch information
xzyfer committed Mar 24, 2018
1 parent b80efe7 commit fb15852
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 3 deletions.
8 changes: 8 additions & 0 deletions src/context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,14 @@ namespace Sass {
// process the resolved entry
else if (resolved.size() == 1) {
bool use_cache = c_importers.size() == 0;
if (resolved[0].deprecated) {
// emit deprecation warning when import resolves to a .css file
deprecated(
"Including .css files with @import is non-standard behaviour which will be removed in future versions of LibSass.",
"Use a custom importer to maintain this behaviour. Check your implementations documentation on how to create a custom importer.",
true, pstate
);
}
// use cache for the resource loading
if (use_cache && sheets.count(resolved[0].abs_path)) return resolved[0];
// try to read the content of the resolved file entry
Expand Down
4 changes: 2 additions & 2 deletions src/file.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -357,13 +357,13 @@ namespace Sass {
for(auto ext : d_exts) {
rel_path = join_paths(base, "_" + name + ext);
abs_path = join_paths(root, rel_path);
if (file_exists(abs_path)) includes.push_back({{ rel_path, root }, abs_path });
if (file_exists(abs_path)) includes.push_back({{ rel_path, root }, abs_path, true });
}
// next test plain name with d_exts
for(auto ext : d_exts) {
rel_path = join_paths(base, name + ext);
abs_path = join_paths(root, rel_path);
if (file_exists(abs_path)) includes.push_back({{ rel_path, root }, abs_path });
if (file_exists(abs_path)) includes.push_back({{ rel_path, root }, abs_path, true });
}
// index files
if (includes.size() == 0) {
Expand Down
7 changes: 6 additions & 1 deletion src/file.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,14 @@ namespace Sass {
public:
// resolved absolute path
std::string abs_path;
// is a deprecated file type
bool deprecated;
public:
Include(const Importer& imp, std::string abs_path, bool deprecated)
: Importer(imp), abs_path(abs_path), deprecated(deprecated)
{ }
Include(const Importer& imp, std::string abs_path)
: Importer(imp), abs_path(abs_path)
: Importer(imp), abs_path(abs_path), deprecated(false)
{ }
};

Expand Down

0 comments on commit fb15852

Please sign in to comment.