highlightjs / highlightjs/highlight.js

(JavaScript) Number in class or variable name breaks highlight

Open
#3,921 6 comments 0 reactions 0 assignees View on GitHub
bug help welcome language
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.