26 lines
864 B
JavaScript
26 lines
864 B
JavaScript
"use strict"
|
|
|
|
const privateClassElements = require("acorn-private-class-elements")
|
|
|
|
module.exports = function(Parser) {
|
|
const ExtendedParser = privateClassElements(Parser)
|
|
|
|
return class extends ExtendedParser {
|
|
// Parse private methods
|
|
parseClassElement(_constructorAllowsSuper) {
|
|
const oldInClassMemberName = this._inClassMemberName
|
|
this._inClassMemberName = true
|
|
const result = super.parseClassElement.apply(this, arguments)
|
|
this._inClassMemberName = oldInClassMemberName
|
|
return result
|
|
}
|
|
|
|
parsePropertyName(prop) {
|
|
const isPrivate = this.options.ecmaVersion >= 8 && this._inClassMemberName && this.type == this.privateNameToken && !prop.static
|
|
this._inClassMemberName = false
|
|
if (!isPrivate) return super.parsePropertyName(prop)
|
|
return this.parsePrivateClassElementName(prop)
|
|
}
|
|
}
|
|
}
|