@@ -43,15 +43,17 @@ import static org.nixos.idea.psi.NixTypes.*;
43
43
%function advance
44
44
%type IElementType
45
45
%unicode
46
- %state BLOCK STRING IND_STRING ANTIQUOTATION_START ANTIQUOTATION
46
+ %state BLOCK STRING IND_STRING ANTIQUOTATION_START ANTIQUOTATION PATH
47
47
48
48
ANY = [^]
49
49
ID = [ a- zA- Z_][ a- zA- Z0- 9_'-] *
50
50
INT = [ 0- 9] +
51
51
FLOAT =(( [ 1- 9][ 0- 9] * \. [ 0- 9] *)|( 0? \. [ 0- 9] +))( [ Ee][ +-] ? [ 0- 9] +)?
52
- PATH = [ a- zA- Z0- 9._+-] *( \/ [ a- zA- Z0- 9._+-] +)+ \/ ?
53
- HPATH = \~ ( \/ [ a- zA- Z0- 9._+-] +)+ \/ ?
54
- SPATH = \< [ a- zA- Z0- 9._+-] +( \/ [ a- zA- Z0- 9._+-] +)* \>
52
+ PATH_CHAR = [ a- zA- Z0- 9\.\_\-\+ ]
53
+ PATH = {PATH_CHAR} *( \/ {PATH_CHAR} +)+ \/ ?
54
+ PATH_SEG = {PATH_CHAR} * \/
55
+ HPATH_START = \~\/
56
+ SPATH = \< {PATH_CHAR} +( \/ {PATH_CHAR} +)* \>
55
57
URI = [ a- zA- Z][ a- zA- Z0- 9.+-] * \: [ a- zA- Z0- 9%/?:@&=+$,\- _.!~*'] +
56
58
57
59
WHITE_SPACE = [ \ \t\r\n] +
@@ -91,6 +93,16 @@ MCOMMENT=\/\*([^*]|\*[^\/])*\*\/
91
93
"}" { popState(BLOCK ); return RCURLY ; }
92
94
}
93
95
96
+ <PATH> {
97
+ "$" / "{" { pushState(ANTIQUOTATION_START ); return DOLLAR ; }
98
+ {PATH_SEG} { return PATH_SEGMENT ; }
99
+ {PATH_CHAR} + { return PATH_SEGMENT ; }
100
+ // anything else, e.g. whitespace, stops lexing of a PATH
101
+ // we're delegating back to the parent state
102
+ // PATH_END is an empty-length token to signal the end of the path
103
+ [^] { popState(PATH ); yypushback(yylength()); return PATH_END ; }
104
+ }
105
+
94
106
<YYINITIAL, BLOCK, ANTIQUOTATION> {
95
107
"if" { return IF ; }
96
108
"then" { return THEN ; }
@@ -146,8 +158,10 @@ MCOMMENT=\/\*([^*]|\*[^\/])*\*\/
146
158
{ID} { return ID ; }
147
159
{INT} { return INT ; }
148
160
{FLOAT} { return FLOAT ; }
149
- {PATH} { return PATH ; }
150
- {HPATH} { return HPATH ; }
161
+ "/" / "${" { pushState(PATH ); return PATH_SEGMENT ; }
162
+ {PATH}
163
+ | {PATH_SEG}
164
+ | {HPATH_START} { pushState(PATH ); return PATH_SEGMENT ; }
151
165
{SPATH} { return SPATH ; }
152
166
{URI} { return URI ; }
153
167
0 commit comments