Skip to content

Commit 6f8c2c2

Browse files
committed
Refactor code-style
* Add more docs to JSDoc * Add support for `null`, `undefined` in input of API types
1 parent 3741cab commit 6f8c2c2

File tree

1 file changed

+32
-39
lines changed

1 file changed

+32
-39
lines changed

lib/index.js

Lines changed: 32 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,67 +4,60 @@
44
* @typedef {[number, number]} RangeLike
55
*
66
* @typedef PointLike
7-
* @property {number|null|undefined} [line]
8-
* @property {number|null|undefined} [column]
7+
* @property {number | null | undefined} [line]
8+
* @property {number | null | undefined} [column]
99
*
1010
* @typedef LocLike
11-
* @property {PointLike|null|undefined} [start]
12-
* @property {PointLike|null|undefined} [end]
11+
* @property {PointLike | null | undefined} [start]
12+
* @property {PointLike | null | undefined} [end]
1313
*
1414
* @typedef NodeLike
15-
* @property {LocLike|null|undefined} [loc]
16-
* @property {RangeLike|null|undefined} [range]
17-
* @property {number|null|undefined} [start]
18-
* @property {number|null|undefined} [end]
15+
* @property {LocLike | null | undefined} [loc]
16+
* @property {RangeLike | null | undefined} [range]
17+
* @property {number | null | undefined} [start]
18+
* @property {number | null | undefined} [end]
1919
*/
2020

2121
/**
22-
* Given an estree `node`, returns a unist `position`.
23-
* @param {NodeLike|null} [value]
22+
* Turn an estree `node` into a unist `position`.
23+
*
24+
* @param {NodeLike | null | undefined} [value]
25+
* estree node.
2426
* @returns {Position}
27+
* unist position.
2528
*/
2629
export function positionFromEstree(value) {
27-
/** @type {NodeLike} */
2830
const node = value || {}
29-
/** @type {LocLike} */
3031
const loc = node.loc || {}
31-
/** @type {RangeLike} */
3232
const range = node.range || [0, 0]
33-
const startOffset = range[0] || node.start
34-
const endOffset = range[1] || node.end
33+
const startColumn = loc.start
34+
? numberOrUndefined(loc.start.column)
35+
: undefined
36+
const endColumn = loc.end ? numberOrUndefined(loc.end.column) : undefined
3537

3638
return {
3739
start: {
3840
// @ts-expect-error: return no point / no position next major.
39-
line:
40-
loc.start && typeof loc.start.line === 'number' && loc.start.line > -1
41-
? loc.start.line
42-
: undefined,
41+
line: loc.start ? numberOrUndefined(loc.start.line) : undefined,
4342
// @ts-expect-error: return no point / no position next major.
44-
column:
45-
loc.start &&
46-
typeof loc.start.column === 'number' &&
47-
loc.start.column > -1
48-
? loc.start.column + 1
49-
: undefined,
50-
offset:
51-
typeof startOffset === 'number' && startOffset > -1
52-
? startOffset
53-
: undefined
43+
column: startColumn === undefined ? undefined : startColumn + 1,
44+
offset: numberOrUndefined(range[0] || node.start)
5445
},
5546
end: {
5647
// @ts-expect-error: return no point / no position next major.
57-
line:
58-
loc.end && typeof loc.end.line === 'number' && loc.end.line > -1
59-
? loc.end.line
60-
: undefined,
48+
line: loc.end ? numberOrUndefined(loc.end.line) : undefined,
6149
// @ts-expect-error: return no point / no position next major.
62-
column:
63-
loc.end && typeof loc.end.column === 'number' && loc.end.column > -1
64-
? loc.end.column + 1
65-
: undefined,
66-
offset:
67-
typeof endOffset === 'number' && endOffset > -1 ? endOffset : undefined
50+
column: endColumn === undefined ? undefined : endColumn + 1,
51+
offset: numberOrUndefined(range[1] || node.end)
6852
}
6953
}
7054
}
55+
56+
/**
57+
*
58+
* @param {number | null | undefined} value
59+
* @returns {number | undefined}
60+
*/
61+
function numberOrUndefined(value) {
62+
return typeof value === 'number' && value > -1 ? value : undefined
63+
}

0 commit comments

Comments
 (0)