Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
46.51% |
20 / 43 |
|
50.00% |
1 / 2 |
CRAP | |
0.00% |
0 / 1 |
| Less_Tree_NamespaceValue | |
46.51% |
20 / 43 |
|
50.00% |
1 / 2 |
61.23 | |
0.00% |
0 / 1 |
| __construct | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
1 | |||
| compile | |
41.03% |
16 / 39 |
|
0.00% |
0 / 1 |
68.51 | |||
| 1 | <?php |
| 2 | /** |
| 3 | * @private |
| 4 | * @see less-3.13.1.js#NamespaceValue.prototype |
| 5 | */ |
| 6 | class Less_Tree_NamespaceValue extends Less_Tree { |
| 7 | |
| 8 | /** @var Less_Tree_Mixin_Call|Less_Tree_VariableCall */ |
| 9 | public $value; |
| 10 | /** @var int|null */ |
| 11 | public $index; |
| 12 | /** @var string[] */ |
| 13 | public $lookups; |
| 14 | /** @var array|null */ |
| 15 | public $currentFileInfo; |
| 16 | |
| 17 | public function __construct( $ruleCall, $lookups, $index = null, $currentFileInfo = null ) { |
| 18 | $this->value = $ruleCall; |
| 19 | $this->lookups = $lookups; |
| 20 | $this->index = $index; |
| 21 | $this->currentFileInfo = $currentFileInfo; |
| 22 | } |
| 23 | |
| 24 | public function compile( $env ) { |
| 25 | /** @var Less_Tree_Ruleset $rules */ |
| 26 | $rules = $this->value->compile( $env ); |
| 27 | |
| 28 | foreach ( $this->lookups as $name ) { |
| 29 | /** |
| 30 | * Eval'd DRs return rulesets. |
| 31 | * Eval'd mixins return rules, so let's make a ruleset if we need it. |
| 32 | * We need to do this because of late parsing of values |
| 33 | */ |
| 34 | if ( is_array( $rules ) ) { |
| 35 | $rules = new Less_Tree_Ruleset( [ new Less_Tree_Selector( [] ) ], $rules ); |
| 36 | } |
| 37 | if ( $name === '' ) { |
| 38 | $rules = $rules->lastDeclaration(); |
| 39 | } elseif ( $name[0] === '@' ) { |
| 40 | if ( ( $name[1] ?? '' ) === '@' ) { |
| 41 | $variable = ( new Less_Tree_Variable( substr( $name, 1 ) ) )->compile( $env ); |
| 42 | $name = "@" . $variable->value; |
| 43 | } |
| 44 | if ( $rules instanceof Less_Tree_Ruleset ) { |
| 45 | $rules = $rules->variable( $name ); |
| 46 | } |
| 47 | |
| 48 | if ( !$rules ) { |
| 49 | throw new Less_Exception_Compiler( |
| 50 | "Variable $name not found", |
| 51 | null, |
| 52 | $this->index, |
| 53 | $this->currentFileInfo |
| 54 | ); |
| 55 | } |
| 56 | } else { |
| 57 | if ( strncmp( $name, '$@', 2 ) === 0 ) { |
| 58 | $variable = ( new Less_Tree_Variable( substr( $name, 1 ) ) )->compile( $env ); |
| 59 | $name = "$" . $variable->value; |
| 60 | } else { |
| 61 | $name = $name[0] === '$' ? $name : ( '$' . $name ); |
| 62 | } |
| 63 | |
| 64 | if ( $rules instanceof Less_Tree_Ruleset ) { |
| 65 | $rules = $rules->property( $name ); |
| 66 | } |
| 67 | |
| 68 | if ( !$rules ) { |
| 69 | throw new Less_Exception_Compiler( |
| 70 | "Property $name not found", |
| 71 | null, |
| 72 | $this->index, |
| 73 | $this->currentFileInfo |
| 74 | ); |
| 75 | } |
| 76 | // Properties are an array of values, since a ruleset can have multiple props. |
| 77 | // We pick the last one (the "cascaded" value) |
| 78 | if ( is_array( $rules ) ) { // to satisfy phan checks |
| 79 | $rules = $rules[ count( $rules ) - 1 ]; |
| 80 | } |
| 81 | } |
| 82 | |
| 83 | if ( $rules->value ) { |
| 84 | $rules = $rules->compile( $env )->value; |
| 85 | } |
| 86 | if ( $rules instanceof Less_Tree_DetachedRuleset && $rules->ruleset ) { |
| 87 | // @todo - looks like this is never evaluated, investigate later |
| 88 | // @see https://github.com/less/less.js/commit/29468bffcd8a9f2f |
| 89 | $rules = $rules->ruleset->compile( $env ); |
| 90 | } |
| 91 | } |
| 92 | |
| 93 | return $rules; |
| 94 | } |
| 95 | |
| 96 | } |