Skip to content

Text between Unicode escapes within an identifier is skipped #61043

Open
@graphemecluster

Description

@graphemecluster

🔎 Search Terms

  • Unicode escape sequences
  • extended Unicode escapes
  • variables, constants, property names, JSX identifiers, JSX attribute names…
  • regular expression group names, RegExp identifiers
  • bundling & transpilation

🕗 Version & Regression Information

⏯ Playground Link

https://www.typescriptlang.org/play/?#code/MYewdgzgLgBAhgHQK4G8BsAmAvsZ6AsWApjALwz4YDcAUHAEbAAmRVMA9OzAKIBOvIXgC4YAYThgwIWADMAlmCYwwcALYkA5A2ZENAOhgAROUoCeIJDHUSYWvJhz3CugPx16LNpxgA5EDCJ+QRpQSFg8AHY0LDheewBOGPoAGxJySloAN1i5BlSvLj4BYTEJKVkFJRV1W2zeXJTdA2MzCysiGw1I6NiEpNSNN0yG-I4uPwCg3hogA

💻 Code

const a\u{62}c\u{64}e = 42;
abcde; // Error: Cannot find name 'abcde'. Did you mean 'a\u{62}c\u{64}e'?
abde; // No error
const \u{76}ar\u{69}able = 42;
variable; // Error: Cannot find name 'variable'. Did you mean '\u{76}ar\u{69}able'?
viable; // No error

🙁 Actual behavior

abde and viable are recognised but not abcde and variable.

🙂 Expected behavior

abcde and variable are recognised but not abde and viable.

Additional information about the issue

Precisely, text between a 4-digit or extended Unicode escape and an extended Unicode escape is ignored.
(This is not the case for text between a 4-digit or extended Unicode escape and a 4-digit Unicode escape.)
This happens with all kinds of identifiers, not just variable names, due to the missing line result += text.substring(start, pos);. This issue is opened just for trackability and is fixed in #61042.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptHelp WantedYou can do this

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions