@@ -275,8 +275,7 @@ repository:
275275 match : " \\ b(?<!\\ .)(class)\\ b"
276276 }
277277 ]
278- expression :
279- name : " meta.expression.python"
278+ " expression-base" :
280279 comment : " All valid Python expressions"
281280 patterns : [
282281 {
@@ -318,9 +317,6 @@ repository:
318317 {
319318 include : " #round-braces"
320319 }
321- {
322- include : " #line-continuation"
323- }
324320 {
325321 include : " #function-call"
326322 }
@@ -334,25 +330,64 @@ repository:
334330 include : " #builtin-exceptions"
335331 }
336332 {
337- include : " #magic-function- names"
333+ include : " #magic-names"
338334 }
339335 {
340- include : " #magic-variable-names"
336+ include : " #special-names"
337+ }
338+ {
339+ include : " #illegal-names"
340+ }
341+ {
342+ include : " #special-variables"
343+ }
344+ {
345+ include : " #line-continuation"
346+ }
347+ {
348+ include : " #ellipsis"
349+ }
350+ ]
351+ expression :
352+ comment : " All valid Python expressions"
353+ patterns : [
354+ {
355+ include : " #expression-base"
341356 }
342357 {
343358 include : " #member-access"
344359 }
360+ ]
361+ " member-access" :
362+ begin : " \\ .\\ s*(?!\\ .)"
363+ end : " (?<=\\ S)(?=\\ W)|$"
364+ patterns : [
345365 {
346- include : " #special-names"
366+ include : " #function-call"
367+ }
368+ {
369+ include : " #member-access-base"
370+ }
371+ ]
372+ " member-access-base" :
373+ patterns : [
374+ {
375+ include : " #magic-names"
347376 }
348377 {
349378 include : " #illegal-names"
350379 }
351380 {
352- include : " #special-variables "
381+ include : " #illegal-object-name "
353382 }
354383 {
355- include : " #ellipsis"
384+ include : " #special-names"
385+ }
386+ {
387+ include : " #line-continuation"
388+ }
389+ {
390+ include : " #item-access"
356391 }
357392 ]
358393 " special-names" :
@@ -956,18 +991,49 @@ repository:
956991 match : " \\ ="
957992 }
958993 {
959- include : " #call-wrapper-inheritance"
960- }
961- {
962- include : " #expression"
994+ include : " #expression-class"
963995 }
964996 {
965997 name : " support.type.metaclass.python"
966998 match : " \\ bmetaclass\\ b"
967999 }
9681000 {
1001+ include : " #inheritance-identifier"
1002+ }
1003+ ]
1004+ " inheritance-identifier" :
1005+ match : '''
1006+ (?x)
1007+ \\ b ([[:alpha:]_]\\ w*) \\ b
1008+
1009+ '''
1010+ captures :
1011+ " 1" :
9691012 name : " entity.other.inherited-class.python"
970- match : " [[:alnum:]_]+"
1013+ " expression-class" :
1014+ patterns : [
1015+ {
1016+ include : " #call-wrapper-inheritance"
1017+ }
1018+ {
1019+ include : " #expression-base"
1020+ }
1021+ {
1022+ include : " #member-access-class"
1023+ }
1024+ ]
1025+ " member-access-class" :
1026+ begin : " \\ .\\ s*(?!\\ .)"
1027+ end : " (?<=\\ S)(?=\\ W)|$"
1028+ patterns : [
1029+ {
1030+ include : " #call-wrapper-inheritance"
1031+ }
1032+ {
1033+ include : " #member-access-base"
1034+ }
1035+ {
1036+ include : " #inheritance-identifier"
9711037 }
9721038 ]
9731039 lambda :
@@ -1132,6 +1198,9 @@ repository:
11321198 {
11331199 include : " #illegal-names"
11341200 }
1201+ {
1202+ include : " #illegal-object-name"
1203+ }
11351204 {
11361205 include : " #parameter-special"
11371206 }
@@ -1371,17 +1440,10 @@ repository:
13711440 include : " #lambda-incomplete"
13721441 }
13731442 {
1374- include : " #builtin-callables"
1443+ include : " #builtin-possible- callables"
13751444 }
13761445 {
1377- match : '''
1378- (?x)
1379- \\ b ([[:alpha:]_]\\ w*) \\ b
1380-
1381- '''
1382- captures :
1383- " 1" :
1384- name : " entity.other.inherited-class.python"
1446+ include : " #inheritance-identifier"
13851447 }
13861448 ]
13871449 " function-call" :
@@ -1490,6 +1552,9 @@ repository:
14901552 {
14911553 include : " #illegal-names"
14921554 }
1555+ {
1556+ include : " #illegal-object-name"
1557+ }
14931558 {
14941559 include : " #builtin-exceptions"
14951560 }
@@ -1506,10 +1571,7 @@ repository:
15061571 include : " #builtin-callables"
15071572 }
15081573 {
1509- include : " #magic-function-names"
1510- }
1511- {
1512- include : " #magic-variable-names"
1574+ include : " #magic-names"
15131575 }
15141576 ]
15151577 " builtin-exceptions" :
@@ -1625,7 +1687,7 @@ repository:
16251687 comment : " magic variables which a class/module may have."
16261688 match : '''
16271689 (?x)
1628- ( \\ .)? \\ b(
1690+ \\ b(
16291691 __(?:
16301692 all | bases | builtins | class | code | debug | defaults | dict
16311693 | doc | file | func | kwdefaults | members
@@ -1637,8 +1699,17 @@ repository:
16371699
16381700 '''
16391701 captures :
1640- " 2 " :
1702+ " 1 " :
16411703 name : " support.variable.magic.python"
1704+ " magic-names" :
1705+ patterns : [
1706+ {
1707+ include : " #magic-function-names"
1708+ }
1709+ {
1710+ include : " #magic-variable-names"
1711+ }
1712+ ]
16421713 " illegal-names" :
16431714 name : " keyword.control.flow.python"
16441715 match : '''
@@ -1665,21 +1736,6 @@ repository:
16651736 name : " variable.language.special.self.python"
16661737 " 2" :
16671738 name : " variable.language.special.cls.python"
1668- " member-access" :
1669- comment : " this rule exists to highlight errors"
1670- begin : " \\ .(?=\\ s*\\ w+\\ s)"
1671- end : " \\ s"
1672- patterns : [
1673- {
1674- include : " #illegal-names"
1675- }
1676- {
1677- include : " #illegal-object-name"
1678- }
1679- {
1680- include : " #special-names"
1681- }
1682- ]
16831739 ellipsis :
16841740 name : " constant.other.ellipsis.python"
16851741 match : " \\ .\\ .\\ ."
0 commit comments