• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"use strict"
2
3const privateClassElements = require('internal/deps/acorn-plugins/acorn-private-class-elements/index')
4
5module.exports = function(Parser) {
6  const ExtendedParser = privateClassElements(Parser)
7
8  return class extends ExtendedParser {
9    // Parse private methods
10    parseClassElement(_constructorAllowsSuper) {
11      const oldInClassMemberName = this._inClassMemberName
12      this._inClassMemberName = true
13      const result = super.parseClassElement.apply(this, arguments)
14      this._inClassMemberName = oldInClassMemberName
15      return result
16    }
17
18    parsePropertyName(prop) {
19      const isPrivate = this.options.ecmaVersion >= 8 && this._inClassMemberName && this.type == this.privateNameToken
20      this._inClassMemberName = false
21      if (!isPrivate) return super.parsePropertyName(prop)
22      return this.parsePrivateClassElementName(prop)
23    }
24  }
25}
26