private updateResult()

in src/language/semantics/xpLexer.ts [1038:1116]


  private updateResult(
    poppedContext: Token | null | undefined,
    result: Token[],
    newToken: Token
  ) {
    let cachedRealToken = this.latestRealToken
    if (cachedRealToken) {
    }
    let state = newToken.charType
    let newTokenValue = newToken.value

    if (newTokenValue !== '') {
      newToken.length = newTokenValue.length
      newToken.line = this.lineNumber
      newToken.startCharacter = this.tokenCharNumber
      if (newToken.tokenType === TokenLevelState.nodeNameTest) {
        if (newTokenValue.includes('#')) {
          newToken.tokenType = TokenLevelState.functionNameTest
        }
      }

      let isWhitespace = newToken.charType === CharLevelState.lWs

      if (this.deferWsNewLine) {
        if (isWhitespace) {
          this.lineNumber++
          newToken.line = this.lineNumber
          this.tokenCharNumber = this.wsCharNumber
        } else {
          this.tokenCharNumber = 0
          this.lineNumber++
          this.wsNewLine = true
        }
        this.deferWsNewLine = false
      } else if (this.wsNewLine) {
        if (isWhitespace) {
          this.tokenCharNumber = this.wsCharNumber
        } else {
          this.tokenCharNumber += newTokenValue.length
        }

        this.wsNewLine = false
      } else {
        this.tokenCharNumber += newTokenValue.length
      }
      if (!isWhitespace) {
        this.wsCharNumber = 0
      }

      if (!isWhitespace) {
        result.push(newToken)
      }

      let prevToken = this.latestRealToken
      this.setLabelForLastTokenOnly(prevToken, newToken)
      this.setLabelsUsingCurrentToken(poppedContext, prevToken, newToken)

      if (
        prevToken &&
        !isWhitespace &&
        this.elementNameTests &&
        this.attributeNameTests
      ) {
        if (prevToken.tokenType === TokenLevelState.nodeNameTest) {
          if (this.elementNameTests.indexOf(prevToken.value) < 0) {
            this.elementNameTests.push(prevToken.value)
          }
        } else if (prevToken.tokenType === TokenLevelState.attributeNameTest) {
          if (this.attributeNameTests.indexOf(prevToken.value) < 0) {
            this.attributeNameTests.push(prevToken.value)
          }
        }
      }

      if (!(state === CharLevelState.lC || state === CharLevelState.lWs)) {
        this.latestRealToken = newToken
      }
    }
  }