Fix lexer for pragma's.

This commit is contained in:
Rik van der Kleij 2019-02-19 15:30:41 +01:00
parent 9d89c57b61
commit e9a2ace83f
6 changed files with 1414 additions and 1300 deletions

View File

@ -3001,7 +3001,7 @@ public class HaskellParser implements PsiParser, LightPsiParser {
}
/* ********************************************************** */
// ONE_PRAGMA | PRAGMA_SEP | CHARACTER_LITERAL | STRING_LITERAL
// ONE_PRAGMA | PRAGMA_SEP | CHARACTER_LITERAL | STRING_LITERAL | NEWLINE | DASH | HASH
public static boolean general_pragma_content(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "general_pragma_content")) return false;
boolean r;
@ -3010,6 +3010,9 @@ public class HaskellParser implements PsiParser, LightPsiParser {
if (!r) r = consumeToken(b, HS_PRAGMA_SEP);
if (!r) r = consumeToken(b, HS_CHARACTER_LITERAL);
if (!r) r = consumeToken(b, HS_STRING_LITERAL);
if (!r) r = consumeToken(b, HS_NEWLINE);
if (!r) r = consumeToken(b, HS_DASH);
if (!r) r = consumeToken(b, HS_HASH);
exit_section_(b, l, m, r, false, null);
return r;
}

View File

@ -105,6 +105,7 @@ public interface HaskellTypes {
IElementType HS_COMMENT = new HaskellTokenType("COMMENT");
IElementType HS_CONSYM_ID = new HaskellTokenType("CONSYM_ID");
IElementType HS_CON_ID = new HaskellTokenType("CON_ID");
IElementType HS_DASH = new HaskellTokenType("DASH");
IElementType HS_DATA = new HaskellTokenType("DATA");
IElementType HS_DECIMAL = new HaskellTokenType("DECIMAL");
IElementType HS_DEFAULT = new HaskellTokenType("DEFAULT");
@ -120,6 +121,7 @@ public interface HaskellTypes {
IElementType HS_FOREIGN_EXPORT = new HaskellTokenType("FOREIGN_EXPORT");
IElementType HS_FOREIGN_IMPORT = new HaskellTokenType("FOREIGN_IMPORT");
IElementType HS_HADDOCK = new HaskellTokenType("HADDOCK");
IElementType HS_HASH = new HaskellTokenType("HASH");
IElementType HS_HEXADECIMAL = new HaskellTokenType("HEXADECIMAL");
IElementType HS_IF = new HaskellTokenType("IF");
IElementType HS_IMPORT = new HaskellTokenType("IMPORT");

View File

@ -219,16 +219,16 @@ nhaddock_start = {left_brace}{dash}{white_char}?{vertical_bar}
{character_literal} { return HS_CHARACTER_LITERAL; }
{string_literal} { return HS_STRING_LITERAL; }
{newline} { return HS_NEWLINE; }
{dash} { return HS_DASH; }
{hash} { return HS_HASH; }
{white_space} { return com.intellij.psi.TokenType.WHITE_SPACE; }
({white_char}|{newline}|{unispace}])+ {
return com.intellij.psi.TokenType.WHITE_SPACE;
}
[\-a-zA-Z0-9_=]+ {
[\-a-zA-Z0-9_=\(\)\:]+ {
return HS_ONE_PRAGMA;
}
#|\-\}|\{ {
{left_brace}|{right_brace} {
yybegin(YYINITIAL);
return com.intellij.psi.TokenType.BAD_CHARACTER;
}

File diff suppressed because it is too large Load Diff

View File

@ -57,7 +57,7 @@ program ::= onl shebang_line? onl file_header onl module_bod
shebang_line ::= "#!" general_id+
file_header ::= (pragma onl)*
pragma ::= PRAGMA_START general_pragma_content* PRAGMA_END {pin=1}
general_pragma_content ::= ONE_PRAGMA | PRAGMA_SEP | CHARACTER_LITERAL | STRING_LITERAL
general_pragma_content ::= ONE_PRAGMA | PRAGMA_SEP | CHARACTER_LITERAL | STRING_LITERAL | NEWLINE | DASH | HASH
module_body ::= module_declaration onl body | onl body
module_declaration ::= MODULE modid onl pragma? onl (exports onl)? WHERE

View File

@ -15,8 +15,8 @@ class HaskellHighlightingAnnotator extends Annotator {
case psi: HaskellImportHiding => holder.createInfoAnnotation(psi, null)
.setTextAttributes(HaskellSyntaxHighlighter.Keyword)
case psi: HaskellPragma => holder.createInfoAnnotation(psi, null).setTextAttributes(HaskellSyntaxHighlighter.PragmaContent)
// Option(psi.getFirstChild).foreach(c => holder.createInfoAnnotation(c, null).setTextAttributes(HaskellSyntaxHighlighter.Pragma))
// Option(psi.getLastChild).foreach(c => holder.createInfoAnnotation(c, null).setTextAttributes(HaskellSyntaxHighlighter.Pragma))
Option(psi.getFirstChild).foreach(c => holder.createInfoAnnotation(c, null).setTextAttributes(HaskellSyntaxHighlighter.Pragma))
Option(psi.getLastChild).foreach(c => holder.createInfoAnnotation(c, null).setTextAttributes(HaskellSyntaxHighlighter.Pragma))
case psi: HaskellTypeSignature => holder.createInfoAnnotation(psi.getFirstChild, null)
.setTextAttributes(HaskellSyntaxHighlighter.FunctionName)
case psi: HaskellStringLiteralElementImpl => holder.createInfoAnnotation(psi, null)