mirror of
https://github.com/ilyakooo0/intellij-haskell.git
synced 2024-09-11 14:56:19 +03:00
Fix parser.
This commit is contained in:
parent
ed4438ad2b
commit
cf722eb316
@ -2943,7 +2943,7 @@ public class HaskellParser implements PsiParser, LightPsiParser {
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// ((file_header_pragma | options_ghc_pragma) onl)*
|
||||
// (file_header_pragma onl)*
|
||||
public static boolean file_header(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "file_header")) return false;
|
||||
Marker m = enter_section_(b, l, _NONE_, HS_FILE_HEADER, "<file header>");
|
||||
@ -2956,35 +2956,51 @@ public class HaskellParser implements PsiParser, LightPsiParser {
|
||||
return true;
|
||||
}
|
||||
|
||||
// (file_header_pragma | options_ghc_pragma) onl
|
||||
// file_header_pragma onl
|
||||
private static boolean file_header_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "file_header_0")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = file_header_0_0(b, l + 1);
|
||||
r = file_header_pragma(b, l + 1);
|
||||
r = r && onl(b, l + 1);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
// file_header_pragma | options_ghc_pragma
|
||||
private static boolean file_header_0_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "file_header_0_0")) return false;
|
||||
/* ********************************************************** */
|
||||
// pragma NEWLINE | options_ghc_pragma NEWLINE | pragma | options_ghc_pragma
|
||||
public static boolean file_header_pragma(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "file_header_pragma")) return false;
|
||||
if (!nextTokenIs(b, "<file header pragma>", HS_OPTIONS_GHC, HS_PRAGMA_START)) return false;
|
||||
boolean r;
|
||||
r = file_header_pragma(b, l + 1);
|
||||
Marker m = enter_section_(b, l, _NONE_, HS_FILE_HEADER_PRAGMA, "<file header pragma>");
|
||||
r = file_header_pragma_0(b, l + 1);
|
||||
if (!r) r = file_header_pragma_1(b, l + 1);
|
||||
if (!r) r = pragma(b, l + 1);
|
||||
if (!r) r = options_ghc_pragma(b, l + 1);
|
||||
exit_section_(b, l, m, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// pragma
|
||||
public static boolean file_header_pragma(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "file_header_pragma")) return false;
|
||||
if (!nextTokenIs(b, HS_PRAGMA_START)) return false;
|
||||
// pragma NEWLINE
|
||||
private static boolean file_header_pragma_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "file_header_pragma_0")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = pragma(b, l + 1);
|
||||
exit_section_(b, m, HS_FILE_HEADER_PRAGMA, r);
|
||||
r = r && consumeToken(b, HS_NEWLINE);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
// options_ghc_pragma NEWLINE
|
||||
private static boolean file_header_pragma_1(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "file_header_pragma_1")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = options_ghc_pragma(b, l + 1);
|
||||
r = r && consumeToken(b, HS_NEWLINE);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,4 @@ public interface HaskellFileHeader extends HaskellCompositeElement {
|
||||
@NotNull
|
||||
List<HaskellFileHeaderPragma> getFileHeaderPragmaList();
|
||||
|
||||
@NotNull
|
||||
List<HaskellOptionsGhcPragma> getOptionsGhcPragmaList();
|
||||
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
package intellij.haskell.psi;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -10,4 +11,7 @@ public interface HaskellFileHeaderPragma extends HaskellCompositeElement {
|
||||
@NotNull
|
||||
List<HaskellGeneralPragmaContent> getGeneralPragmaContentList();
|
||||
|
||||
@Nullable
|
||||
HaskellOptionsGhcPragma getOptionsGhcPragma();
|
||||
|
||||
}
|
||||
|
@ -6,7 +6,6 @@ import com.intellij.psi.PsiElementVisitor;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import intellij.haskell.psi.HaskellFileHeader;
|
||||
import intellij.haskell.psi.HaskellFileHeaderPragma;
|
||||
import intellij.haskell.psi.HaskellOptionsGhcPragma;
|
||||
import intellij.haskell.psi.HaskellVisitor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@ -33,10 +32,4 @@ public class HaskellFileHeaderImpl extends HaskellCompositeElementImpl implement
|
||||
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellFileHeaderPragma.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public List<HaskellOptionsGhcPragma> getOptionsGhcPragmaList() {
|
||||
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellOptionsGhcPragma.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,8 +6,10 @@ import com.intellij.psi.PsiElementVisitor;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import intellij.haskell.psi.HaskellFileHeaderPragma;
|
||||
import intellij.haskell.psi.HaskellGeneralPragmaContent;
|
||||
import intellij.haskell.psi.HaskellOptionsGhcPragma;
|
||||
import intellij.haskell.psi.HaskellVisitor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -32,4 +34,10 @@ public class HaskellFileHeaderPragmaImpl extends HaskellCompositeElementImpl imp
|
||||
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellGeneralPragmaContent.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public HaskellOptionsGhcPragma getOptionsGhcPragma() {
|
||||
return PsiTreeUtil.getChildOfType(this, HaskellOptionsGhcPragma.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -56,9 +56,9 @@ program ::= onl shebang_line? onl file_header onl module_bod
|
||||
|
||||
shebang_line ::= "#!" general_id+
|
||||
options_ghc_pragma ::= OPTIONS_GHC
|
||||
file_header ::= ((file_header_pragma | options_ghc_pragma) onl)*
|
||||
file_header ::= (file_header_pragma onl)*
|
||||
private pragma ::= PRAGMA_START (onl CON_ID? onl general_pragma_content? onl PRAGMA_END)+ {pin=1}
|
||||
file_header_pragma ::= pragma
|
||||
file_header_pragma ::= pragma NEWLINE | options_ghc_pragma NEWLINE | pragma | options_ghc_pragma
|
||||
|
||||
other_pragma ::= pragma
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user