diff --git a/CHANGELOG.md b/CHANGELOG.md index bb56b3e6..14e79ec9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,11 @@ Changelog structure reference: ## [Unreleased] +### Fixed + +- Zig + - Documentation comment after regular comment was being highlighted as regular comment + ## [23.0.1] ### Fixed diff --git a/core/src/main/grammar/Zig.flex b/core/src/main/grammar/Zig.flex index 62157b28..a08b589c 100644 --- a/core/src/main/grammar/Zig.flex +++ b/core/src/main/grammar/Zig.flex @@ -36,8 +36,10 @@ import static com.falsepattern.zigbrains.zig.psi.ZigTypes.*; %type IElementType %unicode -CRLF=\R -WHITE_SPACE=[\s]+ +WHITE_SPACE=\s+ + +// visual studio parity +LF=\r\n?|[\n\u0085\u2028\u2029] bin=[01] bin_="_"? {bin} @@ -54,13 +56,13 @@ dec_int={dec} {dec_}* hex_int={hex} {hex_}* char_char= \\ . - | [^\'\n] + | [^\'\r\n\u0085\u2028\u2029] string_char= \\ . - | [^\"\n] + | [^\"\r\n\u0085\u2028\u2029] -all_nl_wrap=[^\n]* [ \n]* -all_no_nl=[^\n]+ +nl_wrap={LF} (\s|{LF})* +all_no_nl=[^\r\n\u0085\u2028\u2029]+ FLOAT= "0x" {hex_int} "." {hex_int} ([pP] [-+]? {dec_int})? @@ -84,30 +86,35 @@ BUILTINIDENTIFIER="@"[A-Za-z_][A-Za-z0-9_]* %state UNT_SQUOT %state UNT_DQUOT -%state CDOC_CMT -%state DOC_CMT -%state LINE_CMT +%state CMT_LINE +%state CMT_DOC +%state CMT_CDOC %% //Comments - "//!" { yybegin(CDOC_CMT); } - {all_nl_wrap} "//!" { } - {all_no_nl} { } - \n { yybegin(YYINITIAL); return CONTAINER_DOC_COMMENT; } - <> { yybegin(YYINITIAL); return CONTAINER_DOC_COMMENT; } + "//!" { yybegin(CMT_CDOC); } + "////" { yybegin(CMT_LINE); } + "///" { yybegin(CMT_DOC); } + "//" { yybegin(CMT_LINE); } - "///" { yybegin(DOC_CMT); } - {all_nl_wrap} "///" { } - {all_no_nl} { } - \n { yybegin(YYINITIAL); return DOC_COMMENT; } - <> { yybegin(YYINITIAL); return DOC_COMMENT; } + {all_no_nl} { } + {nl_wrap} "////" { } + {nl_wrap} "///" { yypushback(yylength()); yybegin(YYINITIAL); return LINE_COMMENT; } + {nl_wrap} "//" { } + {LF} { yybegin(YYINITIAL); return LINE_COMMENT; } + <> { yybegin(YYINITIAL); return LINE_COMMENT; } - "//" { yybegin(LINE_CMT); } - {all_nl_wrap} "//" { } - {all_no_nl} { } - \n { yybegin(YYINITIAL); return LINE_COMMENT; } - <> { yybegin(YYINITIAL); return LINE_COMMENT; } + {all_no_nl} { } + {nl_wrap} "////" { yypushback(yylength()); yybegin(YYINITIAL); return DOC_COMMENT; } + {nl_wrap} "///" { } + {LF} { yybegin(YYINITIAL); return DOC_COMMENT; } + <> { yybegin(YYINITIAL); return DOC_COMMENT; } + + {all_no_nl} { } + {nl_wrap} "//!" { } + {LF} { yybegin(YYINITIAL); return CONTAINER_DOC_COMMENT; } + <> { yybegin(YYINITIAL); return CONTAINER_DOC_COMMENT; } //Symbols "&" { return AMPERSAND; } @@ -239,10 +246,11 @@ BUILTINIDENTIFIER="@"[A-Za-z_][A-Za-z0-9_]* {string_char}*"\"" { yybegin(YYINITIAL); return STRING_LITERAL_SINGLE; } <> { yybegin(YYINITIAL); return BAD_DQUOT; } [^] { yypushback(1); yybegin(UNT_DQUOT); } + "\\\\" { yybegin(STR_MULT_LINE); } - {all_nl_wrap} "\\\\" { } {all_no_nl} { } - \n { yybegin(YYINITIAL); return STRING_LITERAL_MULTI; } + {nl_wrap} "\\\\" { } + {LF} { yybegin(YYINITIAL); return STRING_LITERAL_MULTI; } <> { yybegin(YYINITIAL); return STRING_LITERAL_MULTI; } {IDENTIFIER_PLAIN} { return IDENTIFIER; } @@ -254,10 +262,10 @@ BUILTINIDENTIFIER="@"[A-Za-z_][A-Za-z0-9_]* {BUILTINIDENTIFIER} { return BUILTINIDENTIFIER; } <> { yybegin(YYINITIAL); return BAD_SQUOT; } - {CRLF} { yybegin(YYINITIAL); return BAD_SQUOT; } + {LF} { yybegin(YYINITIAL); return BAD_SQUOT; } {all_no_nl} { } <> { yybegin(YYINITIAL); return BAD_DQUOT; } - {CRLF} { yybegin(YYINITIAL); return BAD_DQUOT; } + {LF} { yybegin(YYINITIAL); return BAD_DQUOT; } {all_no_nl} { } {WHITE_SPACE} { return WHITE_SPACE; } diff --git a/core/src/main/grammar/Zon.flex b/core/src/main/grammar/Zon.flex index eb2f710c..7c86737b 100644 --- a/core/src/main/grammar/Zon.flex +++ b/core/src/main/grammar/Zon.flex @@ -36,8 +36,10 @@ import static com.falsepattern.zigbrains.zon.psi.ZonTypes.*; %type IElementType %unicode -CRLF=\R -WHITE_SPACE=[\s]+ +WHITE_SPACE=\s+ + +// visual studio parity +LF=\r\n?|[\n\u0085\u2028\u2029] bin=[01] bin_="_"? {bin} @@ -54,13 +56,13 @@ dec_int={dec} {dec_}* hex_int={hex} {hex_}* char_char= \\ . - | [^\'\n] + | [^\'\r\n\u0085\u2028\u2029] string_char= \\ . - | [^\"\n] + | [^\"\r\n\u0085\u2028\u2029] -all_nl_wrap=[^\n]* [ \n]* -all_no_nl=[^\n]+ +nl_wrap={LF} (\s|{LF})* +all_no_nl=[^\r\n\u0085\u2028\u2029]+ FLOAT= "0x" {hex_int} "." {hex_int} ([pP] [-+]? {dec_int})? @@ -83,16 +85,16 @@ IDENTIFIER_PLAIN=[A-Za-z_][A-Za-z0-9_]* %state UNT_SQUOT %state UNT_DQUOT -%state LINE_CMT +%state CMT_LINE %% //Comments - "//" { yybegin(LINE_CMT); } - {all_nl_wrap} "//" { } - {all_no_nl} { } - \n { yybegin(YYINITIAL); return LINE_COMMENT; } - <> { yybegin(YYINITIAL); return LINE_COMMENT; } + "//" { yybegin(CMT_LINE); } + {all_no_nl} { } + {nl_wrap} "//" { } + \R { yybegin(YYINITIAL); return LINE_COMMENT; } + <> { yybegin(YYINITIAL); return LINE_COMMENT; } //Symbols @@ -123,9 +125,9 @@ IDENTIFIER_PLAIN=[A-Za-z_][A-Za-z0-9_]* [^] { yypushback(1); yybegin(UNT_DQUOT); } "\\\\" { yybegin(STR_MULT_LINE); } - {all_nl_wrap} "\\\\" { } {all_no_nl} { } - \n { yybegin(YYINITIAL); return STRING_LITERAL_MULTI; } + {nl_wrap} "\\\\" { } + {LF} { yybegin(YYINITIAL); return STRING_LITERAL_MULTI; } <> { yybegin(YYINITIAL); return STRING_LITERAL_MULTI; } //Numbers @@ -144,10 +146,10 @@ IDENTIFIER_PLAIN=[A-Za-z_][A-Za-z0-9_]* //Error handling <> { yybegin(YYINITIAL); return BAD_SQUOT; } - {CRLF} { yybegin(YYINITIAL); return BAD_SQUOT; } + {LF} { yybegin(YYINITIAL); return BAD_SQUOT; } {all_no_nl} { } <> { yybegin(YYINITIAL); return BAD_DQUOT; } - {CRLF} { yybegin(YYINITIAL); return BAD_DQUOT; } + {LF} { yybegin(YYINITIAL); return BAD_DQUOT; } {all_no_nl} { } //Misc