diff --git a/CHANGES.md b/CHANGES.md
index 0b11c531fe..f311454d0a 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -2,11 +2,13 @@
Grammars:
+- fix(python) identifiers starting with underscore not highlighted (#3221) [Antoine Lambert][]
- enh(clojure) added `edn` alias (#3213) [Stel Abrego][]
- enh(elixir) much improved regular expression sigil support (#3207) [Josh Goebel][]
[Stel Abrego]: https://github.com/stelcodes
[Josh Goebel]: https://github.com/joshgoebel
+[Antoine Lambert]: https://github.com/anlambert
## Version 11.0.0
diff --git a/src/languages/python.js b/src/languages/python.js
index 5ea0dde6bc..c2e7e7e90f 100644
--- a/src/languages/python.js
+++ b/src/languages/python.js
@@ -5,7 +5,7 @@ Website: https://www.python.org
Category: common
*/
-import { IDENT_RE } from '../lib/modes.js';
+import { UNDERSCORE_IDENT_RE } from '../lib/modes.js';
import * as regex from '../lib/regex.js';
export default function(hljs) {
@@ -379,7 +379,7 @@ export default function(hljs) {
{
match: [
/def/, /\s+/,
- IDENT_RE
+ UNDERSCORE_IDENT_RE
],
scope: {
1: "keyword",
@@ -392,14 +392,14 @@ export default function(hljs) {
{
match: [
/class/, /\s+/,
- IDENT_RE, /\s*/,
- /\(\s*/, IDENT_RE,/\s*\)/
+ UNDERSCORE_IDENT_RE, /\s*/,
+ /\(\s*/, UNDERSCORE_IDENT_RE,/\s*\)/
],
},
{
match: [
/class/, /\s+/,
- IDENT_RE
+ UNDERSCORE_IDENT_RE
],
}
],
diff --git a/test/markup/python/identifiers.expect.txt b/test/markup/python/identifiers.expect.txt
new file mode 100644
index 0000000000..bef68a2857
--- /dev/null
+++ b/test/markup/python/identifiers.expect.txt
@@ -0,0 +1,15 @@
+def func():
+ pass
+
+def _private_func():
+ pass
+
+class IdentifiersTest:
+ def __init__(self):
+ pass
+
+ def method(self):
+ pass
+
+class _PrivateClass:
+ pass
diff --git a/test/markup/python/identifiers.txt b/test/markup/python/identifiers.txt
new file mode 100644
index 0000000000..d559e489b4
--- /dev/null
+++ b/test/markup/python/identifiers.txt
@@ -0,0 +1,15 @@
+def func():
+ pass
+
+def _private_func():
+ pass
+
+class IdentifiersTest:
+ def __init__(self):
+ pass
+
+ def method(self):
+ pass
+
+class _PrivateClass:
+ pass