Coverage Report

Created: 2025-07-09 06:55

/src/libsass/src/check_nesting.hpp
Line
Count
Source
1
#ifndef SASS_CHECK_NESTING_H
2
#define SASS_CHECK_NESTING_H
3
4
// sass.hpp must go before all system headers to get the
5
// __EXTENSIONS__ fix on Solaris.
6
#include "sass.hpp"
7
#include "ast.hpp"
8
#include "operation.hpp"
9
#include <vector>
10
11
namespace Sass {
12
13
  class CheckNesting : public Operation_CRTP<Statement*, CheckNesting> {
14
15
    sass::vector<Statement*>  parents;
16
    Backtraces                  traces;
17
    Statement*               parent;
18
    Definition*              current_mixin_definition;
19
20
    Statement* before(Statement*);
21
    Statement* visit_children(Statement*);
22
23
  public:
24
    CheckNesting();
25
8
    ~CheckNesting() { }
26
27
    Statement* operator()(Block*);
28
    Statement* operator()(Definition*);
29
    Statement* operator()(If*);
30
31
    template <typename U>
32
16
    Statement* fallback(U x) {
33
16
      Statement* s = Cast<Statement>(x);
34
16
      if (s && this->should_visit(s)) {
35
16
        Block* b1 = Cast<Block>(s);
36
16
        ParentStatement* b2 = Cast<ParentStatement>(s);
37
16
        if (b1 || b2) return visit_children(s);
38
16
      }
39
6
      return s;
40
16
    }
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Block*>(Sass::Block*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::If*>(Sass::If*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Definition*>(Sass::Definition*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::AST_Node*>(Sass::AST_Node*)
Sass::Statement* Sass::CheckNesting::fallback<Sass::StyleRule*>(Sass::StyleRule*)
Line
Count
Source
32
6
    Statement* fallback(U x) {
33
6
      Statement* s = Cast<Statement>(x);
34
6
      if (s && this->should_visit(s)) {
35
6
        Block* b1 = Cast<Block>(s);
36
6
        ParentStatement* b2 = Cast<ParentStatement>(s);
37
6
        if (b1 || b2) return visit_children(s);
38
6
      }
39
0
      return s;
40
6
    }
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Bubble*>(Sass::Bubble*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Trace*>(Sass::Trace*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::SupportsRule*>(Sass::SupportsRule*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::MediaRule*>(Sass::MediaRule*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::CssMediaRule*>(Sass::CssMediaRule*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::CssMediaQuery*>(Sass::CssMediaQuery*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::AtRootRule*>(Sass::AtRootRule*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::AtRule*>(Sass::AtRule*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Keyframe_Rule*>(Sass::Keyframe_Rule*)
Sass::Statement* Sass::CheckNesting::fallback<Sass::Declaration*>(Sass::Declaration*)
Line
Count
Source
32
4
    Statement* fallback(U x) {
33
4
      Statement* s = Cast<Statement>(x);
34
4
      if (s && this->should_visit(s)) {
35
4
        Block* b1 = Cast<Block>(s);
36
4
        ParentStatement* b2 = Cast<ParentStatement>(s);
37
4
        if (b1 || b2) return visit_children(s);
38
4
      }
39
0
      return s;
40
4
    }
Sass::Statement* Sass::CheckNesting::fallback<Sass::Assignment*>(Sass::Assignment*)
Line
Count
Source
32
6
    Statement* fallback(U x) {
33
6
      Statement* s = Cast<Statement>(x);
34
6
      if (s && this->should_visit(s)) {
35
6
        Block* b1 = Cast<Block>(s);
36
6
        ParentStatement* b2 = Cast<ParentStatement>(s);
37
6
        if (b1 || b2) return visit_children(s);
38
6
      }
39
6
      return s;
40
6
    }
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Import*>(Sass::Import*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Import_Stub*>(Sass::Import_Stub*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::WarningRule*>(Sass::WarningRule*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::ErrorRule*>(Sass::ErrorRule*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::DebugRule*>(Sass::DebugRule*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Comment*>(Sass::Comment*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::ForRule*>(Sass::ForRule*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::EachRule*>(Sass::EachRule*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::WhileRule*>(Sass::WhileRule*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Return*>(Sass::Return*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Content*>(Sass::Content*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::ExtendRule*>(Sass::ExtendRule*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Mixin_Call*>(Sass::Mixin_Call*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Null*>(Sass::Null*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::List*>(Sass::List*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Map*>(Sass::Map*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Function*>(Sass::Function*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Binary_Expression*>(Sass::Binary_Expression*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Unary_Expression*>(Sass::Unary_Expression*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Function_Call*>(Sass::Function_Call*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Custom_Warning*>(Sass::Custom_Warning*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Custom_Error*>(Sass::Custom_Error*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Variable*>(Sass::Variable*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Number*>(Sass::Number*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Color*>(Sass::Color*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Color_RGBA*>(Sass::Color_RGBA*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Color_HSLA*>(Sass::Color_HSLA*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Boolean*>(Sass::Boolean*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::String_Schema*>(Sass::String_Schema*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::String_Quoted*>(Sass::String_Quoted*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::String_Constant*>(Sass::String_Constant*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::SupportsCondition*>(Sass::SupportsCondition*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::SupportsOperation*>(Sass::SupportsOperation*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::SupportsNegation*>(Sass::SupportsNegation*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::SupportsDeclaration*>(Sass::SupportsDeclaration*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Supports_Interpolation*>(Sass::Supports_Interpolation*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Media_Query*>(Sass::Media_Query*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Media_Query_Expression*>(Sass::Media_Query_Expression*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::At_Root_Query*>(Sass::At_Root_Query*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Parent_Reference*>(Sass::Parent_Reference*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Parameter*>(Sass::Parameter*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Parameters*>(Sass::Parameters*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Argument*>(Sass::Argument*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Arguments*>(Sass::Arguments*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::Selector_Schema*>(Sass::Selector_Schema*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::PlaceholderSelector*>(Sass::PlaceholderSelector*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::TypeSelector*>(Sass::TypeSelector*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::ClassSelector*>(Sass::ClassSelector*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::IDSelector*>(Sass::IDSelector*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::AttributeSelector*>(Sass::AttributeSelector*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::PseudoSelector*>(Sass::PseudoSelector*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::SelectorComponent*>(Sass::SelectorComponent*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::SelectorCombinator*>(Sass::SelectorCombinator*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::CompoundSelector*>(Sass::CompoundSelector*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::ComplexSelector*>(Sass::ComplexSelector*)
Unexecuted instantiation: Sass::Statement* Sass::CheckNesting::fallback<Sass::SelectorList*>(Sass::SelectorList*)
41
42
  private:
43
    void invalid_content_parent(Statement*, AST_Node*);
44
    void invalid_charset_parent(Statement*, AST_Node*);
45
    void invalid_extend_parent(Statement*, AST_Node*);
46
    // void invalid_import_parent(Statement*);
47
    void invalid_mixin_definition_parent(Statement*, AST_Node*);
48
    void invalid_function_parent(Statement*, AST_Node*);
49
50
    void invalid_function_child(Statement*);
51
    void invalid_prop_child(Statement*);
52
    void invalid_prop_parent(Statement*, AST_Node*);
53
    void invalid_return_parent(Statement*, AST_Node*);
54
    void invalid_value_child(AST_Node*);
55
56
    bool is_transparent_parent(Statement*, Statement*);
57
58
    bool should_visit(Statement*);
59
60
    bool is_charset(Statement*);
61
    bool is_mixin(Statement*);
62
    bool is_function(Statement*);
63
    bool is_root_node(Statement*);
64
    bool is_at_root_node(Statement*);
65
    bool is_directive_node(Statement*);
66
  };
67
68
}
69
70
#endif