UNPKG

@glimmer/syntax

Version:
51 lines (46 loc) 5.92 kB
import { SourceSpan } from './span'; export class SpanList { constructor(span = []) { this._span = span; } static range(span, fallback = SourceSpan.NON_EXISTENT) { return new SpanList(span.map(loc)).getRangeOffset(fallback); } add(offset) { this._span.push(offset); } getRangeOffset(fallback) { if (this._span.length === 0) { return fallback; } else { let first = this._span[0]; let last = this._span[this._span.length - 1]; return first.extend(last); } } } export function loc(span) { if (Array.isArray(span)) { let first = span[0]; let last = span[span.length - 1]; return loc(first).extend(loc(last)); } else if (span instanceof SourceSpan) { return span; } else { return span.loc; } } export function hasSpan(span) { if (Array.isArray(span) && span.length === 0) { return false; } return true; } export function maybeLoc(location, fallback) { if (hasSpan(location)) { return loc(location); } else { return fallback; } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvc291cmNlL3NwYW4tbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxTQUF1QixVQUF2QixRQUF5QyxRQUF6QztBQU9BLE9BQU0sTUFBTyxRQUFQLENBQWU7QUFTbkIsRUFBQSxXQUFBLENBQVksSUFBQSxHQUFxQixFQUFqQyxFQUFtQztBQUNqQyxTQUFLLEtBQUwsR0FBYSxJQUFiO0FBQ0Q7O0FBUkQsU0FBTyxLQUFQLENBQWEsSUFBYixFQUFvQyxRQUFBLEdBQXVCLFVBQVUsQ0FBQyxZQUF0RSxFQUFrRjtBQUNoRixXQUFPLElBQUksUUFBSixDQUFhLElBQUksQ0FBQyxHQUFMLENBQVMsR0FBVCxDQUFiLEVBQTRCLGNBQTVCLENBQTJDLFFBQTNDLENBQVA7QUFDRDs7QUFRRCxFQUFBLEdBQUcsQ0FBQyxNQUFELEVBQW1CO0FBQ3BCLFNBQUssS0FBTCxDQUFXLElBQVgsQ0FBZ0IsTUFBaEI7QUFDRDs7QUFFRCxFQUFBLGNBQWMsQ0FBQyxRQUFELEVBQXFCO0FBQ2pDLFFBQUksS0FBSyxLQUFMLENBQVcsTUFBWCxLQUFzQixDQUExQixFQUE2QjtBQUMzQixhQUFPLFFBQVA7QUFDRCxLQUZELE1BRU87QUFDTCxVQUFJLEtBQUssR0FBRyxLQUFLLEtBQUwsQ0FBVyxDQUFYLENBQVo7QUFDQSxVQUFJLElBQUksR0FBRyxLQUFLLEtBQUwsQ0FBVyxLQUFLLEtBQUwsQ0FBVyxNQUFYLEdBQW9CLENBQS9CLENBQVg7QUFFQSxhQUFPLEtBQUssQ0FBQyxNQUFOLENBQWEsSUFBYixDQUFQO0FBQ0Q7QUFDRjs7QUExQmtCO0FBK0JyQixPQUFNLFNBQVUsR0FBVixDQUFjLElBQWQsRUFBaUM7QUFDckMsTUFBSSxLQUFLLENBQUMsT0FBTixDQUFjLElBQWQsQ0FBSixFQUF5QjtBQUN2QixRQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBRCxDQUFoQjtBQUNBLFFBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTCxHQUFjLENBQWYsQ0FBZjtBQUVBLFdBQU8sR0FBRyxDQUFDLEtBQUQsQ0FBSCxDQUFXLE1BQVgsQ0FBa0IsR0FBRyxDQUFDLElBQUQsQ0FBckIsQ0FBUDtBQUNELEdBTEQsTUFLTyxJQUFJLElBQUksWUFBWSxVQUFwQixFQUFnQztBQUNyQyxXQUFPLElBQVA7QUFDRCxHQUZNLE1BRUE7QUFDTCxXQUFPLElBQUksQ0FBQyxHQUFaO0FBQ0Q7QUFDRjtBQUlELE9BQU0sU0FBVSxPQUFWLENBQWtCLElBQWxCLEVBQTBDO0FBQzlDLE1BQUksS0FBSyxDQUFDLE9BQU4sQ0FBYyxJQUFkLEtBQXVCLElBQUksQ0FBQyxNQUFMLEtBQWdCLENBQTNDLEVBQThDO0FBQzVDLFdBQU8sS0FBUDtBQUNEOztBQUVELFNBQU8sSUFBUDtBQUNEO0FBRUQsT0FBTSxTQUFVLFFBQVYsQ0FBbUIsUUFBbkIsRUFBaUQsUUFBakQsRUFBcUU7QUFDekUsTUFBSSxPQUFPLENBQUMsUUFBRCxDQUFYLEVBQXVCO0FBQ3JCLFdBQU8sR0FBRyxDQUFDLFFBQUQsQ0FBVjtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU8sUUFBUDtBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5pbXBvcnQgdHlwZSB7IFByZXNlbnRBcnJheSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBMb2NhdGVkV2l0aE9wdGlvbmFsU3BhbiwgTG9jYXRlZFdpdGhTcGFuIH0gZnJvbSAnLi9sb2NhdGlvbic7XG5pbXBvcnQgeyBTb3VyY2VPZmZzZXQsIFNvdXJjZVNwYW4gfSBmcm9tICcuL3NwYW4nO1xuXG5leHBvcnQgdHlwZSBIYXNTcGFuID0gU291cmNlU3BhbiB8IExvY2F0ZWRXaXRoU3BhbiB8IFByZXNlbnRBcnJheTxMb2NhdGVkV2l0aFNwYW4+O1xuZXhwb3J0IHR5cGUgTWF5YmVIYXNTcGFuID0gU291cmNlU3BhbiB8IExvY2F0ZWRXaXRoT3B0aW9uYWxTcGFuIHwgTG9jYXRlZFdpdGhPcHRpb25hbFNwYW5bXSB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIFRvU291cmNlT2Zmc2V0ID0gbnVtYmVyIHwgU291cmNlT2Zmc2V0O1xuXG5leHBvcnQgY2xhc3MgU3Bhbkxpc3Qge1xuICBzdGF0aWMgcmFuZ2Uoc3BhbjogUHJlc2VudEFycmF5PEhhc1NvdXJjZVNwYW4+KTogU291cmNlU3BhbjtcbiAgc3RhdGljIHJhbmdlKHNwYW46IEhhc1NvdXJjZVNwYW5bXSwgZmFsbGJhY2s6IFNvdXJjZVNwYW4pOiBTb3VyY2VTcGFuO1xuICBzdGF0aWMgcmFuZ2Uoc3BhbjogSGFzU291cmNlU3BhbltdLCBmYWxsYmFjazogU291cmNlU3BhbiA9IFNvdXJjZVNwYW4uTk9OX0VYSVNURU5UKTogU291cmNlU3BhbiB7XG4gICAgcmV0dXJuIG5ldyBTcGFuTGlzdChzcGFuLm1hcChsb2MpKS5nZXRSYW5nZU9mZnNldChmYWxsYmFjayk7XG4gIH1cblxuICBfc3BhbjogU291cmNlU3BhbltdO1xuXG4gIGNvbnN0cnVjdG9yKHNwYW46IFNvdXJjZVNwYW5bXSA9IFtdKSB7XG4gICAgdGhpcy5fc3BhbiA9IHNwYW47XG4gIH1cblxuICBhZGQob2Zmc2V0OiBTb3VyY2VTcGFuKTogdm9pZCB7XG4gICAgdGhpcy5fc3Bhbi5wdXNoKG9mZnNldCk7XG4gIH1cblxuICBnZXRSYW5nZU9mZnNldChmYWxsYmFjazogU291cmNlU3Bhbik6IFNvdXJjZVNwYW4ge1xuICAgIGlmICh0aGlzLl9zcGFuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZmlyc3QgPSB0aGlzLl9zcGFuWzBdO1xuICAgICAgbGV0IGxhc3QgPSB0aGlzLl9zcGFuW3RoaXMuX3NwYW4ubGVuZ3RoIC0gMV07XG5cbiAgICAgIHJldHVybiBmaXJzdC5leHRlbmQobGFzdCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIEhhc1NvdXJjZVNwYW4gPSB7IGxvYzogU291cmNlU3BhbiB9IHwgU291cmNlU3BhbiB8IFtIYXNTb3VyY2VTcGFuLCAuLi5IYXNTb3VyY2VTcGFuW11dO1xuXG5leHBvcnQgZnVuY3Rpb24gbG9jKHNwYW46IEhhc1NvdXJjZVNwYW4pOiBTb3VyY2VTcGFuIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3BhbikpIHtcbiAgICBsZXQgZmlyc3QgPSBzcGFuWzBdO1xuICAgIGxldCBsYXN0ID0gc3BhbltzcGFuLmxlbmd0aCAtIDFdO1xuXG4gICAgcmV0dXJuIGxvYyhmaXJzdCkuZXh0ZW5kKGxvYyhsYXN0KSk7XG4gIH0gZWxzZSBpZiAoc3BhbiBpbnN0YW5jZW9mIFNvdXJjZVNwYW4pIHtcbiAgICByZXR1cm4gc3BhbjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3Bhbi5sb2M7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgTWF5YmVIYXNTb3VyY2VTcGFuID0geyBsb2M6IFNvdXJjZVNwYW4gfSB8IFNvdXJjZVNwYW4gfCBNYXliZUhhc1NvdXJjZVNwYW5bXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1NwYW4oc3BhbjogTWF5YmVIYXNTb3VyY2VTcGFuKTogc3BhbiBpcyBIYXNTb3VyY2VTcGFuIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3BhbikgJiYgc3Bhbi5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1heWJlTG9jKGxvY2F0aW9uOiBNYXliZUhhc1NvdXJjZVNwYW4sIGZhbGxiYWNrOiBTb3VyY2VTcGFuKTogU291cmNlU3BhbiB7XG4gIGlmIChoYXNTcGFuKGxvY2F0aW9uKSkge1xuICAgIHJldHVybiBsb2MobG9jYXRpb24pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==