MCPcopy
hub / github.com/postcss/postcss / atrule

Method atrule

lib/parser.js:42–126  ·  view source on GitHub ↗
(token)

Source from the content-addressed store, hash-verified

40 }
41
42 atrule(token) {
43 let node = new AtRule()
44 node.name = token[1].slice(1)
45 if (node.name === '') {
46 this.unnamedAtrule(node, token)
47 }
48 this.init(node, token[2])
49
50 let type
51 let prev
52 let shift
53 let last = false
54 let open = false
55 let params = []
56 let brackets = []
57
58 while (!this.tokenizer.endOfFile()) {
59 token = this.tokenizer.nextToken()
60 type = token[0]
61
62 if (type === '(' || type === '[') {
63 brackets.push(type === '(' ? ')' : ']')
64 } else if (type === '{' && brackets.length > 0) {
65 brackets.push('}')
66 } else if (type === brackets[brackets.length - 1]) {
67 brackets.pop()
68 }
69
70 if (brackets.length === 0) {
71 if (type === ';') {
72 node.source.end = this.getPosition(token[2])
73 node.source.end.offset++
74 this.semicolon = true
75 break
76 } else if (type === '{') {
77 open = true
78 break
79 } else if (type === '}') {
80 if (params.length > 0) {
81 shift = params.length - 1
82 prev = params[shift]
83 while (prev && prev[0] === 'space') {
84 prev = params[--shift]
85 }
86 if (prev) {
87 node.source.end = this.getPosition(prev[3] || prev[2])
88 node.source.end.offset++
89 }
90 }
91 this.end(token)
92 break
93 } else {
94 params.push(token)
95 }
96 } else {
97 params.push(token)
98 }
99

Callers 1

parseMethod · 0.95

Calls 8

unnamedAtruleMethod · 0.95
initMethod · 0.95
getPositionMethod · 0.95
endMethod · 0.95
rawMethod · 0.95
pushMethod · 0.80

Tested by

no test coverage detected