univac
Version:
Generate AST of lots of common programming languages using antlr4. JavaScript API and CLI tool.
73 lines • 2.5 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Must return the same kind of object than returned by Visitor
*/
var TreeSitterVisitor = /** @class */ (function () {
function TreeSitterVisitor() {
}
Object.defineProperty(TreeSitterVisitor.prototype, "options", {
get: function () {
return this._options;
},
set: function (value) {
this._options = value;
},
enumerable: true,
configurable: true
});
TreeSitterVisitor.prototype.getAst = function () {
var _this = this;
if (!this.options) {
throw new Error('Options not set');
}
var node = this.options.root;
if (!node) {
throw new Error('options.root is mandatory for tree-sitter based parsers and none was given');
}
var map = function (sn) {
var n = __assign({}, _this.getNode(sn), { children: (sn.children || []).map(map) });
return n;
};
return map(node);
};
TreeSitterVisitor.prototype.getNode = function (sn) {
return {
type: sn.type,
text: this.options.text ? sn.text : undefined,
start: !this.options.omitPosition ? this.getStartPosition(sn) : undefined,
stop: !this.options.omitPosition ? this.getStopPosition(sn) : undefined,
children: []
};
};
TreeSitterVisitor.prototype.getStopPosition = function (sn) {
return {
column: sn.endPosition.column + 1,
line: sn.endPosition.row + 1,
start: sn.endIndex - sn.text.length,
stop: sn.endIndex
};
};
TreeSitterVisitor.prototype.getStartPosition = function (sn) {
return {
column: sn.startPosition.column + 1,
line: sn.startPosition.row + 1,
start: sn.startIndex - sn.text.length,
stop: sn.startIndex
};
};
return TreeSitterVisitor;
}());
exports.TreeSitterVisitor = TreeSitterVisitor;
//# sourceMappingURL=visitorTreeSitter.js.map