Skip to content

Commit 5105e42

Browse files
authored
fix: node end offset location (#147)
* chore: upgrade postcss deps * chore: broken postcss-parser-tests usage - cases are already parsed - https://github.com/postcss/postcss-parser-tests/blob/main/CHANGELOG.md#87 - postcss/postcss-parser-tests@442f6dc * fix: offset in sass specific parsing
1 parent c75f4a3 commit 5105e42

File tree

5 files changed

+56
-15
lines changed

5 files changed

+56
-15
lines changed

lib/scss-parser.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@ class ScssParser extends Parser {
2828
this.init(node, token[2])
2929
node.raws.inline = true
3030
let pos = this.input.fromOffset(token[3])
31-
node.source.end = { column: pos.col, line: pos.line, offset: token[3] }
31+
node.source.end = {
32+
column: pos.col,
33+
line: pos.line,
34+
offset: token[3] + 1
35+
}
3236

3337
let text = token[1].slice(2)
3438
if (/^\s*$/.test(text)) {
@@ -106,10 +110,18 @@ class ScssParser extends Parser {
106110
}
107111
if (last[3]) {
108112
let pos = this.input.fromOffset(last[3])
109-
node.source.end = { column: pos.col, line: pos.line, offset: last[3] }
113+
node.source.end = {
114+
column: pos.col,
115+
line: pos.line,
116+
offset: last[3] + 1
117+
}
110118
} else {
111119
let pos = this.input.fromOffset(last[2])
112-
node.source.end = { column: pos.col, line: pos.line, offset: last[2] }
120+
node.source.end = {
121+
column: pos.col,
122+
line: pos.line,
123+
offset: last[2] + 1
124+
}
113125
}
114126

115127
while (tokens[0][0] !== 'word') {

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
}
5454
],
5555
"peerDependencies": {
56-
"postcss": "^8.4.19"
56+
"postcss": "^8.4.29"
5757
},
5858
"devDependencies": {
5959
"@logux/eslint-config": "^51.0.1",
@@ -65,8 +65,8 @@
6565
"eslint-plugin-perfectionist": "^1.5.1",
6666
"eslint-plugin-prefer-let": "^3.0.1",
6767
"eslint-plugin-promise": "^6.1.1",
68-
"postcss": "^8.4.27",
69-
"postcss-parser-tests": "^8.6.0",
68+
"postcss": "^8.4.29",
69+
"postcss-parser-tests": "^8.8.0",
7070
"uvu": "^0.5.6"
7171
},
7272
"prettier": {

pnpm-lock.yaml

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/location.test.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
let { equal } = require('uvu/assert')
2+
let { test } = require('uvu')
3+
4+
let parse = require('../lib/scss-parse')
5+
6+
function checkOffset(source, node, expected) {
7+
let start = node.source.start.offset
8+
let end = node.source.end.offset
9+
equal(source.slice(start, end), expected)
10+
}
11+
12+
test('inline comment', () => {
13+
let source = 'a{//xxx\n}'
14+
let root = parse(source)
15+
16+
checkOffset(source, root.first, 'a{//xxx\n}')
17+
checkOffset(source, root.first.first, '//xxx')
18+
})
19+
20+
test('nested prop with value', () => {
21+
let source = 'a { margin: 0 { left: 10px; }}'
22+
let root = parse(source)
23+
24+
checkOffset(source, root.first, 'a { margin: 0 { left: 10px; }}')
25+
checkOffset(source, root.first.first, 'margin: 0 { left: 10px; }')
26+
checkOffset(source, root.first.first.first, 'left: 10px;')
27+
})
28+
29+
test.run()

test/parse.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ let parse = require('../lib/scss-parse')
77
eachTest((name, css, json) => {
88
test('parses ' + name, () => {
99
let parsed = jsonify(parse(css, { from: name }))
10-
equal(JSON.parse(parsed), JSON.parse(json))
10+
equal(parsed, json)
1111
})
1212
})
1313

0 commit comments

Comments
 (0)