1 #ifndef SASS_CHECK_NESTING_H
2 #define SASS_CHECK_NESTING_H
5 #include "operation.hpp"
9 class CheckNesting : public Operation_CRTP<Statement_Ptr, CheckNesting> {
11 std::vector<Statement_Ptr> parents;
13 Definition_Ptr current_mixin_definition;
15 Statement_Ptr fallback_impl(Statement_Ptr);
16 Statement_Ptr before(Statement_Ptr);
17 Statement_Ptr visit_children(Statement_Ptr);
23 Statement_Ptr operator()(Block_Ptr);
24 Statement_Ptr operator()(Definition_Ptr);
27 Statement_Ptr fallback(U x) {
28 Statement_Ptr n = Cast<Statement>(x);
29 if (this->should_visit(n)) {
30 return fallback_impl(n);
36 void invalid_content_parent(Statement_Ptr);
37 void invalid_charset_parent(Statement_Ptr);
38 void invalid_extend_parent(Statement_Ptr);
39 // void invalid_import_parent(Statement_Ptr);
40 void invalid_mixin_definition_parent(Statement_Ptr);
41 void invalid_function_parent(Statement_Ptr);
43 void invalid_function_child(Statement_Ptr);
44 void invalid_prop_child(Statement_Ptr);
45 void invalid_prop_parent(Statement_Ptr);
46 void invalid_return_parent(Statement_Ptr);
48 bool is_transparent_parent(Statement_Ptr, Statement_Ptr);
50 bool should_visit(Statement_Ptr);
52 bool is_charset(Statement_Ptr);
53 bool is_mixin(Statement_Ptr);
54 bool is_function(Statement_Ptr);
55 bool is_root_node(Statement_Ptr);
56 bool is_at_root_node(Statement_Ptr);
57 bool is_directive_node(Statement_Ptr);