diff --git a/eslint/babel-eslint-parser/src/convert/convertTokens.cjs b/eslint/babel-eslint-parser/src/convert/convertTokens.cjs index 634410f04558..39bdd2f6ee25 100644 --- a/eslint/babel-eslint-parser/src/convert/convertTokens.cjs +++ b/eslint/babel-eslint-parser/src/convert/convertTokens.cjs @@ -140,6 +140,8 @@ function convertToken(token, source, tl) { label === tl.bracketHashL || label === tl.bracketBarL || label === tl.bracketBarR || + label === tl.doubleCaret || + label === tl.doubleAt || type.isAssign ) { token.type = "Punctuator"; diff --git a/eslint/babel-eslint-parser/test/index.js b/eslint/babel-eslint-parser/test/index.js index f67008143d03..6f96097a7f9e 100644 --- a/eslint/babel-eslint-parser/test/index.js +++ b/eslint/babel-eslint-parser/test/index.js @@ -691,6 +691,31 @@ describe("Babel and Espree", () => { expect(babylonAST.tokens[16]).toMatchObject(topicToken); }); + it.each(["^", "%", "^^", "@@"])("pipeline %s topic token", tok => { + const code = ` + x |> ${tok} + y |> ${tok}[0] + `; + + const babylonAST = parseForESLint(code, { + eslintVisitorKeys: true, + eslintScopeManager: true, + babelOptions: { + filename: "test.js", + parserOpts: { + plugins: [ + ["pipelineOperator", { proposal: "hack", topicToken: tok }], + ], + tokens: true, + }, + }, + }).ast; + + const topicToken = { type: "Punctuator", value: tok }; + expect(babylonAST.tokens[2]).toMatchObject(topicToken); + expect(babylonAST.tokens[5]).toMatchObject(topicToken); + }); + it("empty program with line comment", () => { parseAndAssertSame("// single comment"); });