highlightjs / highlightjs/highlight.js
(JavaScript) Number in class or variable name breaks highlight
- Dominant language
- JavaScript
- Stars
- 25k
- Forks
- 3.8k
- Avg merge
- 11h 35m
- Merged PRs (30d)
- 3
Description
**Describe the issue**
I have a JS lib for i18n named [si18n.js](https://si18n.js.bruxelles.dev/), and its class name is `Si18n`. So, when I highlight this keyword, only the part before "n" is correctly highlighted. In JavaScript, class name can contain numbers, but cannot start with a number. The parser must consider the part after numbers in class and variable name. It's already OK for functions name.
**Any function or class name starting with uppercase letter AND contains number(s) AND ends with letter(s) are concerned.**
**Which language seems to have the issue?**
JavaScript without `auto-detection`
**Are you using `highlight` or `highlightAuto`?**
I use `highlight`.
**Sample Code to Reproduce**
```javascript
import Si18n from "si18n"; // Not OK
let loc = new Si18n(); // Not OK
let Si18n = "test"; // Not OK
let si18n = "test"; // OK
let SI18N = "test"; // OK
let SI18 = "test"; // OK
let si18ns92 = "test"; // OK
let SI_18_N = "test"; // OK
function si18n() {} // OK
function Si18n() {} // OK
```
[Demo 1](https://code.wetrafa.xyz/?code=IjwhRE9DVFlQRSBodG1sPlxuPGh0bWwgbGFuZz1cImZyXCI%2BXG48aGVhZD5cblx0PHRpdGxlPkRlbW8gLSBoaWdobGlnaHQuanM8L3RpdGxlPlxuXHQ8bWV0YSBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCIgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiLz5cblx0PG1ldGEgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCIgbmFtZT1cInZpZXdwb3J0XCIvPlxuICA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2hpZ2hsaWdodC5qcy8xMS45LjAvc3R5bGVzL2dpdGh1Yi1kYXJrLm1pbi5jc3NcIiBpbnRlZ3JpdHk9XCJzaGE1MTItck8rb2xSVGtjZjMwNERRQnhTV3hsbjhKWEN6VEhsS25JZG5NVXdZdlFhOS9KZDRjUWFOa0l0SVVqNlo0bnZXMWRxSzBTS1hMYm45aDRLd1pUTnRBeXc9PVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCIgcmVmZXJyZXJwb2xpY3k9XCJuby1yZWZlcnJlclwiLz5cbiAgPHN0eWxlPlxuICAgIC5jb2RlIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBwcmU7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBwYWRkaW5nOiA4cHg7XG4gICAgfVxuICA8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHk%2BXG4gIDxwcmUgY2xhc3M9XCJjb2RlIGxhbmd1YWdlLWphdmFzY3JpcHRcIj5pbXBvcnQgU2kxOG4gZnJvbSBcInNpMThuXCI7IC8vIE5vdCBPS1xubGV0IGxvYyA9IG5ldyBTaTE4bigpOyAgICAgLy8gTm90IE9LXG5sZXQgU2kxOG4gPSBcInRlc3RcIjsgICAgICAgIC8vIE5vdCBPS1xubGV0IHNpMThuID0gXCJ0ZXN0XCI7ICAgICAgICAvLyBPS1xubGV0IFNJMThOID0gXCJ0ZXN0XCI7ICAgICAgICAvLyBPS1xubGV0IFNJMTggPSBcInRlc3RcIjsgICAgICAgICAvLyBPS1xubGV0IHNpMThuczkyID0gXCJ0ZXN0XCI7ICAgICAvLyBPS1xubGV0IFNJXzE4X04gPSBcInRlc3RcIjsgICAgICAvLyBPS1xuZnVuY3Rpb24gc2kxOG4oKSB7fSAgICAgICAgLy8gT0tcbmZ1bmN0aW9uIFNpMThuKCkge30gICAgICAgIC8vIE9LPC9wcmU%2BXG4gIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvaGlnaGxpZ2h0LmpzLzExLjkuMC9oaWdobGlnaHQubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhNTEyLUQ5Z1V5eHFqYTdoQnRrV3BQV0d0OXdmYmZhTUdWdDlnbnlDdllhK2pvand3UEhMQ3pVbTVpOHJwazd2RDd3TmVlOWJBMzVlWUlqb2JZUGFRdUtTMU1RPT1cIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIHJlZmVycmVycG9saWN5PVwibm8tcmVmZXJyZXJcIj48L3NjcmlwdD5cblx0PHNjcmlwdD5cblx0XHRobGpzLmhpZ2hsaWdodEVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jb2RlXCIpKTtcblx0PC9zY3JpcHQ%2BXG48L2JvZHk%2BXG48L2h0bWw%2BIg%253D%253D&fname=RGVtby1oaWdobGlnaHQuanMuaHRtbA%253D%253D&exe=1&theme=the-matrix&ref=share_as_code) - [Demo 2](https://highlightjs.org/demo#lang=javascript&v=1&theme=github-dark&code=aW1wb3J0IFNpMThuIGZyb20gInPEDCI7IC8vIE5vdCBPSwpsZXQgbG9jID0gbmV3xiwoKTsgxAHOJcZHPSAidGVzdCLGItElxWDVJchGSTE4Tt8hONIgyyHFY3M5Ms8lzEJfMThf0WXGIWZ1bmN0aW9uxkcoKSB7fc5jySHnAQvQIQ%3D%3D)
**Expected behavior**
Because class or variable name can contain numbers, a name like **Si18n** should be entirely highlighted. See the example above highlighted by GitHub.
Contributor guide
Assessment
This issue has not been assessed yet.